@siberiacancode/reactuse 0.2.30 → 0.2.31

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),o={multiple:!0,accept:"*",reset:!1},b=(...r)=>{const l=typeof r[0]=="function"?r[0]:void 0,t=l?r[0]:r[1],[f,s]=n.useState(null),e=n.useRef(null),i=n.useRef(l);i.current=l;const p=()=>{s(null),i.current?.(null),e.current&&(e.current.value="")},g=c=>{if(!e.current)return;e.current.multiple=c?.multiple??t?.multiple??o.multiple,e.current.accept=c?.accept??t?.accept??o.accept;const u=c?.capture??t?.capture;u&&(e.current.capture=u),(c?.reset??t?.reset??o.reset)&&p(),e.current.click()};return n.useEffect(()=>{const c=()=>{const u=document.createElement("input");return u.type="file",u.onchange=v=>{const{files:a}=v.target;s(a),i.current?.(a)},u};return e.current=c(),()=>{e.current?.remove()}},[t?.multiple,t?.accept,t?.capture,t?.reset]),{value:f,open:g,reset:p}};exports.useFileDialog=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),o={multiple:!0,accept:"*",reset:!1},b=(...r)=>{const l=typeof r[0]=="function"?r[0]:void 0,u=l?r[0]:r[1],[a,s]=n.useState(null),e=n.useRef(null),i=n.useRef(l);i.current=l;const f=()=>{s(null),i.current?.(null),e.current&&(e.current.value="")},g=t=>{if(!e.current)return;e.current.multiple=t?.multiple??u?.multiple??o.multiple,e.current.accept=t?.accept??u?.accept??o.accept;const c=t?.capture??u?.capture;c&&(e.current.capture=c),(t?.reset??u?.reset??o.reset)&&f(),e.current.click()};return n.useEffect(()=>{const t=()=>{const c=document.createElement("input");return c.type="file",c.onchange=v=>{const{files:p}=v.target;s(p),i.current?.(p)},c};return e.current=t(),()=>{e.current&&e.current.remove()}},[]),{value:a,open:g,reset:f}};exports.useFileDialog=b;
2
2
  //# sourceMappingURL=useFileDialog.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFileDialog.cjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n inputRef.current?.remove();\n };\n }, [options?.multiple, options?.accept, options?.capture, options?.reset]);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":"yGAYMA,EAAkB,CACtB,SAAU,GACV,OAAQ,IACR,MAAO,EACT,EAgDaC,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAAY,OAAOD,EAAO,CAAC,GAAM,WAAaA,EAAO,CAAC,EAAI,OAG1DE,EAAWD,EAAWD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE1C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,IAAI,EAClDC,EAAWC,EAAAA,OAAgC,IAAI,EAC/CC,EAAsBD,EAAAA,OAAON,CAAQ,EAC3CO,EAAoB,QAAUP,EAE9B,MAAMQ,EAAQ,IAAM,CAClBL,EAAS,IAAI,EACbI,EAAoB,UAAU,IAAI,EAC9BF,EAAS,UAASA,EAAS,QAAQ,MAAQ,GAAA,EAG3CI,EAAQC,GAAsC,CAClD,GAAI,CAACL,EAAS,QAAS,OAEvBA,EAAS,QAAQ,SACfK,GAAY,UAAYT,GAAS,UAAYJ,EAAgB,SAC/DQ,EAAS,QAAQ,OAASK,GAAY,QAAUT,GAAS,QAAUJ,EAAgB,OAEnF,MAAMc,EAAUD,GAAY,SAAWT,GAAS,QAC5CU,IAASN,EAAS,QAAQ,QAAUM,IAEpCD,GAAY,OAAST,GAAS,OAASJ,EAAgB,QAAOW,EAAA,EAElEH,EAAS,QAAQ,MAAA,CAAM,EAGzBO,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAM,CACjB,MAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5C,OAAAA,EAAM,KAAO,OAEbA,EAAM,SAAYC,GAAiB,CACjC,KAAM,CAAE,MAAAC,GAAUD,EAAM,OACxBZ,EAASa,CAAK,EACdT,EAAoB,UAAUS,CAAK,CAAA,EAE9BF,CAAA,EAGT,OAAAT,EAAS,QAAUQ,EAAA,EACZ,IAAM,CACXR,EAAS,SAAS,OAAA,CAAO,CAC3B,EACC,CAACJ,GAAS,SAAUA,GAAS,OAAQA,GAAS,QAASA,GAAS,KAAK,CAAC,EAElE,CAAE,MAAAC,EAAO,KAAAO,EAAM,MAAAD,CAAA,CACxB"}
1
+ {"version":3,"file":"useFileDialog.cjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n if (!inputRef.current) return;\n inputRef.current.remove();\n };\n }, []);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":"yGAYMA,EAAkB,CACtB,SAAU,GACV,OAAQ,IACR,MAAO,EACT,EAgDaC,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAAY,OAAOD,EAAO,CAAC,GAAM,WAAaA,EAAO,CAAC,EAAI,OAG1DE,EAAWD,EAAWD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE1C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,IAAI,EAClDC,EAAWC,EAAAA,OAAgC,IAAI,EAC/CC,EAAsBD,EAAAA,OAAON,CAAQ,EAC3CO,EAAoB,QAAUP,EAE9B,MAAMQ,EAAQ,IAAM,CAClBL,EAAS,IAAI,EACbI,EAAoB,UAAU,IAAI,EAC9BF,EAAS,UAASA,EAAS,QAAQ,MAAQ,GAAA,EAG3CI,EAAQC,GAAsC,CAClD,GAAI,CAACL,EAAS,QAAS,OAEvBA,EAAS,QAAQ,SACfK,GAAY,UAAYT,GAAS,UAAYJ,EAAgB,SAC/DQ,EAAS,QAAQ,OAASK,GAAY,QAAUT,GAAS,QAAUJ,EAAgB,OAEnF,MAAMc,EAAUD,GAAY,SAAWT,GAAS,QAC5CU,IAASN,EAAS,QAAQ,QAAUM,IAEpCD,GAAY,OAAST,GAAS,OAASJ,EAAgB,QAAOW,EAAA,EAElEH,EAAS,QAAQ,MAAA,CAAM,EAGzBO,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAM,CACjB,MAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5C,OAAAA,EAAM,KAAO,OAEbA,EAAM,SAAYC,GAAiB,CACjC,KAAM,CAAE,MAAAC,GAAUD,EAAM,OACxBZ,EAASa,CAAK,EACdT,EAAoB,UAAUS,CAAK,CAAA,EAE9BF,CAAA,EAGT,OAAAT,EAAS,QAAUQ,EAAA,EACZ,IAAM,CACNR,EAAS,SACdA,EAAS,QAAQ,OAAA,CAAO,CAC1B,EACC,EAAE,EAEE,CAAE,MAAAH,EAAO,KAAAO,EAAM,MAAAD,CAAA,CACxB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),d=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),v=require("../useRefState/useRefState.cjs"),w=require("../../utils/helpers/isTarget.cjs"),y=require("../../utils/helpers/getElement.cjs"),m=(...n)=>{const o=w.isTarget(n[0])?n[0]:void 0,l=(o?n[1]:n[0])?.enabled??!0,[r,i]=a.useState(l),c=v.useRefState(),e=a.useRef(null);d.useIsomorphicLayoutEffect(()=>{const t=(o?y.getElement(o):c.current)??document.body;if(!(t instanceof HTMLElement)||(e.current=t,!l))return;const g=window.getComputedStyle(t).overflow;return e.current.__originalOverflow=g,t.style.overflow="hidden",()=>{t.style.overflow=g,e.current=null}},[o,c.state,l]);const u=()=>{if(!e.current)return;const t=e.current;e.current.__originalOverflow=window.getComputedStyle(t).overflow,t.style.overflow="hidden",i(!0)},s=()=>{if(console.log("unlock",e.current.__originalOverflow),!e.current)return;const t=e.current;t.style.overflow=e.current.__originalOverflow,i(!1)},f=()=>{if(console.log("toggle",r,r?"unlock":"lock"),r)return s();u()};return o?{value:r,lock:u,unlock:s,toggle:f}:{ref:c,value:r,lock:u,unlock:s,toggle:f}};exports.useLockScroll=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),g=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),v=require("../useRefState/useRefState.cjs"),w=require("../../utils/helpers/isTarget.cjs"),y=require("../../utils/helpers/getElement.cjs"),m=(...o)=>{const r=w.isTarget(o[0])?o[0]:void 0,n=(r?o[1]:o[0])?.enabled??!0,[l,i]=d.useState(n),c=v.useRefState(),t=d.useRef(null);g.useIsomorphicLayoutEffect(()=>{const e=(r?y.getElement(r):c.current)??document.body;if(!(e instanceof HTMLElement)||(t.current=e,!n))return;const a=window.getComputedStyle(e).overflow;return t.current.__originalOverflow=a,e.style.overflow="hidden",()=>{e.style.overflow=a,t.current=null}},[r,c.state,n]);const u=()=>{if(!t.current)return;const e=t.current;t.current.__originalOverflow=window.getComputedStyle(e).overflow,e.style.overflow="hidden",i(!0)},s=()=>{if(!t.current)return;const e=t.current;e.style.overflow=t.current.__originalOverflow,i(!1)},f=()=>{if(l)return s();u()};return r?{value:l,lock:u,unlock:s,toggle:f}:{ref:c,value:l,lock:u,unlock:s,toggle:f}};exports.useLockScroll=m;
2
2
  //# sourceMappingURL=useLockScroll.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLockScroll.cjs","sources":["../../../../src/hooks/useLockScroll/useLockScroll.ts"],"sourcesContent":["import { 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 { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use lock scroll options type */\nexport interface UseLockScrollOptions {\n /** Enable or disable scroll locking. Default: true */\n enabled?: boolean;\n}\n\n/** The use lock scroll return type */\nexport interface UseLockScrollReturn<Target extends Element> {\n /** The ref to attach to the element */\n ref: StateRef<Target>;\n /** The value of the lock state */\n value: boolean;\n /** Lock the scroll */\n lock: () => void;\n /** Toggle the scroll lock */\n toggle: () => void;\n /** Unlock the scroll */\n unlock: () => void;\n}\n\nexport interface UseLockScroll {\n (target: HookTarget, options?: UseLockScrollOptions): UseLockScrollReturn<Element>;\n\n <Target extends Element>(\n options?: UseLockScrollOptions,\n target?: never\n ): UseLockScrollReturn<Target> & { ref: StateRef<Target> };\n}\n\n/**\n * @name useLockScroll\n * @description - Hook that locks scroll on an element or document body\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} [target=document.body] The target element to lock scroll on\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {void}\n *\n * @example\n * const { lock, unlock, value, toggle } = useLockScroll(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {StateRef<Target>} Ref to attach to element, or locks body scroll by default\n *\n * @example\n * const { ref, lock, unlock, value, toggle } = useLockScroll();\n */\nexport const useLockScroll = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseLockScrollOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [locked, setLocked] = useState(enabled);\n\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n const element =\n ((target ? getElement(target) : internalRef.current) as Element) ?? document.body;\n\n if (!(element instanceof HTMLElement)) return;\n\n elementRef.current = element;\n\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(element).overflow;\n (elementRef.current as any).__originalOverflow = originalStyle;\n element.style.overflow = 'hidden';\n\n return () => {\n element.style.overflow = originalStyle;\n elementRef.current = null;\n };\n }, [target, internalRef.state, enabled]);\n\n const lock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n (elementRef.current as any).__originalOverflow = window.getComputedStyle(element).overflow;\n element.style.overflow = 'hidden';\n setLocked(true);\n };\n\n const unlock = () => {\n console.log('unlock', (elementRef.current as any).__originalOverflow);\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n element.style.overflow = (elementRef.current as any).__originalOverflow;\n setLocked(false);\n };\n\n const toggle = () => {\n console.log('toggle', locked, locked ? 'unlock' : 'lock');\n if (locked) return unlock();\n lock();\n };\n\n if (target)\n return {\n value: locked,\n lock,\n unlock,\n toggle\n };\n return {\n ref: internalRef,\n value: locked,\n lock,\n unlock,\n toggle\n };\n}) as UseLockScroll;\n"],"names":["useLockScroll","params","target","isTarget","enabled","locked","setLocked","useState","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","originalStyle","lock","unlock","toggle"],"mappings":"2TA8DaA,EAAiB,IAAIC,IAAuB,CACvD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,GAFWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAErB,SAAW,GAC9B,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAASH,CAAO,EAEtCI,EAAcC,EAAAA,YAAA,EACdC,EAAaC,EAAAA,OAAgB,IAAI,EAEvCC,EAAAA,0BAA0B,IAAM,CAC9B,MAAMC,GACFX,EAASY,EAAAA,WAAWZ,CAAM,EAAIM,EAAY,UAAwB,SAAS,KAM/E,GAJI,EAAEK,aAAmB,eAEzBH,EAAW,QAAUG,EAEjB,CAACT,GAAS,OAEd,MAAMW,EAAgB,OAAO,iBAAiBF,CAAO,EAAE,SACtD,OAAAH,EAAW,QAAgB,mBAAqBK,EACjDF,EAAQ,MAAM,SAAW,SAElB,IAAM,CACXA,EAAQ,MAAM,SAAWE,EACzBL,EAAW,QAAU,IAAA,CACvB,EACC,CAACR,EAAQM,EAAY,MAAOJ,CAAO,CAAC,EAEvC,MAAMY,EAAO,IAAM,CACjB,GAAI,CAACN,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC1BA,EAAW,QAAgB,mBAAqB,OAAO,iBAAiBG,CAAO,EAAE,SAClFA,EAAQ,MAAM,SAAW,SACzBP,EAAU,EAAI,CAAA,EAGVW,EAAS,IAAM,CAEnB,GADA,QAAQ,IAAI,SAAWP,EAAW,QAAgB,kBAAkB,EAChE,CAACA,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC3BG,EAAQ,MAAM,SAAYH,EAAW,QAAgB,mBACrDJ,EAAU,EAAK,CAAA,EAGXY,EAAS,IAAM,CAEnB,GADA,QAAQ,IAAI,SAAUb,EAAQA,EAAS,SAAW,MAAM,EACpDA,SAAeY,EAAA,EACnBD,EAAA,CAAK,EAGP,OAAId,EACK,CACL,MAAOG,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,EAEG,CACL,IAAKV,EACL,MAAOH,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,CAEJ"}
1
+ {"version":3,"file":"useLockScroll.cjs","sources":["../../../../src/hooks/useLockScroll/useLockScroll.ts"],"sourcesContent":["import { 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 { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use lock scroll options type */\nexport interface UseLockScrollOptions {\n /** Enable or disable scroll locking. Default: true */\n enabled?: boolean;\n}\n\n/** The use lock scroll return type */\nexport interface UseLockScrollReturn<Target extends Element> {\n /** The ref to attach to the element */\n ref: StateRef<Target>;\n /** The value of the lock state */\n value: boolean;\n /** Lock the scroll */\n lock: () => void;\n /** Toggle the scroll lock */\n toggle: () => void;\n /** Unlock the scroll */\n unlock: () => void;\n}\n\nexport interface UseLockScroll {\n (target: HookTarget, options?: UseLockScrollOptions): UseLockScrollReturn<Element>;\n\n <Target extends Element>(\n options?: UseLockScrollOptions,\n target?: never\n ): UseLockScrollReturn<Target> & { ref: StateRef<Target> };\n}\n\n/**\n * @name useLockScroll\n * @description - Hook that locks scroll on an element or document body\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} [target=document.body] The target element to lock scroll on\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {void}\n *\n * @example\n * const { lock, unlock, value, toggle } = useLockScroll(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {StateRef<Target>} Ref to attach to element, or locks body scroll by default\n *\n * @example\n * const { ref, lock, unlock, value, toggle } = useLockScroll();\n */\nexport const useLockScroll = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseLockScrollOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [locked, setLocked] = useState(enabled);\n\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n const element =\n ((target ? getElement(target) : internalRef.current) as Element) ?? document.body;\n\n if (!(element instanceof HTMLElement)) return;\n\n elementRef.current = element;\n\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(element).overflow;\n (elementRef.current as any).__originalOverflow = originalStyle;\n element.style.overflow = 'hidden';\n\n return () => {\n element.style.overflow = originalStyle;\n elementRef.current = null;\n };\n }, [target, internalRef.state, enabled]);\n\n const lock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n (elementRef.current as any).__originalOverflow = window.getComputedStyle(element).overflow;\n element.style.overflow = 'hidden';\n setLocked(true);\n };\n\n const unlock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n element.style.overflow = (elementRef.current as any).__originalOverflow;\n setLocked(false);\n };\n\n const toggle = () => {\n if (locked) return unlock();\n lock();\n };\n\n if (target)\n return {\n value: locked,\n lock,\n unlock,\n toggle\n };\n return {\n ref: internalRef,\n value: locked,\n lock,\n unlock,\n toggle\n };\n}) as UseLockScroll;\n"],"names":["useLockScroll","params","target","isTarget","enabled","locked","setLocked","useState","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","originalStyle","lock","unlock","toggle"],"mappings":"2TA8DaA,EAAiB,IAAIC,IAAuB,CACvD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,GAFWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAErB,SAAW,GAC9B,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAASH,CAAO,EAEtCI,EAAcC,EAAAA,YAAA,EACdC,EAAaC,EAAAA,OAAgB,IAAI,EAEvCC,EAAAA,0BAA0B,IAAM,CAC9B,MAAMC,GACFX,EAASY,EAAAA,WAAWZ,CAAM,EAAIM,EAAY,UAAwB,SAAS,KAM/E,GAJI,EAAEK,aAAmB,eAEzBH,EAAW,QAAUG,EAEjB,CAACT,GAAS,OAEd,MAAMW,EAAgB,OAAO,iBAAiBF,CAAO,EAAE,SACtD,OAAAH,EAAW,QAAgB,mBAAqBK,EACjDF,EAAQ,MAAM,SAAW,SAElB,IAAM,CACXA,EAAQ,MAAM,SAAWE,EACzBL,EAAW,QAAU,IAAA,CACvB,EACC,CAACR,EAAQM,EAAY,MAAOJ,CAAO,CAAC,EAEvC,MAAMY,EAAO,IAAM,CACjB,GAAI,CAACN,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC1BA,EAAW,QAAgB,mBAAqB,OAAO,iBAAiBG,CAAO,EAAE,SAClFA,EAAQ,MAAM,SAAW,SACzBP,EAAU,EAAI,CAAA,EAGVW,EAAS,IAAM,CACnB,GAAI,CAACP,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC3BG,EAAQ,MAAM,SAAYH,EAAW,QAAgB,mBACrDJ,EAAU,EAAK,CAAA,EAGXY,EAAS,IAAM,CACnB,GAAIb,SAAeY,EAAA,EACnBD,EAAA,CAAK,EAGP,OAAId,EACK,CACL,MAAOG,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,EAEG,CACL,IAAKV,EACL,MAAOH,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),j=require("../useRefState/useRefState.cjs"),w=require("../../utils/helpers/isTarget.cjs"),O=require("../../utils/helpers/getElement.cjs"),q=1,P=(...t)=>{const r=w.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]},i=j.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&&!i.state)return;const s=r?O.getElement(r):i.current;if(!s)return;const 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:D}=e.style,v=D==="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)-q,T=o<=(u?.top??0),h=o+e.clientHeight>=e.scrollHeight-(u?.bottom??0)-q,x=m==="flex"&&y==="column-reverse",L=m==="flex"&&y==="column-reverse",H={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?.(H,n)};return s.addEventListener("scroll",a),s.addEventListener("scrollend",R),()=>{s.removeEventListener("scroll",a),s.removeEventListener("scrollend",R)}},[r,i.state]),r?S:{ref:i,scrolling:S}};exports.useScroll=P;
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;
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 (target: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): 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 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;\n\n if (!element) return;\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,EAiH1BC,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,EAqE/C,OAnEAK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMS,EAAWZ,EAASa,EAAAA,WAAWb,CAAM,EAAIG,EAAY,QAE3D,GAAI,CAACS,EAAS,OAEd,MAAME,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\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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react"),h=require("../useRefState/useRefState.cjs"),d=require("../../utils/helpers/isTarget.cjs"),s=require("../../utils/helpers/getElement.cjs"),k=(...n)=>{const e=d.isTarget(n[0])?n[0]:void 0,l=e?n[1]:n[0],t=h.useRefState(),{behavior:u="smooth",block:a="start",inline:f="nearest",enabled:o=!0}=l??{};S.useEffect(()=>{if(!o||!e&&!t.state)return;const r=e?s.getElement(e):t.current;r&&r.scrollIntoView({behavior:u,block:a,inline:f})},[e,t.state,o]);const i=r=>{const c=e?s.getElement(e):t.current;if(!c)return;const{behavior:b,block:g,inline:v}=r??{};c.scrollIntoView({behavior:b,block:g,inline:v})};return e?{trigger:i}:{ref:t,trigger:i}};exports.useScrollIntoView=k;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("react"),m=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),v=require("../useRefState/useRefState.cjs"),w=require("../../utils/helpers/isTarget.cjs"),I=require("../../utils/helpers/getElement.cjs"),S=(...t)=>{const e=w.isTarget(t[0])?t[0]:void 0,c=e?t[1]:t[0],r=v.useRefState(),{behavior:s="smooth",block:u="start",inline:l="nearest",immediately:f=!0}=c??{},o=h.useRef(null);m.useIsomorphicLayoutEffect(()=>{if(!f||!e&&!r.state)return;const n=(e?I.getElement(e):r.current)??window;o.current=n,n.scrollIntoView({behavior:s,block:u,inline:l})},[e,r.state]);const i=n=>{if(!o.current)return;const{behavior:a,block:b,inline:g}=n??{};o.current.scrollIntoView({behavior:a,block:b,inline:g})};return e?{trigger:i}:{ref:r,trigger:i}};exports.useScrollIntoView=S;
2
2
  //# sourceMappingURL=useScrollIntoView.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollIntoView.cjs","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.ts"],"sourcesContent":["import { useEffect } 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 scroll into view options type */\nexport interface UseScrollIntoViewOptions extends ScrollIntoViewOptions {\n /** Whether to enable the scroll into view */\n enabled?: boolean;\n}\n\n/** The scroll into view return type */\nexport interface UseScrollIntoViewReturn {\n /** Function to scroll element into view */\n trigger: (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => void;\n}\n\nexport interface UseScrollIntoView {\n <Target extends Element>(\n options?: UseScrollIntoViewOptions,\n target?: never\n ): UseScrollIntoViewReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;\n}\n\n/**\n * @name useScrollIntoView\n * @description - Hook that provides functionality to scroll an element into view\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element to scroll into view\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn} Object containing scroll function\n *\n * @example\n * const { trigger } = useScrollIntoView(ref);\n *\n * @overload\n * @template Target The target element\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn & { ref: StateRef<Target> }} Object containing scroll function and ref\n *\n * @example\n * const { ref, trigger } = useScrollIntoView<HTMLDivElement>();\n */\nexport const useScrollIntoView = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollIntoViewOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const {\n behavior = 'smooth',\n block = 'start',\n inline = 'nearest',\n enabled = true\n } = options ?? {};\n\n useEffect(() => {\n if (!enabled) return;\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n }, [target, internalRef.state, enabled]);\n\n const trigger = (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const { behavior, block, inline } = params ?? {};\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n };\n\n if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollIntoView;\n"],"names":["useScrollIntoView","params","target","isTarget","options","internalRef","useRefState","behavior","block","inline","enabled","useEffect","element","getElement","trigger"],"mappings":"mPA6DaA,EAAqB,IAAIC,IAAkB,CACtD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExCI,EAAcC,EAAAA,YAAA,EACd,CACJ,SAAAC,EAAW,SACX,MAAAC,EAAQ,QACR,OAAAC,EAAS,UACT,QAAAC,EAAU,EAAA,EACRN,GAAW,CAAA,EAEfO,EAAAA,UAAU,IAAM,CAEd,GADI,CAACD,GACD,CAACR,GAAU,CAACG,EAAY,MAAO,OAEnC,MAAMO,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QACtDO,GAELA,EAAQ,eAAe,CACrB,SAAAL,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EACA,CAACP,EAAQG,EAAY,MAAOK,CAAO,CAAC,EAEvC,MAAMI,EAAWb,GAIX,CACJ,MAAMW,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QAC3D,GAAI,CAACO,EAAS,OAEd,KAAM,CAAE,SAAAL,EAAU,MAAAC,EAAO,OAAAC,GAAWR,GAAU,CAAA,EAE9CW,EAAQ,eAAe,CACrB,SAAAL,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EAGH,OAAIP,EAAe,CAAE,QAAAY,CAAA,EACd,CAAE,IAAKT,EAAa,QAAAS,CAAA,CAC7B"}
1
+ {"version":3,"file":"useScrollIntoView.cjs","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.ts"],"sourcesContent":["import { useRef } 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\n/** The scroll into view options type */\nexport interface UseScrollIntoViewOptions extends ScrollIntoViewOptions {\n /** Whether to immediately the scroll into view */\n immediately?: boolean;\n}\n\n/** The scroll into view return type */\nexport interface UseScrollIntoViewReturn {\n /** Function to scroll element into view */\n trigger: (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => void;\n}\n\nexport interface UseScrollIntoView {\n <Target extends Element>(\n options?: UseScrollIntoViewOptions,\n target?: never\n ): UseScrollIntoViewReturn & { ref: StateRef<Target> };\n\n (target?: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;\n}\n\n/**\n * @name useScrollIntoView\n * @description - Hook that provides functionality to scroll an element into view\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to scroll into view\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn} Object containing scroll function\n *\n * @example\n * const { trigger } = useScrollIntoView(ref);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn & { ref: StateRef<Target> }} Object containing scroll function and ref\n *\n * @example\n * const { ref, trigger } = useScrollIntoView<HTMLDivElement>();\n */\nexport const useScrollIntoView = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollIntoViewOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const {\n behavior = 'smooth',\n block = 'start',\n inline = 'nearest',\n immediately = true\n } = options ?? {};\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (!immediately) return;\n if (!target && !internalRef.state) return;\n\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n elementRef.current = element;\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n }, [target, internalRef.state]);\n\n const trigger = (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 if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollIntoView;\n"],"names":["useScrollIntoView","params","target","isTarget","options","internalRef","useRefState","behavior","block","inline","immediately","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","trigger"],"mappings":"2TAgEaA,EAAqB,IAAIC,IAAkB,CACtD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExCI,EAAcC,EAAAA,YAAA,EACd,CACJ,SAAAC,EAAW,SACX,MAAAC,EAAQ,QACR,OAAAC,EAAS,UACT,YAAAC,EAAc,EAAA,EACZN,GAAW,CAAA,EACTO,EAAaC,EAAAA,OAAgB,IAAI,EAEvCC,EAAAA,0BAA0B,IAAM,CAE9B,GADI,CAACH,GACD,CAACR,GAAU,CAACG,EAAY,MAAO,OAEnC,MAAMS,GAAYZ,EAASa,EAAAA,WAAWb,CAAM,EAAIG,EAAY,UAAwB,OAEpFM,EAAW,QAAUG,EAErBA,EAAQ,eAAe,CACrB,SAAAP,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EACA,CAACP,EAAQG,EAAY,KAAK,CAAC,EAE9B,MAAMW,EAAWf,GAIX,CACJ,GAAI,CAACU,EAAW,QAAS,OAEzB,KAAM,CAAE,SAAAJ,EAAU,MAAAC,EAAO,OAAAC,GAAWR,GAAU,CAAA,EAE9CU,EAAW,QAAQ,eAAe,CAChC,SAAAJ,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EAGH,OAAIP,EAAe,CAAE,QAAAc,CAAA,EACd,CAAE,IAAKX,EAAa,QAAAW,CAAA,CAC7B"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react"),y=require("../useRefState/useRefState.cjs"),S=require("../../utils/helpers/isTarget.cjs"),c=require("../../utils/helpers/getElement.cjs"),d=(...r)=>{const e=S.isTarget(r[0])?r[0]:void 0,u=e?r[1]:r[0],{x:i,y:l,behavior:f="auto",enabled:a=!0}=u??{},t=y.useRefState();v.useLayoutEffect(()=>{if(!a||!e&&!t.state)return;const o=e?c.getElement(e):t.current;o&&o.scrollTo({top:l,left:i,behavior:f})},[e,t.state]);const n=o=>{const s=e?c.getElement(e):t.current;if(!s)return;const{x:g,y:b,behavior:T}=o??{};s.scrollTo({left:g,top:b,behavior:T})};return e?{trigger:n}:{ref:t,trigger:n}};exports.useScrollTo=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),b=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),h=require("../useRefState/useRefState.cjs"),m=require("../../utils/helpers/isTarget.cjs"),v=require("../../utils/helpers/getElement.cjs"),S=(...t)=>{const e=m.isTarget(t[0])?t[0]:void 0,s=e?t[1]:t[0],{x:u,y:i,behavior:l="auto",immediately:f=!0}=s??{},r=h.useRefState(),n=T.useRef(null);b.useIsomorphicLayoutEffect(()=>{if(!f||!e&&!r.state)return;const o=(e?v.getElement(e):r.current)??window;n.current=o,o.scrollTo({top:i,left:u,behavior:l})},[e,r.state]);const c=o=>{if(!n.current)return;const{x:a,y:g,behavior:y}=o??{};n.current.scrollTo({left:a,top:g,behavior:y})};return e?{trigger:c}:{ref:r,trigger:c}};exports.useScrollTo=S;
2
2
  //# sourceMappingURL=useScrollTo.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollTo.cjs","sources":["../../../../src/hooks/useScrollTo/useScrollTo.ts"],"sourcesContent":["import { useLayoutEffect } 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 scroll to options type */\nexport interface UseScrollToOptions {\n /** The scrolling behavior */\n behavior?: ScrollBehavior;\n /** Whether to enable the scroll to */\n enabled?: boolean;\n /** The horizontal position to scroll to */\n x: number;\n /** The vertical position to scroll to */\n y: number;\n}\n\n/** The use scroll to return type */\nexport interface UseScrollToReturn {\n /** The state of scrolling */\n trigger: (params?: { x: number; y: number; behavior?: ScrollBehavior }) => void;\n}\n\nexport interface UseScrollTo {\n <Target extends Element>(\n options?: UseScrollToOptions,\n target?: never\n ): UseScrollToReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;\n}\n\n/**\n * @name useScrollTo\n * @description - Hook for scrolling to a specific element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element for scrolling to\n * @param {UseScrollToOptions} [options] The scroll options\n * @returns {UseScrollToReturn} The scroll trigger function\n *\n * @example\n * const trigger = useScrollTo(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {UseScrollToOptions} [options] The scroll options\n * @returns {UseScrollToReturn & { ref: StateRef<Target> }} The scroll trigger function and ref\n *\n * @example\n * const { ref, trigger } = useScrollTo(options);\n */\nexport const useScrollTo = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollToOptions | undefined;\n const { x, y, behavior = 'auto', enabled = true } = options ?? {};\n const internalRef = useRefState<Element>();\n\n useLayoutEffect(() => {\n if (!enabled) return;\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n element.scrollTo({ top: y, left: x, behavior });\n }, [target, internalRef.state]);\n\n const trigger = (params?: { x: number; y: number; behavior?: ScrollBehavior }) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n const { x, y, behavior } = params ?? {};\n\n element.scrollTo({ left: x, top: y, behavior });\n };\n\n if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollTo;\n"],"names":["useScrollTo","params","target","isTarget","options","x","y","behavior","enabled","internalRef","useRefState","useLayoutEffect","element","getElement","trigger"],"mappings":"mPA2DaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACxC,CAAE,EAAAI,EAAG,EAAAC,EAAG,SAAAC,EAAW,OAAQ,QAAAC,EAAU,IAASJ,GAAW,CAAA,EACzDK,EAAcC,EAAAA,YAAA,EAEpBC,EAAAA,gBAAgB,IAAM,CAEpB,GADI,CAACH,GACD,CAACN,GAAU,CAACO,EAAY,MAAO,OAEnC,MAAMG,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIO,EAAY,QACtDG,GAELA,EAAQ,SAAS,CAAE,IAAKN,EAAG,KAAMD,EAAG,SAAAE,EAAU,CAAA,EAC7C,CAACL,EAAQO,EAAY,KAAK,CAAC,EAE9B,MAAMK,EAAWb,GAAiE,CAChF,MAAMW,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIO,EAAY,QAC3D,GAAI,CAACG,EAAS,OACd,KAAM,CAAE,EAAAP,EAAG,EAAAC,EAAG,SAAAC,GAAaN,GAAU,CAAA,EAErCW,EAAQ,SAAS,CAAE,KAAMP,EAAG,IAAKC,EAAG,SAAAC,EAAU,CAAA,EAGhD,OAAIL,EAAe,CAAE,QAAAY,CAAA,EACd,CAAE,IAAKL,EAAa,QAAAK,CAAA,CAC7B"}
1
+ {"version":3,"file":"useScrollTo.cjs","sources":["../../../../src/hooks/useScrollTo/useScrollTo.ts"],"sourcesContent":["import { useRef } 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\n/** The use scroll to options type */\nexport interface UseScrollToOptions {\n /** The scrolling behavior */\n behavior?: ScrollBehavior;\n /** Whether to immediately the scroll to */\n immediately?: boolean;\n /** The horizontal position to scroll to */\n x: number;\n /** The vertical position to scroll to */\n y: number;\n}\n\n/** The use scroll to return type */\nexport interface UseScrollToReturn {\n /** The state of scrolling */\n trigger: (params?: { x: number; y: number; behavior?: ScrollBehavior }) => void;\n}\n\nexport interface UseScrollTo {\n <Target extends Element>(\n options?: UseScrollToOptions,\n target?: never\n ): UseScrollToReturn & { ref: StateRef<Target> };\n\n (target?: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;\n}\n\n/**\n * @name useScrollTo\n * @description - Hook for scrolling to a specific element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element for scrolling to\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {number} [options.x] The horizontal position to scroll to\n * @param {number} [options.y] The vertical position to scroll to\n * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior\n * @returns {UseScrollToReturn} The scroll trigger function\n *\n * @example\n * const trigger = useScrollTo(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {number} [options.x] The horizontal position to scroll to\n * @param {number} [options.y] The vertical position to scroll to\n * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior\n * @returns {UseScrollToReturn & { ref: StateRef<Target> }} The scroll trigger function and ref\n *\n * @example\n * const { ref, trigger } = useScrollTo(options);\n */\nexport const useScrollTo = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollToOptions | undefined;\n const { x, y, behavior = 'auto', immediately = true } = options ?? {};\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (!immediately) return;\n if (!target && !internalRef.state) return;\n\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n elementRef.current = element;\n\n element.scrollTo({ top: y, left: x, behavior });\n }, [target, internalRef.state]);\n\n const trigger = (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 { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollTo;\n"],"names":["useScrollTo","params","target","isTarget","options","x","y","behavior","immediately","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","trigger"],"mappings":"2TAkEaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACxC,CAAE,EAAAI,EAAG,EAAAC,EAAG,SAAAC,EAAW,OAAQ,YAAAC,EAAc,IAASJ,GAAW,CAAA,EAC7DK,EAAcC,EAAAA,YAAA,EACdC,EAAaC,EAAAA,OAAgB,IAAI,EAEvCC,EAAAA,0BAA0B,IAAM,CAE9B,GADI,CAACL,GACD,CAACN,GAAU,CAACO,EAAY,MAAO,OAEnC,MAAMK,GAAYZ,EAASa,EAAAA,WAAWb,CAAM,EAAIO,EAAY,UAAwB,OAEpFE,EAAW,QAAUG,EAErBA,EAAQ,SAAS,CAAE,IAAKR,EAAG,KAAMD,EAAG,SAAAE,EAAU,CAAA,EAC7C,CAACL,EAAQO,EAAY,KAAK,CAAC,EAE9B,MAAMO,EAAWf,GAAiE,CAChF,GAAI,CAACU,EAAW,QAAS,OAEzB,KAAM,CAAE,EAAAN,EAAG,EAAAC,EAAG,SAAAC,GAAaN,GAAU,CAAA,EAErCU,EAAW,QAAQ,SAAS,CAAE,KAAMN,EAAG,IAAKC,EAAG,SAAAC,EAAU,CAAA,EAG3D,OAAIL,EAAe,CAAE,QAAAc,CAAA,EACd,CAAE,IAAKP,EAAa,QAAAO,CAAA,CAC7B"}
@@ -3,29 +3,29 @@ const i = {
3
3
  multiple: !0,
4
4
  accept: "*",
5
5
  reset: !1
6
- }, R = (...n) => {
7
- const u = typeof n[0] == "function" ? n[0] : void 0, t = u ? n[0] : n[1], [a, o] = g(null), e = f(null), l = f(u);
6
+ }, R = (...r) => {
7
+ const u = typeof r[0] == "function" ? r[0] : void 0, n = u ? r[0] : r[1], [a, o] = g(null), e = f(null), l = f(u);
8
8
  l.current = u;
9
9
  const s = () => {
10
10
  o(null), l.current?.(null), e.current && (e.current.value = "");
11
- }, m = (c) => {
11
+ }, m = (t) => {
12
12
  if (!e.current) return;
13
- e.current.multiple = c?.multiple ?? t?.multiple ?? i.multiple, e.current.accept = c?.accept ?? t?.accept ?? i.accept;
14
- const r = c?.capture ?? t?.capture;
15
- r && (e.current.capture = r), (c?.reset ?? t?.reset ?? i.reset) && s(), e.current.click();
13
+ e.current.multiple = t?.multiple ?? n?.multiple ?? i.multiple, e.current.accept = t?.accept ?? n?.accept ?? i.accept;
14
+ const c = t?.capture ?? n?.capture;
15
+ c && (e.current.capture = c), (t?.reset ?? n?.reset ?? i.reset) && s(), e.current.click();
16
16
  };
17
17
  return k(() => {
18
- const c = () => {
19
- const r = document.createElement("input");
20
- return r.type = "file", r.onchange = (v) => {
18
+ const t = () => {
19
+ const c = document.createElement("input");
20
+ return c.type = "file", c.onchange = (v) => {
21
21
  const { files: p } = v.target;
22
22
  o(p), l.current?.(p);
23
- }, r;
23
+ }, c;
24
24
  };
25
- return e.current = c(), () => {
26
- e.current?.remove();
25
+ return e.current = t(), () => {
26
+ e.current && e.current.remove();
27
27
  };
28
- }, [t?.multiple, t?.accept, t?.capture, t?.reset]), { value: a, open: m, reset: s };
28
+ }, []), { value: a, open: m, reset: s };
29
29
  };
30
30
  export {
31
31
  R as useFileDialog
@@ -1 +1 @@
1
- {"version":3,"file":"useFileDialog.mjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n inputRef.current?.remove();\n };\n }, [options?.multiple, options?.accept, options?.capture, options?.reset]);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":";AAYA,MAAMA,IAAkB;AAAA,EACtB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT,GAgDaC,IAAiB,IAAIC,MAAkB;AAClD,QAAMC,IAAY,OAAOD,EAAO,CAAC,KAAM,aAAaA,EAAO,CAAC,IAAI,QAG1DE,IAAWD,IAAWD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE1C,CAACG,GAAOC,CAAQ,IAAIC,EAA0B,IAAI,GAClDC,IAAWC,EAAgC,IAAI,GAC/CC,IAAsBD,EAAON,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAE9B,QAAMQ,IAAQ,MAAM;AAClB,IAAAL,EAAS,IAAI,GACbI,EAAoB,UAAU,IAAI,GAC9BF,EAAS,YAASA,EAAS,QAAQ,QAAQ;AAAA,EAAA,GAG3CI,IAAO,CAACC,MAAsC;AAClD,QAAI,CAACL,EAAS,QAAS;AAEvB,IAAAA,EAAS,QAAQ,WACfK,GAAY,YAAYT,GAAS,YAAYJ,EAAgB,UAC/DQ,EAAS,QAAQ,SAASK,GAAY,UAAUT,GAAS,UAAUJ,EAAgB;AAEnF,UAAMc,IAAUD,GAAY,WAAWT,GAAS;AAChD,IAAIU,MAASN,EAAS,QAAQ,UAAUM,KAEpCD,GAAY,SAAST,GAAS,SAASJ,EAAgB,UAAOW,EAAA,GAElEH,EAAS,QAAQ,MAAA;AAAA,EAAM;AAGzB,SAAAO,EAAU,MAAM;AACd,UAAMC,IAAO,MAAM;AACjB,YAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAAA,EAAM,OAAO,QAEbA,EAAM,WAAW,CAACC,MAAiB;AACjC,cAAM,EAAE,OAAAC,MAAUD,EAAM;AACxB,QAAAZ,EAASa,CAAK,GACdT,EAAoB,UAAUS,CAAK;AAAA,MAAA,GAE9BF;AAAA,IAAA;AAGT,WAAAT,EAAS,UAAUQ,EAAA,GACZ,MAAM;AACX,MAAAR,EAAS,SAAS,OAAA;AAAA,IAAO;AAAA,EAC3B,GACC,CAACJ,GAAS,UAAUA,GAAS,QAAQA,GAAS,SAASA,GAAS,KAAK,CAAC,GAElE,EAAE,OAAAC,GAAO,MAAAO,GAAM,OAAAD,EAAA;AACxB;"}
1
+ {"version":3,"file":"useFileDialog.mjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n if (!inputRef.current) return;\n inputRef.current.remove();\n };\n }, []);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":";AAYA,MAAMA,IAAkB;AAAA,EACtB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT,GAgDaC,IAAiB,IAAIC,MAAkB;AAClD,QAAMC,IAAY,OAAOD,EAAO,CAAC,KAAM,aAAaA,EAAO,CAAC,IAAI,QAG1DE,IAAWD,IAAWD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE1C,CAACG,GAAOC,CAAQ,IAAIC,EAA0B,IAAI,GAClDC,IAAWC,EAAgC,IAAI,GAC/CC,IAAsBD,EAAON,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAE9B,QAAMQ,IAAQ,MAAM;AAClB,IAAAL,EAAS,IAAI,GACbI,EAAoB,UAAU,IAAI,GAC9BF,EAAS,YAASA,EAAS,QAAQ,QAAQ;AAAA,EAAA,GAG3CI,IAAO,CAACC,MAAsC;AAClD,QAAI,CAACL,EAAS,QAAS;AAEvB,IAAAA,EAAS,QAAQ,WACfK,GAAY,YAAYT,GAAS,YAAYJ,EAAgB,UAC/DQ,EAAS,QAAQ,SAASK,GAAY,UAAUT,GAAS,UAAUJ,EAAgB;AAEnF,UAAMc,IAAUD,GAAY,WAAWT,GAAS;AAChD,IAAIU,MAASN,EAAS,QAAQ,UAAUM,KAEpCD,GAAY,SAAST,GAAS,SAASJ,EAAgB,UAAOW,EAAA,GAElEH,EAAS,QAAQ,MAAA;AAAA,EAAM;AAGzB,SAAAO,EAAU,MAAM;AACd,UAAMC,IAAO,MAAM;AACjB,YAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAAA,EAAM,OAAO,QAEbA,EAAM,WAAW,CAACC,MAAiB;AACjC,cAAM,EAAE,OAAAC,MAAUD,EAAM;AACxB,QAAAZ,EAASa,CAAK,GACdT,EAAoB,UAAUS,CAAK;AAAA,MAAA,GAE9BF;AAAA,IAAA;AAGT,WAAAT,EAAS,UAAUQ,EAAA,GACZ,MAAM;AACX,MAAKR,EAAS,WACdA,EAAS,QAAQ,OAAA;AAAA,IAAO;AAAA,EAC1B,GACC,EAAE,GAEE,EAAE,OAAAH,GAAO,MAAAO,GAAM,OAAAD,EAAA;AACxB;"}
@@ -1,44 +1,44 @@
1
- import { useState as g, useRef as d } from "react";
2
- import { useIsomorphicLayoutEffect as w } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
- import { useRefState as v } from "../useRefState/useRefState.mjs";
4
- import { isTarget as a } from "../../utils/helpers/isTarget.mjs";
1
+ import { useState as d, useRef as w } from "react";
2
+ import { useIsomorphicLayoutEffect as v } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
+ import { useRefState as a } from "../useRefState/useRefState.mjs";
4
+ import { isTarget as g } from "../../utils/helpers/isTarget.mjs";
5
5
  import { getElement as y } from "../../utils/helpers/getElement.mjs";
6
- const R = (...n) => {
7
- const t = a(n[0]) ? n[0] : void 0, l = (t ? n[1] : n[0])?.enabled ?? !0, [r, f] = g(l), c = v(), e = d(null);
8
- w(() => {
9
- const o = (t ? y(t) : c.current) ?? document.body;
10
- if (!(o instanceof HTMLElement) || (e.current = o, !l)) return;
11
- const m = window.getComputedStyle(o).overflow;
12
- return e.current.__originalOverflow = m, o.style.overflow = "hidden", () => {
13
- o.style.overflow = m, e.current = null;
6
+ const b = (...r) => {
7
+ const o = g(r[0]) ? r[0] : void 0, n = (o ? r[1] : r[0])?.enabled ?? !0, [l, f] = d(n), c = a(), t = w(null);
8
+ v(() => {
9
+ const e = (o ? y(o) : c.current) ?? document.body;
10
+ if (!(e instanceof HTMLElement) || (t.current = e, !n)) return;
11
+ const m = window.getComputedStyle(e).overflow;
12
+ return t.current.__originalOverflow = m, e.style.overflow = "hidden", () => {
13
+ e.style.overflow = m, t.current = null;
14
14
  };
15
- }, [t, c.state, l]);
15
+ }, [o, c.state, n]);
16
16
  const u = () => {
17
- if (!e.current) return;
18
- const o = e.current;
19
- e.current.__originalOverflow = window.getComputedStyle(o).overflow, o.style.overflow = "hidden", f(!0);
17
+ if (!t.current) return;
18
+ const e = t.current;
19
+ t.current.__originalOverflow = window.getComputedStyle(e).overflow, e.style.overflow = "hidden", f(!0);
20
20
  }, i = () => {
21
- if (console.log("unlock", e.current.__originalOverflow), !e.current) return;
22
- const o = e.current;
23
- o.style.overflow = e.current.__originalOverflow, f(!1);
21
+ if (!t.current) return;
22
+ const e = t.current;
23
+ e.style.overflow = t.current.__originalOverflow, f(!1);
24
24
  }, s = () => {
25
- if (console.log("toggle", r, r ? "unlock" : "lock"), r) return i();
25
+ if (l) return i();
26
26
  u();
27
27
  };
28
- return t ? {
29
- value: r,
28
+ return o ? {
29
+ value: l,
30
30
  lock: u,
31
31
  unlock: i,
32
32
  toggle: s
33
33
  } : {
34
34
  ref: c,
35
- value: r,
35
+ value: l,
36
36
  lock: u,
37
37
  unlock: i,
38
38
  toggle: s
39
39
  };
40
40
  };
41
41
  export {
42
- R as useLockScroll
42
+ b as useLockScroll
43
43
  };
44
44
  //# sourceMappingURL=useLockScroll.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLockScroll.mjs","sources":["../../../../src/hooks/useLockScroll/useLockScroll.ts"],"sourcesContent":["import { 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 { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use lock scroll options type */\nexport interface UseLockScrollOptions {\n /** Enable or disable scroll locking. Default: true */\n enabled?: boolean;\n}\n\n/** The use lock scroll return type */\nexport interface UseLockScrollReturn<Target extends Element> {\n /** The ref to attach to the element */\n ref: StateRef<Target>;\n /** The value of the lock state */\n value: boolean;\n /** Lock the scroll */\n lock: () => void;\n /** Toggle the scroll lock */\n toggle: () => void;\n /** Unlock the scroll */\n unlock: () => void;\n}\n\nexport interface UseLockScroll {\n (target: HookTarget, options?: UseLockScrollOptions): UseLockScrollReturn<Element>;\n\n <Target extends Element>(\n options?: UseLockScrollOptions,\n target?: never\n ): UseLockScrollReturn<Target> & { ref: StateRef<Target> };\n}\n\n/**\n * @name useLockScroll\n * @description - Hook that locks scroll on an element or document body\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} [target=document.body] The target element to lock scroll on\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {void}\n *\n * @example\n * const { lock, unlock, value, toggle } = useLockScroll(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {StateRef<Target>} Ref to attach to element, or locks body scroll by default\n *\n * @example\n * const { ref, lock, unlock, value, toggle } = useLockScroll();\n */\nexport const useLockScroll = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseLockScrollOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [locked, setLocked] = useState(enabled);\n\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n const element =\n ((target ? getElement(target) : internalRef.current) as Element) ?? document.body;\n\n if (!(element instanceof HTMLElement)) return;\n\n elementRef.current = element;\n\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(element).overflow;\n (elementRef.current as any).__originalOverflow = originalStyle;\n element.style.overflow = 'hidden';\n\n return () => {\n element.style.overflow = originalStyle;\n elementRef.current = null;\n };\n }, [target, internalRef.state, enabled]);\n\n const lock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n (elementRef.current as any).__originalOverflow = window.getComputedStyle(element).overflow;\n element.style.overflow = 'hidden';\n setLocked(true);\n };\n\n const unlock = () => {\n console.log('unlock', (elementRef.current as any).__originalOverflow);\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n element.style.overflow = (elementRef.current as any).__originalOverflow;\n setLocked(false);\n };\n\n const toggle = () => {\n console.log('toggle', locked, locked ? 'unlock' : 'lock');\n if (locked) return unlock();\n lock();\n };\n\n if (target)\n return {\n value: locked,\n lock,\n unlock,\n toggle\n };\n return {\n ref: internalRef,\n value: locked,\n lock,\n unlock,\n toggle\n };\n}) as UseLockScroll;\n"],"names":["useLockScroll","params","target","isTarget","enabled","locked","setLocked","useState","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","originalStyle","lock","unlock","toggle"],"mappings":";;;;;AA8DO,MAAMA,IAAiB,IAAIC,MAAuB;AACvD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAG5CG,KAFWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,IAErB,WAAW,IAC9B,CAACI,GAAQC,CAAS,IAAIC,EAASH,CAAO,GAEtCI,IAAcC,EAAA,GACdC,IAAaC,EAAgB,IAAI;AAEvC,EAAAC,EAA0B,MAAM;AAC9B,UAAMC,KACFX,IAASY,EAAWZ,CAAM,IAAIM,EAAY,YAAwB,SAAS;AAM/E,QAJI,EAAEK,aAAmB,iBAEzBH,EAAW,UAAUG,GAEjB,CAACT,GAAS;AAEd,UAAMW,IAAgB,OAAO,iBAAiBF,CAAO,EAAE;AACtD,WAAAH,EAAW,QAAgB,qBAAqBK,GACjDF,EAAQ,MAAM,WAAW,UAElB,MAAM;AACX,MAAAA,EAAQ,MAAM,WAAWE,GACzBL,EAAW,UAAU;AAAA,IAAA;AAAA,EACvB,GACC,CAACR,GAAQM,EAAY,OAAOJ,CAAO,CAAC;AAEvC,QAAMY,IAAO,MAAM;AACjB,QAAI,CAACN,EAAW,QAAS;AACzB,UAAMG,IAAUH,EAAW;AAC1B,IAAAA,EAAW,QAAgB,qBAAqB,OAAO,iBAAiBG,CAAO,EAAE,UAClFA,EAAQ,MAAM,WAAW,UACzBP,EAAU,EAAI;AAAA,EAAA,GAGVW,IAAS,MAAM;AAEnB,QADA,QAAQ,IAAI,UAAWP,EAAW,QAAgB,kBAAkB,GAChE,CAACA,EAAW,QAAS;AACzB,UAAMG,IAAUH,EAAW;AAC3B,IAAAG,EAAQ,MAAM,WAAYH,EAAW,QAAgB,oBACrDJ,EAAU,EAAK;AAAA,EAAA,GAGXY,IAAS,MAAM;AAEnB,QADA,QAAQ,IAAI,UAAUb,GAAQA,IAAS,WAAW,MAAM,GACpDA,UAAeY,EAAA;AACnB,IAAAD,EAAA;AAAA,EAAK;AAGP,SAAId,IACK;AAAA,IACL,OAAOG;AAAA,IACP,MAAAW;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,IAEG;AAAA,IACL,KAAKV;AAAA,IACL,OAAOH;AAAA,IACP,MAAAW;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useLockScroll.mjs","sources":["../../../../src/hooks/useLockScroll/useLockScroll.ts"],"sourcesContent":["import { 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 { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use lock scroll options type */\nexport interface UseLockScrollOptions {\n /** Enable or disable scroll locking. Default: true */\n enabled?: boolean;\n}\n\n/** The use lock scroll return type */\nexport interface UseLockScrollReturn<Target extends Element> {\n /** The ref to attach to the element */\n ref: StateRef<Target>;\n /** The value of the lock state */\n value: boolean;\n /** Lock the scroll */\n lock: () => void;\n /** Toggle the scroll lock */\n toggle: () => void;\n /** Unlock the scroll */\n unlock: () => void;\n}\n\nexport interface UseLockScroll {\n (target: HookTarget, options?: UseLockScrollOptions): UseLockScrollReturn<Element>;\n\n <Target extends Element>(\n options?: UseLockScrollOptions,\n target?: never\n ): UseLockScrollReturn<Target> & { ref: StateRef<Target> };\n}\n\n/**\n * @name useLockScroll\n * @description - Hook that locks scroll on an element or document body\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} [target=document.body] The target element to lock scroll on\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {void}\n *\n * @example\n * const { lock, unlock, value, toggle } = useLockScroll(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {StateRef<Target>} Ref to attach to element, or locks body scroll by default\n *\n * @example\n * const { ref, lock, unlock, value, toggle } = useLockScroll();\n */\nexport const useLockScroll = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseLockScrollOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [locked, setLocked] = useState(enabled);\n\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n const element =\n ((target ? getElement(target) : internalRef.current) as Element) ?? document.body;\n\n if (!(element instanceof HTMLElement)) return;\n\n elementRef.current = element;\n\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(element).overflow;\n (elementRef.current as any).__originalOverflow = originalStyle;\n element.style.overflow = 'hidden';\n\n return () => {\n element.style.overflow = originalStyle;\n elementRef.current = null;\n };\n }, [target, internalRef.state, enabled]);\n\n const lock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n (elementRef.current as any).__originalOverflow = window.getComputedStyle(element).overflow;\n element.style.overflow = 'hidden';\n setLocked(true);\n };\n\n const unlock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n element.style.overflow = (elementRef.current as any).__originalOverflow;\n setLocked(false);\n };\n\n const toggle = () => {\n if (locked) return unlock();\n lock();\n };\n\n if (target)\n return {\n value: locked,\n lock,\n unlock,\n toggle\n };\n return {\n ref: internalRef,\n value: locked,\n lock,\n unlock,\n toggle\n };\n}) as UseLockScroll;\n"],"names":["useLockScroll","params","target","isTarget","enabled","locked","setLocked","useState","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","originalStyle","lock","unlock","toggle"],"mappings":";;;;;AA8DO,MAAMA,IAAiB,IAAIC,MAAuB;AACvD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAG5CG,KAFWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,IAErB,WAAW,IAC9B,CAACI,GAAQC,CAAS,IAAIC,EAASH,CAAO,GAEtCI,IAAcC,EAAA,GACdC,IAAaC,EAAgB,IAAI;AAEvC,EAAAC,EAA0B,MAAM;AAC9B,UAAMC,KACFX,IAASY,EAAWZ,CAAM,IAAIM,EAAY,YAAwB,SAAS;AAM/E,QAJI,EAAEK,aAAmB,iBAEzBH,EAAW,UAAUG,GAEjB,CAACT,GAAS;AAEd,UAAMW,IAAgB,OAAO,iBAAiBF,CAAO,EAAE;AACtD,WAAAH,EAAW,QAAgB,qBAAqBK,GACjDF,EAAQ,MAAM,WAAW,UAElB,MAAM;AACX,MAAAA,EAAQ,MAAM,WAAWE,GACzBL,EAAW,UAAU;AAAA,IAAA;AAAA,EACvB,GACC,CAACR,GAAQM,EAAY,OAAOJ,CAAO,CAAC;AAEvC,QAAMY,IAAO,MAAM;AACjB,QAAI,CAACN,EAAW,QAAS;AACzB,UAAMG,IAAUH,EAAW;AAC1B,IAAAA,EAAW,QAAgB,qBAAqB,OAAO,iBAAiBG,CAAO,EAAE,UAClFA,EAAQ,MAAM,WAAW,UACzBP,EAAU,EAAI;AAAA,EAAA,GAGVW,IAAS,MAAM;AACnB,QAAI,CAACP,EAAW,QAAS;AACzB,UAAMG,IAAUH,EAAW;AAC3B,IAAAG,EAAQ,MAAM,WAAYH,EAAW,QAAgB,oBACrDJ,EAAU,EAAK;AAAA,EAAA,GAGXY,IAAS,MAAM;AACnB,QAAIb,UAAeY,EAAA;AACnB,IAAAD,EAAA;AAAA,EAAK;AAGP,SAAId,IACK;AAAA,IACL,OAAOG;AAAA,IACP,MAAAW;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,IAEG;AAAA,IACL,KAAKV;AAAA,IACL,OAAOH;AAAA,IACP,MAAAW;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,EAAA;AAEJ;"}
@@ -2,22 +2,20 @@ import { useRef as T, useState as _, useEffect as j } from "react";
2
2
  import { useRefState as A } from "../useRefState/useRefState.mjs";
3
3
  import { isTarget as I } from "../../utils/helpers/isTarget.mjs";
4
4
  import { getElement as O } from "../../utils/helpers/getElement.mjs";
5
- const D = 1, V = (...t) => {
6
- const r = I(t[0]) ? t[0] : void 0, u = r ? typeof t[1] == "object" ? t[1] : { onScroll: t[1] } : typeof t[0] == "object" ? t[0] : { onScroll: t[0] }, i = A(), d = T(u);
5
+ const w = 1, V = (...t) => {
6
+ const r = I(t[0]) ? t[0] : void 0, u = r ? typeof t[1] == "object" ? t[1] : { onScroll: t[1] } : typeof t[0] == "object" ? t[0] : { onScroll: t[0] }, s = A(), d = T(u);
7
7
  d.current = u;
8
8
  const [m, g] = _(!1), l = T({ x: 0, y: 0 });
9
9
  return j(() => {
10
- if (!r && !i.state) return;
11
- const s = r ? O(r) : i.current;
12
- if (!s) return;
13
- const p = (n) => {
10
+ if (!r && !s.state) return;
11
+ const i = (r ? O(r) : s.current) ?? window, p = (n) => {
14
12
  g(!1), u?.onStop?.(n);
15
13
  }, S = (n) => {
16
14
  g(!0);
17
- const e = n.target === document ? n.target.documentElement : n.target, { display: E, flexDirection: R, direction: H } = e.style, y = H === "rtl" ? -1 : 1, c = e.scrollLeft;
15
+ const e = n.target === document ? n.target.documentElement : n.target, { display: E, flexDirection: R, direction: D } = e.style, y = D === "rtl" ? -1 : 1, c = e.scrollLeft;
18
16
  let o = e.scrollTop;
19
17
  e instanceof Document && !o && (o = window.document.body.scrollTop);
20
- const f = d.current?.offset, v = c * y <= (f?.left ?? 0), x = c * y + e.clientWidth >= e.scrollWidth - (f?.right ?? 0) - D, h = o <= (f?.top ?? 0), L = o + e.clientHeight >= e.scrollHeight - (f?.bottom ?? 0) - D, a = E === "flex" && R === "column-reverse", b = E === "flex" && R === "column-reverse", w = {
18
+ const f = d.current?.offset, v = c * y <= (f?.left ?? 0), x = c * y + e.clientWidth >= e.scrollWidth - (f?.right ?? 0) - w, h = o <= (f?.top ?? 0), L = o + e.clientHeight >= e.scrollHeight - (f?.bottom ?? 0) - w, a = E === "flex" && R === "column-reverse", b = E === "flex" && R === "column-reverse", H = {
21
19
  x: c,
22
20
  y: o,
23
21
  directions: {
@@ -33,13 +31,13 @@ const D = 1, V = (...t) => {
33
31
  bottom: a ? h : L
34
32
  }
35
33
  };
36
- l.current = { x: c, y: o }, d.current?.onScroll?.(w, n);
34
+ l.current = { x: c, y: o }, d.current?.onScroll?.(H, n);
37
35
  };
38
- return s.addEventListener("scroll", S), s.addEventListener("scrollend", p), () => {
39
- s.removeEventListener("scroll", S), s.removeEventListener("scrollend", p);
36
+ return i.addEventListener("scroll", S), i.addEventListener("scrollend", p), () => {
37
+ i.removeEventListener("scroll", S), i.removeEventListener("scrollend", p);
40
38
  };
41
- }, [r, i.state]), r ? m : {
42
- ref: i,
39
+ }, [r, s.state]), r ? m : {
40
+ ref: s,
43
41
  scrolling: m
44
42
  };
45
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useScroll.mjs","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 (target: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): 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 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;\n\n if (!element) return;\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":";;;;AAUA,MAAMA,IAAiC,GAiH1BC,IAAa,IAAIC,MAAkB;AAC9C,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,IACtB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,GAGtBI,IAAcC,EAAA,GACdC,IAAqBC,EAAOJ,CAAO;AACzC,EAAAG,EAAmB,UAAUH;AAE7B,QAAM,CAACK,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAoBJ,EAAO,EAAE,GAAG,GAAG,GAAG,GAAG;AAqE/C,SAnEAK,EAAU,MAAM;AACd,QAAI,CAACX,KAAU,CAACG,EAAY,MAAO;AACnC,UAAMS,IAAWZ,IAASa,EAAWb,CAAM,IAAIG,EAAY;AAE3D,QAAI,CAACS,EAAS;AAEd,UAAME,IAAc,CAACC,MAAiB;AACpC,MAAAP,EAAa,EAAK,GAClBN,GAAS,SAASa,CAAK;AAAA,IAAA,GAGnBC,IAAW,CAACD,MAAiB;AACjC,MAAAP,EAAa,EAAI;AACjB,YAAMR,IACJe,EAAM,WAAW,WAAYA,EAAM,OAAoB,kBAAkBA,EAAM,QAG3E,EAAE,SAAAE,GAAS,eAAAC,GAAe,WAAAC,EAAA,IAAcnB,EAAO,OAC/CoB,IAAsBD,MAAc,QAAQ,KAAK,GAEjDE,IAAarB,EAAO;AAC1B,UAAIsB,IAAYtB,EAAO;AACvB,MAAIA,aAAkB,YAAY,CAACsB,MAAWA,IAAY,OAAO,SAAS,KAAK;AAE/E,YAAMC,IAASlB,EAAmB,SAAS,QACrCmB,IAAOH,IAAaD,MAAwBG,GAAQ,QAAQ,IAC5DE,IACJJ,IAAaD,IAAsBpB,EAAO,eAC1CA,EAAO,eAAeuB,GAAQ,SAAS,KAAK1B,GACxC6B,IAAMJ,MAAcC,GAAQ,OAAO,IACnCI,IACJL,IAAYtB,EAAO,gBACnBA,EAAO,gBAAgBuB,GAAQ,UAAU,KAAK1B,GAE1C+B,IAAkBX,MAAY,UAAUC,MAAkB,kBAC1DW,IAAeZ,MAAY,UAAUC,MAAkB,kBAEvDnB,IAAS;AAAA,QACb,GAAGsB;AAAA,QACH,GAAGC;AAAA,QACH,YAAY;AAAA,UACV,MAAMD,IAAaX,EAAkB,QAAQ;AAAA,UAC7C,OAAOW,IAAaX,EAAkB,QAAQ;AAAA,UAC9C,KAAKY,IAAYZ,EAAkB,QAAQ;AAAA,UAC3C,QAAQY,IAAYZ,EAAkB,QAAQ;AAAA,QAAA;AAAA,QAEhD,SAAS;AAAA,UACP,MAAMmB,IAAeJ,IAAQD;AAAA,UAC7B,OAAOK,IAAeL,IAAOC;AAAA,UAC7B,KAAKG,IAAkBD,IAASD;AAAA,UAChC,QAAQE,IAAkBF,IAAMC;AAAA,QAAA;AAAA,MAClC;AAGF,MAAAjB,EAAkB,UAAU,EAAE,GAAGW,GAAY,GAAGC,EAAA,GAChDjB,EAAmB,SAAS,WAAWN,GAAQgB,CAAK;AAAA,IAAA;AAGtD,WAAAH,EAAQ,iBAAiB,UAAUI,CAAQ,GAC3CJ,EAAQ,iBAAiB,aAAaE,CAAW,GAE1C,MAAM;AACX,MAAAF,EAAQ,oBAAoB,UAAUI,CAAQ,GAC9CJ,EAAQ,oBAAoB,aAAaE,CAAW;AAAA,IAAA;AAAA,EACtD,GACC,CAACd,GAAQG,EAAY,KAAK,CAAC,GAE1BH,IAAeO,IACZ;AAAA,IACL,KAAKJ;AAAA,IACL,WAAAI;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useScroll.mjs","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":";;;;AAUA,MAAMA,IAAiC,GAoH1BC,IAAa,IAAIC,MAAkB;AAC9C,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,IACtB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,GAGtBI,IAAcC,EAAA,GACdC,IAAqBC,EAAOJ,CAAO;AACzC,EAAAG,EAAmB,UAAUH;AAE7B,QAAM,CAACK,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAoBJ,EAAO,EAAE,GAAG,GAAG,GAAG,GAAG;AAmE/C,SAjEAK,EAAU,MAAM;AACd,QAAI,CAACX,KAAU,CAACG,EAAY,MAAO;AACnC,UAAMS,KAAYZ,IAASa,EAAWb,CAAM,IAAIG,EAAY,YAAwB,QAE9EW,IAAc,CAACC,MAAiB;AACpC,MAAAP,EAAa,EAAK,GAClBN,GAAS,SAASa,CAAK;AAAA,IAAA,GAGnBC,IAAW,CAACD,MAAiB;AACjC,MAAAP,EAAa,EAAI;AACjB,YAAMR,IACJe,EAAM,WAAW,WAAYA,EAAM,OAAoB,kBAAkBA,EAAM,QAG3E,EAAE,SAAAE,GAAS,eAAAC,GAAe,WAAAC,EAAA,IAAcnB,EAAO,OAC/CoB,IAAsBD,MAAc,QAAQ,KAAK,GAEjDE,IAAarB,EAAO;AAC1B,UAAIsB,IAAYtB,EAAO;AACvB,MAAIA,aAAkB,YAAY,CAACsB,MAAWA,IAAY,OAAO,SAAS,KAAK;AAE/E,YAAMC,IAASlB,EAAmB,SAAS,QACrCmB,IAAOH,IAAaD,MAAwBG,GAAQ,QAAQ,IAC5DE,IACJJ,IAAaD,IAAsBpB,EAAO,eAC1CA,EAAO,eAAeuB,GAAQ,SAAS,KAAK1B,GACxC6B,IAAMJ,MAAcC,GAAQ,OAAO,IACnCI,IACJL,IAAYtB,EAAO,gBACnBA,EAAO,gBAAgBuB,GAAQ,UAAU,KAAK1B,GAE1C+B,IAAkBX,MAAY,UAAUC,MAAkB,kBAC1DW,IAAeZ,MAAY,UAAUC,MAAkB,kBAEvDnB,IAAS;AAAA,QACb,GAAGsB;AAAA,QACH,GAAGC;AAAA,QACH,YAAY;AAAA,UACV,MAAMD,IAAaX,EAAkB,QAAQ;AAAA,UAC7C,OAAOW,IAAaX,EAAkB,QAAQ;AAAA,UAC9C,KAAKY,IAAYZ,EAAkB,QAAQ;AAAA,UAC3C,QAAQY,IAAYZ,EAAkB,QAAQ;AAAA,QAAA;AAAA,QAEhD,SAAS;AAAA,UACP,MAAMmB,IAAeJ,IAAQD;AAAA,UAC7B,OAAOK,IAAeL,IAAOC;AAAA,UAC7B,KAAKG,IAAkBD,IAASD;AAAA,UAChC,QAAQE,IAAkBF,IAAMC;AAAA,QAAA;AAAA,MAClC;AAGF,MAAAjB,EAAkB,UAAU,EAAE,GAAGW,GAAY,GAAGC,EAAA,GAChDjB,EAAmB,SAAS,WAAWN,GAAQgB,CAAK;AAAA,IAAA;AAGtD,WAAAH,EAAQ,iBAAiB,UAAUI,CAAQ,GAC3CJ,EAAQ,iBAAiB,aAAaE,CAAW,GAE1C,MAAM;AACX,MAAAF,EAAQ,oBAAoB,UAAUI,CAAQ,GAC9CJ,EAAQ,oBAAoB,aAAaE,CAAW;AAAA,IAAA;AAAA,EACtD,GACC,CAACd,GAAQG,EAAY,KAAK,CAAC,GAE1BH,IAAeO,IACZ;AAAA,IACL,KAAKJ;AAAA,IACL,WAAAI;AAAA,EAAA;AAEJ;"}
@@ -1,36 +1,36 @@
1
- import { useEffect as h } from "react";
2
- import { useRefState as v } from "../useRefState/useRefState.mjs";
3
- import { isTarget as k } from "../../utils/helpers/isTarget.mjs";
4
- import { getElement as l } from "../../utils/helpers/getElement.mjs";
5
- const d = (...r) => {
6
- const e = k(r[0]) ? r[0] : void 0, s = e ? r[1] : r[0], t = v(), {
7
- behavior: f = "smooth",
8
- block: u = "start",
9
- inline: b = "nearest",
10
- enabled: n = !0
11
- } = s ?? {};
12
- h(() => {
13
- if (!n || !e && !t.state) return;
14
- const o = e ? l(e) : t.current;
15
- o && o.scrollIntoView({
16
- behavior: f,
17
- block: u,
18
- inline: b
1
+ import { useRef as h } from "react";
2
+ import { useIsomorphicLayoutEffect as g } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
+ import { useRefState as p } from "../useRefState/useRefState.mjs";
4
+ import { isTarget as v } from "../../utils/helpers/isTarget.mjs";
5
+ import { getElement as w } from "../../utils/helpers/getElement.mjs";
6
+ const y = (...t) => {
7
+ const e = v(t[0]) ? t[0] : void 0, c = e ? t[1] : t[0], o = p(), {
8
+ behavior: l = "smooth",
9
+ block: s = "start",
10
+ inline: f = "nearest",
11
+ immediately: u = !0
12
+ } = c ?? {}, n = h(null);
13
+ g(() => {
14
+ if (!u || !e && !o.state) return;
15
+ const r = (e ? w(e) : o.current) ?? window;
16
+ n.current = r, r.scrollIntoView({
17
+ behavior: l,
18
+ block: s,
19
+ inline: f
19
20
  });
20
- }, [e, t.state, n]);
21
- const i = (o) => {
22
- const c = e ? l(e) : t.current;
23
- if (!c) return;
24
- const { behavior: m, block: a, inline: g } = o ?? {};
25
- c.scrollIntoView({
21
+ }, [e, o.state]);
22
+ const i = (r) => {
23
+ if (!n.current) return;
24
+ const { behavior: m, block: a, inline: b } = r ?? {};
25
+ n.current.scrollIntoView({
26
26
  behavior: m,
27
27
  block: a,
28
- inline: g
28
+ inline: b
29
29
  });
30
30
  };
31
- return e ? { trigger: i } : { ref: t, trigger: i };
31
+ return e ? { trigger: i } : { ref: o, trigger: i };
32
32
  };
33
33
  export {
34
- d as useScrollIntoView
34
+ y as useScrollIntoView
35
35
  };
36
36
  //# sourceMappingURL=useScrollIntoView.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollIntoView.mjs","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.ts"],"sourcesContent":["import { useEffect } 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 scroll into view options type */\nexport interface UseScrollIntoViewOptions extends ScrollIntoViewOptions {\n /** Whether to enable the scroll into view */\n enabled?: boolean;\n}\n\n/** The scroll into view return type */\nexport interface UseScrollIntoViewReturn {\n /** Function to scroll element into view */\n trigger: (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => void;\n}\n\nexport interface UseScrollIntoView {\n <Target extends Element>(\n options?: UseScrollIntoViewOptions,\n target?: never\n ): UseScrollIntoViewReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;\n}\n\n/**\n * @name useScrollIntoView\n * @description - Hook that provides functionality to scroll an element into view\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element to scroll into view\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn} Object containing scroll function\n *\n * @example\n * const { trigger } = useScrollIntoView(ref);\n *\n * @overload\n * @template Target The target element\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn & { ref: StateRef<Target> }} Object containing scroll function and ref\n *\n * @example\n * const { ref, trigger } = useScrollIntoView<HTMLDivElement>();\n */\nexport const useScrollIntoView = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollIntoViewOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const {\n behavior = 'smooth',\n block = 'start',\n inline = 'nearest',\n enabled = true\n } = options ?? {};\n\n useEffect(() => {\n if (!enabled) return;\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n }, [target, internalRef.state, enabled]);\n\n const trigger = (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const { behavior, block, inline } = params ?? {};\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n };\n\n if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollIntoView;\n"],"names":["useScrollIntoView","params","target","isTarget","options","internalRef","useRefState","behavior","block","inline","enabled","useEffect","element","getElement","trigger"],"mappings":";;;;AA6DO,MAAMA,IAAqB,IAAIC,MAAkB;AACtD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCI,IAAcC,EAAA,GACd;AAAA,IACJ,UAAAC,IAAW;AAAA,IACX,OAAAC,IAAQ;AAAA,IACR,QAAAC,IAAS;AAAA,IACT,SAAAC,IAAU;AAAA,EAAA,IACRN,KAAW,CAAA;AAEf,EAAAO,EAAU,MAAM;AAEd,QADI,CAACD,KACD,CAACR,KAAU,CAACG,EAAY,MAAO;AAEnC,UAAMO,IAAWV,IAASW,EAAWX,CAAM,IAAIG,EAAY;AAC3D,IAAKO,KAELA,EAAQ,eAAe;AAAA,MACrB,UAAAL;AAAA,MACA,OAAAC;AAAA,MACA,QAAAC;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAACP,GAAQG,EAAY,OAAOK,CAAO,CAAC;AAEvC,QAAMI,IAAU,CAACb,MAIX;AACJ,UAAMW,IAAWV,IAASW,EAAWX,CAAM,IAAIG,EAAY;AAC3D,QAAI,CAACO,EAAS;AAEd,UAAM,EAAE,UAAAL,GAAU,OAAAC,GAAO,QAAAC,MAAWR,KAAU,CAAA;AAE9C,IAAAW,EAAQ,eAAe;AAAA,MACrB,UAAAL;AAAAA,MACA,OAAAC;AAAAA,MACA,QAAAC;AAAAA,IAAA,CACD;AAAA,EAAA;AAGH,SAAIP,IAAe,EAAE,SAAAY,EAAA,IACd,EAAE,KAAKT,GAAa,SAAAS,EAAA;AAC7B;"}
1
+ {"version":3,"file":"useScrollIntoView.mjs","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.ts"],"sourcesContent":["import { useRef } 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\n/** The scroll into view options type */\nexport interface UseScrollIntoViewOptions extends ScrollIntoViewOptions {\n /** Whether to immediately the scroll into view */\n immediately?: boolean;\n}\n\n/** The scroll into view return type */\nexport interface UseScrollIntoViewReturn {\n /** Function to scroll element into view */\n trigger: (params?: {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n }) => void;\n}\n\nexport interface UseScrollIntoView {\n <Target extends Element>(\n options?: UseScrollIntoViewOptions,\n target?: never\n ): UseScrollIntoViewReturn & { ref: StateRef<Target> };\n\n (target?: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;\n}\n\n/**\n * @name useScrollIntoView\n * @description - Hook that provides functionality to scroll an element into view\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to scroll into view\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn} Object containing scroll function\n *\n * @example\n * const { trigger } = useScrollIntoView(ref);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior\n * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment\n * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment\n * @returns {UseScrollIntoViewReturn & { ref: StateRef<Target> }} Object containing scroll function and ref\n *\n * @example\n * const { ref, trigger } = useScrollIntoView<HTMLDivElement>();\n */\nexport const useScrollIntoView = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollIntoViewOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const {\n behavior = 'smooth',\n block = 'start',\n inline = 'nearest',\n immediately = true\n } = options ?? {};\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (!immediately) return;\n if (!target && !internalRef.state) return;\n\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n elementRef.current = element;\n\n element.scrollIntoView({\n behavior,\n block,\n inline\n });\n }, [target, internalRef.state]);\n\n const trigger = (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 if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollIntoView;\n"],"names":["useScrollIntoView","params","target","isTarget","options","internalRef","useRefState","behavior","block","inline","immediately","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","trigger"],"mappings":";;;;;AAgEO,MAAMA,IAAqB,IAAIC,MAAkB;AACtD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCI,IAAcC,EAAA,GACd;AAAA,IACJ,UAAAC,IAAW;AAAA,IACX,OAAAC,IAAQ;AAAA,IACR,QAAAC,IAAS;AAAA,IACT,aAAAC,IAAc;AAAA,EAAA,IACZN,KAAW,CAAA,GACTO,IAAaC,EAAgB,IAAI;AAEvC,EAAAC,EAA0B,MAAM;AAE9B,QADI,CAACH,KACD,CAACR,KAAU,CAACG,EAAY,MAAO;AAEnC,UAAMS,KAAYZ,IAASa,EAAWb,CAAM,IAAIG,EAAY,YAAwB;AAEpF,IAAAM,EAAW,UAAUG,GAErBA,EAAQ,eAAe;AAAA,MACrB,UAAAP;AAAA,MACA,OAAAC;AAAA,MACA,QAAAC;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAACP,GAAQG,EAAY,KAAK,CAAC;AAE9B,QAAMW,IAAU,CAACf,MAIX;AACJ,QAAI,CAACU,EAAW,QAAS;AAEzB,UAAM,EAAE,UAAAJ,GAAU,OAAAC,GAAO,QAAAC,MAAWR,KAAU,CAAA;AAE9C,IAAAU,EAAW,QAAQ,eAAe;AAAA,MAChC,UAAAJ;AAAAA,MACA,OAAAC;AAAAA,MACA,QAAAC;AAAAA,IAAA,CACD;AAAA,EAAA;AAGH,SAAIP,IAAe,EAAE,SAAAc,EAAA,IACd,EAAE,KAAKX,GAAa,SAAAW,EAAA;AAC7B;"}
@@ -1,21 +1,21 @@
1
- import { useLayoutEffect as p } from "react";
1
+ import { useRef as g } from "react";
2
+ import { useIsomorphicLayoutEffect as h } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
2
3
  import { useRefState as v } from "../useRefState/useRefState.mjs";
3
- import { isTarget as h } from "../../utils/helpers/isTarget.mjs";
4
- import { getElement as f } from "../../utils/helpers/getElement.mjs";
5
- const E = (...r) => {
6
- const t = h(r[0]) ? r[0] : void 0, c = t ? r[1] : r[0], { x: s, y: u, behavior: l = "auto", enabled: m = !0 } = c ?? {}, e = v();
7
- p(() => {
8
- if (!m || !t && !e.state) return;
9
- const o = t ? f(t) : e.current;
10
- o && o.scrollTo({ top: u, left: s, behavior: l });
11
- }, [t, e.state]);
12
- const n = (o) => {
13
- const i = t ? f(t) : e.current;
14
- if (!i) return;
15
- const { x: a, y: b, behavior: g } = o ?? {};
16
- i.scrollTo({ left: a, top: b, behavior: g });
4
+ import { isTarget as y } from "../../utils/helpers/isTarget.mjs";
5
+ import { getElement as b } from "../../utils/helpers/getElement.mjs";
6
+ const E = (...e) => {
7
+ const t = y(e[0]) ? e[0] : void 0, c = t ? e[1] : e[0], { x: f, y: s, behavior: u = "auto", immediately: l = !0 } = c ?? {}, r = v(), n = g(null);
8
+ h(() => {
9
+ if (!l || !t && !r.state) return;
10
+ const o = (t ? b(t) : r.current) ?? window;
11
+ n.current = o, o.scrollTo({ top: s, left: f, behavior: u });
12
+ }, [t, r.state]);
13
+ const i = (o) => {
14
+ if (!n.current) return;
15
+ const { x: m, y: a, behavior: p } = o ?? {};
16
+ n.current.scrollTo({ left: m, top: a, behavior: p });
17
17
  };
18
- return t ? { trigger: n } : { ref: e, trigger: n };
18
+ return t ? { trigger: i } : { ref: r, trigger: i };
19
19
  };
20
20
  export {
21
21
  E as useScrollTo
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollTo.mjs","sources":["../../../../src/hooks/useScrollTo/useScrollTo.ts"],"sourcesContent":["import { useLayoutEffect } 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 scroll to options type */\nexport interface UseScrollToOptions {\n /** The scrolling behavior */\n behavior?: ScrollBehavior;\n /** Whether to enable the scroll to */\n enabled?: boolean;\n /** The horizontal position to scroll to */\n x: number;\n /** The vertical position to scroll to */\n y: number;\n}\n\n/** The use scroll to return type */\nexport interface UseScrollToReturn {\n /** The state of scrolling */\n trigger: (params?: { x: number; y: number; behavior?: ScrollBehavior }) => void;\n}\n\nexport interface UseScrollTo {\n <Target extends Element>(\n options?: UseScrollToOptions,\n target?: never\n ): UseScrollToReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;\n}\n\n/**\n * @name useScrollTo\n * @description - Hook for scrolling to a specific element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element for scrolling to\n * @param {UseScrollToOptions} [options] The scroll options\n * @returns {UseScrollToReturn} The scroll trigger function\n *\n * @example\n * const trigger = useScrollTo(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {UseScrollToOptions} [options] The scroll options\n * @returns {UseScrollToReturn & { ref: StateRef<Target> }} The scroll trigger function and ref\n *\n * @example\n * const { ref, trigger } = useScrollTo(options);\n */\nexport const useScrollTo = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollToOptions | undefined;\n const { x, y, behavior = 'auto', enabled = true } = options ?? {};\n const internalRef = useRefState<Element>();\n\n useLayoutEffect(() => {\n if (!enabled) return;\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n element.scrollTo({ top: y, left: x, behavior });\n }, [target, internalRef.state]);\n\n const trigger = (params?: { x: number; y: number; behavior?: ScrollBehavior }) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n const { x, y, behavior } = params ?? {};\n\n element.scrollTo({ left: x, top: y, behavior });\n };\n\n if (target) return { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollTo;\n"],"names":["useScrollTo","params","target","isTarget","options","x","y","behavior","enabled","internalRef","useRefState","useLayoutEffect","element","getElement","trigger"],"mappings":";;;;AA2DO,MAAMA,IAAe,IAAIC,MAAkB;AAChD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACxC,EAAE,GAAAI,GAAG,GAAAC,GAAG,UAAAC,IAAW,QAAQ,SAAAC,IAAU,OAASJ,KAAW,CAAA,GACzDK,IAAcC,EAAA;AAEpB,EAAAC,EAAgB,MAAM;AAEpB,QADI,CAACH,KACD,CAACN,KAAU,CAACO,EAAY,MAAO;AAEnC,UAAMG,IAAWV,IAASW,EAAWX,CAAM,IAAIO,EAAY;AAC3D,IAAKG,KAELA,EAAQ,SAAS,EAAE,KAAKN,GAAG,MAAMD,GAAG,UAAAE,GAAU;AAAA,EAAA,GAC7C,CAACL,GAAQO,EAAY,KAAK,CAAC;AAE9B,QAAMK,IAAU,CAACb,MAAiE;AAChF,UAAMW,IAAWV,IAASW,EAAWX,CAAM,IAAIO,EAAY;AAC3D,QAAI,CAACG,EAAS;AACd,UAAM,EAAE,GAAAP,GAAG,GAAAC,GAAG,UAAAC,MAAaN,KAAU,CAAA;AAErC,IAAAW,EAAQ,SAAS,EAAE,MAAMP,GAAG,KAAKC,GAAG,UAAAC,GAAU;AAAA,EAAA;AAGhD,SAAIL,IAAe,EAAE,SAAAY,EAAA,IACd,EAAE,KAAKL,GAAa,SAAAK,EAAA;AAC7B;"}
1
+ {"version":3,"file":"useScrollTo.mjs","sources":["../../../../src/hooks/useScrollTo/useScrollTo.ts"],"sourcesContent":["import { useRef } 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\n/** The use scroll to options type */\nexport interface UseScrollToOptions {\n /** The scrolling behavior */\n behavior?: ScrollBehavior;\n /** Whether to immediately the scroll to */\n immediately?: boolean;\n /** The horizontal position to scroll to */\n x: number;\n /** The vertical position to scroll to */\n y: number;\n}\n\n/** The use scroll to return type */\nexport interface UseScrollToReturn {\n /** The state of scrolling */\n trigger: (params?: { x: number; y: number; behavior?: ScrollBehavior }) => void;\n}\n\nexport interface UseScrollTo {\n <Target extends Element>(\n options?: UseScrollToOptions,\n target?: never\n ): UseScrollToReturn & { ref: StateRef<Target> };\n\n (target?: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;\n}\n\n/**\n * @name useScrollTo\n * @description - Hook for scrolling to a specific element\n * @category Sensors\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element for scrolling to\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {number} [options.x] The horizontal position to scroll to\n * @param {number} [options.y] The vertical position to scroll to\n * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior\n * @returns {UseScrollToReturn} The scroll trigger function\n *\n * @example\n * const trigger = useScrollTo(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.immediately=true] Whether to scroll immediately\n * @param {number} [options.x] The horizontal position to scroll to\n * @param {number} [options.y] The vertical position to scroll to\n * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior\n * @returns {UseScrollToReturn & { ref: StateRef<Target> }} The scroll trigger function and ref\n *\n * @example\n * const { ref, trigger } = useScrollTo(options);\n */\nexport const useScrollTo = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseScrollToOptions | undefined;\n const { x, y, behavior = 'auto', immediately = true } = options ?? {};\n const internalRef = useRefState<Element>();\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (!immediately) return;\n if (!target && !internalRef.state) return;\n\n const element = ((target ? getElement(target) : internalRef.current) as Element) ?? window;\n\n elementRef.current = element;\n\n element.scrollTo({ top: y, left: x, behavior });\n }, [target, internalRef.state]);\n\n const trigger = (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 { trigger };\n return { ref: internalRef, trigger };\n}) as UseScrollTo;\n"],"names":["useScrollTo","params","target","isTarget","options","x","y","behavior","immediately","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","trigger"],"mappings":";;;;;AAkEO,MAAMA,IAAe,IAAIC,MAAkB;AAChD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACxC,EAAE,GAAAI,GAAG,GAAAC,GAAG,UAAAC,IAAW,QAAQ,aAAAC,IAAc,OAASJ,KAAW,CAAA,GAC7DK,IAAcC,EAAA,GACdC,IAAaC,EAAgB,IAAI;AAEvC,EAAAC,EAA0B,MAAM;AAE9B,QADI,CAACL,KACD,CAACN,KAAU,CAACO,EAAY,MAAO;AAEnC,UAAMK,KAAYZ,IAASa,EAAWb,CAAM,IAAIO,EAAY,YAAwB;AAEpF,IAAAE,EAAW,UAAUG,GAErBA,EAAQ,SAAS,EAAE,KAAKR,GAAG,MAAMD,GAAG,UAAAE,GAAU;AAAA,EAAA,GAC7C,CAACL,GAAQO,EAAY,KAAK,CAAC;AAE9B,QAAMO,IAAU,CAACf,MAAiE;AAChF,QAAI,CAACU,EAAW,QAAS;AAEzB,UAAM,EAAE,GAAAN,GAAG,GAAAC,GAAG,UAAAC,MAAaN,KAAU,CAAA;AAErC,IAAAU,EAAW,QAAQ,SAAS,EAAE,MAAMN,GAAG,KAAKC,GAAG,UAAAC,GAAU;AAAA,EAAA;AAG3D,SAAIL,IAAe,EAAE,SAAAc,EAAA,IACd,EAAE,KAAKP,GAAa,SAAAO,EAAA;AAC7B;"}
@@ -34,8 +34,8 @@ export interface UseScrollCallbackParams {
34
34
  };
35
35
  }
36
36
  export interface UseScroll {
37
- (target: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): boolean;
38
- (target: HookTarget, options?: UseScrollOptions): boolean;
37
+ (target?: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): boolean;
38
+ (target?: HookTarget, options?: UseScrollOptions): boolean;
39
39
  <Target extends Element>(callback?: (params: UseScrollCallbackParams, event: Event) => void, target?: never): {
40
40
  ref: StateRef<Target>;
41
41
  scrolling: boolean;
@@ -75,7 +75,7 @@ export interface UseScroll {
75
75
  *
76
76
  * @overload
77
77
  * @template Target The target element
78
- * @param {Target} target The target element to scroll
78
+ * @param {Target} [target=window] The target element to scroll
79
79
  * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling
80
80
  * @param {number} [options.offset.left=0] The left offset for arrived states
81
81
  * @param {number} [options.offset.right=0] The right offset for arrived states
@@ -2,8 +2,8 @@ import { HookTarget } from '../../utils/helpers';
2
2
  import { StateRef } from '../useRefState/useRefState';
3
3
  /** The scroll into view options type */
4
4
  export interface UseScrollIntoViewOptions extends ScrollIntoViewOptions {
5
- /** Whether to enable the scroll into view */
6
- enabled?: boolean;
5
+ /** Whether to immediately the scroll into view */
6
+ immediately?: boolean;
7
7
  }
8
8
  /** The scroll into view return type */
9
9
  export interface UseScrollIntoViewReturn {
@@ -18,7 +18,7 @@ export interface UseScrollIntoView {
18
18
  <Target extends Element>(options?: UseScrollIntoViewOptions, target?: never): UseScrollIntoViewReturn & {
19
19
  ref: StateRef<Target>;
20
20
  };
21
- (target: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;
21
+ (target?: HookTarget, options?: UseScrollIntoViewOptions): UseScrollIntoViewReturn;
22
22
  }
23
23
  /**
24
24
  * @name useScrollIntoView
@@ -27,7 +27,8 @@ export interface UseScrollIntoView {
27
27
  * @usage low
28
28
  *
29
29
  * @overload
30
- * @param {HookTarget} target The target element to scroll into view
30
+ * @param {HookTarget} [target=window] The target element to scroll into view
31
+ * @param {boolean} [options.immediately=true] Whether to scroll immediately
31
32
  * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior
32
33
  * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment
33
34
  * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment
@@ -38,6 +39,7 @@ export interface UseScrollIntoView {
38
39
  *
39
40
  * @overload
40
41
  * @template Target The target element
42
+ * @param {boolean} [options.immediately=true] Whether to scroll immediately
41
43
  * @param {ScrollBehavior} [options.behavior='smooth'] The scrolling behavior
42
44
  * @param {ScrollLogicalPosition} [options.block='start'] The vertical alignment
43
45
  * @param {ScrollLogicalPosition} [options.inline='nearest'] The horizontal alignment
@@ -4,8 +4,8 @@ import { StateRef } from '../useRefState/useRefState';
4
4
  export interface UseScrollToOptions {
5
5
  /** The scrolling behavior */
6
6
  behavior?: ScrollBehavior;
7
- /** Whether to enable the scroll to */
8
- enabled?: boolean;
7
+ /** Whether to immediately the scroll to */
8
+ immediately?: boolean;
9
9
  /** The horizontal position to scroll to */
10
10
  x: number;
11
11
  /** The vertical position to scroll to */
@@ -24,7 +24,7 @@ export interface UseScrollTo {
24
24
  <Target extends Element>(options?: UseScrollToOptions, target?: never): UseScrollToReturn & {
25
25
  ref: StateRef<Target>;
26
26
  };
27
- (target: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;
27
+ (target?: HookTarget, options?: UseScrollToOptions): UseScrollToReturn;
28
28
  }
29
29
  /**
30
30
  * @name useScrollTo
@@ -33,8 +33,11 @@ export interface UseScrollTo {
33
33
  * @usage low
34
34
  *
35
35
  * @overload
36
- * @param {HookTarget} target The target element for scrolling to
37
- * @param {UseScrollToOptions} [options] The scroll options
36
+ * @param {HookTarget} [target=window] The target element for scrolling to
37
+ * @param {boolean} [options.immediately=true] Whether to scroll immediately
38
+ * @param {number} [options.x] The horizontal position to scroll to
39
+ * @param {number} [options.y] The vertical position to scroll to
40
+ * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior
38
41
  * @returns {UseScrollToReturn} The scroll trigger function
39
42
  *
40
43
  * @example
@@ -42,7 +45,10 @@ export interface UseScrollTo {
42
45
  *
43
46
  * @overload
44
47
  * @template Target The target element
45
- * @param {UseScrollToOptions} [options] The scroll options
48
+ * @param {boolean} [options.immediately=true] Whether to scroll immediately
49
+ * @param {number} [options.x] The horizontal position to scroll to
50
+ * @param {number} [options.y] The vertical position to scroll to
51
+ * @param {ScrollBehavior} [options.behavior=auto] The scrolling behavior
46
52
  * @returns {UseScrollToReturn & { ref: StateRef<Target> }} The scroll trigger function and ref
47
53
  *
48
54
  * @example
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siberiacancode/reactuse",
3
- "version": "0.2.30",
3
+ "version": "0.2.31",
4
4
  "description": "The ultimate collection of react hooks",
5
5
  "author": {
6
6
  "name": "SIBERIA CAN CODE 🧊",