{"version":3,"sources":["src/hooks/useConstant.ts","src/hooks/useIsomorphicLayoutEffect.ts","src/hooks/useForceUpdate.ts","src/hooks/useSignal.ts","src/hooks/useComputed.ts","src/hooks/useDeepSignal.ts","src/hooks/useImmediateEffect.ts","src/hooks/useLatest.ts","src/hooks/useOnValueChange.ts","src/hooks/useOnElementChange.ts"],"names":["useRef","useLayoutEffect","useEffect","useState","useCallback","effect","currentValue","flushSync","useMemo","computed","untracked","target"],"mappings":"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","file":"hooks.cjs","sourcesContent":["import {type MutableRefObject, useRef} from 'react';\n\nexport function useConstant<T = any>(initializer: () => T) {\n  const ref = useRef<T>(null) as MutableRefObject<T>;\n\n  if (!ref.current) {\n    ref.current = initializer();\n  }\n\n  return ref.current;\n}\n","import {useEffect, useLayoutEffect} from 'react';\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n  typeof window !== 'undefined' &&\n  typeof window.document !== 'undefined' &&\n  typeof window.document.createElement !== 'undefined';\n\n/**\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\n */\nexport const useIsomorphicLayoutEffect = canUseDOM\n  ? useLayoutEffect\n  : useEffect;\n","import {useCallback, useState} from 'react';\n\nexport function useForceUpdate() {\n  const setState = useState(0)[1];\n\n  return useCallback(() => {\n    setState((value) => value + 1);\n  }, [setState]);\n}\n","import {useRef, useState} from 'react';\nimport {flushSync} from 'react-dom';\nimport {effect, Signal} from '@dnd-kit/state';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\nimport {useForceUpdate} from './useForceUpdate.ts';\n\n/** Trigger a re-render when reading a signal. */\nexport function useSignal<T = any>(signal: Signal<T>, sync = false) {\n  const previous = useRef(signal.peek());\n  const read = useRef(false);\n  const forceUpdate = useForceUpdate();\n\n  useIsomorphicLayoutEffect(\n    () =>\n      effect(() => {\n        const previousValue = previous.current;\n        const currentValue = signal.value;\n\n        if (previousValue !== currentValue) {\n          previous.current = currentValue;\n\n          if (!read.current) return;\n\n          if (sync) {\n            flushSync(forceUpdate);\n          } else {\n            forceUpdate();\n          }\n        }\n      }),\n    [signal, sync, forceUpdate]\n  );\n\n  return {\n    get value() {\n      read.current = true;\n\n      return signal.peek();\n    },\n  };\n}\n","import {useMemo, useRef} from 'react';\nimport {computed} from '@dnd-kit/state';\n\nimport {useSignal} from './useSignal.ts';\n\nexport function useComputed<T = any>(\n  compute: () => T,\n  dependencies: any[] = [],\n  sync = false\n) {\n  const $compute = useRef(compute);\n  $compute.current = compute;\n\n  return useSignal(\n    useMemo(() => computed(() => $compute.current()), dependencies),\n    sync\n  );\n}\n","import {useMemo, useRef} from 'react';\nimport {flushSync} from 'react-dom';\nimport {effect, untracked} from '@dnd-kit/state';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\nimport {useForceUpdate} from './useForceUpdate.ts';\n\n/** Trigger a re-render when reading signal properties of an object. */\nexport function useDeepSignal<T extends object | null | undefined>(\n  target: T,\n  synchronous?: (property: keyof T, oldValue: any, newValue: any) => boolean\n): T {\n  const tracked = useRef(new Map<string | symbol, any>());\n  const forceUpdate = useForceUpdate();\n\n  useIsomorphicLayoutEffect(() => {\n    if (!target) {\n      tracked.current.clear();\n      return;\n    }\n\n    return effect(() => {\n      let stale = false;\n      let sync = false;\n\n      for (const entry of tracked.current) {\n        const [key] = entry;\n        const value = untracked(() => entry[1]);\n        const latestValue = (target as any)[key];\n\n        if (value !== latestValue) {\n          stale = true;\n          tracked.current.set(key, latestValue);\n          sync = synchronous?.(key as keyof T, value, latestValue) ?? false;\n        }\n      }\n\n      if (stale) {\n        if (sync) {\n          // Defer flushSync to a microtask to avoid calling it from within\n          // a React lifecycle method (e.g. useEffect batch), which happens when\n          // signal updates are triggered synchronously from a React effect\n          queueMicrotask(() => flushSync(forceUpdate));\n        } else {\n          forceUpdate();\n        }\n      }\n    });\n  }, [target]);\n\n  return useMemo(\n    () =>\n      target\n        ? new Proxy(target, {\n            get(target, key) {\n              const value = (target as any)[key];\n\n              tracked.current.set(key, value);\n\n              return value;\n            },\n          })\n        : target,\n    [target]\n  );\n}\n","import type {DependencyList, EffectCallback} from 'react';\n\nexport function useImmediateEffect(\n  callback: EffectCallback,\n  _?: DependencyList\n) {\n  callback();\n}\n","import {useRef} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\n\nexport function useLatest<T>(value: T) {\n  const valueRef = useRef<T | undefined>(value);\n\n  useIsomorphicLayoutEffect(() => {\n    valueRef.current = value;\n  }, [value]);\n\n  return valueRef;\n}\n","import {useRef, useEffect} from 'react';\n\nexport function useOnValueChange<T>(\n  value: T,\n  onChange: (value: T, oldValue: T) => void,\n  effect = useEffect,\n  compare = Object.is\n) {\n  const tracked = useRef<T>(value);\n\n  effect(() => {\n    const oldValue = tracked.current;\n\n    if (!compare(value, oldValue)) {\n      tracked.current = value;\n      onChange(value, oldValue);\n    }\n  }, [onChange, value]);\n}\n","import {useRef} from 'react';\nimport {currentValue, type RefOrValue} from '@dnd-kit/react/utilities';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\n\nexport function useOnElementChange(\n  value: RefOrValue<Element>,\n  onChange: (value: Element | undefined) => void\n) {\n  const previous = useRef(currentValue(value));\n\n  useIsomorphicLayoutEffect(() => {\n    const current = currentValue(value);\n\n    if (current !== previous.current) {\n      previous.current = current;\n      onChange(current);\n    }\n  });\n}\n"]}