{
  "version": 3,
  "sources": ["../src/index.ts", "../src/hooks/useAnimationFrame.ts", "../src/hooks/useAsyncEffect.ts", "../src/hooks/useBooleanState.ts", "../src/hooks/useCombinedRefs.ts", "../src/hooks/useDebounce.ts", "../src/hooks/useDidMount.ts", "../src/hooks/useDidUpdate.ts", "../src/hooks/useElementSize.ts", "../src/hooks/useImpression.ts", "../src/hooks/useInfiniteScroll.ts", "../src/hooks/useWindowSize.ts", "../src/hooks/useInterval.ts", "../src/hooks/useLoading.ts", "../src/hooks/usePreviousState.ts", "../src/hooks/useQueryParam.ts", "../src/hooks/useResizeObserver.ts", "../src/hooks/useScrollEvent.ts", "../src/hooks/useThrottle.ts", "../src/hooks/useToggle.ts", "../src/hooks/useUpload.ts", "../src/hooks/useWillUnmount.ts", "../src/components/Expand/Body.tsx", "../src/components/Expand/useExpandContext.tsx", "../src/components/Slot/index.tsx", "../src/components/Slot/@common/Sloattable/Slottable.tsx", "../src/components/Expand/Header.tsx", "../src/components/Expand/HiddenBody.tsx", "../src/components/Expand/Trigger.tsx", "../src/components/Expand/index.tsx", "../src/components/ClickArea.tsx", "../src/components/CommaizeNumber.tsx", "../src/components/Condition.tsx", "../src/components/Convert.tsx", "../src/components/CurrencySymbol.tsx", "../src/components/DetectClickOutside.tsx", "../src/components/ImpressionArea.tsx", "../src/components/Money.tsx", "../src/components/Percentage.tsx", "../src/components/SSRSuspense.tsx", "../src/utils/joinNodes.ts"],
  "sourcesContent": ["/** @module react */\nexport { default as useAnimationFrame } from './hooks/useAnimationFrame';\nexport { default as useAsyncEffect } from './hooks/useAsyncEffect';\nexport { default as useBooleanState } from './hooks/useBooleanState';\nexport { default as useCombinedRefs } from './hooks/useCombinedRefs';\nexport { default as useDebounce } from './hooks/useDebounce';\nexport { default as useDidMount } from './hooks/useDidMount';\nexport { default as useDidUpdate } from './hooks/useDidUpdate';\nexport { default as useElementSize } from './hooks/useElementSize';\nexport { default as useImpression } from './hooks/useImpression';\nexport { default as useInfiniteScroll } from './hooks/useInfiniteScroll';\nexport { default as useInterval } from './hooks/useInterval';\nexport { default as useLoading } from './hooks/useLoading';\nexport { default as usePreviousState } from './hooks/usePreviousState';\nexport { default as useQueryParam } from './hooks/useQueryParam';\nexport { default as useResizeObserver } from './hooks/useResizeObserver';\nexport { default as useScrollEvent } from './hooks/useScrollEvent';\nexport { default as useThrottle } from './hooks/useThrottle';\nexport { default as useToggle } from './hooks/useToggle';\nexport { default as useUpload } from './hooks/useUpload';\nexport { default as useWillUnmount } from './hooks/useWillUnmount';\nexport { default as useWindowSize } from './hooks/useWindowSize';\n\nexport { default as Expand } from './components/Expand';\nexport { default as ClickArea } from './components/ClickArea';\nexport { default as CommaizeNumber } from './components/CommaizeNumber';\nexport { default as Condition } from './components/Condition';\nexport { default as Convert } from './components/Convert';\nexport * from './components/CurrencySymbol';\nexport { default as DetectClickOutside } from './components/DetectClickOutside';\nexport { default as ImpressionArea } from './components/ImpressionArea';\nexport { default as Money } from './components/Money';\nexport { default as Percentage } from './components/Percentage';\nexport * from './components/SSRSuspense';\nexport * from './components/Slot';\nexport * from './components/Slot/@common';\n\nexport { joinNodes } from './utils/joinNodes';\n", "import { useEffect, useRef } from 'react';\n\n/**\n * requestAnimationFrame\uC744 \uC27D\uAC8C \uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uD6C5\uC785\uB2C8\uB2E4.\n * \uCF5C\uBC31\uC758 \uB808\uD37C\uB7F0\uC2A4\uAC00 \uBCC0\uACBD\uB418\uBA74 \uAE30\uC874\uC758 animationFrame\uC744 \uCDE8\uC18C\uD558\uACE0 \uC0C8\uB85C\uC6B4 animationFrame\uC744 \uB4F1\uB85D\uD558\uB2C8, \uCD5C\uC801\uD654\uB97C \uC704\uD574 \uCF5C\uBC31\uC758 \uB808\uD37C\uB7F0\uC2A4 \uAD00\uB9AC\uB97C \uC2E0\uACBD\uC368\uC8FC\uC138\uC694.\n *\n * @example\n * ```javascript\n * const [progress, setProgress] = useState(0);\n * const updateProgress = useCallback(() => {\n *   setProgress(prevProgress => prevProgress >= 100 ? 0 : prevProgress + 1);\n * }, []);\n * ```\n *\n * useAnimationFrame(updateProgress);\n */\nexport default function useAnimationFrame(callback: () => void) {\n  const animateRequestRef = useRef<number>();\n\n  useEffect(() => {\n    const animate = () => {\n      callback();\n      animateRequestRef.current = requestAnimationFrame(animate);\n    };\n\n    animate();\n\n    return () => {\n      if (animateRequestRef.current != null) {\n        cancelAnimationFrame(animateRequestRef.current);\n      }\n    };\n  }, [callback]);\n}\n", "import { type DependencyList, useEffect } from 'react';\n\n/**\n * useEffect\uB85C async function\uC744 \uB118\uAE30\uBA74 \uD0C0\uC785\uC774 \uAE68\uC9C0\uAE30 \uB54C\uBB38\uC5D0 \uC0AC\uC6A9\uD558\uB294 \uD5EC\uD37C\uC785\uB2C8\uB2E4.\n *\n * \uB3D9\uC791\uC740 useEffect\uC640 \uB611\uAC19\uC9C0\uB9CC, \uC774\uD399\uD2B8\uAC00 \uBC18\uD658\uD558\uB294 \uD0C0\uC785\uC774 Promise<void>\uC774\uAE30 \uB54C\uBB38\uC5D0 \uD074\uB9B0\uC5C5\uC740 \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```ts\n * useAsyncEffect(async () => {\n *   const response = await fetchUsers();\n *   setUsers(response);\n * }, []);\n * ```\n */\nexport default function useAsyncEffect(asyncEffect: () => Promise<void>, deps: DependencyList) {\n  useEffect(() => {\n    asyncEffect();\n  }, deps);\n}\n", "import { useCallback, useState } from 'react';\n\n/**\n * setState(true)\uC640 \uAC19\uC740 \uB3D9\uC791\uC744 \uCD94\uC0C1\uD654\uD558\uC5EC setTrue, setFalse\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```ts\n * const [isOpenModal, openModal, closeModal] = useBooleanState();\n * ```\n */\nfunction useBooleanState(defaultValue = false): [boolean, () => void, () => void] {\n  const [state, setState] = useState(defaultValue);\n\n  const setTrue = useCallback(() => setState(true), []);\n  const setFalse = useCallback(() => setState(false), []);\n\n  return [state, setTrue, setFalse];\n}\n\nexport default useBooleanState;\n", "import { type Ref, useCallback, type MutableRefObject, type RefCallback } from 'react';\n\n/**\n * \uC5EC\uB7EC \uAC1C\uC758 ref\uB97C \uD569\uCE60 \uC218 \uC788\uB294 \uD6C5\uC785\uB2C8\uB2E4.\n * @example\n * ```jsx\n * const Foo = forwardRef((props, fowardedRef) => {\n *   const ref = useRef();\n *   const combinedRef = useCombinedRefs(fowardedRef, ref);\n *\n *   // div\uAC00 \uC5C5\uB370\uC774\uD2B8\uB418\uBA74 ref, fowardedRef \uB458 \uB2E4 \uC5C5\uB370\uC774\uD2B8 \uB428\n *   return <div ref={combinedRef} />\n * });\n * ```\n */\nexport default function useCombinedRefs<T>(...refs: Array<Ref<T>>): RefCallback<T> {\n  const combinedRef = useCallback(\n    (value: T) => {\n      refs.forEach((ref) => {\n        if (typeof ref === 'function') {\n          ref(value);\n        } else if (ref != null) {\n          (ref as MutableRefObject<T>).current = value;\n        }\n      });\n    },\n    [refs]\n  );\n\n  return combinedRef;\n}\n", "import { useRef, useCallback } from 'react';\n\nexport default function useDebounce<Callback extends (...args: any[]) => any>(\n  callback: Callback,\n  delay: number\n) {\n  const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const cleanup = useCallback(() => {\n    if (timer.current) clearTimeout(timer.current);\n  }, []);\n\n  const debouncedCallback = useCallback(\n    (...args: Parameters<Callback>) =>\n      new Promise((resolve) => {\n        cleanup();\n        timer.current = setTimeout(() => {\n          resolve(callback(...args));\n          timer.current = null;\n        }, delay);\n      }),\n    []\n  );\n\n  return debouncedCallback;\n}\n", "import { useEffect } from 'react';\n\n/**\n * \uCEF4\uD3EC\uB10C\uD2B8\uAC00 \uB9C8\uC6B4\uD2B8 \uB420 \uB54C \uC778\uC790\uB85C \uC8FC\uC5B4\uC9C4 \uCF5C\uBC31 \uD568\uC218\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4.\n *\n * @param {Function} callback \uB9C8\uC6B4\uD2B8 \uB420 \uB54C \uD638\uCD9C \uD560 \uCF5C\uBC31 \uD568\uC218\n */\nexport default function useDidMount(callback: () => void) {\n  useEffect(() => {\n    callback();\n  }, []);\n}\n", "import { type DependencyList, useEffect, useRef } from 'react';\n\n/**\n * dependency \uBC30\uC5F4\uC758 \uC694\uC18C\uAC00 \uC5C5\uB370\uC774\uD2B8 \uB410\uC744\uB54C \uCF5C\uBC31 \uD568\uC218\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4. \uCCAB \uB80C\uB354\uB9C1 \uB54C\uB294 \uC2E4\uD589\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n *\n * @param {Function} callback dependency \uBC30\uC5F4\uC758 \uC694\uC18C\uAC00 \uC5C5\uB370\uC774\uD2B8 \uB420 \uB54C \uD638\uCD9C \uD560 \uCF5C\uBC31 \uD568\uC218\n * @param {Array} conditions \uC5C5\uB370\uC774\uD2B8\uB97C \uD2B8\uB9AC\uAC70\uD558\uB294 \uBCC0\uC218 \uBAA9\uB85D\n */\nexport default function useDidUpdate(callback: () => void, dependencies: DependencyList) {\n  const hasMount = useRef(false);\n\n  if (JSON.stringify(dependencies) === '[]') {\n    throw new Error('useDidUpdate \uD6C5\uC758 Dependency Array\uB294 \uBE48 \uBC30\uC5F4\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.');\n  }\n  useEffect(() => {\n    if (hasMount.current) {\n      callback();\n    } else {\n      hasMount.current = true;\n    }\n  }, dependencies);\n}\n", "import { type RefObject, useEffect, useState } from 'react';\n\nconst DEFAULT_CASE = {\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0,\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n};\n\n/**\n *  \uC778\uC790\uB85C \uBC1B\uC740 Ref\uAC00 \uCC38\uC870\uD558\uB294 HTML \uC5D8\uB9AC\uBA3C\uD2B8\uC758 Bounding Rect\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.\n *\n * @param {RefObject<HTMLElement>} ref \uD06C\uAE30\uB97C \uAC00\uC838\uC62C HTML Element\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLElement>();\n * const { top, left, right, bottom } = useElementSize(ref);\n *\n * return <div ref={ref} />\n * ```\n */\nexport function useElementSize(ref: RefObject<HTMLElement>) {\n  const [rect, setRect] = useState(DEFAULT_CASE);\n\n  useEffect(() => {\n    if (ref.current != null) {\n      setRect(ref.current.getBoundingClientRect());\n    }\n  }, [ref.current]);\n\n  return rect;\n}\n\nexport default useElementSize;\n", "import { useCallback, useMemo } from 'react';\n\ninterface Options {\n  onImpressionStart?: () => void;\n  onImpressionEnd?: () => void;\n  rootMargin?: number;\n  threshold?: number;\n}\n\n/**\n * ref\uC5D0 \uB2F4\uAE34 HTML \uC694\uC18C\uAC00 \uD654\uBA74 \uC548\uC73C\uB85C \uB4E4\uC5B4\uC624\uBA74 \uC778\uC790\uB85C \uBC1B\uC740 \uC774\uBCA4\uD2B8 \uD578\uB4E4\uB7EC\uB4E4\uC744 \uC54C\uB9DE\uAC8C \uD638\uCD9C\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * const impressionRef = useImpression({\n *   onImpressionStart: () => console.log('div \uB178\uCD9C!'),\n *   onImpressionEnd: () => console.log('div \uC228\uC74C!'),\n * });\n *\n * return <div ref={impressionRef} />\n * ```\n */\nexport default function useImpression({\n  onImpressionStart,\n  onImpressionEnd,\n  rootMargin = 0,\n  threshold = 0,\n}: Options) {\n  const handleImpressionStart = useCallback(() => {\n    onImpressionStart?.();\n  }, [onImpressionStart]);\n\n  const handleImpressionEnd = useCallback(() => {\n    onImpressionEnd?.();\n  }, [onImpressionEnd]);\n\n  const handleImpression = useCallback(\n    (entries: IntersectionObserverEntry[]) => {\n      const [entry] = entries;\n      const currentRatio = entry.intersectionRatio;\n\n      const isHide = threshold === 0 ? !entry.isIntersecting : currentRatio < threshold;\n\n      if (isHide) {\n        handleImpressionEnd();\n      } else {\n        handleImpressionStart();\n      }\n    },\n    [handleImpressionEnd, handleImpressionStart]\n  );\n\n  const intersectionObserver = useMemo(() => {\n    if (typeof IntersectionObserver === 'undefined') {\n      return undefined;\n    }\n\n    return new IntersectionObserver(handleImpression, {\n      rootMargin: `${rootMargin}px`,\n      threshold,\n    });\n  }, [handleImpression, rootMargin, threshold]);\n\n  const ref = useCallback(\n    (element: Element | null) => {\n      if (intersectionObserver === undefined) {\n        return;\n      }\n\n      intersectionObserver.disconnect();\n      if (element !== null) {\n        intersectionObserver.observe(element);\n      }\n    },\n    [intersectionObserver]\n  );\n\n  return ref;\n}\n", "import { useEffect, useRef, useState } from 'react';\n\nimport useBooleanState from './useBooleanState';\nimport useWindowSize from './useWindowSize';\n\nexport interface Queries {\n  page: number;\n  pageSize: number;\n}\nexport interface InfiniteScroll<T> {\n  fetcher: (params: Queries) => Promise<T>;\n  getQueries: (params?: any) => Queries;\n  merger: (prevData?: T, newData?: T) => T;\n  initialQueries: Queries;\n  threshold?: number;\n}\n\n/**\n *  threshold \uC5D0 \uB2FF\uC558\uC744\uB54C fetcher \uD568\uC218\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n *\n * @param {Function} fetcher threshold \uC5D0 \uB2FF\uC558\uC744\uB54C \uD638\uCD9C \uD560 \uB370\uC774\uD130\uD398\uCE6D \uD568\uC218\n * @param {Function} merger \uC774\uC804 \uB370\uC774\uD130\uC640, \uD604\uC7AC \uBC1B\uC544\uC628 \uB370\uC774\uD130\uB97C \uBCD1\uD569 \uD558\uB294 \uD568\uC218\n * @param {Function} getQueries fetcher\uC5D0\uC11C \uAC00\uC838\uC62C \uCD08\uAE30 \uB370\uC774\uD130 \uBC94\uC704\n * @param {Queries} initialQueries fetcher\uC5D0\uC11C \uAC00\uC838\uC62C \uB370\uC774\uD130 \uBC94\uC704 \uAC12\n * @param {number} threshold fetcher \uD568\uC218\uC758 \uD638\uCD9C \uC704\uCE58\n */\n\nconst useInfiniteScroll = <T>({\n  fetcher,\n  initialQueries,\n  getQueries,\n  threshold = 150,\n  merger,\n}: InfiniteScroll<T>) => {\n  const ref = useRef<HTMLElement>(null);\n  const { height: windowHeight } = useWindowSize();\n  const [isLoading, startLoading, endLoading] = useBooleanState(false);\n\n  const [data, setData] = useState<T>();\n  const [query, setQuery] = useState(initialQueries);\n\n  const fetchData = () => {\n    const nextQuery = getQueries(query);\n    setQuery(nextQuery);\n\n    return fetcher(nextQuery);\n  };\n\n  const getBottomOffset = () => {\n    const element = ref.current;\n\n    if (!element || !windowHeight) {\n      return null;\n    }\n\n    const rect = element.getBoundingClientRect();\n\n    const bottom = rect.bottom;\n    const bottomOffset = bottom - windowHeight;\n\n    return bottomOffset;\n  };\n\n  const listenBottomOffset = async () => {\n    if (!isLoading) return;\n\n    const bottomOffset = getBottomOffset();\n    if (bottomOffset === null) return;\n    const isValidOffset = bottomOffset < threshold;\n    if (isValidOffset) {\n      startLoading();\n      const loadedData = await fetchData();\n      const mergedData = merger(data, loadedData);\n      setData(mergedData);\n      endLoading();\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('scroll', listenBottomOffset);\n    return () => {\n      window.removeEventListener('scroll', listenBottomOffset);\n    };\n  });\n\n  return { ref, data, isLoading };\n};\n\nexport default useInfiniteScroll;\n", "import { useEffect, useState } from 'react';\n\nexport default function useWindowSize() {\n  const [windowSize, setWindowSize] = useState({\n    width: 0,\n    height: 0,\n  });\n\n  useEffect(() => {\n    function handleResize() {\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight,\n      });\n    }\n\n    window.addEventListener('resize', handleResize);\n\n    handleResize();\n\n    return () => window.removeEventListener('resize', handleResize);\n  }, []);\n\n  return windowSize;\n}\n", "import { useRef, useEffect } from 'react';\n\n/**\n *  \uC77C\uC815 \uC8FC\uAE30\uB85C \uCF5C\uBC31 \uD568\uC218\uB97C \uBC18\uBCF5\uD569\uB2C8\uB2E4.\n *\n * @param {Function} callback \uC8FC\uAE30 \uB9C8\uB2E4 \uBC18\uBCF5 \uD560 \uCF5C\uBC31 \uD568\uC218\n * @param {Array} delay \uBC18\uBCF5 \uC8FC\uAE30\n */\nconst useInterval = (callback: VoidFunction, delay: number) => {\n  const savedCallback = useRef<VoidFunction | null>(null);\n\n  useEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n\n  useEffect(() => {\n    const id = setInterval(() => {\n      savedCallback.current?.();\n    }, delay);\n    return () => {\n      clearInterval(id);\n    };\n  }, [delay]);\n};\n\nexport default useInterval;\n", "import { useCallback, useState } from 'react';\n\n/**\n * \uBE44\uB3D9\uAE30 \uD568\uC218\uC758 \uB3D9\uC791\uC758 \uC0C1\uD0DC\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * const [loading, runTransaction] = useLoading();\n *\n * const onClick = async () => {\n *   await updateData();\n *   router.push('/');\n * }\n *\n * return (\n *   <div onClick={() => runTransaction(onClick())}>\n *     {loading ? '\uB85C\uB529\uC911\uC785\uB2C8\uB2E4' : '\uD074\uB9AD\uD574\uC8FC\uC138\uC694'}\n *   </div>\n * );\n * ```\n */\nfunction useLoading(): [boolean, <T>(promise: Promise<T>) => Promise<T>] {\n  const [loading, update] = useState(false);\n\n  const runTransaction = useCallback(async <T>(promise: Promise<T>) => {\n    try {\n      update(true);\n\n      return await promise;\n    } finally {\n      update(false);\n    }\n  }, []);\n\n  return [loading, runTransaction];\n}\n\nexport default useLoading;\n", "import { useRef, useEffect } from 'react';\n\n/**\n * \uD55C \uB2E8\uACC4 \uC774\uC804 \uB80C\uB354 \uD0C0\uC774\uBC0D\uC758 \uAC12\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4. \uC774\uC804 \uAC12\uACFC \uD604\uC7AC \uAC12\uC744 \uBE44\uAD50\uD558\uB294 \uC0C1\uD669 \uB4F1\uC5D0 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n *\n * @example\n * ```js\n * const [payMethods, setPaymethods] = useState();\n * const previousPayMethods = usePreviousState(payMethods);\n *\n * useEffect(() => {\n *   if (payMethods.length > previousPayMethods.length) {\n *     alert('\uC0C8\uB85C\uC6B4 \uACB0\uC81C \uC218\uB2E8\uC774 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4!');\n *   }\n * }, []);\n * ```\n */\nexport default function usePreviousState<T>(value: T): T {\n  const ref = useRef<T>(value);\n\n  useEffect(() => {\n    ref.current = value;\n  }, [value]);\n\n  return ref.current;\n}\n", "import { useState, useEffect } from 'react';\n\nimport { findQueryParamInClient } from '@quotalab/browser';\n\n/**\n * \uCFFC\uB9AC\uC2A4\uD2B8\uB9C1\uC758 \uD0A4\uB97C \uAE30\uBC18\uC73C\uB85C \uAC12\uC744 \uAC00\uC838\uC635\uB2C8\uB2E4. \uB9CC\uC57D \uAC12\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC744 \uACBD\uC6B0 undefined\uAC00 \uBC18\uD658\uB429\uB2C8\uB2E4.\n * SSR\uC758 Hydration Mismatch\uB97C \uBC29\uC9C0\uD558\uAE30 \uC704\uD574 \uCC98\uC74C\uC5D0\uB294 undefined\uB97C \uBC18\uD658\uD558\uACE0 mounted \uC774\uD6C4\uC5D0 \uD574\uB2F9 \uAC12\uC758 \uC874\uC7AC \uC5EC\uBD80\uC5D0 \uB530\uB978 \uACB0\uACFC \uAC12\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.\n *\n * @note Next.js\uB97C \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C\uB294 \\@quotalab/next\uC758 `useQueryParam`\uC744 \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694\n *\n * @example\n * // https://quotalab.com?foo=1&bar=hello\n * const foo = useQueryParam('foo', Number) ?? -1; // number\n * const bar = useQueryParam('bar'); // string | undefined\n * const baz = useQueryParam('baz') ?? 'empty'; // string\n */\nexport default function useQueryParam<T extends string = string>(key: string): T | undefined;\nexport default function useQueryParam<T>(\n  key: string,\n  parser: (value: string | string[]) => T\n): T | undefined;\nexport default function useQueryParam<T = string>(\n  key: string,\n  parser?: (value: string | string[]) => T\n) {\n  const [queryParam, setQueryParam] = useState<string | string[] | T | undefined>(undefined);\n\n  useEffect(() => {\n    const value = findQueryParamInClient(key);\n\n    if (value === undefined) {\n      setQueryParam(undefined);\n    } else {\n      setQueryParam(parser != null ? parser(value) : value);\n    }\n  }, []);\n\n  return queryParam;\n}\n", "import { type RefCallback, useCallback, useRef } from 'react';\n\ntype ResizeObserverStore<T extends Element> = {\n  observer?: ResizeObserver;\n  callbackMap: Map<T, (entry: ResizeObserverEntry) => void>;\n  register(params: { element: T; callback: (entry: ResizeObserverEntry) => void }): void;\n  unregister(element: T): void;\n  assertType<U extends Element>(): ResizeObserverStore<U>;\n};\n\nconst resizeObserverStore: ResizeObserverStore<Element> = {\n  observer:\n    typeof ResizeObserver === 'undefined'\n      ? undefined\n      : new ResizeObserver((entries) => {\n          entries.forEach((entry) => resizeObserverStore.callbackMap.get(entry.target)?.(entry));\n        }),\n  callbackMap: new Map(),\n  register({\n    element,\n    callback,\n  }: {\n    element: Element;\n    callback: (entry: ResizeObserverEntry) => void;\n  }) {\n    resizeObserverStore.callbackMap.set(element, callback);\n    resizeObserverStore.observer?.observe(element);\n  },\n  unregister(element: Element) {\n    resizeObserverStore.callbackMap.delete(element);\n    resizeObserverStore.observer?.unobserve(element);\n  },\n  assertType<T extends Element>() {\n    return this as ResizeObserverStore<T>;\n  },\n};\n\n/**\n * ResizeObserver\uB97C \uD3B8\uB9AC\uD558\uAC8C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD55C hook\uC785\uB2C8\uB2E4.\n * \uC774 \uD6C5\uC740 ref\uB97C \uBC18\uD658\uD558\uBA70, \uC774 ref\uC5D0 \uC5F0\uACB0\uB41C Element\uC758 \uC0AC\uC774\uC988\uAC00 \uBCC0\uACBD\uB420 \uB584\uB9C8\uB2E4 onResize\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n */\nconst useResizeObserver = <T extends Element>(onResize: (entry: ResizeObserverEntry) => void) => {\n  const refObject = useRef<T>();\n  const refCallback = useCallback<RefCallback<T>>(\n    (element) => {\n      if (refObject.current != null && element == null) {\n        resizeObserverStore.assertType<T>().unregister(refObject.current);\n      }\n\n      if (element != null) {\n        refObject.current = element;\n        resizeObserverStore.assertType<T>().register({ element, callback: onResize });\n      }\n    },\n    [onResize]\n  );\n\n  return { ref: refCallback };\n};\n\nexport default useResizeObserver;\n", "import { type RefObject, useEffect } from 'react';\n\n/**\n * \uCEF4\uD3EC\uB10C\uD2B8\uC5D0 \uC2A4\uD06C\uB864 \uC774\uBCA4\uD2B8\uB97C \uCD94\uAC00\uD558\uB294 hook\uC785\uB2C8\uB2E4.\n * useEffect dependency\uB85C hook\uC758 \uC778\uC790\uC778 ref, scrollCallback\uC744 \uD3EC\uD568\uD558\uACE0 \uC788\uC5B4\n * ref, scrollCallback\uC758 \uB808\uD37C\uB7F0\uC2A4\uAC00 \uBCC0\uACBD \uB420 \uB54C\uB9C8\uB2E4 \uC2A4\uD06C\uB864 \uC774\uBCA4\uD2B8\uAC00 \uBC14\uC778\uB529\uB429\uB2C8\uB2E4.\n * \uC774 \uBD80\uBD84\uC744 \uCC38\uACE0\uD558\uC154\uC11C \uC131\uB2A5\uC774\uC288\uAC00 \uBC1C\uC0DD\uD558\uC9C0 \uC54A\uB3C4\uB85D \uC798 \uAD00\uB9AC\uD574\uC8FC\uC138\uC694.\n */\nconst useScrollEvent = (ref: RefObject<HTMLElement>, scrollCallback: (event: Event) => void) => {\n  useEffect(() => {\n    if (ref.current === null) {\n      return;\n    }\n\n    ref.current.addEventListener('scroll', scrollCallback, { passive: true });\n    return () => ref.current?.removeEventListener('scroll', scrollCallback);\n  }, [ref.current, scrollCallback]);\n};\n\nexport default useScrollEvent;\n", "import { useRef } from 'react';\n\nexport default function useThrottle<A extends unknown[]>(\n  callback: (...args: A) => void,\n  delay: number\n) {\n  const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  return function throttledCallback(...args: A) {\n    if (!timer.current) {\n      timer.current = setTimeout(() => {\n        callback(...args);\n        timer.current = null;\n      }, delay);\n    }\n  };\n}\n", "import { useReducer } from 'react';\n\nconst toggleReducer = (state: boolean, nextValue?: boolean) =>\n  typeof nextValue === 'boolean' ? nextValue : !state;\n\n/**\n * toggle\uC744 \uC704\uD55C \uB3D9\uC791\uB4E4\uC744 \uCD94\uC0C1\uD654\uD558\uC5EC \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n *\n * @param defaultState { boolean | undefined } useToggle state\uC758 \uAE30\uBCF8\uAC12\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```ts\n * const [isOpenModal, toggleModal] = useToggle();\n *\n * toggle(); // false -> true\n * toggle(false); // true -> false\n * toggle(true); // false -> true\n * ```\n */\nfunction useToggle(defaultState = false): [boolean, (nextValue?: boolean) => void] {\n  return useReducer(toggleReducer, defaultState);\n}\n\nexport default useToggle;\n", "import { useCallback, useState } from 'react';\n\nconst useUpload = () => {\n  const [file, setFile] = useState<File | null>(null);\n\n  const upload = useCallback(() => {\n    const promise = new Promise<File | null>((resolve, reject) => {\n      const input = document.createElement('input');\n      input.type = 'file';\n      input.onchange = () => {\n        if (!input.files) return reject();\n        const file = input.files[0];\n        setFile(file);\n        resolve(file);\n      };\n      input.click();\n    });\n\n    return promise;\n  }, []);\n\n  const reset = useCallback(() => {\n    setFile(null);\n  }, []);\n\n  return { file, upload, reset };\n};\n\nexport default useUpload;\n", "import { useEffect } from 'react';\n\n/**\n * useWillUnmount hook\n * \uCEF4\uD3EC\uB10C\uD2B8\uAC00 \uC5B8\uB9C8\uC6B4\uD2B8 \uB420 \uB54C \uD568\uC218\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4.\n *\n * @param {Function} callback \uCEF4\uD3EC\uB10C\uD2B8\uAC00 \uC5B8\uB9C8\uC6B4\uD2B8 \uB420 \uB54C \uD638\uCD9C \uD560 \uCF5C\uBC31 \uD568\uC218\n */\nexport default function useWillUnmount(callback: () => void) {\n  useEffect(() => {\n    return callback;\n  }, []);\n}\n", "import React, { type PropsWithChildren } from 'react';\n\nimport { AnimatePresence, motion } from 'framer-motion';\n\nimport { useExpandContext } from './useExpandContext';\nimport Slot from '../Slot';\n\nconst Body = ({ asChild, children }: PropsWithChildren<{ asChild?: boolean }>) => {\n  const { isExpanded } = useExpandContext();\n\n  const MotionComp = React.useMemo(() => motion(asChild === true ? Slot : 'div'), [asChild]);\n\n  return (\n    <AnimatePresence initial={false}>\n      {isExpanded && (\n        <MotionComp\n          initial={{ height: 0, opacity: 0 }}\n          animate={{ height: 'auto', opacity: 1 }}\n          exit={{ height: 0, opacity: 0 }}\n          style={{ overflow: 'hidden' }}\n        >\n          {children}\n        </MotionComp>\n      )}\n    </AnimatePresence>\n  );\n};\n\nexport default Body;\n", "import {\n  createContext,\n  type Dispatch,\n  type PropsWithChildren,\n  type SetStateAction,\n  useContext,\n  useState,\n} from 'react';\n\nconst ExpandContext = createContext<{\n  isControlled: boolean;\n  isExpanded?: boolean;\n  setExpanded: Dispatch<SetStateAction<boolean | undefined>>;\n}>({\n  isControlled: false,\n  isExpanded: undefined,\n  setExpanded: () => {},\n});\n\ninterface Props {\n  expanded?: boolean;\n  defaultExpanded?: boolean;\n}\nexport const ExpandedProvider = (props: PropsWithChildren<Props>) => {\n  const isControlled = 'expanded' in props;\n  const [isExpanded, setExpanded] = useState(isControlled ? props.expanded : props.defaultExpanded);\n\n  const innerValue = isControlled ? props.expanded : isExpanded;\n\n  return (\n    <ExpandContext.Provider value={{ isExpanded: innerValue, setExpanded, isControlled }}>\n      {props.children}\n    </ExpandContext.Provider>\n  );\n};\n\nexport function useExpandContext() {\n  return useContext(ExpandContext);\n}\n", "import React from 'react';\n\nimport { mergeProps, mergeRefs } from '@quotalab/headless-hooks';\n\nimport { isSlottable } from './@common';\n\nexport type SlotProps = React.PropsWithChildren<React.HTMLAttributes<HTMLElement>>;\nconst Slot = React.forwardRef(\n  ({ children, ...slotProps }: SlotProps, ref: React.ForwardedRef<HTMLElement>) => {\n    const childrenList = React.Children.toArray(children);\n    const slottable = childrenList.find(isSlottable);\n\n    if (slottable != null) {\n      const newElement = slottable.props.children as React.ReactNode;\n      const newChildren = childrenList.map((child) => {\n        if (child !== slottable) return child;\n        if (React.Children.count(newElement) > 1) return React.Children.only(null);\n        return React.isValidElement(newElement)\n          ? (newElement.props.children as React.ReactNode)\n          : null;\n      });\n\n      return (\n        <SlotClone {...slotProps} ref={ref}>\n          {React.isValidElement(newElement)\n            ? React.cloneElement(newElement, undefined, newChildren)\n            : null}\n        </SlotClone>\n      );\n    }\n\n    return (\n      <SlotClone {...slotProps} ref={ref}>\n        {children}\n      </SlotClone>\n    );\n  }\n);\n\nconst SlotClone = React.forwardRef((props: React.PropsWithChildren, forwardedRef) => {\n  const { children, ...slotProps } = props;\n\n  if (React.isValidElement(children)) {\n    return React.cloneElement(children, {\n      ...mergeProps(slotProps, children.props),\n      ref: forwardedRef ? mergeRefs(forwardedRef, (children as any).ref) : (children as any).ref,\n    });\n  }\n\n  return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nexport default Slot;\n", "import React from 'react';\n\nexport function Slottable({ children }: React.PropsWithChildren) {\n  return <>{children}</>;\n}\n\nexport function isSlottable(child: React.ReactNode): child is React.ReactElement {\n  return React.isValidElement(child) && child.type === Slottable;\n}\n", "import React, { type PropsWithChildren } from 'react';\n\nconst Header = ({ children }: PropsWithChildren<unknown>) => {\n  return <>{children}</>;\n};\n\nexport default Header;\n", "import React, { type PropsWithChildren } from 'react';\n\nimport { motion, type Variants } from 'framer-motion';\n\nimport { useExpandContext } from './useExpandContext';\nimport Slot from '../Slot';\n\nconst variants: Variants = {\n  open: { height: 'auto', opacity: 1 },\n  closed: { height: 0, opacity: 0 },\n};\n\n/**\n * @description \uB300\uBD80\uBD84\uC758 \uC0C1\uD669\uC5D0\uC11C \uBD80\uC801\uD569\uD569\uB2C8\uB2E4. `Expand.Body` \uCEF4\uD3EC\uB10C\uD2B8\uC758 \uC0AC\uC6A9\uC744 \uAD8C\uC7A5\uD569\uB2C8\uB2E4.\n * @description AntdForm\uACFC \uAC19\uC740 \uACBD\uC6B0, \uD544\uB4DC\uAC00 \uB3D4\uC5D0\uC11C \uC0AC\uB77C\uC9C4\uB2E4\uBA74 \uC720\uD6A8\uC131 \uAC80\uC0AC\uAC00 \uC81C\uB300\uB85C \uB3D9\uC791\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC774 \uACBD\uC6B0 `Expand.HiddenBody`\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.\n */\nconst HiddenBody = ({ asChild, children }: PropsWithChildren<{ asChild?: boolean }>) => {\n  const { isExpanded } = useExpandContext();\n  const currentVariant = isExpanded ? 'open' : 'closed';\n\n  const MotionComp = React.useMemo(() => motion(asChild === true ? Slot : 'div'), [asChild]);\n  return (\n    <MotionComp\n      initial={currentVariant}\n      animate={currentVariant}\n      variants={variants}\n      style={{\n        pointerEvents: isExpanded ? 'auto' : 'none',\n        overflow: 'hidden',\n      }}\n    >\n      {children}\n    </MotionComp>\n  );\n};\n\nexport default HiddenBody;\n", "import { cloneElement, useCallback } from 'react';\n\nimport { useExpandContext } from './useExpandContext';\n\nconst Trigger = ({ children }: { children: (isExpanded?: boolean) => JSX.Element }) => {\n  const { isExpanded, setExpanded, isControlled } = useExpandContext();\n  const toggleExpand = useCallback(() => {\n    if (isControlled) {\n      return;\n    }\n\n    setExpanded((expanded) => !expanded);\n  }, []);\n\n  const childrenComponent = children(isExpanded);\n\n  return cloneElement(childrenComponent, {\n    onClick: () => {\n      childrenComponent.props.onClick?.();\n      toggleExpand();\n    },\n  });\n};\n\nexport default Trigger;\n", "import React, { type ReactNode } from 'react';\n\nimport Body from './Body';\nimport Header from './Header';\nimport HiddenBody from './HiddenBody';\nimport Trigger from './Trigger';\nimport { ExpandedProvider } from './useExpandContext';\n\ninterface BaseProps {\n  children: ReactNode;\n  className?: string;\n}\ninterface ControlledProps extends BaseProps {\n  expanded?: boolean;\n  defaultExpanded?: never;\n}\ninterface UncontrolledProps extends BaseProps {\n  expanded?: never;\n  defaultExpanded?: boolean;\n}\n\n/**\n * \uC6D0\uD558\uB294 \uB0B4\uC6A9\uC744 \uAC00\uB838\uB2E4\uAC00 \uBCF4\uC774\uAC8C \uD560 \uC218 \uC788\uB294 \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4.\n *\n * Controlled, Uncontrolled \uD328\uD134 \uBAA8\uB450\uB97C \uC9C0\uC6D0\uD569\uB2C8\uB2E4. Controlled \uD328\uD134\uC744 \uC0AC\uC6A9\uD560 \uB54C\uB294 `Expand.Trigger` \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC544\uB3C4 \uB429\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Expand>\n *   <Expand.Header>\uC800\uB294 \uD56D\uC0C1 \uBCF4\uC5EC\uC694</Expand.Header>\n *   <Expand.Body>\uC800\uB294 \uAC00\uB824\uC9C8 \uC218 \uC788\uC5B4\uC694</Expand.Body>\n *   <Expand.Trigger>\n *     {(expanded) => <button>{expanded ? '\uC811\uAE30' : '\uC790\uC138\uD788\uBCF4\uAE30'}</button>}\n *   </Expand.Trigger>\n * </Expand>\n *\n * // Controlled\n * const [expanded, setExpanded] = useState(false);\n *\n * <Expand expanded={expanded}>\n *   <Expand.Header>\uC800\uB294 \uD56D\uC0C1 \uBCF4\uC5EC\uC694</Expand.Header>\n *   <Expand.Body>\uC800\uB294 \uAC00\uB824\uC9C8 \uC218 \uC788\uC5B4\uC694</Expand.Body>\n *   <button onClick={() => setExpanded(v => !v)}>\n *     {expanded ? '\uC811\uAE30' : '\uC790\uC138\uD788\uBCF4\uAE30'}\n *   </button>\n * </Expand>\n * ```\n */\nconst Expand = ({ children, className, ...props }: ControlledProps | UncontrolledProps) => {\n  return (\n    <ExpandedProvider {...props}>\n      <div className={className}>{children}</div>\n    </ExpandedProvider>\n  );\n};\n\nExpand.Header = Header;\nExpand.Body = Body;\nExpand.Trigger = Trigger;\nExpand.HiddenBody = HiddenBody;\n\nexport default Expand;\n", "import React, { type PropsWithChildren, type MouseEvent } from 'react';\n\ninterface Props {\n  disabled?: boolean;\n  onClick?: (e: MouseEvent<HTMLAnchorElement>) => void;\n  className?: string;\n}\n\n/**\n * Clickable\uD558\uC9C0 \uC54A\uC740 \uC694\uC18C\uB97C \uAC10\uC2F8 Clickable\uD558\uB3C4\uB85D \uC2DC\uB9E8\uD2F1 \uB9C8\uD06C\uC5C5\uC744 \uC9C4\uD589\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * <ClickArea onClick={handleClick}>\n *   <PlusIcon />\n * </ClickArea>\n * ```\n *\n */\nconst ClickArea = ({ disabled, onClick, ...props }: PropsWithChildren<Props>) => (\n  <a\n    role=\"button\"\n    style={{\n      cursor: disabled ? 'not-allowed' : 'pointer',\n      opacity: disabled ? 0.6 : 1,\n      display: 'flex',\n    }}\n    onClick={disabled ? undefined : onClick}\n    {...props}\n  />\n);\n\nexport default ClickArea;\n", "import React from 'react';\n\nimport { commaizeNumber } from '@quotalab/utils';\n\ninterface Props {\n  value: number | string;\n}\nconst CommaizeNumber = ({ value }: Props) => <>{commaizeNumber(value)}</>;\n\nexport default CommaizeNumber;\n", "import { type ReactNode } from 'react';\n\nimport { iif } from '@quotalab/utils';\n\ninterface Props {\n  expression: boolean;\n  then: ReactNode;\n  else?: ReactNode;\n}\n\nconst Condition = ({ expression, then: thenNode, else: elseNode }: Props): ReactNode => {\n  return iif(expression, thenNode, elseNode);\n};\n\nexport default Condition;\n", "import { type ReactNode } from 'react';\n\nimport { convert } from '@quotalab/utils';\n\ninterface Props<T, V> {\n  value: T;\n  formatter: (value: NonNullable<T>) => V;\n  defaultValue?: ReactNode;\n}\nfunction Convert<T, V extends ReactNode>({\n  value,\n  formatter,\n  defaultValue,\n}: Props<T, V>): ReactNode {\n  return convert(value, formatter) ?? defaultValue;\n}\n\nexport default Convert;\n", "import React from 'react';\n\nexport type CurrencyType =\n  | 'KRW'\n  | 'USD'\n  | 'SGD'\n  | 'HKD'\n  | 'INR'\n  | 'VND'\n  | 'IDR'\n  | 'MYR'\n  | 'CNY'\n  | 'JPY'\n  | 'GBP'\n  | 'THB'\n  | 'AUD'\n  | 'NZD'\n  | 'TWD'\n  | 'EUR'\n  | 'KYD'\n  | 'CAD'\n  | 'ILS'\n  | 'BRL'\n  | 'ARS'\n  | 'CLP'\n  | 'PHP'\n  | 'SEK'\n  | 'PLN'\n  | 'SAR'\n  | 'CHF';\n\nexport const getCurrencySymbol = (currency: CurrencyType) => {\n  return (0)\n    .toLocaleString('en-US', {\n      style: 'currency',\n      currencyDisplay: 'narrowSymbol',\n      currency,\n      minimumFractionDigits: 0,\n      maximumFractionDigits: 0,\n    })\n    .replace(/\\d/g, '')\n    .trim();\n};\n\ninterface Props {\n  currency: CurrencyType;\n}\nexport const CurrencySymbol = ({ currency }: Props) => {\n  return <>{getCurrencySymbol(currency)}</>;\n};\n", "import React, {\n  type MouseEvent as ReactMouseEvent,\n  type PropsWithChildren,\n  useEffect,\n  useRef,\n} from 'react';\n\ninterface Props {\n  onClick?: (e: ReactMouseEvent) => void;\n  onOutsideClick?: (e: MouseEvent) => void;\n  className?: string;\n}\n\n/**\n * Children\uC73C\uB85C \uBC1B\uC740 \uC694\uC18C\uAC00 \uC544\uB2CC \uB2E4\uB978 \uACF5\uAC04\uC774 \uD074\uB9AD\uB418\uBA74 onOutsideClick \uC774\uBCA4\uD2B8\uB97C \uD638\uCD9C\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4.\n *\n * div \uC5D8\uB9AC\uBA3C\uD2B8\uB85C Wrapper\uB97C \uC0DD\uC131\uD558\uAE30 \uB54C\uBB38\uC5D0 \uC758\uB3C4\uD558\uC9C0 \uC54A\uC740 Layout \uBCC0\uACBD\uC774 \uBC1C\uC0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * <DetectClickOutside onOutsideClick={() => alert('\uB2E4\uB978 \uACF5\uAC04\uC774 \uD074\uB9AD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.')}>\n *   <Txt>\uC548\uB155\uD558\uC138\uC694~~</Txt>\n * </DetectClickOutside>\n *\n * // \uC758\uB3C4\uD558\uC9C0 \uC54A\uC740 Layout \uBCC0\uACBD\uC774 \uBC1C\uC0DD\uD55C \uACBD\uC6B0\uC5D0\uB294 emotion + className\uC744 \uC0AC\uC6A9\uD558\uC5EC \uC801\uC808\uD788 \uCC98\uB9AC\uD574\uC8FC\uC138\uC694.\n * <DetectClickOutside\n *   className={\n *     css`\n *       line-height: 0;\n *     `\n *   }\n *   onOutsideClick={() => alert('\uB2E4\uB978 \uACF5\uAC04\uC774 \uD074\uB9AD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.')}\n * >\n *   <Txt>\uC548\uB155\uD558\uC138\uC694~~</Txt>\n * </DetectClickOutside>\n * ```\n */\nconst DetectClickOutside = ({\n  children,\n  className,\n  onClick,\n  onOutsideClick,\n}: PropsWithChildren<Props>) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (ref.current == null) {\n        return;\n      }\n\n      if (ref.current.contains(e.target as Element) === false) {\n        onOutsideClick?.(e);\n      }\n    };\n\n    document.addEventListener('click', handler);\n\n    return () => {\n      document.removeEventListener('click', handler);\n    };\n  }, []);\n\n  return (\n    <div ref={ref} className={className} onClick={onClick}>\n      {children}\n    </div>\n  );\n};\n\nexport default DetectClickOutside;\n", "import React, { type ReactNode } from 'react';\n\nimport Slot from './Slot';\nimport useImpression from '../hooks/useImpression';\n\ninterface Props {\n  onImpressionStart?: () => void;\n  onImpressionEnd?: () => void;\n  rootMargin?: number;\n  threshold?: number;\n  className?: string;\n  asChild?: boolean;\n  children: ReactNode;\n}\n\n/**\n * \uC694\uC18C\uAC00 \uD654\uBA74 \uC548\uC5D0 \uB4F1\uC7A5\uD558\uAC70\uB098 \uD654\uBA74\uC5D0\uC11C \uC0AC\uB77C\uC9C0\uBA74 onImpressionStart, onImpressionEnd \uC774\uBCA4\uD2B8\uB97C \uD2B8\uB9AC\uAC70\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * <ImpressionArea onImpressionStart={() => console.log('\uB098\uD0C0\uB0AC\uB2E4!')}>\n *   <div />\n * </ImpressionArea>\n * ```\n */\nconst ImpressionArea = ({ asChild, className, children, ...rest }: Props) => {\n  const impressionRef = useImpression({\n    ...rest,\n  });\n  const Comp = asChild === true ? Slot : 'div';\n  return (\n    <Comp ref={impressionRef} className={className}>\n      {children}\n    </Comp>\n  );\n};\n\nexport default ImpressionArea;\n", "import React from 'react';\n\nimport { decommaizeNumber, getFixed, iif } from '@quotalab/utils';\n\nimport CommaizeNumber from './CommaizeNumber';\nimport { CurrencySymbol, type CurrencyType } from './CurrencySymbol';\n\ninterface Props {\n  value: string | number;\n  currency: CurrencyType;\n}\nconst Money = ({ value, currency }: Props) => {\n  return (\n    <>\n      <CurrencySymbol currency={currency} />\n      <CommaizeNumber\n        value={getFixed(decommaizeNumber(String(value)), {\n          minPoint: iif(['USD'].includes(currency), 2),\n        })}\n      />\n    </>\n  );\n};\n\nexport default Money;\n", "import React from 'react';\n\nimport CommaizeNumber from './CommaizeNumber';\n\nconst Percentage = ({\n  value,\n  decimalPointDigit = 2,\n}: {\n  value: number;\n  decimalPointDigit?: number;\n}) => {\n  const fixedValue = (value * 100).toFixed(decimalPointDigit);\n  return (\n    <>\n      <CommaizeNumber value={fixedValue} />%\n    </>\n  );\n};\n\nexport default Percentage;\n", "import React, { type ComponentType, type ReactNode } from 'react';\nimport { type ComponentProps, Suspense, useEffect, useState } from 'react';\n\n/**\n * SSR \uD658\uACBD\uC5D0\uC11C\uB294 fallback\uB97C \uB80C\uB354\uD558\uACE0, CSR \uD658\uACBD\uC5D0\uC11C\uB294 Suspsense\uB97C \uB80C\uB354\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4.\n *\n * @example\n * ```jsx\n * <SSRSuspense fallback={<Fallback />}>\n *   <MyPage />\n * </SSRSuspense>\n * ```\n */\nexport function SSRSuspense({ fallback, children }: ComponentProps<typeof Suspense>) {\n  const [isMounted, setMounted] = useState(false);\n\n  useEffect(() => {\n    setMounted(true);\n  }, []);\n\n  if (isMounted) {\n    return <Suspense fallback={fallback}>{children}</Suspense>;\n  }\n  return <>{fallback}</>;\n}\n\n/**\n * SSRSuspense\uB97C HoC\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uD568\uC218\uC785\uB2C8\uB2E4\n *\n * @example\n * ```ts\n * export default withSSRSuspense(<MyPage />, { fallback: <Fallback /> });\n * ```\n */\nexport function withSSRSuspense<T>(\n  WrappedComponent: ComponentType<T>,\n  options: { fallback: NonNullable<ReactNode> | null }\n) {\n  return (props: T) => {\n    return (\n      <SSRSuspense fallback={options.fallback}>\n        <WrappedComponent {...(props as any)} />\n      </SSRSuspense>\n    );\n  };\n}\n", "import { type ReactNode } from 'react';\n\n/**\n * \uC5EC\uB7EC ReactNode\uB97C join\uD560 \uC218 \uC788\uB294 \uD568\uC218\uC785\uB2C8\uB2E4. Separator\uC5D0\uB294 ReactNode \uD0C0\uC785\uB3C4 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n *\n * @example\n * ```tsx\n * joinNodes(\n *   [<FormattedMessage id=\"\uBC88\uC5ED\uBB38\uAD6C1\" />, <FormattedMessage id=\"\uBC88\uC5ED\uBB38\uAD6C2\" />],\n *   ',',\n * )\n *\n * // or\n *\n * joinNodes(\n *   [<FormattedMessage id=\"\uBC88\uC5ED\uBB38\uAD6C1\" />, <FormattedMessage id=\"\uBC88\uC5ED\uBB38\uAD6C2\" />],\n *   <br />,\n * )\n * ```\n */\nexport function joinNodes(nodes: ReactNode[], separator: ReactNode) {\n  if (nodes.length === 0) {\n    return [];\n  }\n\n  return nodes.reduce((prev, current) => [prev, separator, current]);\n}\n"],
  "mappings": "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",
  "names": ["src_exports", "__export", "ClickArea_default", "CommaizeNumber_default", "Condition_default", "Convert_default", "CurrencySymbol", "DetectClickOutside_default", "Expand_default", "ImpressionArea_default", "Money_default", "Percentage_default", "SSRSuspense", "Slottable", "getCurrencySymbol", "isSlottable", "joinNodes", "useAnimationFrame", "useAsyncEffect", "useBooleanState_default", "useCombinedRefs", "useDebounce", "useDidMount", "useDidUpdate", "useElementSize_default", "useImpression", "useInfiniteScroll_default", "useInterval_default", "useLoading_default", "usePreviousState", "useQueryParam", "useResizeObserver_default", "useScrollEvent_default", "useThrottle", "useToggle_default", "useUpload_default", "useWillUnmount", "useWindowSize", "withSSRSuspense", "__toCommonJS", "import_react", "useAnimationFrame", "callback", "animateRequestRef", "animate", "import_react", "useAsyncEffect", "asyncEffect", "deps", "import_react", "useBooleanState", "defaultValue", "state", "setState", "setTrue", "setFalse", "useBooleanState_default", "import_react", "useCombinedRefs", "refs", "value", "ref", "import_react", "useDebounce", "callback", "delay", "timer", "cleanup", "args", "resolve", "import_react", "useDidMount", "callback", "import_react", "useDidUpdate", "callback", "dependencies", "hasMount", "import_react", "DEFAULT_CASE", "useElementSize", "ref", "rect", "setRect", "useElementSize_default", "import_react", "useImpression", "onImpressionStart", "onImpressionEnd", "rootMargin", "threshold", "handleImpressionStart", "handleImpressionEnd", "handleImpression", "entries", "entry", "currentRatio", "intersectionObserver", "element", "import_react", "import_react", "useWindowSize", "windowSize", "setWindowSize", "handleResize", "useInfiniteScroll", "fetcher", "initialQueries", "getQueries", "threshold", "merger", "ref", "windowHeight", "useWindowSize", "isLoading", "startLoading", "endLoading", "useBooleanState_default", "data", "setData", "query", "setQuery", "fetchData", "nextQuery", "getBottomOffset", "element", "listenBottomOffset", "__async", "bottomOffset", "loadedData", "mergedData", "useInfiniteScroll_default", "import_react", "useInterval", "callback", "delay", "savedCallback", "id", "_a", "useInterval_default", "import_react", "useLoading", "loading", "update", "runTransaction", "promise", "__async", "useLoading_default", "import_react", "usePreviousState", "value", "ref", "import_react", "import_browser", "useQueryParam", "key", "parser", "queryParam", "setQueryParam", "value", "import_react", "resizeObserverStore", "entries", "entry", "_a", "element", "callback", "useResizeObserver", "onResize", "refObject", "useResizeObserver_default", "import_react", "useScrollEvent", "ref", "scrollCallback", "_a", "useScrollEvent_default", "import_react", "useThrottle", "callback", "delay", "timer", "args", "import_react", "toggleReducer", "state", "nextValue", "useToggle", "defaultState", "useToggle_default", "import_react", "useUpload", "file", "setFile", "upload", "resolve", "reject", "input", "reset", "useUpload_default", "import_react", "useWillUnmount", "callback", "import_react", "import_framer_motion", "import_react", "import_jsx_runtime", "ExpandContext", "ExpandedProvider", "props", "isControlled", "isExpanded", "setExpanded", "innerValue", "useExpandContext", "import_react", "import_headless_hooks", "import_react", "import_jsx_runtime", "Slottable", "children", "isSlottable", "child", "React", "import_jsx_runtime", "Slot", "React", "_a", "ref", "_b", "children", "slotProps", "__objRest", "childrenList", "slottable", "isSlottable", "newElement", "newChildren", "child", "SlotClone", "__spreadProps", "__spreadValues", "props", "forwardedRef", "Slot_default", "import_jsx_runtime", "Body", "asChild", "children", "isExpanded", "useExpandContext", "MotionComp", "React", "Slot_default", "Body_default", "import_jsx_runtime", "Header", "children", "Header_default", "import_react", "import_framer_motion", "import_jsx_runtime", "variants", "HiddenBody", "asChild", "children", "isExpanded", "useExpandContext", "currentVariant", "MotionComp", "React", "Slot_default", "HiddenBody_default", "import_react", "Trigger", "children", "isExpanded", "setExpanded", "isControlled", "useExpandContext", "toggleExpand", "expanded", "childrenComponent", "_a", "_b", "Trigger_default", "import_jsx_runtime", "Expand", "_a", "_b", "children", "className", "props", "__objRest", "ExpandedProvider", "__spreadProps", "__spreadValues", "Header_default", "Body_default", "Trigger_default", "HiddenBody_default", "Expand_default", "import_jsx_runtime", "ClickArea", "_a", "_b", "disabled", "onClick", "props", "__objRest", "__spreadValues", "ClickArea_default", "import_utils", "import_jsx_runtime", "CommaizeNumber", "value", "CommaizeNumber_default", "import_utils", "Condition", "expression", "thenNode", "elseNode", "Condition_default", "import_utils", "Convert", "value", "formatter", "defaultValue", "_a", "Convert_default", "import_jsx_runtime", "getCurrencySymbol", "currency", "CurrencySymbol", "import_react", "import_jsx_runtime", "DetectClickOutside", "children", "className", "onClick", "onOutsideClick", "ref", "handler", "e", "DetectClickOutside_default", "import_jsx_runtime", "ImpressionArea", "_a", "_b", "asChild", "className", "children", "rest", "__objRest", "impressionRef", "useImpression", "__spreadValues", "Slot_default", "ImpressionArea_default", "import_utils", "import_jsx_runtime", "Money", "value", "currency", "CurrencySymbol", "CommaizeNumber_default", "Money_default", "import_jsx_runtime", "Percentage", "value", "decimalPointDigit", "fixedValue", "CommaizeNumber_default", "Percentage_default", "import_react", "import_jsx_runtime", "SSRSuspense", "fallback", "children", "isMounted", "setMounted", "withSSRSuspense", "WrappedComponent", "options", "props", "__spreadValues", "joinNodes", "nodes", "separator", "prev", "current"]
}
