@siberiacancode/reactuse 0.2.31 → 0.2.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +71 -71
  2. package/dist/cjs/helpers/createStore/createStore.cjs +1 -1
  3. package/dist/cjs/helpers/createStore/createStore.cjs.map +1 -1
  4. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
  5. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
  6. package/dist/cjs/hooks/useAsyncEffect/useAsyncEffect.cjs +2 -0
  7. package/dist/cjs/hooks/useAsyncEffect/useAsyncEffect.cjs.map +1 -0
  8. package/dist/cjs/hooks/useControllableState/useControllableState.cjs +2 -0
  9. package/dist/cjs/hooks/useControllableState/useControllableState.cjs.map +1 -0
  10. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs +2 -0
  11. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs.map +1 -0
  12. package/dist/cjs/hooks/useScroll/useScroll.cjs +1 -1
  13. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  14. package/dist/cjs/index.cjs +1 -1
  15. package/dist/esm/helpers/createStore/createStore.mjs +4 -4
  16. package/dist/esm/helpers/createStore/createStore.mjs.map +1 -1
  17. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +5 -7
  18. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  19. package/dist/esm/hooks/useAsyncEffect/useAsyncEffect.mjs +10 -0
  20. package/dist/esm/hooks/useAsyncEffect/useAsyncEffect.mjs.map +1 -0
  21. package/dist/esm/hooks/useControllableState/useControllableState.mjs +17 -0
  22. package/dist/esm/hooks/useControllableState/useControllableState.mjs.map +1 -0
  23. package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs +56 -0
  24. package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs.map +1 -0
  25. package/dist/esm/hooks/useScroll/useScroll.mjs +53 -35
  26. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  27. package/dist/esm/index.mjs +270 -264
  28. package/dist/esm/index.mjs.map +1 -1
  29. package/dist/types/hooks/elements.d.ts +1 -0
  30. package/dist/types/hooks/lifecycle.d.ts +1 -0
  31. package/dist/types/hooks/state.d.ts +1 -0
  32. package/dist/types/hooks/useActiveElement/useActiveElement.d.ts +5 -3
  33. package/dist/types/hooks/useAsyncEffect/useAsyncEffect.d.ts +14 -0
  34. package/dist/types/hooks/useControllableState/useControllableState.d.ts +34 -0
  35. package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +42 -0
  36. package/dist/types/hooks/useScroll/useScroll.d.ts +33 -14
  37. package/package.json +89 -89
package/README.md CHANGED
@@ -1,71 +1,71 @@
1
- <div align="center">
2
- <a href="https://siberiacancode.github.io/reactuse/">
3
- <picture>
4
- <img alt="React Use logo" src="https://siberiacancode.github.io/reactuse/logo.svg" height="128">
5
- </picture>
6
- </a>
7
- <h1>React Use</h1>
8
-
9
- <a href="https://www.npmjs.com/package/@siberiacancode/reactuse"><img alt="NPM version" src="https://img.shields.io/npm/v/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
10
- <a href="https://github.com/siberiacancode/reactuse/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
11
- <a href="https://github.com/siberiacancode/reactuse/discussions"><img alt="Join the community on GitHub" src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?style=for-the-badge&logo=React&labelColor=000000&logoWidth=20"></a>
12
-
13
- </div>
14
-
15
- React Use delivers **production-ready hooks** that solve real-world problems. Built with **TypeScript-first** approach, **SSR compatibility**, and **tree-shaking optimization** - everything you need to build modern React applications. Improve your react applications with our library 📦 designed for comfort and speed.
16
-
17
- ## Documentation
18
-
19
- Visit https://siberiacancode.github.io/reactuse to view the full documentation.
20
-
21
- ## Getting Started
22
-
23
- ```bash
24
- npm install @siberiacancode/reactuse
25
- ```
26
-
27
- ```tsx
28
- import { useCounter } from "@siberiacancode/reactuse";
29
-
30
- const App = () => {
31
- const counter = useCounter(0);
32
-
33
- return (
34
- <div>
35
- <h1>Count: {counter.value}</h1>
36
- <button onClick={() => counter.inc()}>+1</button>
37
- <button onClick={() => counter.dec()}>-1</button>
38
- </div>
39
- );
40
- };
41
- ```
42
-
43
- ## CLI installation
44
-
45
- Use the CLI to add hooks to your project with [useverse](https://www.npmjs.com/package/useverse).
46
-
47
- ```bash
48
- npx useverse@latest init
49
- ```
50
-
51
- ```bash
52
- npx useverse@latest add [hook]
53
- ```
54
-
55
- You will be presented with a list of hooks to choose from:
56
-
57
- ```bash
58
- Which hooks would you like to add? › Space to select. A to toggle all.
59
- Enter to submit.
60
-
61
- ◯ useActiveElement
62
- ◯ useAsync
63
- ◯ useBattery
64
- ◯ useBluetooth
65
- ◯ useBoolean
66
- ◯ useBreakpoints
67
- ◯ useBrowserLanguage
68
- ◯ useClickOutside
69
- ◯ useClipboard
70
- ◯ useConst
71
- ```
1
+ <div align="center">
2
+ <a href="https://siberiacancode.github.io/reactuse/">
3
+ <picture>
4
+ <img alt="React Use logo" src="https://siberiacancode.github.io/reactuse/logo.svg" height="128">
5
+ </picture>
6
+ </a>
7
+ <h1>React Use</h1>
8
+
9
+ <a href="https://www.npmjs.com/package/@siberiacancode/reactuse"><img alt="NPM version" src="https://img.shields.io/npm/v/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
10
+ <a href="https://github.com/siberiacancode/reactuse/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
11
+ <a href="https://github.com/siberiacancode/reactuse/discussions"><img alt="Join the community on GitHub" src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?style=for-the-badge&logo=React&labelColor=000000&logoWidth=20"></a>
12
+
13
+ </div>
14
+
15
+ React Use delivers **production-ready hooks** that solve real-world problems. Built with **TypeScript-first** approach, **SSR compatibility**, and **tree-shaking optimization** - everything you need to build modern React applications. Improve your react applications with our library 📦 designed for comfort and speed.
16
+
17
+ ## Documentation
18
+
19
+ Visit https://siberiacancode.github.io/reactuse to view the full documentation.
20
+
21
+ ## Getting Started
22
+
23
+ ```bash
24
+ npm install @siberiacancode/reactuse
25
+ ```
26
+
27
+ ```tsx
28
+ import { useCounter } from '@siberiacancode/reactuse';
29
+
30
+ const App = () => {
31
+ const counter = useCounter(0);
32
+
33
+ return (
34
+ <div>
35
+ <h1>Count: {counter.value}</h1>
36
+ <button onClick={() => counter.inc()}>+1</button>
37
+ <button onClick={() => counter.dec()}>-1</button>
38
+ </div>
39
+ );
40
+ };
41
+ ```
42
+
43
+ ## CLI installation
44
+
45
+ Use the CLI to add hooks to your project with [useverse](https://www.npmjs.com/package/useverse).
46
+
47
+ ```bash
48
+ npx useverse@latest init
49
+ ```
50
+
51
+ ```bash
52
+ npx useverse@latest add [hook]
53
+ ```
54
+
55
+ You will be presented with a list of hooks to choose from:
56
+
57
+ ```bash
58
+ Which hooks would you like to add? › Space to select. A to toggle all.
59
+ Enter to submit.
60
+
61
+ ◯ useActiveElement
62
+ ◯ useAsync
63
+ ◯ useBattery
64
+ ◯ useBluetooth
65
+ ◯ useBoolean
66
+ ◯ useBreakpoints
67
+ ◯ useBrowserLanguage
68
+ ◯ useClickOutside
69
+ ◯ useClipboard
70
+ ◯ useConst
71
+ ```
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react"),l=o=>{let e;const r=new Set,c=t=>{const n=typeof t=="function"?t(e):t;if(!Object.is(n,e)){const a=e;e=typeof n!="object"||n===null?n:Object.assign({},e,n),r.forEach(f=>f(e,a))}},u=t=>(r.add(t),()=>r.delete(t)),s=()=>e,i=()=>e;typeof o=="function"?e=o(c,s):e=o;function S(t){return b.useSyncExternalStore(u,()=>t?t(s()):s(),()=>t?t(i()):i())}return{set:c,get:s,use:S,subscribe:u}};exports.createStore=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),b=s=>{let e;const o=new Set,c=t=>{const n=typeof t=="function"?t(e):t;if(!Object.is(n,e)){const S=e;e=typeof n!="object"||n===null||Array.isArray(n)?n:Object.assign({},e,n),o.forEach(f=>f(e,S))}},u=t=>(o.add(t),()=>o.delete(t)),r=()=>e,i=()=>e;typeof s=="function"?e=s(c,r):e=s;function a(t){return y.useSyncExternalStore(u,()=>t?t(r()):r(),()=>t?t(i()):i())}return{set:c,get:r,use:a,subscribe:u}};exports.createStore=b;
2
2
  //# sourceMappingURL=createStore.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createStore.cjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n * @usage medium\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state =\n typeof nextState !== 'object' || nextState === null\n ? nextState\n : Object.assign({}, state, nextState);\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":"yGAkCaA,EAAsBC,GAA6C,CAC9E,IAAIC,EACJ,MAAMC,MAA2C,IAE3CC,EAAyCC,GAAkC,CAC/E,MAAMC,EAAY,OAAOD,GAAW,WAAaA,EAAOH,CAAK,EAAIG,EAEjE,GAAI,CAAC,OAAO,GAAGC,EAAWJ,CAAK,EAAG,CAChC,MAAMK,EAAYL,EAClBA,EACE,OAAOI,GAAc,UAAYA,IAAc,KAC3CA,EACA,OAAO,OAAO,GAAIJ,EAAOI,CAAS,EAExCH,EAAU,QAASK,GAAaA,EAASN,EAAOK,CAAS,CAAC,CAAA,CAC5D,EAGIE,EAAaD,IACjBL,EAAU,IAAIK,CAAQ,EAEf,IAAML,EAAU,OAAOK,CAAQ,GAGlCE,EAAW,IAAMR,EACjBS,EAAkB,IAAMT,EAE1B,OAAOD,GAAgB,WACzBC,EAASD,EAAoCG,EAAUM,CAAQ,EAE/DR,EAAQD,EAKV,SAASW,EAAmBC,EAAyD,CACnF,OAAOC,EAAAA,qBACLL,EACA,IAAOI,EAAWA,EAASH,EAAA,CAAU,EAAIA,EAAA,EACzC,IAAOG,EAAWA,EAASF,EAAA,CAAiB,EAAIA,EAAA,CAAgB,CAClE,CAGF,MAAO,CACL,IAAKP,EACL,IAAKM,EACL,IAAKE,EACL,UAAAH,CAAA,CAEJ"}
1
+ {"version":3,"file":"createStore.cjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n * @usage medium\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state = (\n typeof nextState !== 'object' || nextState === null || Array.isArray(nextState)\n ? nextState\n : Object.assign({}, state, nextState)\n ) as Value;\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":"yGAkCaA,EAAsBC,GAA6C,CAC9E,IAAIC,EACJ,MAAMC,MAA2C,IAE3CC,EAAyCC,GAAkC,CAC/E,MAAMC,EAAY,OAAOD,GAAW,WAAaA,EAAOH,CAAK,EAAIG,EAEjE,GAAI,CAAC,OAAO,GAAGC,EAAWJ,CAAK,EAAG,CAChC,MAAMK,EAAYL,EAClBA,EACE,OAAOI,GAAc,UAAYA,IAAc,MAAQ,MAAM,QAAQA,CAAS,EAC1EA,EACA,OAAO,OAAO,CAAA,EAAIJ,EAAOI,CAAS,EAGxCH,EAAU,QAASK,GAAaA,EAASN,EAAOK,CAAS,CAAC,CAAA,CAC5D,EAGIE,EAAaD,IACjBL,EAAU,IAAIK,CAAQ,EAEf,IAAML,EAAU,OAAOK,CAAQ,GAGlCE,EAAW,IAAMR,EACjBS,EAAkB,IAAMT,EAE1B,OAAOD,GAAgB,WACzBC,EAASD,EAAoCG,EAAUM,CAAQ,EAE/DR,EAAQD,EAKV,SAASW,EAAmBC,EAAyD,CACnF,OAAOC,EAAAA,qBACLL,EACA,IAAOI,EAAWA,EAASH,EAAA,CAAU,EAAIA,EAAA,EACzC,IAAOG,EAAWA,EAASF,EAAA,CAAiB,EAAIA,EAAA,CAAgB,CAClE,CAGF,MAAO,CACL,IAAKP,EACL,IAAKM,EACL,IAAKE,EACL,UAAAH,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),d=require("../useRefState/useRefState.cjs"),f=require("../../utils/helpers/isTarget.cjs"),m=require("../../utils/helpers/getElement.cjs"),E=(...s)=>{const r=f.isTarget(s[0])?s[0]:void 0,[o,c]=l.useState(null),u=d.useRefState(window);return l.useEffect(()=>{const e=r?m.getElement(r):u.current;if(!e)return;const i=new MutationObserver(v=>{v.filter(t=>t.removedNodes.length).map(t=>Array.from(t.removedNodes)).flat().forEach(t=>{c(a=>t===a?document.activeElement:a)})});i.observe(e,{childList:!0,subtree:!0});const n=()=>c(document?.activeElement);return e.addEventListener("focus",n,!0),e.addEventListener("blur",n,!0),()=>{i.disconnect(),e.removeEventListener("focus",n,!0),e.removeEventListener("blur",n,!0)}},[r,u.state]),r?o:{ref:u,value:o}};exports.useActiveElement=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),d=require("../useRefState/useRefState.cjs"),f=require("../../utils/helpers/isTarget.cjs"),m=require("../../utils/helpers/getElement.cjs"),E=(...u)=>{const r=f.isTarget(u[0])?u[0]:void 0,[o,c]=l.useState(null),s=d.useRefState();return l.useEffect(()=>{const e=(r?m.getElement(r):s.current)??window,i=new MutationObserver(v=>{v.filter(t=>t.removedNodes.length).map(t=>Array.from(t.removedNodes)).flat().forEach(t=>{c(a=>t===a?document.activeElement:a)})});i.observe(e,{childList:!0,subtree:!0});const n=()=>c(document?.activeElement);return e.addEventListener("focus",n,!0),e.addEventListener("blur",n,!0),()=>{i.disconnect(),e.removeEventListener("focus",n,!0),e.removeEventListener("blur",n,!0)}},[r,s.state]),r?o:{ref:s,value:o}};exports.useActiveElement=E;
2
2
  //# sourceMappingURL=useActiveElement.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveElement.cjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseActiveElement {\n (): HTMLElement | null;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: ActiveElement | null;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): ActiveElement | null;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement) return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true\n });\n\n const onActiveElementChange = () => setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener('focus', onActiveElementChange, true);\n element.addEventListener('blur', onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener('focus', onActiveElementChange, true);\n element.removeEventListener('blur', onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":"mPA6CaA,EAAoB,IAAIC,IAAkB,CACrD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EACrDC,EAAcC,EAAAA,YAAY,MAAM,EAqCtC,OAnCAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAWR,EAASS,EAAAA,WAAWT,CAAM,EAAIK,EAAY,QAE3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAW,IAAI,iBAAkBC,GAAc,CACnDA,EACG,OAAQC,GAAaA,EAAS,aAAa,MAAM,EACjD,IAAKA,GAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAASC,GAAS,CACjBV,EAAUW,GACJD,IAASC,EAA0B,SAAS,cACzCA,CACR,CAAA,CACF,CAAA,CACJ,EAEDJ,EAAS,QAAQF,EAAS,CACxB,UAAW,GACX,QAAS,EAAA,CACV,EAED,MAAMO,EAAwB,IAAMZ,EAAS,UAAU,aAAmC,EAE1F,OAAAK,EAAQ,iBAAiB,QAASO,EAAuB,EAAI,EAC7DP,EAAQ,iBAAiB,OAAQO,EAAuB,EAAI,EAErD,IAAM,CACXL,EAAS,WAAA,EACTF,EAAQ,oBAAoB,QAASO,EAAuB,EAAI,EAChEP,EAAQ,oBAAoB,OAAQO,EAAuB,EAAI,CAAA,CACjE,EACC,CAACf,EAAQK,EAAY,KAAK,CAAC,EAE1BL,EAAeE,EACZ,CACL,IAAKG,EACL,MAAAH,CAAA,CAEJ"}
1
+ {"version":3,"file":"useActiveElement.cjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport type { HookTarget } from \"@/utils/helpers\";\n\nimport { getElement, isTarget } from \"@/utils/helpers\";\n\nimport type { StateRef } from \"../useRefState/useRefState\";\n\nimport { useRefState } from \"../useRefState/useRefState\";\n\n/** The use active element return type */\nexport type UseActiveElementReturn<\n ActiveElement extends HTMLElement = HTMLElement\n> = ActiveElement | null;\n\nexport interface UseActiveElement {\n (): UseActiveElementReturn;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: UseActiveElementReturn<ActiveElement>;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(\n target: HookTarget\n ): UseActiveElementReturn<ActiveElement>;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as\n | HookTarget\n | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState();\n\n useEffect(() => {\n const element = ((target ? getElement(target) : internalRef.current) ??\n window) as Element;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement)\n return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n });\n\n const onActiveElementChange = () =>\n setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener(\"focus\", onActiveElementChange, true);\n element.addEventListener(\"blur\", onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener(\"focus\", onActiveElementChange, true);\n element.removeEventListener(\"blur\", onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value,\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":"mPAoDaA,EAAoB,IAAIC,IAAkB,CACrD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAI5C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EACrDC,EAAcC,EAAAA,YAAA,EAsCpB,OApCAC,EAAAA,UAAU,IAAM,CACd,MAAMC,GAAYR,EAASS,EAAAA,WAAWT,CAAM,EAAIK,EAAY,UAC1D,OAEIK,EAAW,IAAI,iBAAkBC,GAAc,CACnDA,EACG,OAAQC,GAAaA,EAAS,aAAa,MAAM,EACjD,IAAKA,GAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAASC,GAAS,CACjBV,EAAUW,GACJD,IAASC,EACJ,SAAS,cACXA,CACR,CAAA,CACF,CAAA,CACJ,EAEDJ,EAAS,QAAQF,EAAS,CACxB,UAAW,GACX,QAAS,EAAA,CACV,EAED,MAAMO,EAAwB,IAC5BZ,EAAS,UAAU,aAAmC,EAExD,OAAAK,EAAQ,iBAAiB,QAASO,EAAuB,EAAI,EAC7DP,EAAQ,iBAAiB,OAAQO,EAAuB,EAAI,EAErD,IAAM,CACXL,EAAS,WAAA,EACTF,EAAQ,oBAAoB,QAASO,EAAuB,EAAI,EAChEP,EAAQ,oBAAoB,OAAQO,EAAuB,EAAI,CAAA,CACjE,EACC,CAACf,EAAQK,EAAY,KAAK,CAAC,EAE1BL,EAAeE,EACZ,CACL,IAAKG,EACL,MAAAH,CAAA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),o=(e,t)=>{c.useIsomorphicLayoutEffect(()=>{e()},t)};exports.useAsyncEffect=o;
2
+ //# sourceMappingURL=useAsyncEffect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncEffect.cjs","sources":["../../../../src/hooks/useAsyncEffect/useAsyncEffect.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\n\n/**\n * @name useAsyncEffect\n * @description – Hook that triggers the effect callback on updates\n * @category Lifecycle\n * @usage medium\n\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useAsyncEffect(async () => console.log(\"effect runs on updates\"), deps);\n */\nexport const useAsyncEffect = (сallback: () => Promise<any>, deps?: DependencyList): void => {\n useIsomorphicLayoutEffect(() => {\n сallback();\n }, deps);\n};\n"],"names":["useAsyncEffect","сallback","deps","useIsomorphicLayoutEffect"],"mappings":"8JAgBaA,EAAiB,CAACC,EAA8BC,IAAgC,CAC3FC,EAAAA,0BAA0B,IAAM,CAC9BF,EAAA,CAAS,EACRC,CAAI,CACT"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react");function C(u){const{value:r,initialValue:c,onChange:a}=u,e=r!==void 0,[i,f]=o.useState(c),l=o.useRef(a);l.current=a;const t=e?r:i,S=o.useCallback(n=>{const s=typeof n=="function"?n(t):n;e||f(s),l.current?.(s)},[t,e]);return[t,S,e]}exports.useControllableState=C;
2
+ //# sourceMappingURL=useControllableState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.cjs","sources":["../../../../src/hooks/useControllableState/useControllableState.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\n/** The use controllable state options type */\nexport interface UseControllableStateOptions<Value> {\n /** The initial value for uncontrolled state */\n initialValue?: Value;\n /** The controlled value */\n value?: Value;\n /** The onChange callback */\n onChange?: (value: Value) => void;\n}\n\n/** The use controllable state return type */\nexport type UseControllableStateReturn<Value> = [\n /** Current value */\n value: Value,\n /** Setter function that works with both controlled and uncontrolled state */\n setValue: (nextValue: ((prevValue: Value) => Value) | Value) => void,\n /** Whether the state is controlled */\n isControlled: boolean\n];\n\n/**\n * @name useControllableState\n * @description - Hook that manages both controlled and uncontrolled state patterns\n * @category State\n * @usage medium\n *\n * @template Value The type of the state value\n * @param {Value} [options.value] The controlled value. When provided, the component becomes controlled\n * @param {Value} [options.initialValue] The initial value for uncontrolled state\n * @param {(value: Value) => void} [options.onChange] The callback function called when the state changes\n * @returns {UseControllableStateReturn<Value>} A tuple containing the current value, setter function, and controlled flag\n *\n * @example\n * const [value, setValue, isControlled] = useControllableState({ initialValue: 'initial' });\n */\nexport function useControllableState<Value>(\n options: UseControllableStateOptions<Value>\n): UseControllableStateReturn<Value> {\n const { value, initialValue, onChange } = options;\n const isControlled = value !== undefined;\n\n const [internalState, setInternalState] = useState<Value>(initialValue as Value);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const currentValue = isControlled ? value : internalState;\n\n const setValue = useCallback(\n (nextValue: ((prevValue: Value) => Value) | Value) => {\n const resolvedValue =\n typeof nextValue === 'function'\n ? (nextValue as (prevValue: Value) => Value)(currentValue)\n : nextValue;\n\n if (!isControlled) setInternalState(resolvedValue);\n\n onChangeRef.current?.(resolvedValue);\n },\n [currentValue, isControlled]\n );\n\n return [currentValue, setValue, isControlled];\n}\n"],"names":["useControllableState","options","value","initialValue","onChange","isControlled","internalState","setInternalState","useState","onChangeRef","useRef","currentValue","setValue","useCallback","nextValue","resolvedValue"],"mappings":"yGAqCO,SAASA,EACdC,EACmC,CACnC,KAAM,CAAE,MAAAC,EAAO,aAAAC,EAAc,SAAAC,CAAA,EAAaH,EACpCI,EAAeH,IAAU,OAEzB,CAACI,EAAeC,CAAgB,EAAIC,EAAAA,SAAgBL,CAAqB,EAEzEM,EAAcC,EAAAA,OAAON,CAAQ,EACnCK,EAAY,QAAUL,EAEtB,MAAMO,EAAeN,EAAeH,EAAQI,EAEtCM,EAAWC,EAAAA,YACdC,GAAqD,CACpD,MAAMC,EACJ,OAAOD,GAAc,WAChBA,EAA0CH,CAAY,EACvDG,EAEDT,GAAcE,EAAiBQ,CAAa,EAEjDN,EAAY,UAAUM,CAAa,CAAA,EAErC,CAACJ,EAAcN,CAAY,CAAA,EAG7B,MAAO,CAACM,EAAcC,EAAUP,CAAY,CAC9C"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react"),h=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),v=require("../useRefState/useRefState.cjs"),S=require("../../utils/helpers/isTarget.cjs"),T=require("../../utils/helpers/getElement.cjs"),q=["input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(","),y=e=>Array.from(e.querySelectorAll(q)).filter(o=>{const n=o;return n.tabIndex!==-1&&!n.hidden&&n.style.display!=="none"}),L=e=>{const t=e.querySelector("[data-autofocus]");if(t)return t.focus();const o=y(e);o.length>0&&o[0].focus()},p=(...e)=>{const t=S.isTarget(e[0])?e[0]:void 0,o=t?e[1]:e[0],[n,c]=g.useState(o),u=v.useRefState(),i=()=>c(!0),l=()=>c(!1),a=()=>c(s=>!s);return h.useIsomorphicLayoutEffect(()=>{if(!n)return;const s=t?T.getElement(t):u.current;if(!s)return;const f=s;L(f);const d=r=>{if(r.key!=="Tab")return;const[m,...E]=y(f);if(!E.length)return;const b=E.at(-1);r.shiftKey&&document.activeElement===m&&(r.preventDefault(),b.focus()),document.activeElement===b&&(r.preventDefault(),m.focus())};return document.addEventListener("keydown",d),()=>{document.removeEventListener("keydown",d)}},[n,t,u.state]),t?{active:n,enable:i,disable:l,toggle:a}:{active:n,enable:i,disable:l,toggle:a,ref:u}};exports.useFocusTrap=p;
2
+ //# sourceMappingURL=useFocusTrap.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.cjs","sources":["../../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"sourcesContent":["import { useState } from \"react\";\n\nimport type { HookTarget } from \"@/utils/helpers\";\n\nimport { getElement, isTarget } from \"@/utils/helpers\";\n\nimport type { StateRef } from \"../useRefState/useRefState\";\n\nimport { useIsomorphicLayoutEffect } from \"../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect\";\nimport { useRefState } from \"../useRefState/useRefState\";\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"a[href]\",\n \"area[href]\",\n \"summary\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"audio[controls]\",\n \"video[controls]\",\n \"[contenteditable]\",\n '[tabindex]:not([tabindex^=\"-\"])',\n].join(\",\");\n\nconst getFocusableElements = (element: HTMLElement): HTMLElement[] => {\n const elements = Array.from(\n element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)\n );\n return elements.filter((el) => {\n const htmlEl = el as HTMLElement;\n return (\n htmlEl.tabIndex !== -1 &&\n !htmlEl.hidden &&\n htmlEl.style.display !== \"none\"\n );\n }) as HTMLElement[];\n};\n\nconst focusElement = (element: HTMLElement) => {\n const autofocusElement = element.querySelector(\n \"[data-autofocus]\"\n ) as HTMLElement;\n if (autofocusElement) return autofocusElement.focus();\n\n const focusableElements = getFocusableElements(element);\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n};\n\n/** The use focus trap return type */\nexport interface UseFocusTrapReturn {\n /** Whether focus trap is active */\n active: boolean;\n /** Disable focus trap */\n disable: () => void;\n /** Enable focus trap */\n enable: () => void;\n /** Toggle focus trap */\n toggle: () => void;\n}\n\nexport interface UseFocusTrap {\n (target: HookTarget, active?: boolean): UseFocusTrapReturn;\n\n <Target extends HTMLElement>(\n active?: boolean,\n target?: never\n ): UseFocusTrapReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useFocusTrap\n * @description - Hook that traps focus within a given element\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} target The target element for focus trap\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn} Object with control methods and state\n *\n * @example\n * const { active, disable, toggle, enable } = useFocusTrap(ref, true);\n *\n * @overload\n * @template Target The target element type\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with ref and controls\n *\n * @example\n * const { ref, active, disable, toggle, enable } = useFocusTrap(true);\n */\nexport const useFocusTrap = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as\n | HookTarget\n | undefined;\n const initialActive = target ? params[1] : params[0];\n\n const [active, setActive] = useState(initialActive);\n const internalRef = useRefState<HTMLElement>();\n\n const enable = () => setActive(true);\n const disable = () => setActive(false);\n const toggle = () => setActive((prevActive: boolean) => !prevActive);\n\n useIsomorphicLayoutEffect(() => {\n if (!active) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const htmlElement = element as HTMLElement;\n focusElement(htmlElement);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n\n const [firstElement, ...restElements] = getFocusableElements(htmlElement);\n if (!restElements.length) return;\n\n const lastElement = restElements.at(-1)!;\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [active, target, internalRef.state]);\n\n if (target) return { active, enable, disable, toggle };\n return { active, enable, disable, toggle, ref: internalRef };\n}) as UseFocusTrap;\n"],"names":["FOCUSABLE_ELEMENTS_SELECTOR","getFocusableElements","element","el","htmlEl","focusElement","autofocusElement","focusableElements","useFocusTrap","params","target","isTarget","initialActive","active","setActive","useState","internalRef","useRefState","enable","disable","toggle","prevActive","useIsomorphicLayoutEffect","getElement","htmlElement","onKeyDown","event","firstElement","restElements","lastElement"],"mappings":"2TAWMA,EAA8B,CAClC,wBACA,yBACA,2BACA,yBACA,UACA,aACA,UACA,SACA,SACA,QACA,kBACA,kBACA,oBACA,iCACF,EAAE,KAAK,GAAG,EAEJC,EAAwBC,GACX,MAAM,KACrBA,EAAQ,iBAAiBF,CAA2B,CAAA,EAEtC,OAAQG,GAAO,CAC7B,MAAMC,EAASD,EACf,OACEC,EAAO,WAAa,IACpB,CAACA,EAAO,QACRA,EAAO,MAAM,UAAY,MAAA,CAE5B,EAGGC,EAAgBH,GAAyB,CAC7C,MAAMI,EAAmBJ,EAAQ,cAC/B,kBAAA,EAEF,GAAII,EAAkB,OAAOA,EAAiB,MAAA,EAE9C,MAAMC,EAAoBN,EAAqBC,CAAO,EAClDK,EAAkB,OAAS,GAC7BA,EAAkB,CAAC,EAAE,MAAA,CAEzB,EA+CaC,EAAgB,IAAIC,IAAkB,CACjD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,EAAgBF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE7C,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAASH,CAAa,EAC5CI,EAAcC,EAAAA,YAAA,EAEdC,EAAS,IAAMJ,EAAU,EAAI,EAC7BK,EAAU,IAAML,EAAU,EAAK,EAC/BM,EAAS,IAAMN,EAAWO,GAAwB,CAACA,CAAU,EAqCnE,OAnCAC,EAAAA,0BAA0B,IAAM,CAC9B,GAAI,CAACT,EAAQ,OAEb,MAAMX,EAAUQ,EAASa,EAAAA,WAAWb,CAAM,EAAIM,EAAY,QAC1D,GAAI,CAACd,EAAS,OAEd,MAAMsB,EAActB,EACpBG,EAAamB,CAAW,EAExB,MAAMC,EAAaC,GAAyB,CAC1C,GAAIA,EAAM,MAAQ,MAAO,OAEzB,KAAM,CAACC,EAAc,GAAGC,CAAY,EAAI3B,EAAqBuB,CAAW,EACxE,GAAI,CAACI,EAAa,OAAQ,OAE1B,MAAMC,EAAcD,EAAa,GAAG,EAAE,EAElCF,EAAM,UAAY,SAAS,gBAAkBC,IAC/CD,EAAM,eAAA,EACNG,EAAY,MAAA,GAGV,SAAS,gBAAkBA,IAC7BH,EAAM,eAAA,EACNC,EAAa,MAAA,EACf,EAGF,gBAAS,iBAAiB,UAAWF,CAAS,EAEvC,IAAM,CACX,SAAS,oBAAoB,UAAWA,CAAS,CAAA,CACnD,EACC,CAACZ,EAAQH,EAAQM,EAAY,KAAK,CAAC,EAElCN,EAAe,CAAE,OAAAG,EAAQ,OAAAK,EAAQ,QAAAC,EAAS,OAAAC,CAAA,EACvC,CAAE,OAAAP,EAAQ,OAAAK,EAAQ,QAAAC,EAAS,OAAAC,EAAQ,IAAKJ,CAAA,CACjD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),H=require("../useRefState/useRefState.cjs"),j=require("../../utils/helpers/isTarget.cjs"),O=require("../../utils/helpers/getElement.cjs"),w=1,P=(...t)=>{const r=j.isTarget(t[0])?t[0]:void 0,d=r?typeof t[1]=="object"?t[1]:{onScroll:t[1]}:typeof t[0]=="object"?t[0]:{onScroll:t[0]},s=H.useRefState(),g=f.useRef(d);g.current=d;const[S,E]=f.useState(!1),l=f.useRef({x:0,y:0});return f.useEffect(()=>{if(!r&&!s.state)return;const i=(r?O.getElement(r):s.current)??window,R=n=>{E(!1),d?.onStop?.(n)},a=n=>{E(!0);const e=n.target===document?n.target.documentElement:n.target,{display:m,flexDirection:y,direction:q}=e.style,v=q==="rtl"?-1:1,c=e.scrollLeft;let o=e.scrollTop;e instanceof Document&&!o&&(o=window.document.body.scrollTop);const u=g.current?.offset,b=c*v<=(u?.left??0),p=c*v+e.clientWidth>=e.scrollWidth-(u?.right??0)-w,T=o<=(u?.top??0),h=o+e.clientHeight>=e.scrollHeight-(u?.bottom??0)-w,x=m==="flex"&&y==="column-reverse",L=m==="flex"&&y==="column-reverse",D={x:c,y:o,directions:{left:c<l.current.x,right:c>l.current.x,top:o<l.current.y,bottom:o>l.current.y},arrived:{left:L?p:b,right:L?b:p,top:x?h:T,bottom:x?T:h}};l.current={x:c,y:o},g.current?.onScroll?.(D,n)};return i.addEventListener("scroll",a),i.addEventListener("scrollend",R),()=>{i.removeEventListener("scroll",a),i.removeEventListener("scrollend",R)}},[r,s.state]),r?S:{ref:s,scrolling:S}};exports.useScroll=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),O=require("../useRefState/useRefState.cjs"),P=require("../../utils/helpers/isTarget.cjs"),V=require("../../utils/helpers/getElement.cjs"),H=1,_=(...o)=>{const c=P.isTarget(o[0])?o[0]:void 0,R=c?typeof o[1]=="object"?o[1]:{onScroll:o[1]}:typeof o[0]=="object"?o[0]:{onScroll:o[0]},g=O.useRefState(),a=d.useRef(R),u=d.useRef(null);a.current=R;const[m,y]=d.useState(!1),f=d.useRef({x:0,y:0});d.useEffect(()=>{if(!c&&!g.state)return;const e=(c?V.getElement(c):g.current)??window;u.current=e;const l=t=>{y(!1),R?.onStop?.(t)},s=t=>{y(!0);const r=t.target===document?t.target.documentElement:t.target,{display:v,flexDirection:T,direction:I}=r.style,h=I==="rtl"?-1:1,i=r.scrollLeft;let n=r.scrollTop;r instanceof Document&&!n&&(n=window.document.body.scrollTop);const S=a.current?.offset,p=i*h<=(S?.left??0),x=i*h+r.clientWidth>=r.scrollWidth-(S?.right??0)-H,L=n<=(S?.top??0),w=n+r.clientHeight>=r.scrollHeight-(S?.bottom??0)-H,q=v==="flex"&&T==="column-reverse",D=v==="flex"&&T==="column-reverse",j={x:i,y:n,directions:{left:i<f.current.x,right:i>f.current.x,top:n<f.current.y,bottom:n>f.current.y},arrived:{left:D?x:p,right:D?p:x,top:q?w:L,bottom:q?L:w}};f.current={x:i,y:n},a.current?.onScroll?.(j,t)};return e.addEventListener("scroll",s),e.addEventListener("scrollend",l),()=>{e.removeEventListener("scroll",s),e.removeEventListener("scrollend",l)}},[c,g.state]);const E=e=>{if(!u.current)return;const{behavior:l,block:s,inline:t}=e??{};u.current.scrollIntoView({behavior:l,block:s,inline:t})},b=e=>{if(!u.current)return;const{x:l,y:s,behavior:t}=e??{};u.current.scrollTo({left:l,top:s,behavior:t})};return c?{scrollIntoView:E,scrollTo:b,scrolling:m}:{ref:g,scrolling:m,scrollIntoView:E,scrollTo:b}};exports.useScroll=_;
2
2
  //# sourceMappingURL=useScroll.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScroll.cjs","sources":["../../../../src/hooks/useScroll/useScroll.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n\nexport interface UseScrollOptions {\n /** The on scroll callback */\n onScroll?: (params: UseScrollCallbackParams, event: Event) => void;\n\n /** The on end scroll callback */\n onStop?: (event: Event) => void;\n\n /** Offset arrived states by x pixels. */\n offset?: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n };\n}\n\nexport interface UseScrollCallbackParams {\n /** The element x position */\n x: number;\n /** The element y position */\n y: number;\n /** State of scroll arrived */\n arrived: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n /** State of scroll direction */\n directions: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n}\n\nexport interface UseScroll {\n (\n target?: HookTarget,\n callback?: (params: UseScrollCallbackParams, event: Event) => void\n ): boolean;\n\n (target?: HookTarget, options?: UseScrollOptions): boolean;\n\n <Target extends Element>(\n callback?: (params: UseScrollCallbackParams, event: Event) => void,\n target?: never\n ): {\n ref: StateRef<Target>;\n scrolling: boolean;\n };\n\n <Target extends Element>(\n options?: UseScrollOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n scrolling: boolean;\n };\n}\n\n/**\n * @name useScroll\n * @description - Hook that allows you to control scroll a element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @template Target The target element\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {boolean} The state of scrolling\n *\n * @example\n * const scrolling = useScroll(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {boolean} The state of scrolling\n *\n * @example\n * const scrolling = useScroll(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {Target} [target=window] The target element to scroll\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\n *\n * @example\n * const { ref, scrolling } = useScroll(options);\n *\n * @overload\n * @template Target The target element\n * @param {Target} target The target element to scroll\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\n *\n * @example\n * const { ref, scrolling } = useScroll(() => console.log('callback'));\n */\nexport const useScroll = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onScroll: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onScroll: params[0] }\n ) as UseScrollOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n const [scrolling, setScrolling] = useState(false);\n const scrollPositionRef = useRef({ x: 0, y: 0 });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n const onScrollEnd = (event: Event) => {\n setScrolling(false);\n options?.onStop?.(event);\n };\n\n const onScroll = (event: Event) => {\n setScrolling(true);\n const target = (\n event.target === document ? (event.target as Document).documentElement : event.target\n ) as HTMLElement;\n\n const { display, flexDirection, direction } = target.style;\n const directionMultiplier = direction === 'rtl' ? -1 : 1;\n\n const scrollLeft = target.scrollLeft;\n let scrollTop = target.scrollTop;\n if (target instanceof Document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\n const offset = internalOptionsRef.current?.offset;\n const left = scrollLeft * directionMultiplier <= (offset?.left ?? 0);\n const right =\n scrollLeft * directionMultiplier + target.clientWidth >=\n target.scrollWidth - (offset?.right ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n const top = scrollTop <= (offset?.top ?? 0);\n const bottom =\n scrollTop + target.clientHeight >=\n target.scrollHeight - (offset?.bottom ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\n const isColumnReverse = display === 'flex' && flexDirection === 'column-reverse';\n const isRowReverse = display === 'flex' && flexDirection === 'column-reverse';\n\n const params = {\n x: scrollLeft,\n y: scrollTop,\n directions: {\n left: scrollLeft < scrollPositionRef.current.x,\n right: scrollLeft > scrollPositionRef.current.x,\n top: scrollTop < scrollPositionRef.current.y,\n bottom: scrollTop > scrollPositionRef.current.y\n },\n arrived: {\n left: isRowReverse ? right : left,\n right: isRowReverse ? left : right,\n top: isColumnReverse ? bottom : top,\n bottom: isColumnReverse ? top : bottom\n }\n };\n\n scrollPositionRef.current = { x: scrollLeft, y: scrollTop };\n internalOptionsRef.current?.onScroll?.(params, event);\n };\n\n element.addEventListener('scroll', onScroll);\n element.addEventListener('scrollend', onScrollEnd);\n\n return () => {\n element.removeEventListener('scroll', onScroll);\n element.removeEventListener('scrollend', onScrollEnd);\n };\n }, [target, internalRef.state]);\n\n if (target) return scrolling;\n return {\n ref: internalRef,\n scrolling\n };\n}) as UseScroll;\n"],"names":["ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","params","target","isTarget","options","internalRef","useRefState","internalOptionsRef","useRef","scrolling","setScrolling","useState","scrollPositionRef","useEffect","element","getElement","onScrollEnd","event","onScroll","display","flexDirection","direction","directionMultiplier","scrollLeft","scrollTop","offset","left","right","top","bottom","isColumnReverse","isRowReverse"],"mappings":"mPAUMA,EAAiC,EAoH1BC,EAAa,IAAIC,IAAkB,CAC9C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EACtB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EAGtBI,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOJ,CAAO,EACzCG,EAAmB,QAAUH,EAE7B,KAAM,CAACK,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1CC,EAAoBJ,EAAAA,OAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAmE/C,OAjEAK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMS,GAAYZ,EAASa,EAAAA,WAAWb,CAAM,EAAIG,EAAY,UAAwB,OAE9EW,EAAeC,GAAiB,CACpCP,EAAa,EAAK,EAClBN,GAAS,SAASa,CAAK,CAAA,EAGnBC,EAAYD,GAAiB,CACjCP,EAAa,EAAI,EACjB,MAAMR,EACJe,EAAM,SAAW,SAAYA,EAAM,OAAoB,gBAAkBA,EAAM,OAG3E,CAAE,QAAAE,EAAS,cAAAC,EAAe,UAAAC,CAAA,EAAcnB,EAAO,MAC/CoB,EAAsBD,IAAc,MAAQ,GAAK,EAEjDE,EAAarB,EAAO,WAC1B,IAAIsB,EAAYtB,EAAO,UACnBA,aAAkB,UAAY,CAACsB,IAAWA,EAAY,OAAO,SAAS,KAAK,WAE/E,MAAMC,EAASlB,EAAmB,SAAS,OACrCmB,EAAOH,EAAaD,IAAwBG,GAAQ,MAAQ,GAC5DE,EACJJ,EAAaD,EAAsBpB,EAAO,aAC1CA,EAAO,aAAeuB,GAAQ,OAAS,GAAK1B,EACxC6B,EAAMJ,IAAcC,GAAQ,KAAO,GACnCI,EACJL,EAAYtB,EAAO,cACnBA,EAAO,cAAgBuB,GAAQ,QAAU,GAAK1B,EAE1C+B,EAAkBX,IAAY,QAAUC,IAAkB,iBAC1DW,EAAeZ,IAAY,QAAUC,IAAkB,iBAEvDnB,EAAS,CACb,EAAGsB,EACH,EAAGC,EACH,WAAY,CACV,KAAMD,EAAaX,EAAkB,QAAQ,EAC7C,MAAOW,EAAaX,EAAkB,QAAQ,EAC9C,IAAKY,EAAYZ,EAAkB,QAAQ,EAC3C,OAAQY,EAAYZ,EAAkB,QAAQ,CAAA,EAEhD,QAAS,CACP,KAAMmB,EAAeJ,EAAQD,EAC7B,MAAOK,EAAeL,EAAOC,EAC7B,IAAKG,EAAkBD,EAASD,EAChC,OAAQE,EAAkBF,EAAMC,CAAA,CAClC,EAGFjB,EAAkB,QAAU,CAAE,EAAGW,EAAY,EAAGC,CAAA,EAChDjB,EAAmB,SAAS,WAAWN,EAAQgB,CAAK,CAAA,EAGtD,OAAAH,EAAQ,iBAAiB,SAAUI,CAAQ,EAC3CJ,EAAQ,iBAAiB,YAAaE,CAAW,EAE1C,IAAM,CACXF,EAAQ,oBAAoB,SAAUI,CAAQ,EAC9CJ,EAAQ,oBAAoB,YAAaE,CAAW,CAAA,CACtD,EACC,CAACd,EAAQG,EAAY,KAAK,CAAC,EAE1BH,EAAeO,EACZ,CACL,IAAKJ,EACL,UAAAI,CAAA,CAEJ"}
1
+ {"version":3,"file":"useScroll.cjs","sources":["../../../../src/hooks/useScroll/useScroll.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n\nexport interface UseScrollOptions {\n /** The on scroll callback */\n onScroll?: (params: UseScrollCallbackParams, event: Event) => void;\n\n /** The on end scroll callback */\n onStop?: (event: Event) => void;\n\n /** Offset arrived states by x pixels. */\n offset?: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n };\n}\n\nexport interface UseScrollCallbackParams {\n /** The element x position */\n x: number;\n /** The element y position */\n y: number;\n /** State of scroll arrived */\n arrived: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n /** State of scroll direction */\n directions: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n}\n\n/** The scroll into view params type */\nexport interface ScrollIntoViewParams {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n}\n/** The scroll to params type */\nexport interface ScrollToParams {\n behavior?: ScrollBehavior;\n x: number;\n y: number;\n}\n\n/** The use scroll return type */\nexport interface UseScrollReturn {\n /** The state of scrolling */\n scrolling: boolean;\n /** Function to scroll element into view */\n scrollIntoView: (params?: ScrollIntoViewParams) => void;\n /** Function to scroll element to a specific position */\n scrollTo: (params?: ScrollToParams) => void;\n}\n\nexport interface UseScroll {\n (\n target?: HookTarget,\n callback?: (params: UseScrollCallbackParams, event: Event) => void\n ): UseScrollReturn;\n\n (target?: HookTarget, options?: UseScrollOptions): UseScrollReturn;\n\n <Target extends Element>(\n callback?: (params: UseScrollCallbackParams, event: Event) => void,\n target?: never\n ): UseScrollReturn & { ref: StateRef<Target> };\n\n <Target extends Element>(\n options?: UseScrollOptions,\n target?: never\n ): UseScrollReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useScroll\n * @description - Hook that allows you to control scroll a element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @template Target The target element\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {UseScrollReturn} The state of scrolling\n *\n * @example\n * const { scrolling, scrollIntoView, scrollTo} = useScroll(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {UseScrollReturn} The state of scrolling\n *\n * @example\n * const { scrolling, scrollIntoView, scrollTo} = useScroll(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {Target} [target=window] The target element to scroll\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {UseScrollReturn & { ref: StateRef<Target> }} The state of scrolling\n *\n * @example\n * const { ref, scrolling, scrollIntoView, scrollTo} = useScroll(options);\n *\n * @overload\n * @template Target The target element\n * @param {Target} target The target element to scroll\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {UseScrollReturn & { ref: StateRef<Target> }} The state of scrolling\n *\n * @example\n * const { ref, scrolling, scrollIntoView, scrollTo} = useScroll(() => console.log('callback'));\n */\nexport const useScroll = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onScroll: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onScroll: params[0] }\n ) as UseScrollOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n const elementRef = useRef<Element>(null);\n internalOptionsRef.current = options;\n\n const [scrolling, setScrolling] = useState(false);\n const scrollPositionRef = useRef({ x: 0, y: 0 });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n elementRef.current = element;\n\n const onScrollEnd = (event: Event) => {\n setScrolling(false);\n options?.onStop?.(event);\n };\n\n const onScroll = (event: Event) => {\n setScrolling(true);\n const target = (\n event.target === document ? (event.target as Document).documentElement : event.target\n ) as HTMLElement;\n\n const { display, flexDirection, direction } = target.style;\n const directionMultiplier = direction === 'rtl' ? -1 : 1;\n\n const scrollLeft = target.scrollLeft;\n let scrollTop = target.scrollTop;\n if (target instanceof Document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\n const offset = internalOptionsRef.current?.offset;\n const left = scrollLeft * directionMultiplier <= (offset?.left ?? 0);\n const right =\n scrollLeft * directionMultiplier + target.clientWidth >=\n target.scrollWidth - (offset?.right ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n const top = scrollTop <= (offset?.top ?? 0);\n const bottom =\n scrollTop + target.clientHeight >=\n target.scrollHeight - (offset?.bottom ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\n const isColumnReverse = display === 'flex' && flexDirection === 'column-reverse';\n const isRowReverse = display === 'flex' && flexDirection === 'column-reverse';\n\n const params = {\n x: scrollLeft,\n y: scrollTop,\n directions: {\n left: scrollLeft < scrollPositionRef.current.x,\n right: scrollLeft > scrollPositionRef.current.x,\n top: scrollTop < scrollPositionRef.current.y,\n bottom: scrollTop > scrollPositionRef.current.y\n },\n arrived: {\n left: isRowReverse ? right : left,\n right: isRowReverse ? left : right,\n top: isColumnReverse ? bottom : top,\n bottom: isColumnReverse ? top : bottom\n }\n };\n\n scrollPositionRef.current = { x: scrollLeft, y: scrollTop };\n internalOptionsRef.current?.onScroll?.(params, event);\n };\n\n element.addEventListener('scroll', onScroll);\n element.addEventListener('scrollend', onScrollEnd);\n\n return () => {\n element.removeEventListener('scroll', onScroll);\n element.removeEventListener('scrollend', onScrollEnd);\n };\n }, [target, internalRef.state]);\n\n const scrollIntoView = (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => {\n if (!elementRef.current) return;\n\n const { behavior, block, inline } = params ?? {};\n\n elementRef.current.scrollIntoView({\n behavior,\n block,\n inline\n });\n };\n\n const scrollTo = (params?: { x: number; y: number; behavior?: ScrollBehavior }) => {\n if (!elementRef.current) return;\n\n const { x, y, behavior } = params ?? {};\n\n elementRef.current.scrollTo({ left: x, top: y, behavior });\n };\n\n if (target) return { scrollIntoView, scrollTo, scrolling };\n return {\n ref: internalRef,\n scrolling,\n scrollIntoView,\n scrollTo\n };\n}) as UseScroll;\n"],"names":["ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","params","target","isTarget","options","internalRef","useRefState","internalOptionsRef","useRef","elementRef","scrolling","setScrolling","useState","scrollPositionRef","useEffect","element","getElement","onScrollEnd","event","onScroll","display","flexDirection","direction","directionMultiplier","scrollLeft","scrollTop","offset","left","right","top","bottom","isColumnReverse","isRowReverse","scrollIntoView","behavior","block","inline","scrollTo","x","y"],"mappings":"mPAUMA,EAAiC,EAuI1BC,EAAa,IAAIC,IAAkB,CAC9C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EACtB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EAGtBI,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOJ,CAAO,EACnCK,EAAaD,EAAAA,OAAgB,IAAI,EACvCD,EAAmB,QAAUH,EAE7B,KAAM,CAACM,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1CC,EAAoBL,EAAAA,OAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAE/CM,EAAAA,UAAU,IAAM,CACd,GAAI,CAACZ,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMU,GAAYb,EAASc,EAAAA,WAAWd,CAAM,EAAIG,EAAY,UAAwB,OAEpFI,EAAW,QAAUM,EAErB,MAAME,EAAeC,GAAiB,CACpCP,EAAa,EAAK,EAClBP,GAAS,SAASc,CAAK,CAAA,EAGnBC,EAAYD,GAAiB,CACjCP,EAAa,EAAI,EACjB,MAAMT,EACJgB,EAAM,SAAW,SAAYA,EAAM,OAAoB,gBAAkBA,EAAM,OAG3E,CAAE,QAAAE,EAAS,cAAAC,EAAe,UAAAC,CAAA,EAAcpB,EAAO,MAC/CqB,EAAsBD,IAAc,MAAQ,GAAK,EAEjDE,EAAatB,EAAO,WAC1B,IAAIuB,EAAYvB,EAAO,UACnBA,aAAkB,UAAY,CAACuB,IAAWA,EAAY,OAAO,SAAS,KAAK,WAE/E,MAAMC,EAASnB,EAAmB,SAAS,OACrCoB,EAAOH,EAAaD,IAAwBG,GAAQ,MAAQ,GAC5DE,EACJJ,EAAaD,EAAsBrB,EAAO,aAC1CA,EAAO,aAAewB,GAAQ,OAAS,GAAK3B,EACxC8B,EAAMJ,IAAcC,GAAQ,KAAO,GACnCI,EACJL,EAAYvB,EAAO,cACnBA,EAAO,cAAgBwB,GAAQ,QAAU,GAAK3B,EAE1CgC,EAAkBX,IAAY,QAAUC,IAAkB,iBAC1DW,EAAeZ,IAAY,QAAUC,IAAkB,iBAEvDpB,EAAS,CACb,EAAGuB,EACH,EAAGC,EACH,WAAY,CACV,KAAMD,EAAaX,EAAkB,QAAQ,EAC7C,MAAOW,EAAaX,EAAkB,QAAQ,EAC9C,IAAKY,EAAYZ,EAAkB,QAAQ,EAC3C,OAAQY,EAAYZ,EAAkB,QAAQ,CAAA,EAEhD,QAAS,CACP,KAAMmB,EAAeJ,EAAQD,EAC7B,MAAOK,EAAeL,EAAOC,EAC7B,IAAKG,EAAkBD,EAASD,EAChC,OAAQE,EAAkBF,EAAMC,CAAA,CAClC,EAGFjB,EAAkB,QAAU,CAAE,EAAGW,EAAY,EAAGC,CAAA,EAChDlB,EAAmB,SAAS,WAAWN,EAAQiB,CAAK,CAAA,EAGtD,OAAAH,EAAQ,iBAAiB,SAAUI,CAAQ,EAC3CJ,EAAQ,iBAAiB,YAAaE,CAAW,EAE1C,IAAM,CACXF,EAAQ,oBAAoB,SAAUI,CAAQ,EAC9CJ,EAAQ,oBAAoB,YAAaE,CAAW,CAAA,CACtD,EACC,CAACf,EAAQG,EAAY,KAAK,CAAC,EAE9B,MAAM4B,EAAkBhC,GAIlB,CACJ,GAAI,CAACQ,EAAW,QAAS,OAEzB,KAAM,CAAE,SAAAyB,EAAU,MAAAC,EAAO,OAAAC,CAAA,EAAWnC,GAAU,CAAA,EAE9CQ,EAAW,QAAQ,eAAe,CAChC,SAAAyB,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EAGGC,EAAYpC,GAAiE,CACjF,GAAI,CAACQ,EAAW,QAAS,OAEzB,KAAM,CAAE,EAAA6B,EAAG,EAAAC,EAAG,SAAAL,CAAA,EAAajC,GAAU,CAAA,EAErCQ,EAAW,QAAQ,SAAS,CAAE,KAAM6B,EAAG,IAAKC,EAAG,SAAAL,EAAU,CAAA,EAG3D,OAAIhC,EAAe,CAAE,eAAA+B,EAAgB,SAAAI,EAAU,UAAA3B,CAAA,EACxC,CACL,IAAKL,EACL,UAAAK,EACA,eAAAuB,EACA,SAAAI,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("./helpers/createContext/createContext.cjs"),I=require("./helpers/createEventEmitter/createEventEmitter.cjs"),k=require("./helpers/createReactiveContext/createReactiveContext.cjs"),v=require("./helpers/createStore/createStore.cjs"),O=require("./hooks/useAsync/useAsync.cjs"),h=require("./hooks/useLockCallback/useLockCallback.cjs"),A=require("./hooks/useMutation/useMutation.cjs"),D=require("./hooks/useOptimistic/useOptimistic.cjs"),b=require("./hooks/useQuery/useQuery.cjs"),f=require("./hooks/useAudio/useAudio.cjs"),M=require("./hooks/useBattery/useBattery.cjs"),L=require("./hooks/useBluetooth/useBluetooth.cjs"),_=require("./hooks/useBroadcastChannel/useBroadcastChannel.cjs"),N=require("./hooks/useClipboard/useClipboard.cjs"),B=require("./hooks/useCopy/useCopy.cjs"),K=require("./hooks/useCssVar/useCssVar.cjs"),F=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),V=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),U=require("./hooks/useEventSource/useEventSource.cjs"),w=require("./hooks/useEyeDropper/useEyeDropper.cjs"),W=require("./hooks/useFavicon/useFavicon.cjs"),H=require("./hooks/useFps/useFps.cjs"),x=require("./hooks/useFullscreen/useFullscreen.cjs"),n=require("./hooks/useGamepad/useGamepad.cjs"),Q=require("./hooks/useGeolocation/useGeolocation.cjs"),c=require("./hooks/useMediaControls/useMediaControls.cjs"),z=require("./hooks/useMemory/useMemory.cjs"),a=require("./hooks/useNetwork/useNetwork.cjs"),G=require("./hooks/useOnline/useOnline.cjs"),X=require("./hooks/useOtpCredential/useOtpCredential.cjs"),Z=require("./hooks/usePermission/usePermission.cjs"),j=require("./hooks/usePictureInPicture/usePictureInPicture.cjs"),J=require("./hooks/usePointerLock/usePointerLock.cjs"),Y=require("./hooks/usePostMessage/usePostMessage.cjs"),$=require("./hooks/useRaf/useRaf.cjs"),ee=require("./hooks/useShare/useShare.cjs"),l=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),se=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),ue=require("./hooks/useVibrate/useVibrate.cjs"),re=require("./hooks/useVirtualKeyboard/useVirtualKeyboard.cjs"),te=require("./hooks/useWakeLock/useWakeLock.cjs"),oe=require("./hooks/useWebSocket/useWebSocket.cjs"),ie=require("./hooks/useLogger/useLogger.cjs"),ne=require("./hooks/useRenderCount/useRenderCount.cjs"),ce=require("./hooks/useRenderInfo/useRenderInfo.cjs"),ae=require("./hooks/useRerender/useRerender.cjs"),le=require("./hooks/useActiveElement/useActiveElement.cjs"),Se=require("./hooks/useAutoScroll/useAutoScroll.cjs"),qe=require("./hooks/useClickOutside/useClickOutside.cjs"),S=require("./hooks/useDoubleClick/useDoubleClick.cjs"),de=require("./hooks/useDropZone/useDropZone.cjs"),ge=require("./hooks/useFileDialog/useFileDialog.cjs"),Ee=require("./hooks/useFocus/useFocus.cjs"),Te=require("./hooks/useHover/useHover.cjs"),Pe=require("./hooks/useImage/useImage.cjs"),Ce=require("./hooks/useLongPress/useLongPress.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),Re=require("./hooks/useRightClick/useRightClick.cjs"),q=require("./hooks/useScript/useScript.cjs"),me=require("./hooks/useSticky/useSticky.cjs"),pe=require("./hooks/useTextDirection/useTextDirection.cjs"),ye=require("./hooks/useFul/useFul.cjs"),Ie=require("./hooks/useLess/useLess.cjs"),ke=require("./hooks/useOnce/useOnce.cjs"),ve=require("./hooks/useDidUpdate/useDidUpdate.cjs"),Oe=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),he=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),Ae=require("./hooks/useMount/useMount.cjs"),d=require("./hooks/useShallowEffect/useShallowEffect.cjs"),De=require("./hooks/useUnmount/useUnmount.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),be=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),fe=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),Me=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),Le=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),_e=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),Ne=require("./hooks/useElementSize/useElementSize.cjs"),Be=require("./hooks/useEventListener/useEventListener.cjs"),g=require("./hooks/useHotkeys/useHotkeys.cjs"),Ke=require("./hooks/useIdle/useIdle.cjs"),Fe=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),Ve=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Ue=require("./hooks/useKeyboard/useKeyboard.cjs"),we=require("./hooks/useKeyPress/useKeyPress.cjs"),We=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),He=require("./hooks/useKeysPressed/useKeysPressed.cjs"),xe=require("./hooks/useLockScroll/useLockScroll.cjs"),Qe=require("./hooks/useMeasure/useMeasure.cjs"),ze=require("./hooks/useMediaQuery/useMediaQuery.cjs"),Ge=require("./hooks/useMouse/useMouse.cjs"),Xe=require("./hooks/useMutationObserver/useMutationObserver.cjs"),Ze=require("./hooks/useOrientation/useOrientation.cjs"),je=require("./hooks/usePageLeave/usePageLeave.cjs"),Je=require("./hooks/useParallax/useParallax.cjs"),Ye=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),$e=require("./hooks/useResizeObserver/useResizeObserver.cjs"),es=require("./hooks/useScroll/useScroll.cjs"),ss=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),us=require("./hooks/useScrollTo/useScrollTo.cjs"),E=require("./hooks/useTextSelection/useTextSelection.cjs"),rs=require("./hooks/useWindowEvent/useWindowEvent.cjs"),ts=require("./hooks/useWindowFocus/useWindowFocus.cjs"),T=require("./hooks/useWindowScroll/useWindowScroll.cjs"),os=require("./hooks/useWindowSize/useWindowSize.cjs"),is=require("./hooks/useBoolean/useBoolean.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),P=require("./hooks/useCookies/useCookies.cjs"),ns=require("./hooks/useCounter/useCounter.cjs"),cs=require("./hooks/useDefault/useDefault.cjs"),as=require("./hooks/useDisclosure/useDisclosure.cjs"),ls=require("./hooks/useField/useField.cjs"),Ss=require("./hooks/useHash/useHash.cjs"),qs=require("./hooks/useList/useList.cjs"),ds=require("./hooks/useLocalStorage/useLocalStorage.cjs"),gs=require("./hooks/useMap/useMap.cjs"),t=require("./hooks/useMergedRef/useMergedRef.cjs"),Es=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),Ts=require("./hooks/useQueue/useQueue.cjs"),Ps=require("./hooks/useRafState/useRafState.cjs"),Cs=require("./hooks/useRefState/useRefState.cjs"),Rs=require("./hooks/useSessionStorage/useSessionStorage.cjs"),ms=require("./hooks/useSet/useSet.cjs"),C=require("./hooks/useStateHistory/useStateHistory.cjs"),ps=require("./hooks/useStep/useStep.cjs"),o=require("./hooks/useStorage/useStorage.cjs"),ys=require("./hooks/useToggle/useToggle.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),Is=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),ks=require("./hooks/useWizard/useWizard.cjs"),vs=require("./hooks/useInterval/useInterval.cjs"),Os=require("./hooks/useStopwatch/useStopwatch.cjs"),hs=require("./hooks/useTime/useTime.cjs"),As=require("./hooks/useTimeout/useTimeout.cjs"),R=require("./hooks/useTimer/useTimer.cjs"),Ds=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),m=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),bs=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),fs=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),Ms=require("./hooks/usePreferredDark/usePreferredDark.cjs"),Ls=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),_s=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),Ns=require("./hooks/useConst/useConst.cjs"),Bs=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),Ks=require("./hooks/useDebounceState/useDebounceState.cjs"),Fs=require("./hooks/useDebounceValue/useDebounceValue.cjs"),Vs=require("./hooks/useEvent/useEvent.cjs"),Us=require("./hooks/useLastChanged/useLastChanged.cjs"),ws=require("./hooks/useLatest/useLatest.cjs"),Ws=require("./hooks/usePrevious/usePrevious.cjs"),Hs=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),xs=require("./hooks/useThrottleState/useThrottleState.cjs"),Qs=require("./hooks/useThrottleValue/useThrottleValue.cjs"),p=require("./utils/helpers/copy.cjs"),zs=require("./utils/helpers/debounce.cjs"),Gs=require("./utils/helpers/getDate.cjs"),i=require("./utils/helpers/getElement.cjs"),Xs=require("./utils/helpers/getRetry.cjs"),Zs=require("./utils/helpers/isTarget.cjs"),js=require("./utils/helpers/throttle.cjs");exports.createContext=y.createContext;exports.createEventEmitter=I.createEventEmitter;exports.createReactiveContext=k.createReactiveContext;exports.createStore=v.createStore;exports.useAsync=O.useAsync;exports.useLockCallback=h.useLockCallback;exports.useMutation=A.useMutation;exports.useOptimistic=D.useOptimistic;exports.useQuery=b.useQuery;exports.useAudio=f.useAudio;exports.useBattery=M.useBattery;exports.useBluetooth=L.useBluetooth;exports.useBroadcastChannel=_.useBroadcastChannel;exports.useClipboard=N.useClipboard;exports.useCopy=B.useCopy;exports.useCssVar=K.useCssVar;exports.useDisplayMedia=F.useDisplayMedia;exports.useDocumentTitle=V.useDocumentTitle;exports.useEventSource=U.useEventSource;exports.useEyeDropper=w.useEyeDropper;exports.useFavicon=W.useFavicon;exports.useFps=H.useFps;exports.useFullscreen=x.useFullscreen;exports.mapGamepadToXbox360Controller=n.mapGamepadToXbox360Controller;exports.useGamepad=n.useGamepad;exports.useGeolocation=Q.useGeolocation;exports.timeRangeToArray=c.timeRangeToArray;exports.useMediaControls=c.useMediaControls;exports.useMemory=z.useMemory;exports.getConnection=a.getConnection;exports.useNetwork=a.useNetwork;exports.useOnline=G.useOnline;exports.useOtpCredential=X.useOtpCredential;exports.usePermission=Z.usePermission;exports.usePictureInPicture=j.usePictureInPicture;exports.usePointerLock=J.usePointerLock;exports.usePostMessage=Y.usePostMessage;exports.useRaf=$.useRaf;exports.useShare=ee.useShare;exports.getSpeechRecognition=l.getSpeechRecognition;exports.useSpeechRecognition=l.useSpeechRecognition;exports.useSpeechSynthesis=se.useSpeechSynthesis;exports.useVibrate=ue.useVibrate;exports.useVirtualKeyboard=re.useVirtualKeyboard;exports.useWakeLock=te.useWakeLock;exports.useWebSocket=oe.useWebSocket;exports.useLogger=ie.useLogger;exports.useRenderCount=ne.useRenderCount;exports.useRenderInfo=ce.useRenderInfo;exports.useRerender=ae.useRerender;exports.useActiveElement=le.useActiveElement;exports.useAutoScroll=Se.useAutoScroll;exports.useClickOutside=qe.useClickOutside;exports.DEFAULT_THRESHOLD_TIME=S.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=S.useDoubleClick;exports.useDropZone=de.useDropZone;exports.useFileDialog=ge.useFileDialog;exports.useFocus=Ee.useFocus;exports.useHover=Te.useHover;exports.useImage=Pe.useImage;exports.useLongPress=Ce.useLongPress;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useRightClick=Re.useRightClick;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=q.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=q.useScript;exports.useSticky=me.useSticky;exports.useTextDirection=pe.useTextDirection;exports.useFul=ye.useFul;exports.useLess=Ie.useLess;exports.useOnce=ke.useOnce;exports.useDidUpdate=ve.useDidUpdate;exports.useIsFirstRender=Oe.useIsFirstRender;exports.useIsomorphicLayoutEffect=he.useIsomorphicLayoutEffect;exports.useMount=Ae.useMount;exports.deepEqual=d.deepEqual;exports.useShallowEffect=d.useShallowEffect;exports.useUnmount=De.useUnmount;exports.BREAKPOINTS_ANT_DESIGN=e.BREAKPOINTS_ANT_DESIGN;exports.BREAKPOINTS_BOOTSTRAP_V5=e.BREAKPOINTS_BOOTSTRAP_V5;exports.BREAKPOINTS_MANTINE=e.BREAKPOINTS_MANTINE;exports.BREAKPOINTS_MASTER_CSS=e.BREAKPOINTS_MASTER_CSS;exports.BREAKPOINTS_MATERIAL_UI=e.BREAKPOINTS_MATERIAL_UI;exports.BREAKPOINTS_PRIME_FLEX=e.BREAKPOINTS_PRIME_FLEX;exports.BREAKPOINTS_QUASAR_V2=e.BREAKPOINTS_QUASAR_V2;exports.BREAKPOINTS_SEMANTIC=e.BREAKPOINTS_SEMANTIC;exports.BREAKPOINTS_TAILWIND=e.BREAKPOINTS_TAILWIND;exports.useBreakpoints=e.useBreakpoints;exports.useDeviceMotion=be.useDeviceMotion;exports.useDeviceOrientation=fe.useDeviceOrientation;exports.useDevicePixelRatio=Me.useDevicePixelRatio;exports.useDocumentEvent=Le.useDocumentEvent;exports.useDocumentVisibility=_e.useDocumentVisibility;exports.useElementSize=Ne.useElementSize;exports.useEventListener=Be.useEventListener;exports.isHotkeyMatch=g.isHotkeyMatch;exports.useHotkeys=g.useHotkeys;exports.useIdle=Ke.useIdle;exports.useInfiniteScroll=Fe.useInfiniteScroll;exports.useIntersectionObserver=Ve.useIntersectionObserver;exports.useKeyboard=Ue.useKeyboard;exports.useKeyPress=we.useKeyPress;exports.useKeyPressEvent=We.useKeyPressEvent;exports.useKeysPressed=He.useKeysPressed;exports.useLockScroll=xe.useLockScroll;exports.useMeasure=Qe.useMeasure;exports.useMediaQuery=ze.useMediaQuery;exports.useMouse=Ge.useMouse;exports.useMutationObserver=Xe.useMutationObserver;exports.useOrientation=Ze.useOrientation;exports.usePageLeave=je.usePageLeave;exports.useParallax=Je.useParallax;exports.usePerformanceObserver=Ye.usePerformanceObserver;exports.useResizeObserver=$e.useResizeObserver;exports.useScroll=es.useScroll;exports.useScrollIntoView=ss.useScrollIntoView;exports.useScrollTo=us.useScrollTo;exports.getRangesSelection=E.getRangesSelection;exports.useTextSelection=E.useTextSelection;exports.useWindowEvent=rs.useWindowEvent;exports.useWindowFocus=ts.useWindowFocus;exports.scrollTo=T.scrollTo;exports.useWindowScroll=T.useWindowScroll;exports.useWindowSize=os.useWindowSize;exports.useBoolean=is.useBoolean;exports.COOKIE_EVENT=s.COOKIE_EVENT;exports.dispatchCookieEvent=s.dispatchCookieEvent;exports.getCookie=s.getCookie;exports.getCookies=s.getCookies;exports.removeCookie=s.removeCookie;exports.removeCookieItem=s.removeCookieItem;exports.setCookie=s.setCookie;exports.setCookieItem=s.setCookieItem;exports.useCookie=s.useCookie;exports.clearCookies=P.clearCookies;exports.useCookies=P.useCookies;exports.useCounter=ns.useCounter;exports.useDefault=cs.useDefault;exports.useDisclosure=as.useDisclosure;exports.useField=ls.useField;exports.useHash=Ss.useHash;exports.useList=qs.useList;exports.useLocalStorage=ds.useLocalStorage;exports.useMap=gs.useMap;exports.assignRef=t.assignRef;exports.mergeRefs=t.mergeRefs;exports.useMergedRef=t.useMergedRef;exports.useOffsetPagination=Es.useOffsetPagination;exports.useQueue=Ts.useQueue;exports.useRafState=Ps.useRafState;exports.useRefState=Cs.useRefState;exports.useSessionStorage=Rs.useSessionStorage;exports.useSet=ms.useSet;exports.stateHistoryReducer=C.stateHistoryReducer;exports.useStateHistory=C.useStateHistory;exports.useStep=ps.useStep;exports.STORAGE_EVENT=o.STORAGE_EVENT;exports.dispatchStorageEvent=o.dispatchStorageEvent;exports.useStorage=o.useStorage;exports.useToggle=ys.useToggle;exports.URL_SEARCH_PARAMS_EVENT=u.URL_SEARCH_PARAMS_EVENT;exports.createQueryString=u.createQueryString;exports.dispatchUrlSearchParamsEvent=u.dispatchUrlSearchParamsEvent;exports.getUrlSearchParams=u.getUrlSearchParams;exports.useUrlSearchParam=u.useUrlSearchParam;exports.useUrlSearchParams=Is.useUrlSearchParams;exports.useWizard=ks.useWizard;exports.useInterval=vs.useInterval;exports.useStopwatch=Os.useStopwatch;exports.useTime=hs.useTime;exports.useTimeout=As.useTimeout;exports.getTimeFromSeconds=R.getTimeFromSeconds;exports.useTimer=R.useTimer;exports.useBrowserLanguage=Ds.useBrowserLanguage;exports.getOperatingSystem=m.getOperatingSystem;exports.useOperatingSystem=m.useOperatingSystem;exports.usePreferredColorScheme=bs.usePreferredColorScheme;exports.usePreferredContrast=fs.usePreferredContrast;exports.usePreferredDark=Ms.usePreferredDark;exports.usePreferredLanguages=Ls.usePreferredLanguages;exports.usePreferredReducedMotion=_s.usePreferredReducedMotion;exports.useConst=Ns.useConst;exports.useDebounceCallback=Bs.useDebounceCallback;exports.useDebounceState=Ks.useDebounceState;exports.useDebounceValue=Fs.useDebounceValue;exports.useEvent=Vs.useEvent;exports.useLastChanged=Us.useLastChanged;exports.useLatest=ws.useLatest;exports.usePrevious=Ws.usePrevious;exports.useThrottleCallback=Hs.useThrottleCallback;exports.useThrottleState=xs.useThrottleState;exports.useThrottleValue=Qs.useThrottleValue;exports.copy=p.copy;exports.legacyCopyToClipboard=p.legacyCopyToClipboard;exports.debounce=zs.debounce;exports.getDate=Gs.getDate;exports.getElement=i.getElement;exports.target=i.target;exports.targetSymbol=i.targetSymbol;exports.getRetry=Xs.getRetry;exports.isTarget=Zs.isTarget;exports.throttle=js.throttle;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("./helpers/createContext/createContext.cjs"),I=require("./helpers/createEventEmitter/createEventEmitter.cjs"),k=require("./helpers/createReactiveContext/createReactiveContext.cjs"),v=require("./helpers/createStore/createStore.cjs"),O=require("./hooks/useAsync/useAsync.cjs"),h=require("./hooks/useLockCallback/useLockCallback.cjs"),A=require("./hooks/useMutation/useMutation.cjs"),f=require("./hooks/useOptimistic/useOptimistic.cjs"),D=require("./hooks/useQuery/useQuery.cjs"),b=require("./hooks/useAudio/useAudio.cjs"),M=require("./hooks/useBattery/useBattery.cjs"),L=require("./hooks/useBluetooth/useBluetooth.cjs"),_=require("./hooks/useBroadcastChannel/useBroadcastChannel.cjs"),N=require("./hooks/useClipboard/useClipboard.cjs"),B=require("./hooks/useCopy/useCopy.cjs"),F=require("./hooks/useCssVar/useCssVar.cjs"),K=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),V=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),U=require("./hooks/useEventSource/useEventSource.cjs"),w=require("./hooks/useEyeDropper/useEyeDropper.cjs"),W=require("./hooks/useFavicon/useFavicon.cjs"),H=require("./hooks/useFps/useFps.cjs"),x=require("./hooks/useFullscreen/useFullscreen.cjs"),n=require("./hooks/useGamepad/useGamepad.cjs"),Q=require("./hooks/useGeolocation/useGeolocation.cjs"),c=require("./hooks/useMediaControls/useMediaControls.cjs"),z=require("./hooks/useMemory/useMemory.cjs"),a=require("./hooks/useNetwork/useNetwork.cjs"),G=require("./hooks/useOnline/useOnline.cjs"),X=require("./hooks/useOtpCredential/useOtpCredential.cjs"),Z=require("./hooks/usePermission/usePermission.cjs"),j=require("./hooks/usePictureInPicture/usePictureInPicture.cjs"),J=require("./hooks/usePointerLock/usePointerLock.cjs"),Y=require("./hooks/usePostMessage/usePostMessage.cjs"),$=require("./hooks/useRaf/useRaf.cjs"),ee=require("./hooks/useShare/useShare.cjs"),l=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),se=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),ue=require("./hooks/useVibrate/useVibrate.cjs"),re=require("./hooks/useVirtualKeyboard/useVirtualKeyboard.cjs"),te=require("./hooks/useWakeLock/useWakeLock.cjs"),oe=require("./hooks/useWebSocket/useWebSocket.cjs"),ie=require("./hooks/useLogger/useLogger.cjs"),ne=require("./hooks/useRenderCount/useRenderCount.cjs"),ce=require("./hooks/useRenderInfo/useRenderInfo.cjs"),ae=require("./hooks/useRerender/useRerender.cjs"),le=require("./hooks/useActiveElement/useActiveElement.cjs"),Se=require("./hooks/useAutoScroll/useAutoScroll.cjs"),qe=require("./hooks/useClickOutside/useClickOutside.cjs"),S=require("./hooks/useDoubleClick/useDoubleClick.cjs"),de=require("./hooks/useDropZone/useDropZone.cjs"),ge=require("./hooks/useFileDialog/useFileDialog.cjs"),Ee=require("./hooks/useFocus/useFocus.cjs"),Te=require("./hooks/useFocusTrap/useFocusTrap.cjs"),Pe=require("./hooks/useHover/useHover.cjs"),Ce=require("./hooks/useImage/useImage.cjs"),Re=require("./hooks/useLongPress/useLongPress.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),me=require("./hooks/useRightClick/useRightClick.cjs"),q=require("./hooks/useScript/useScript.cjs"),pe=require("./hooks/useSticky/useSticky.cjs"),ye=require("./hooks/useTextDirection/useTextDirection.cjs"),Ie=require("./hooks/useFul/useFul.cjs"),ke=require("./hooks/useLess/useLess.cjs"),ve=require("./hooks/useOnce/useOnce.cjs"),Oe=require("./hooks/useAsyncEffect/useAsyncEffect.cjs"),he=require("./hooks/useDidUpdate/useDidUpdate.cjs"),Ae=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),fe=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),De=require("./hooks/useMount/useMount.cjs"),d=require("./hooks/useShallowEffect/useShallowEffect.cjs"),be=require("./hooks/useUnmount/useUnmount.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),Me=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),Le=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),_e=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),Ne=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),Be=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),Fe=require("./hooks/useElementSize/useElementSize.cjs"),Ke=require("./hooks/useEventListener/useEventListener.cjs"),g=require("./hooks/useHotkeys/useHotkeys.cjs"),Ve=require("./hooks/useIdle/useIdle.cjs"),Ue=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),we=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),We=require("./hooks/useKeyboard/useKeyboard.cjs"),He=require("./hooks/useKeyPress/useKeyPress.cjs"),xe=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),Qe=require("./hooks/useKeysPressed/useKeysPressed.cjs"),ze=require("./hooks/useLockScroll/useLockScroll.cjs"),Ge=require("./hooks/useMeasure/useMeasure.cjs"),Xe=require("./hooks/useMediaQuery/useMediaQuery.cjs"),Ze=require("./hooks/useMouse/useMouse.cjs"),je=require("./hooks/useMutationObserver/useMutationObserver.cjs"),Je=require("./hooks/useOrientation/useOrientation.cjs"),Ye=require("./hooks/usePageLeave/usePageLeave.cjs"),$e=require("./hooks/useParallax/useParallax.cjs"),es=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),ss=require("./hooks/useResizeObserver/useResizeObserver.cjs"),us=require("./hooks/useScroll/useScroll.cjs"),rs=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),ts=require("./hooks/useScrollTo/useScrollTo.cjs"),E=require("./hooks/useTextSelection/useTextSelection.cjs"),os=require("./hooks/useWindowEvent/useWindowEvent.cjs"),is=require("./hooks/useWindowFocus/useWindowFocus.cjs"),T=require("./hooks/useWindowScroll/useWindowScroll.cjs"),ns=require("./hooks/useWindowSize/useWindowSize.cjs"),cs=require("./hooks/useBoolean/useBoolean.cjs"),as=require("./hooks/useControllableState/useControllableState.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),P=require("./hooks/useCookies/useCookies.cjs"),ls=require("./hooks/useCounter/useCounter.cjs"),Ss=require("./hooks/useDefault/useDefault.cjs"),qs=require("./hooks/useDisclosure/useDisclosure.cjs"),ds=require("./hooks/useField/useField.cjs"),gs=require("./hooks/useHash/useHash.cjs"),Es=require("./hooks/useList/useList.cjs"),Ts=require("./hooks/useLocalStorage/useLocalStorage.cjs"),Ps=require("./hooks/useMap/useMap.cjs"),t=require("./hooks/useMergedRef/useMergedRef.cjs"),Cs=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),Rs=require("./hooks/useQueue/useQueue.cjs"),ms=require("./hooks/useRafState/useRafState.cjs"),ps=require("./hooks/useRefState/useRefState.cjs"),ys=require("./hooks/useSessionStorage/useSessionStorage.cjs"),Is=require("./hooks/useSet/useSet.cjs"),C=require("./hooks/useStateHistory/useStateHistory.cjs"),ks=require("./hooks/useStep/useStep.cjs"),o=require("./hooks/useStorage/useStorage.cjs"),vs=require("./hooks/useToggle/useToggle.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),Os=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),hs=require("./hooks/useWizard/useWizard.cjs"),As=require("./hooks/useInterval/useInterval.cjs"),fs=require("./hooks/useStopwatch/useStopwatch.cjs"),Ds=require("./hooks/useTime/useTime.cjs"),bs=require("./hooks/useTimeout/useTimeout.cjs"),R=require("./hooks/useTimer/useTimer.cjs"),Ms=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),m=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),Ls=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),_s=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),Ns=require("./hooks/usePreferredDark/usePreferredDark.cjs"),Bs=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),Fs=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),Ks=require("./hooks/useConst/useConst.cjs"),Vs=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),Us=require("./hooks/useDebounceState/useDebounceState.cjs"),ws=require("./hooks/useDebounceValue/useDebounceValue.cjs"),Ws=require("./hooks/useEvent/useEvent.cjs"),Hs=require("./hooks/useLastChanged/useLastChanged.cjs"),xs=require("./hooks/useLatest/useLatest.cjs"),Qs=require("./hooks/usePrevious/usePrevious.cjs"),zs=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),Gs=require("./hooks/useThrottleState/useThrottleState.cjs"),Xs=require("./hooks/useThrottleValue/useThrottleValue.cjs"),p=require("./utils/helpers/copy.cjs"),Zs=require("./utils/helpers/debounce.cjs"),js=require("./utils/helpers/getDate.cjs"),i=require("./utils/helpers/getElement.cjs"),Js=require("./utils/helpers/getRetry.cjs"),Ys=require("./utils/helpers/isTarget.cjs"),$s=require("./utils/helpers/throttle.cjs");exports.createContext=y.createContext;exports.createEventEmitter=I.createEventEmitter;exports.createReactiveContext=k.createReactiveContext;exports.createStore=v.createStore;exports.useAsync=O.useAsync;exports.useLockCallback=h.useLockCallback;exports.useMutation=A.useMutation;exports.useOptimistic=f.useOptimistic;exports.useQuery=D.useQuery;exports.useAudio=b.useAudio;exports.useBattery=M.useBattery;exports.useBluetooth=L.useBluetooth;exports.useBroadcastChannel=_.useBroadcastChannel;exports.useClipboard=N.useClipboard;exports.useCopy=B.useCopy;exports.useCssVar=F.useCssVar;exports.useDisplayMedia=K.useDisplayMedia;exports.useDocumentTitle=V.useDocumentTitle;exports.useEventSource=U.useEventSource;exports.useEyeDropper=w.useEyeDropper;exports.useFavicon=W.useFavicon;exports.useFps=H.useFps;exports.useFullscreen=x.useFullscreen;exports.mapGamepadToXbox360Controller=n.mapGamepadToXbox360Controller;exports.useGamepad=n.useGamepad;exports.useGeolocation=Q.useGeolocation;exports.timeRangeToArray=c.timeRangeToArray;exports.useMediaControls=c.useMediaControls;exports.useMemory=z.useMemory;exports.getConnection=a.getConnection;exports.useNetwork=a.useNetwork;exports.useOnline=G.useOnline;exports.useOtpCredential=X.useOtpCredential;exports.usePermission=Z.usePermission;exports.usePictureInPicture=j.usePictureInPicture;exports.usePointerLock=J.usePointerLock;exports.usePostMessage=Y.usePostMessage;exports.useRaf=$.useRaf;exports.useShare=ee.useShare;exports.getSpeechRecognition=l.getSpeechRecognition;exports.useSpeechRecognition=l.useSpeechRecognition;exports.useSpeechSynthesis=se.useSpeechSynthesis;exports.useVibrate=ue.useVibrate;exports.useVirtualKeyboard=re.useVirtualKeyboard;exports.useWakeLock=te.useWakeLock;exports.useWebSocket=oe.useWebSocket;exports.useLogger=ie.useLogger;exports.useRenderCount=ne.useRenderCount;exports.useRenderInfo=ce.useRenderInfo;exports.useRerender=ae.useRerender;exports.useActiveElement=le.useActiveElement;exports.useAutoScroll=Se.useAutoScroll;exports.useClickOutside=qe.useClickOutside;exports.DEFAULT_THRESHOLD_TIME=S.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=S.useDoubleClick;exports.useDropZone=de.useDropZone;exports.useFileDialog=ge.useFileDialog;exports.useFocus=Ee.useFocus;exports.useFocusTrap=Te.useFocusTrap;exports.useHover=Pe.useHover;exports.useImage=Ce.useImage;exports.useLongPress=Re.useLongPress;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useRightClick=me.useRightClick;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=q.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=q.useScript;exports.useSticky=pe.useSticky;exports.useTextDirection=ye.useTextDirection;exports.useFul=Ie.useFul;exports.useLess=ke.useLess;exports.useOnce=ve.useOnce;exports.useAsyncEffect=Oe.useAsyncEffect;exports.useDidUpdate=he.useDidUpdate;exports.useIsFirstRender=Ae.useIsFirstRender;exports.useIsomorphicLayoutEffect=fe.useIsomorphicLayoutEffect;exports.useMount=De.useMount;exports.deepEqual=d.deepEqual;exports.useShallowEffect=d.useShallowEffect;exports.useUnmount=be.useUnmount;exports.BREAKPOINTS_ANT_DESIGN=e.BREAKPOINTS_ANT_DESIGN;exports.BREAKPOINTS_BOOTSTRAP_V5=e.BREAKPOINTS_BOOTSTRAP_V5;exports.BREAKPOINTS_MANTINE=e.BREAKPOINTS_MANTINE;exports.BREAKPOINTS_MASTER_CSS=e.BREAKPOINTS_MASTER_CSS;exports.BREAKPOINTS_MATERIAL_UI=e.BREAKPOINTS_MATERIAL_UI;exports.BREAKPOINTS_PRIME_FLEX=e.BREAKPOINTS_PRIME_FLEX;exports.BREAKPOINTS_QUASAR_V2=e.BREAKPOINTS_QUASAR_V2;exports.BREAKPOINTS_SEMANTIC=e.BREAKPOINTS_SEMANTIC;exports.BREAKPOINTS_TAILWIND=e.BREAKPOINTS_TAILWIND;exports.useBreakpoints=e.useBreakpoints;exports.useDeviceMotion=Me.useDeviceMotion;exports.useDeviceOrientation=Le.useDeviceOrientation;exports.useDevicePixelRatio=_e.useDevicePixelRatio;exports.useDocumentEvent=Ne.useDocumentEvent;exports.useDocumentVisibility=Be.useDocumentVisibility;exports.useElementSize=Fe.useElementSize;exports.useEventListener=Ke.useEventListener;exports.isHotkeyMatch=g.isHotkeyMatch;exports.useHotkeys=g.useHotkeys;exports.useIdle=Ve.useIdle;exports.useInfiniteScroll=Ue.useInfiniteScroll;exports.useIntersectionObserver=we.useIntersectionObserver;exports.useKeyboard=We.useKeyboard;exports.useKeyPress=He.useKeyPress;exports.useKeyPressEvent=xe.useKeyPressEvent;exports.useKeysPressed=Qe.useKeysPressed;exports.useLockScroll=ze.useLockScroll;exports.useMeasure=Ge.useMeasure;exports.useMediaQuery=Xe.useMediaQuery;exports.useMouse=Ze.useMouse;exports.useMutationObserver=je.useMutationObserver;exports.useOrientation=Je.useOrientation;exports.usePageLeave=Ye.usePageLeave;exports.useParallax=$e.useParallax;exports.usePerformanceObserver=es.usePerformanceObserver;exports.useResizeObserver=ss.useResizeObserver;exports.useScroll=us.useScroll;exports.useScrollIntoView=rs.useScrollIntoView;exports.useScrollTo=ts.useScrollTo;exports.getRangesSelection=E.getRangesSelection;exports.useTextSelection=E.useTextSelection;exports.useWindowEvent=os.useWindowEvent;exports.useWindowFocus=is.useWindowFocus;exports.scrollTo=T.scrollTo;exports.useWindowScroll=T.useWindowScroll;exports.useWindowSize=ns.useWindowSize;exports.useBoolean=cs.useBoolean;exports.useControllableState=as.useControllableState;exports.COOKIE_EVENT=s.COOKIE_EVENT;exports.dispatchCookieEvent=s.dispatchCookieEvent;exports.getCookie=s.getCookie;exports.getCookies=s.getCookies;exports.removeCookie=s.removeCookie;exports.removeCookieItem=s.removeCookieItem;exports.setCookie=s.setCookie;exports.setCookieItem=s.setCookieItem;exports.useCookie=s.useCookie;exports.clearCookies=P.clearCookies;exports.useCookies=P.useCookies;exports.useCounter=ls.useCounter;exports.useDefault=Ss.useDefault;exports.useDisclosure=qs.useDisclosure;exports.useField=ds.useField;exports.useHash=gs.useHash;exports.useList=Es.useList;exports.useLocalStorage=Ts.useLocalStorage;exports.useMap=Ps.useMap;exports.assignRef=t.assignRef;exports.mergeRefs=t.mergeRefs;exports.useMergedRef=t.useMergedRef;exports.useOffsetPagination=Cs.useOffsetPagination;exports.useQueue=Rs.useQueue;exports.useRafState=ms.useRafState;exports.useRefState=ps.useRefState;exports.useSessionStorage=ys.useSessionStorage;exports.useSet=Is.useSet;exports.stateHistoryReducer=C.stateHistoryReducer;exports.useStateHistory=C.useStateHistory;exports.useStep=ks.useStep;exports.STORAGE_EVENT=o.STORAGE_EVENT;exports.dispatchStorageEvent=o.dispatchStorageEvent;exports.useStorage=o.useStorage;exports.useToggle=vs.useToggle;exports.URL_SEARCH_PARAMS_EVENT=u.URL_SEARCH_PARAMS_EVENT;exports.createQueryString=u.createQueryString;exports.dispatchUrlSearchParamsEvent=u.dispatchUrlSearchParamsEvent;exports.getUrlSearchParams=u.getUrlSearchParams;exports.useUrlSearchParam=u.useUrlSearchParam;exports.useUrlSearchParams=Os.useUrlSearchParams;exports.useWizard=hs.useWizard;exports.useInterval=As.useInterval;exports.useStopwatch=fs.useStopwatch;exports.useTime=Ds.useTime;exports.useTimeout=bs.useTimeout;exports.getTimeFromSeconds=R.getTimeFromSeconds;exports.useTimer=R.useTimer;exports.useBrowserLanguage=Ms.useBrowserLanguage;exports.getOperatingSystem=m.getOperatingSystem;exports.useOperatingSystem=m.useOperatingSystem;exports.usePreferredColorScheme=Ls.usePreferredColorScheme;exports.usePreferredContrast=_s.usePreferredContrast;exports.usePreferredDark=Ns.usePreferredDark;exports.usePreferredLanguages=Bs.usePreferredLanguages;exports.usePreferredReducedMotion=Fs.usePreferredReducedMotion;exports.useConst=Ks.useConst;exports.useDebounceCallback=Vs.useDebounceCallback;exports.useDebounceState=Us.useDebounceState;exports.useDebounceValue=ws.useDebounceValue;exports.useEvent=Ws.useEvent;exports.useLastChanged=Hs.useLastChanged;exports.useLatest=xs.useLatest;exports.usePrevious=Qs.usePrevious;exports.useThrottleCallback=zs.useThrottleCallback;exports.useThrottleState=Gs.useThrottleState;exports.useThrottleValue=Xs.useThrottleValue;exports.copy=p.copy;exports.legacyCopyToClipboard=p.legacyCopyToClipboard;exports.debounce=Zs.debounce;exports.getDate=js.getDate;exports.getElement=i.getElement;exports.target=i.target;exports.targetSymbol=i.targetSymbol;exports.getRetry=Js.getRetry;exports.isTarget=Ys.isTarget;exports.throttle=$s.throttle;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,11 +1,11 @@
1
1
  import { useSyncExternalStore as p } from "react";
2
- const g = (o) => {
2
+ const b = (o) => {
3
3
  let e;
4
4
  const r = /* @__PURE__ */ new Set(), c = (t) => {
5
5
  const n = typeof t == "function" ? t(e) : t;
6
6
  if (!Object.is(n, e)) {
7
- const S = e;
8
- e = typeof n != "object" || n === null ? n : Object.assign({}, e, n), r.forEach((a) => a(e, S));
7
+ const a = e;
8
+ e = typeof n != "object" || n === null || Array.isArray(n) ? n : Object.assign({}, e, n), r.forEach((S) => S(e, a));
9
9
  }
10
10
  }, u = (t) => (r.add(t), () => r.delete(t)), s = () => e, f = () => e;
11
11
  typeof o == "function" ? e = o(c, s) : e = o;
@@ -24,6 +24,6 @@ const g = (o) => {
24
24
  };
25
25
  };
26
26
  export {
27
- g as createStore
27
+ b as createStore
28
28
  };
29
29
  //# sourceMappingURL=createStore.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createStore.mjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n * @usage medium\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state =\n typeof nextState !== 'object' || nextState === null\n ? nextState\n : Object.assign({}, state, nextState);\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":";AAkCO,MAAMA,IAAc,CAAQC,MAA6C;AAC9E,MAAIC;AACJ,QAAMC,wBAA2C,IAAA,GAE3CC,IAAwC,CAACC,MAAkC;AAC/E,UAAMC,IAAY,OAAOD,KAAW,aAAaA,EAAOH,CAAK,IAAIG;AAEjE,QAAI,CAAC,OAAO,GAAGC,GAAWJ,CAAK,GAAG;AAChC,YAAMK,IAAYL;AAClB,MAAAA,IACE,OAAOI,KAAc,YAAYA,MAAc,OAC3CA,IACA,OAAO,OAAO,IAAIJ,GAAOI,CAAS,GAExCH,EAAU,QAAQ,CAACK,MAAaA,EAASN,GAAOK,CAAS,CAAC;AAAA,IAAA;AAAA,EAC5D,GAGIE,IAAY,CAACD,OACjBL,EAAU,IAAIK,CAAQ,GAEf,MAAML,EAAU,OAAOK,CAAQ,IAGlCE,IAAW,MAAMR,GACjBS,IAAkB,MAAMT;AAE9B,EAAI,OAAOD,KAAgB,aACzBC,IAASD,EAAoCG,GAAUM,CAAQ,IAE/DR,IAAQD;AAKV,WAASW,EAAmBC,GAAyD;AACnF,WAAOC;AAAA,MACLL;AAAA,MACA,MAAOI,IAAWA,EAASH,EAAA,CAAU,IAAIA,EAAA;AAAA,MACzC,MAAOG,IAAWA,EAASF,EAAA,CAAiB,IAAIA,EAAA;AAAA,IAAgB;AAAA,EAClE;AAGF,SAAO;AAAA,IACL,KAAKP;AAAA,IACL,KAAKM;AAAA,IACL,KAAKE;AAAA,IACL,WAAAH;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"createStore.mjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n * @usage medium\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state = (\n typeof nextState !== 'object' || nextState === null || Array.isArray(nextState)\n ? nextState\n : Object.assign({}, state, nextState)\n ) as Value;\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":";AAkCO,MAAMA,IAAc,CAAQC,MAA6C;AAC9E,MAAIC;AACJ,QAAMC,wBAA2C,IAAA,GAE3CC,IAAwC,CAACC,MAAkC;AAC/E,UAAMC,IAAY,OAAOD,KAAW,aAAaA,EAAOH,CAAK,IAAIG;AAEjE,QAAI,CAAC,OAAO,GAAGC,GAAWJ,CAAK,GAAG;AAChC,YAAMK,IAAYL;AAClB,MAAAA,IACE,OAAOI,KAAc,YAAYA,MAAc,QAAQ,MAAM,QAAQA,CAAS,IAC1EA,IACA,OAAO,OAAO,CAAA,GAAIJ,GAAOI,CAAS,GAGxCH,EAAU,QAAQ,CAACK,MAAaA,EAASN,GAAOK,CAAS,CAAC;AAAA,IAAA;AAAA,EAC5D,GAGIE,IAAY,CAACD,OACjBL,EAAU,IAAIK,CAAQ,GAEf,MAAML,EAAU,OAAOK,CAAQ,IAGlCE,IAAW,MAAMR,GACjBS,IAAkB,MAAMT;AAE9B,EAAI,OAAOD,KAAgB,aACzBC,IAASD,EAAoCG,GAAUM,CAAQ,IAE/DR,IAAQD;AAKV,WAASW,EAAmBC,GAAyD;AACnF,WAAOC;AAAA,MACLL;AAAA,MACA,MAAOI,IAAWA,EAASH,EAAA,CAAU,IAAIA,EAAA;AAAA,MACzC,MAAOG,IAAWA,EAASF,EAAA,CAAiB,IAAIA,EAAA;AAAA,IAAgB;AAAA,EAClE;AAGF,SAAO;AAAA,IACL,KAAKP;AAAA,IACL,KAAKM;AAAA,IACL,KAAKE;AAAA,IACL,WAAAH;AAAA,EAAA;AAEJ;"}
@@ -2,12 +2,10 @@ import { useState as a, useEffect as l } from "react";
2
2
  import { useRefState as v } from "../useRefState/useRefState.mjs";
3
3
  import { isTarget as d } from "../../utils/helpers/isTarget.mjs";
4
4
  import { getElement as E } from "../../utils/helpers/getElement.mjs";
5
- const p = (...u) => {
6
- const r = d(u[0]) ? u[0] : void 0, [s, i] = a(null), o = v(window);
5
+ const p = (...s) => {
6
+ const r = d(s[0]) ? s[0] : void 0, [u, i] = a(null), o = v();
7
7
  return l(() => {
8
- const e = r ? E(r) : o.current;
9
- if (!e) return;
10
- const c = new MutationObserver((f) => {
8
+ const e = (r ? E(r) : o.current) ?? window, c = new MutationObserver((f) => {
11
9
  f.filter((t) => t.removedNodes.length).map((t) => Array.from(t.removedNodes)).flat().forEach((t) => {
12
10
  i((m) => t === m ? document.activeElement : m);
13
11
  });
@@ -20,9 +18,9 @@ const p = (...u) => {
20
18
  return e.addEventListener("focus", n, !0), e.addEventListener("blur", n, !0), () => {
21
19
  c.disconnect(), e.removeEventListener("focus", n, !0), e.removeEventListener("blur", n, !0);
22
20
  };
23
- }, [r, o.state]), r ? s : {
21
+ }, [r, o.state]), r ? u : {
24
22
  ref: o,
25
- value: s
23
+ value: u
26
24
  };
27
25
  };
28
26
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveElement.mjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseActiveElement {\n (): HTMLElement | null;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: ActiveElement | null;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): ActiveElement | null;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement) return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true\n });\n\n const onActiveElementChange = () => setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener('focus', onActiveElementChange, true);\n element.addEventListener('blur', onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener('focus', onActiveElementChange, true);\n element.removeEventListener('blur', onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":";;;;AA6CO,MAAMA,IAAoB,IAAIC,MAAkB;AACrD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5C,CAACG,GAAOC,CAAQ,IAAIC,EAA6B,IAAI,GACrDC,IAAcC,EAAY,MAAM;AAqCtC,SAnCAC,EAAU,MAAM;AACd,UAAMC,IAAWR,IAASS,EAAWT,CAAM,IAAIK,EAAY;AAE3D,QAAI,CAACG,EAAS;AAEd,UAAME,IAAW,IAAI,iBAAiB,CAACC,MAAc;AACnD,MAAAA,EACG,OAAO,CAACC,MAAaA,EAAS,aAAa,MAAM,EACjD,IAAI,CAACA,MAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAAQ,CAACC,MAAS;AACjB,QAAAV,EAAS,CAACW,MACJD,MAASC,IAA0B,SAAS,gBACzCA,CACR;AAAA,MAAA,CACF;AAAA,IAAA,CACJ;AAED,IAAAJ,EAAS,QAAQF,GAAS;AAAA,MACxB,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAED,UAAMO,IAAwB,MAAMZ,EAAS,UAAU,aAAmC;AAE1F,WAAAK,EAAQ,iBAAiB,SAASO,GAAuB,EAAI,GAC7DP,EAAQ,iBAAiB,QAAQO,GAAuB,EAAI,GAErD,MAAM;AACX,MAAAL,EAAS,WAAA,GACTF,EAAQ,oBAAoB,SAASO,GAAuB,EAAI,GAChEP,EAAQ,oBAAoB,QAAQO,GAAuB,EAAI;AAAA,IAAA;AAAA,EACjE,GACC,CAACf,GAAQK,EAAY,KAAK,CAAC,GAE1BL,IAAeE,IACZ;AAAA,IACL,KAAKG;AAAA,IACL,OAAAH;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useActiveElement.mjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport type { HookTarget } from \"@/utils/helpers\";\n\nimport { getElement, isTarget } from \"@/utils/helpers\";\n\nimport type { StateRef } from \"../useRefState/useRefState\";\n\nimport { useRefState } from \"../useRefState/useRefState\";\n\n/** The use active element return type */\nexport type UseActiveElementReturn<\n ActiveElement extends HTMLElement = HTMLElement\n> = ActiveElement | null;\n\nexport interface UseActiveElement {\n (): UseActiveElementReturn;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: UseActiveElementReturn<ActiveElement>;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(\n target: HookTarget\n ): UseActiveElementReturn<ActiveElement>;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as\n | HookTarget\n | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState();\n\n useEffect(() => {\n const element = ((target ? getElement(target) : internalRef.current) ??\n window) as Element;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement)\n return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n });\n\n const onActiveElementChange = () =>\n setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener(\"focus\", onActiveElementChange, true);\n element.addEventListener(\"blur\", onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener(\"focus\", onActiveElementChange, true);\n element.removeEventListener(\"blur\", onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value,\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":";;;;AAoDO,MAAMA,IAAoB,IAAIC,MAAkB;AACrD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAI5C,CAACG,GAAOC,CAAQ,IAAIC,EAA6B,IAAI,GACrDC,IAAcC,EAAA;AAsCpB,SApCAC,EAAU,MAAM;AACd,UAAMC,KAAYR,IAASS,EAAWT,CAAM,IAAIK,EAAY,YAC1D,QAEIK,IAAW,IAAI,iBAAiB,CAACC,MAAc;AACnD,MAAAA,EACG,OAAO,CAACC,MAAaA,EAAS,aAAa,MAAM,EACjD,IAAI,CAACA,MAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAAQ,CAACC,MAAS;AACjB,QAAAV,EAAS,CAACW,MACJD,MAASC,IACJ,SAAS,gBACXA,CACR;AAAA,MAAA,CACF;AAAA,IAAA,CACJ;AAED,IAAAJ,EAAS,QAAQF,GAAS;AAAA,MACxB,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV;AAED,UAAMO,IAAwB,MAC5BZ,EAAS,UAAU,aAAmC;AAExD,WAAAK,EAAQ,iBAAiB,SAASO,GAAuB,EAAI,GAC7DP,EAAQ,iBAAiB,QAAQO,GAAuB,EAAI,GAErD,MAAM;AACX,MAAAL,EAAS,WAAA,GACTF,EAAQ,oBAAoB,SAASO,GAAuB,EAAI,GAChEP,EAAQ,oBAAoB,QAAQO,GAAuB,EAAI;AAAA,IAAA;AAAA,EACjE,GACC,CAACf,GAAQK,EAAY,KAAK,CAAC,GAE1BL,IAAeE,IACZ;AAAA,IACL,KAAKG;AAAA,IACL,OAAAH;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,10 @@
1
+ import { useIsomorphicLayoutEffect as c } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
2
+ const f = (o, t) => {
3
+ c(() => {
4
+ o();
5
+ }, t);
6
+ };
7
+ export {
8
+ f as useAsyncEffect
9
+ };
10
+ //# sourceMappingURL=useAsyncEffect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncEffect.mjs","sources":["../../../../src/hooks/useAsyncEffect/useAsyncEffect.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\n\n/**\n * @name useAsyncEffect\n * @description – Hook that triggers the effect callback on updates\n * @category Lifecycle\n * @usage medium\n\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useAsyncEffect(async () => console.log(\"effect runs on updates\"), deps);\n */\nexport const useAsyncEffect = (сallback: () => Promise<any>, deps?: DependencyList): void => {\n useIsomorphicLayoutEffect(() => {\n сallback();\n }, deps);\n};\n"],"names":["useAsyncEffect","сallback","deps","useIsomorphicLayoutEffect"],"mappings":";AAgBO,MAAMA,IAAiB,CAACC,GAA8BC,MAAgC;AAC3F,EAAAC,EAA0B,MAAM;AAC9B,IAAAF,EAAA;AAAA,EAAS,GACRC,CAAI;AACT;"}
@@ -0,0 +1,17 @@
1
+ import { useState as C, useRef as S, useCallback as d } from "react";
2
+ function v(l) {
3
+ const { value: o, initialValue: c, onChange: r } = l, t = o !== void 0, [u, i] = C(c), a = S(r);
4
+ a.current = r;
5
+ const e = t ? o : u, f = d(
6
+ (n) => {
7
+ const s = typeof n == "function" ? n(e) : n;
8
+ t || i(s), a.current?.(s);
9
+ },
10
+ [e, t]
11
+ );
12
+ return [e, f, t];
13
+ }
14
+ export {
15
+ v as useControllableState
16
+ };
17
+ //# sourceMappingURL=useControllableState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.mjs","sources":["../../../../src/hooks/useControllableState/useControllableState.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\n/** The use controllable state options type */\nexport interface UseControllableStateOptions<Value> {\n /** The initial value for uncontrolled state */\n initialValue?: Value;\n /** The controlled value */\n value?: Value;\n /** The onChange callback */\n onChange?: (value: Value) => void;\n}\n\n/** The use controllable state return type */\nexport type UseControllableStateReturn<Value> = [\n /** Current value */\n value: Value,\n /** Setter function that works with both controlled and uncontrolled state */\n setValue: (nextValue: ((prevValue: Value) => Value) | Value) => void,\n /** Whether the state is controlled */\n isControlled: boolean\n];\n\n/**\n * @name useControllableState\n * @description - Hook that manages both controlled and uncontrolled state patterns\n * @category State\n * @usage medium\n *\n * @template Value The type of the state value\n * @param {Value} [options.value] The controlled value. When provided, the component becomes controlled\n * @param {Value} [options.initialValue] The initial value for uncontrolled state\n * @param {(value: Value) => void} [options.onChange] The callback function called when the state changes\n * @returns {UseControllableStateReturn<Value>} A tuple containing the current value, setter function, and controlled flag\n *\n * @example\n * const [value, setValue, isControlled] = useControllableState({ initialValue: 'initial' });\n */\nexport function useControllableState<Value>(\n options: UseControllableStateOptions<Value>\n): UseControllableStateReturn<Value> {\n const { value, initialValue, onChange } = options;\n const isControlled = value !== undefined;\n\n const [internalState, setInternalState] = useState<Value>(initialValue as Value);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const currentValue = isControlled ? value : internalState;\n\n const setValue = useCallback(\n (nextValue: ((prevValue: Value) => Value) | Value) => {\n const resolvedValue =\n typeof nextValue === 'function'\n ? (nextValue as (prevValue: Value) => Value)(currentValue)\n : nextValue;\n\n if (!isControlled) setInternalState(resolvedValue);\n\n onChangeRef.current?.(resolvedValue);\n },\n [currentValue, isControlled]\n );\n\n return [currentValue, setValue, isControlled];\n}\n"],"names":["useControllableState","options","value","initialValue","onChange","isControlled","internalState","setInternalState","useState","onChangeRef","useRef","currentValue","setValue","useCallback","nextValue","resolvedValue"],"mappings":";AAqCO,SAASA,EACdC,GACmC;AACnC,QAAM,EAAE,OAAAC,GAAO,cAAAC,GAAc,UAAAC,EAAA,IAAaH,GACpCI,IAAeH,MAAU,QAEzB,CAACI,GAAeC,CAAgB,IAAIC,EAAgBL,CAAqB,GAEzEM,IAAcC,EAAON,CAAQ;AACnC,EAAAK,EAAY,UAAUL;AAEtB,QAAMO,IAAeN,IAAeH,IAAQI,GAEtCM,IAAWC;AAAA,IACf,CAACC,MAAqD;AACpD,YAAMC,IACJ,OAAOD,KAAc,aAChBA,EAA0CH,CAAY,IACvDG;AAEN,MAAKT,KAAcE,EAAiBQ,CAAa,GAEjDN,EAAY,UAAUM,CAAa;AAAA,IAAA;AAAA,IAErC,CAACJ,GAAcN,CAAY;AAAA,EAAA;AAG7B,SAAO,CAACM,GAAcC,GAAUP,CAAY;AAC9C;"}