reactives-hooks 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/state/useToggle.ts","../src/hooks/state/useBoolean.ts","../src/hooks/state/useCounter.ts","../src/hooks/state/useMap.ts","../src/hooks/state/useSet.ts","../src/hooks/state/usePrevious.ts","../src/hooks/state/useStateHistory.ts","../src/hooks/storage/useLocalStorage.ts","../src/hooks/storage/useSessionStorage.ts","../src/hooks/dom/useEventListener.ts","../src/hooks/dom/useClickOutside.ts","../src/hooks/dom/useHover.ts","../src/hooks/dom/useIntersectionObserver.ts","../src/hooks/dom/useResizeObserver.ts","../src/hooks/dom/useMutationObserver.ts","../src/hooks/sensor/useMediaQuery.ts","../src/hooks/sensor/useWindowSize.ts","../src/hooks/sensor/useScroll.ts","../src/hooks/sensor/useMouse.ts","../src/hooks/sensor/useNetwork.ts","../src/hooks/performance/useDebounceValue.ts","../src/hooks/performance/useDebounceCallback.ts","../src/hooks/performance/useThrottleValue.ts","../src/hooks/performance/useThrottleCallback.ts","../src/hooks/lifecycle/useMount.ts","../src/hooks/lifecycle/useUnmount.ts","../src/hooks/lifecycle/useUpdateEffect.ts","../src/hooks/lifecycle/useIsMounted.ts","../src/hooks/lifecycle/useIsomorphicLayoutEffect.ts","../src/hooks/lifecycle/useDeepCompareEffect.ts","../src/hooks/ui/useScrollLock.ts","../src/hooks/ui/useDarkMode.ts","../src/hooks/ui/useFullscreen.ts","../src/hooks/ui/useCopyToClipboard.ts","../src/hooks/ui/useHotkeys.ts","../src/hooks/data/useAsync.ts","../src/hooks/data/useFetch.ts","../src/hooks/data/useInfiniteScroll.ts","../src/hooks/data/usePagination.ts"],"names":["useState","useCallback","useRef","useEffect","getStoredValue","useLayoutEffect","useMemo"],"mappings":";;;;AAEO,SAAS,SAAA,CAAU,eAAe,KAAA,EAA6C;AACpF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,YAAY,CAAA;AAE/C,EAAA,MAAM,MAAA,GAASC,iBAAA,CAAY,CAAC,QAAA,KAAuB;AACjD,IAAA,QAAA,CAAS,CAAC,IAAA,KAAU,OAAO,aAAa,SAAA,GAAY,QAAA,GAAW,CAAC,IAAK,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,OAAO,MAAM,CAAA;AACvB;ACAO,SAAS,UAAA,CAAW,eAAe,KAAA,EAAyB;AACjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAAS,YAAY,CAAA;AAE/C,EAAA,MAAM,UAAUC,iBAAAA,CAAY,MAAM,SAAS,IAAI,CAAA,EAAG,EAAE,CAAA;AACpD,EAAA,MAAM,WAAWA,iBAAAA,CAAY,MAAM,SAAS,KAAK,CAAA,EAAG,EAAE,CAAA;AACtD,EAAA,MAAM,MAAA,GAASA,iBAAAA,CAAY,MAAM,QAAA,CAAS,CAAC,SAAS,CAAC,IAAI,CAAA,EAAG,EAAE,CAAA;AAE9D,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,QAAQ,QAAA,EAAS;AACtD;ACJO,SAAS,UAAA,CACd,YAAA,GAAe,CAAA,EACf,OAAA,GAA6B,EAAC,EACD;AAC7B,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAI,GAAI,OAAA;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAAS,YAAY,CAAA;AAE/C,EAAA,MAAM,KAAA,GAAQC,iBAAAA;AAAA,IACZ,CAAC,KAAA,KAAkB;AACjB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,IAAI,QAAQ,MAAA,EAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,KAAK,OAAO,CAAA;AACtD,MAAA,IAAI,QAAQ,MAAA,EAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,KAAK,OAAO,CAAA;AACtD,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAK,GAAG;AAAA,GACX;AAEA,EAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAY,CAAC,KAAA,GAAQ,MAAM,QAAA,CAAS,CAAC,IAAA,KAAS,KAAA,CAAM,OAAO,KAAK,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAC7F,EAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAY,CAAC,KAAA,GAAQ,MAAM,QAAA,CAAS,CAAC,IAAA,KAAS,KAAA,CAAM,OAAO,KAAK,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAC7F,EAAA,MAAM,GAAA,GAAMA,iBAAAA,CAAY,CAAC,KAAA,KAAkB,QAAA,CAAS,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAC1E,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM,QAAA,CAAS,YAAY,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEtE,EAAA,OAAO,CAAC,KAAA,EAAO,EAAE,WAAW,SAAA,EAAW,GAAA,EAAK,OAAO,CAAA;AACrD;AC3BO,SAAS,MAAA,CACd,YAAA,GAAiC,EAAC,EACA;AAClC,EAAA,MAAM,CAAC,KAAK,MAAM,CAAA,GAAID,eAAS,MAAM,IAAI,GAAA,CAAI,YAAY,CAAC,CAAA;AAE1D,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,GAAA,EAAKC,iBAAAA,CAAY,CAAC,GAAA,EAAQ,KAAA,KAAa;AACrC,MAAA,MAAA,CAAO,CAAC,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,KAAK,CAAA;AACnB,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,MAAA,EAAQA,iBAAAA,CAAY,CAAC,OAAA,KAA8B;AACjD,MAAA,MAAA,CAAO,CAAC,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,OAAA,EAAS;AAClC,UAAA,IAAA,CAAK,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,QACrB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,MAAA,EAAQA,iBAAAA,CAAY,CAAC,GAAA,KAAW;AAC9B,MAAA,MAAA,CAAO,CAAC,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,KAAA,EAAOA,kBAAY,MAAM;AACvB,MAAA,MAAA,iBAAO,IAAI,KAAK,CAAA;AAAA,IAClB,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,KAAA,EAAOA,kBAAY,MAAM;AACvB,MAAA,MAAA,CAAO,IAAI,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,IAC9B,CAAA,EAAG,EAAE;AAAA,GACP;AAEA,EAAA,OAAO,CAAC,KAAK,OAAO,CAAA;AACtB;AC1CO,SAAS,MAAA,CAAU,YAAA,GAA4B,EAAC,EAA+B;AACpF,EAAA,MAAM,CAAC,KAAK,MAAM,CAAA,GAAID,eAAS,MAAM,IAAI,GAAA,CAAI,YAAY,CAAC,CAAA;AAE1D,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,GAAA,EAAKC,iBAAAA,CAAY,CAAC,KAAA,KAAa;AAC7B,MAAA,MAAA,CAAO,CAAC,yBAAS,IAAI,GAAA,CAAI,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAAA,IAC5C,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,MAAA,EAAQA,iBAAAA,CAAY,CAAC,KAAA,KAAa;AAChC,MAAA,MAAA,CAAO,CAAC,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,KAAA,EAAOA,kBAAY,MAAM;AACvB,MAAA,MAAA,iBAAO,IAAI,KAAK,CAAA;AAAA,IAClB,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,KAAA,EAAOA,kBAAY,MAAM;AACvB,MAAA,MAAA,CAAO,IAAI,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,IAC9B,CAAA,EAAG,EAAE,CAAA;AAAA,IAEL,MAAA,EAAQA,iBAAAA,CAAY,CAAC,KAAA,KAAa;AAChC,MAAA,MAAA,CAAO,CAAC,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,QACnB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,QAChB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,EAAE;AAAA,GACP;AAEA,EAAA,OAAO,CAAC,KAAK,OAAO,CAAA;AACtB;AC9CO,SAAS,YAAe,KAAA,EAAyB;AACtD,EAAA,MAAM,GAAA,GAAMC,aAAsB,MAAS,CAAA;AAE3C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,GAAA,CAAI,OAAA,GAAU,KAAA;AAAA,EAChB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,GAAA,CAAI,OAAA;AACb;ACEO,SAAS,gBAAmB,YAAA,EAA2C;AAC5E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,eAAS,YAAY,CAAA;AAC/C,EAAA,MAAM,UAAA,GAAaE,YAAAA,CAAY,CAAC,YAAY,CAAC,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAaA,aAAO,CAAC,CAAA;AAE3B,EAAA,MAAM,GAAA,GAAMD,iBAAAA,CAAY,CAAC,QAAA,KAAgB;AACvC,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,MAAM,aAAa,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,UAAU,CAAC,CAAA;AAC1D,IAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AACxB,IAAA,UAAA,CAAW,OAAA,GAAU,UAAA;AACrB,IAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAA,GAAS,CAAA;AACzC,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,kBAAY,MAAM;AAC7B,IAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAA,UAAA,CAAW,OAAA,IAAW,CAAA;AACtB,MAAA,QAAA,CAAS,UAAA,CAAW,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAE,CAAA;AAAA,IAClD;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,kBAAY,MAAM;AAC7B,IAAA,IAAI,UAAA,CAAW,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtD,MAAA,UAAA,CAAW,OAAA,IAAW,CAAA;AACtB,MAAA,QAAA,CAAS,UAAA,CAAW,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAE,CAAA;AAAA,IAClD;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA,EAAS,WAAW,OAAA,GAAU,CAAA;AAAA,IAC9B,OAAA,EAAS,UAAA,CAAW,OAAA,GAAU,UAAA,CAAW,QAAQ,MAAA,GAAS,CAAA;AAAA,IAC1D,SAAS,UAAA,CAAW;AAAA,GACtB;AACF;AC/CA,SAAS,cAAA,CAAkB,KAAa,YAAA,EAAoB;AAC1D,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC5C,IAAA,OAAO,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAU,YAAA;AAAA,EAC1C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,YAAA;AAAA,EACT;AACF;AAEO,SAAS,eAAA,CACd,KACA,YAAA,EACwD;AACxD,EAAA,MAAM,CAAC,aAAa,cAAc,CAAA,GAAID,eAAY,MAAM,cAAA,CAAe,GAAA,EAAK,YAAY,CAAC,CAAA;AAEzF,EAAA,MAAM,QAAA,GAAWC,iBAAAA;AAAA,IACf,CAAC,KAAA,KAAgC;AAC/B,MAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,QAAA,MAAM,SAAA,GAAY,KAAA,YAAiB,QAAA,GAAW,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAC5D,QAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,UAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC5D;AACA,QAAA,OAAO,SAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,MAAM,WAAA,GAAcA,kBAAY,MAAM;AACpC,IAAA,cAAA,CAAe,YAAY,CAAA;AAC3B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,IACpC;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,YAAY,CAAC,CAAA;AAEtB,EAAAE,gBAAU,MAAM;AACd,IAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAoB;AAC/C,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,aAAa,IAAA,EAAM;AACxC,QAAA,IAAI;AACF,UAAA,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAM,CAAA;AAAA,QAC5C,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AACtD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,mBAAmB,CAAA;AAAA,EACxE,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,OAAO,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAC5C;ACnDA,SAASC,eAAAA,CAAkB,KAAa,YAAA,EAAoB;AAC1D,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA;AAC9C,IAAA,OAAO,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAU,YAAA;AAAA,EAC1C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,YAAA;AAAA,EACT;AACF;AAEO,SAAS,iBAAA,CACd,KACA,YAAA,EACwD;AACxD,EAAA,MAAM,CAAC,aAAa,cAAc,CAAA,GAAIJ,eAAY,MAAMI,eAAAA,CAAe,GAAA,EAAK,YAAY,CAAC,CAAA;AAEzF,EAAA,MAAM,QAAA,GAAWH,iBAAAA;AAAA,IACf,CAAC,KAAA,KAAgC;AAC/B,MAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,QAAA,MAAM,SAAA,GAAY,KAAA,YAAiB,QAAA,GAAW,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAC5D,QAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,UAAA,MAAA,CAAO,eAAe,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC9D;AACA,QAAA,OAAO,SAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,MAAM,WAAA,GAAcA,kBAAY,MAAM;AACpC,IAAA,cAAA,CAAe,YAAY,CAAA;AAC3B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,IACtC;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,YAAY,CAAC,CAAA;AAEtB,EAAA,OAAO,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AAC5C;AClCO,SAAS,gBAAA,CACd,SAAA,EACA,OAAA,EACA,OAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,YAAA,GAAeC,aAAO,OAAO,CAAA;AAEnC,EAAAC,gBAAU,MAAM;AACd,IAAA,YAAA,CAAa,OAAA,GAAU,OAAA;AAAA,EACzB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,MAAA,GAAS,SAAS,OAAA,IAAW,MAAA;AACnC,IAAA,IAAI,CAAC,QAAQ,gBAAA,EAAkB;AAE/B,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAiB,YAAA,CAAa,QAAQ,KAAoB,CAAA;AAC5E,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,OAAO,CAAA;AACpD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,UAAU,OAAO,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,SAAA,EAAW,OAAA,EAAS,OAAO,CAAC,CAAA;AAClC;ACtBO,SAAS,gBACd,OAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAMD,aAAiB,IAAI,CAAA;AACjC,EAAA,MAAM,YAAA,GAAeA,aAAO,OAAO,CAAA;AAEnC,EAAAC,gBAAU,MAAM;AACd,IAAA,YAAA,CAAa,OAAA,GAAU,OAAA;AAAA,EACzB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAmC;AACnD,MAAA,IAAI,CAAC,IAAI,OAAA,IAAW,GAAA,CAAI,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAAG;AAChE,MAAA,YAAA,CAAa,QAAQ,KAAK,CAAA;AAAA,IAC5B,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,QAAQ,CAAA;AAC/C,IAAA,QAAA,CAAS,gBAAA,CAAiB,cAAc,QAAQ,CAAA;AAChD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,QAAQ,CAAA;AAClD,MAAA,QAAA,CAAS,mBAAA,CAAoB,cAAc,QAAQ,CAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,GAAA;AACT;ACzBO,SAAS,QAAA,GAGd;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIH,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,GAAA,GAAME,aAAiB,IAAI,CAAA;AAEjC,EAAA,MAAM,mBAAmBD,iBAAAA,CAAY,MAAM,aAAa,IAAI,CAAA,EAAG,EAAE,CAAA;AACjE,EAAA,MAAM,mBAAmBA,iBAAAA,CAAY,MAAM,aAAa,KAAK,CAAA,EAAG,EAAE,CAAA;AAElE,EAAA,MAAM,WAAA,GAAcA,iBAAAA;AAAA,IAClB,CAAC,IAAA,KAAmB;AAClB,MAAA,IAAI,IAAI,OAAA,EAAS;AACf,QAAA,GAAA,CAAI,OAAA,CAAQ,mBAAA,CAAoB,YAAA,EAAc,gBAAgB,CAAA;AAC9D,QAAA,GAAA,CAAI,OAAA,CAAQ,mBAAA,CAAoB,YAAA,EAAc,gBAAgB,CAAA;AAAA,MAChE;AACA,MAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AACd,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,gBAAA,CAAiB,cAAc,gBAAgB,CAAA;AACpD,QAAA,IAAA,CAAK,gBAAA,CAAiB,cAAc,gBAAgB,CAAA;AAAA,MACtD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,kBAAkB,gBAAgB;AAAA,GACrC;AAEA,EAAA,OAAO,CAAC,aAAa,SAAS,CAAA;AAChC;ACZO,SAAS,uBAAA,CACd,OAAA,GAA0C,EAAC,EACZ;AAC/B,EAAA,MAAM,EAAE,YAAY,CAAA,EAAG,IAAA,GAAO,MAAM,UAAA,GAAa,KAAA,EAAO,iBAAA,GAAoB,KAAA,EAAM,GAAI,OAAA;AACtF,EAAA,MAAM,GAAA,GAAMC,aAA2B,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,eAA2C,IAAI,CAAA;AAEzE,EAAA,MAAM,MAAA,GAAS,OAAO,cAAA,IAAkB,iBAAA;AAExC,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,aAAa,CAAA,KAAM;AACnB,QAAA,IAAI,aAAA,WAAwB,aAAa,CAAA;AAAA,MAC3C,CAAA;AAAA,MACA,EAAE,SAAA,EAAW,IAAA,EAAM,UAAA;AAAW,KAChC;AAEA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,GAAG,CAAC,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,CAAC,CAAA;AAExC,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,cAAA,EAAgB,OAAO,cAAA,IAAkB,KAAA;AAAA,IACzC;AAAA,GACF;AACF;ACrCO,SAAS,iBAAA,GAAwE;AACtF,EAAA,MAAM,GAAA,GAAMD,aAAiB,IAAI,CAAA;AACjC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIF,cAAAA,CAAe,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA;AAE9D,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,WAAW,IAAI,cAAA,CAAe,CAAC,CAAC,WAAW,CAAA,KAAM;AACrD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,WAAA,CAAY,WAAA;AACtC,QAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,MAC3B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,KAAK,IAAI,CAAA;AACnB;ACzBO,SAAS,mBAAA,CACd,UACA,OAAA,GAAgC,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAK,EAClC;AAC/B,EAAA,MAAM,GAAA,GAAMD,aAA2B,IAAI,CAAA;AAC3C,EAAA,MAAM,aAAA,GAAgBA,aAAO,QAAQ,CAAA;AAErC,EAAAC,gBAAU,MAAM;AACd,IAAA,aAAA,CAAc,OAAA,GAAU,QAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,CAAA,GAAI,SAAS,aAAA,CAAc,OAAA,CAAQ,GAAG,IAAI,CAAC,CAAA;AACjF,IAAA,QAAA,CAAS,OAAA,CAAQ,MAAM,OAAO,CAAA;AAC9B,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,GAAA;AACT;ACtBO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,eAAS,MAAM;AAC3C,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA;AAAA,EAClC,CAAC,CAAA;AAED,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,UAAA,CAAW,EAAE,OAAO,CAAA;AAEhE,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT;ACXO,SAAS,aAAA,GAA4B;AAC1C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAqB,OAAO;AAAA,IAClD,KAAA,EAAO,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,UAAA,GAAa,CAAA;AAAA,IAC3D,MAAA,EAAQ,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,WAAA,GAAc;AAAA,GAC/D,CAAE,CAAA;AAEF,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,YAAY,MAAA,EAAQ,MAAA,CAAO,aAAa,CAAA;AAAA,IAClE,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,IAAA;AACT;ACdO,SAAS,UAAU,OAAA,EAAyD;AACjF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIH,cAAAA,CAAyB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAEvE,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,MAAA,GAAS,SAAS,OAAA,IAAW,MAAA;AAEnC,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,WAAA,CAAY,EAAE,GAAI,MAAA,CAAkB,OAAA,IAAW,GAAG,CAAA,EAAI,MAAA,CAAkB,OAAA,IAAW,CAAA,EAAG,CAAA;AAAA,MACxF,CAAA,MAAA,IAAW,kBAAkB,WAAA,EAAa;AACxC,QAAA,WAAA,CAAY,EAAE,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,EAAG,MAAA,CAAO,WAAW,CAAA;AAAA,MAC3D;AAAA,IACF,CAAA;AAEA,IAAA,YAAA,EAAa;AACb,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,YAAA,EAAc,EAAE,OAAA,EAAS,MAAM,CAAA;AACjE,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,QAAA;AACT;ACrBO,SAAS,QAAA,GAA0B;AACxC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIH,cAAAA,CAAwB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAEtE,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,WAAA,CAAY,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA;AAAA,IAC5C,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,eAAe,CAAA;AAAA,EACtE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,QAAA;AACT;ACFO,SAAS,UAAA,GAA2B;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,eAAuB,OAAO;AAAA,IACtD,MAAA,EAAQ,OAAO,SAAA,KAAc,WAAA,GAAc,UAAU,MAAA,GAAS;AAAA,GAChE,CAAE,CAAA;AAEF,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,aAAc,SAAA,CAA6D,UAAA;AAEjF,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,QAAA,CAAS;AAAA,QACP,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,UAAU,UAAA,EAAY,QAAA;AAAA,QACtB,eAAe,UAAA,EAAY,aAAA;AAAA,QAC3B,KAAK,UAAA,EAAY,GAAA;AAAA,QACjB,UAAU,UAAA,EAAY;AAAA,OACvB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,iBAAA,EAAkB;AAClB,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,iBAAiB,CAAA;AACnD,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,iBAAiB,CAAA;AACpD,IAAA,UAAA,EAAY,gBAAA,GAAmB,UAAU,iBAAiB,CAAA;AAE1D,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,iBAAiB,CAAA;AACtD,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,iBAAiB,CAAA;AACvD,MAAA,UAAA,EAAY,mBAAA,GAAsB,UAAU,iBAAiB,CAAA;AAAA,IAC/D,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,KAAA;AACT;AC9CO,SAAS,gBAAA,CAAoB,OAAU,KAAA,EAAkB;AAC9D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIH,eAAS,KAAK,CAAA;AAE1D,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,iBAAA,CAAkB,KAAK,GAAG,KAAK,CAAA;AAC9D,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT;ACRO,SAAS,mBAAA,CACd,UACA,KAAA,EACkC;AAClC,EAAA,MAAM,WAAA,GAAcD,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,QAAA,GAAWA,aAA6C,IAAI,CAAA;AAElE,EAAAC,gBAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOF,iBAAAA;AAAA,IACL,IAAI,IAAA,KAAwB;AAC1B,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,MAAA,QAAA,CAAS,OAAA,GAAU,WAAW,MAAM,WAAA,CAAY,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;ACzBO,SAAS,gBAAA,CAAoB,OAAU,QAAA,EAAqB;AACjE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAID,eAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,WAAA,GAAcE,YAAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AAErC,EAAAC,gBAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,OAAA;AAElC,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,WAAA,CAAY,OAAA,GAAU,GAAA;AACtB,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,WAAA,CAAY,OAAA,GAAU,KAAK,GAAA,EAAI;AAC/B,QAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,MACzB,CAAA,EAAG,WAAW,OAAO,CAAA;AACrB,MAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEpB,EAAA,OAAO,cAAA;AACT;ACpBO,SAAS,mBAAA,CACd,UACA,QAAA,EACkC;AAClC,EAAA,MAAM,WAAA,GAAcD,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,aAAA,GAAgBA,aAAO,CAAC,CAAA;AAC9B,EAAA,MAAM,QAAA,GAAWA,aAA6C,IAAI,CAAA;AAElE,EAAAC,gBAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOF,iBAAAA;AAAA,IACL,IAAI,IAAA,KAAwB;AAC1B,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,MAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,OAAA;AAEpC,MAAA,IAAI,WAAW,QAAA,EAAU;AACvB,QAAA,aAAA,CAAc,OAAA,GAAU,GAAA;AACxB,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAG,IAAI,CAAA;AAAA,MAC7B,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,OAAA,EAAS;AAC5B,QAAA,QAAA,CAAS,OAAA,GAAU,WAAW,MAAM;AAClC,UAAA,aAAA,CAAc,OAAA,GAAU,KAAK,GAAA,EAAI;AACjC,UAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,UAAA,WAAA,CAAY,OAAA,CAAQ,GAAG,IAAI,CAAA;AAAA,QAC7B,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AACF;ACrCO,SAAS,SAAS,QAAA,EAA4B;AACnD,EAAAE,gBAAU,MAAM;AACd,IAAA,QAAA,EAAS;AAAA,EAEX,CAAA,EAAG,EAAE,CAAA;AACP;ACLO,SAAS,WAAW,QAAA,EAA4B;AACrD,EAAA,MAAM,WAAA,GAAcD,aAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAC,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM,YAAY,OAAA,EAAQ;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AACP;ACNO,SAAS,eAAA,CAAgB,QAAwB,IAAA,EAA6B;AACnF,EAAA,MAAM,OAAA,GAAUD,aAAO,IAAI,CAAA;AAE3B,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,OAAO,MAAA,EAAO;AAAA,EAEhB,GAAG,IAAI,CAAA;AACT;ACZO,SAAS,YAAA,GAA8B;AAC5C,EAAA,MAAM,SAAA,GAAYD,aAAO,KAAK,CAAA;AAE9B,EAAAC,gBAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAA,GAAU,KAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOF,iBAAAA,CAAY,MAAM,SAAA,CAAU,OAAA,EAAS,EAAE,CAAA;AAChD;ACXO,IAAM,yBAAA,GACX,OAAO,MAAA,KAAW,WAAA,GAAcI,qBAAA,GAAkBF;ACApD,SAAS,SAAA,CAAU,GAAY,CAAA,EAAqB;AAClD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAClC,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,EAAM,OAAO,KAAA;AACrC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,KAAA;AAElC,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,UAAU,IAAA,EAAM,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,MAAM,OAAA,CAAQ,CAAC,GAAG,OAAO,KAAA;AAElD,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AAEb,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAE9B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAE1C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,IAAA,EAAM,GAAG,GAAG,OAAO,KAAA;AAC7D,IAAA,IAAI,CAAC,UAAU,IAAA,CAAK,GAAG,GAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAsB,IAAA,EAAsC;AACnE,EAAA,MAAM,GAAA,GAAMD,aAAuB,IAAI,CAAA;AAEvC,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,EAAM,GAAA,CAAI,OAAO,CAAA,EAAG;AACjC,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AAAA,EAChB;AAEA,EAAA,OAAO,GAAA,CAAI,OAAA;AACb;AAEO,SAAS,oBAAA,CAAqB,QAAwB,IAAA,EAA4B;AAEvF,EAAAC,eAAAA,CAAU,MAAA,EAAQ,qBAAA,CAAsB,IAAI,CAAC,CAAA;AAC/C;AC3CO,SAAS,cAAc,MAAA,EAAuB;AACnD,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,MAAM,oBAAA,GAAuB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,YAAA;AACjD,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,UAAA,GAAa,QAAA,CAAS,eAAA,CAAgB,WAAA;AAEpE,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAC/B,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,YAAA,GAAe,oBAAA;AAAA,IACrC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACb;ACTO,SAAS,WAAA,CAAY,eAAsB,QAAA,EAA6B;AAC7E,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAIH,eAAgB,MAAM;AACnD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,IAAA,OAAQ,YAAA,CAAa,OAAA,CAAQ,OAAO,CAAA,IAAe,YAAA;AAAA,EACrD,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,MAAM;AACjD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAAE,OAAA;AAAA,EAC3D,CAAC,CAAA;AAED,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,aAAA,CAAc,EAAE,OAAO,CAAA;AACnE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAAS,KAAA,KAAU,QAAA,GAAW,UAAA,GAAa,KAAA,KAAU,MAAA;AAE3D,EAAA,MAAM,QAAA,GAAWF,iBAAAA,CAAY,CAAC,QAAA,KAAoB;AAChD,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,YAAA,CAAa,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM;AAC/B,IAAA,QAAA,CAAS,MAAA,GAAS,UAAU,MAAM,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAErB,EAAAE,gBAAU,MAAM;AACd,IAAA,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,MAAA,EAAO;AAC3C;AClCO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,GAAA,GAAMD,aAA2B,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIF,eAAS,KAAK,CAAA;AAEtD,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,UAAU,MAAM,eAAA,CAAgB,CAAC,CAAC,SAAS,iBAAiB,CAAA;AAClE,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,OAAO,CAAA;AACrD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,OAAO,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQF,kBAAY,YAAY;AACpC,IAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,IAAA,IAAI,OAAA,EAAS,MAAM,OAAA,CAAQ,iBAAA,EAAkB;AAAA,EAC/C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,kBAAY,YAAY;AACnC,IAAA,IAAI,QAAA,CAAS,iBAAA,EAAmB,MAAM,QAAA,CAAS,cAAA,EAAe;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,kBAAY,YAAY;AACrC,IAAA,IAAI,YAAA,QAAoB,IAAA,EAAK;AAAA,eAClB,KAAA,EAAM;AAAA,EACnB,CAAA,EAAG,CAAC,YAAA,EAAc,KAAA,EAAO,IAAI,CAAC,CAAA;AAE9B,EAAA,OAAO,EAAE,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,MAAM,MAAA,EAAO;AAClD;AC7BO,SAAS,kBAAA,GAA+C;AAC7D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,eAAwB,IAAI,CAAA;AAEhE,EAAA,MAAM,IAAA,GAAOC,iBAAAA,CAAY,OAAO,IAAA,KAAmC;AACjE,IAAA,IAAI,CAAC,WAAW,SAAA,EAAW;AACzB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,YAAY,IAAA,EAAK;AAC5B;ACvBA,SAAS,cAAc,KAAA,EAMrB;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,WAAA,EAAY,CAAE,MAAM,GAAG,CAAA;AAC3C,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,IAC3B,MAAM,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA,CAAM,SAAS,SAAS,CAAA;AAAA,IACxD,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA;AAAA,IAC7B,GAAA,EAAK,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AAAA,IACzB,MAAM,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA,CAAM,SAAS,KAAK;AAAA,GACtD;AACF;AAEO,SAAS,UAAA,CACd,QAAA,EACA,QAAA,EACA,OAAA,GAAU,IAAA,EACJ;AACN,EAAA,MAAM,WAAA,GAAcC,aAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,MAAA,GAAS,cAAc,QAAQ,CAAA;AAErC,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAyB;AACxC,MAAA,MAAM,OAAA,GACJ,MAAM,GAAA,CAAI,WAAA,OAAkB,MAAA,CAAO,GAAA,IACnC,MAAM,OAAA,KAAY,MAAA,CAAO,QACzB,KAAA,CAAM,QAAA,KAAa,OAAO,KAAA,IAC1B,KAAA,CAAM,WAAW,MAAA,CAAO,GAAA,IACxB,KAAA,CAAM,OAAA,KAAY,MAAA,CAAO,IAAA;AAE3B,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,WAAA,CAAY,QAAQ,KAAK,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AACxB;ACrCO,SAAS,QAAA,CACd,aAAA,EACA,SAAA,GAAY,IAAA,EACO;AACnB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,cAAAA,CAAwB;AAAA,IAChD,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,OAAA,GAAUC,kBAAY,YAAY;AACtC,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACnD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,aAAA,EAAc;AACjC,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAAA,IAChD,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAuB,CAAA;AAAA,IAChE;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAEvB,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,OAAA,EAAQ;AAC7B;AC1BO,SAAS,QAAA,CAAY,GAAA,EAAa,OAAA,GAA2B,EAAC,EAAsB;AACzF,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,GAAG,cAAa,GAAI,OAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAmB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,OAAO,CAAA;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,kBAAA,GAAqBE,aAA+B,IAAI,CAAA;AAE9D,EAAA,MAAM,SAAA,GAAYD,kBAAY,YAAY;AACxC,IAAA,kBAAA,CAAmB,SAAS,KAAA,EAAM;AAClC,IAAA,kBAAA,CAAmB,OAAA,GAAU,IAAI,eAAA,EAAgB;AAEjD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,GAAG,YAAA;AAAA,QACH,MAAA,EAAQ,mBAAmB,OAAA,CAAQ;AAAA,OACpC,CAAA;AACD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MACnE;AACA,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,QAAA,QAAA,CAAS,GAAY,CAAA;AAAA,MACvB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,SAAA,EAAU;AACV,IAAA,OAAO,MAAM,kBAAA,CAAmB,OAAA,EAAS,KAAA,EAAM;AAAA,EACjD,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AAEvB,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAU;AACpD;ACxCO,SAAS,iBAAA,CACd,QAAA,EACA,OAAA,EACA,OAAA,GAAoC,EAAC,EACZ;AACzB,EAAA,MAAM,EAAE,SAAA,GAAY,CAAA,EAAG,UAAA,GAAa,SAAQ,GAAI,OAAA;AAChD,EAAA,MAAM,WAAA,GAAcD,aAA2B,IAAI,CAAA;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAaE,aAAO,KAAK,CAAA;AAE/B,EAAA,MAAM,cAAA,GAAiBD,kBAAY,YAAY;AAC7C,IAAA,IAAI,UAAA,CAAW,OAAA,IAAW,CAAC,OAAA,EAAS;AACpC,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,EAAS;AAAA,IACjB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAEtB,EAAAE,gBAAU,MAAM;AACd,IAAA,MAAM,OAAO,WAAA,CAAY,OAAA;AACzB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AAEvB,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,KAAK,CAAA,KAAM;AACX,QAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,UAAA,cAAA,EAAe;AAAA,QACjB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,WAAW,UAAA;AAAW,KAC1B;AAEA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,GAAG,CAAC,cAAA,EAAgB,OAAA,EAAS,SAAA,EAAW,UAAU,CAAC,CAAA;AAEnD,EAAA,MAAM,KAAA,GAAQF,kBAAY,MAAM;AAC9B,IAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AACvC;ACrCO,SAAS,cAAc,OAAA,EAAoD;AAChF,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,kBAAkB,EAAA,EAAI,WAAA,GAAc,GAAE,GAAI,OAAA;AACxE,EAAA,MAAM,CAAC,IAAA,EAAM,YAAY,CAAA,GAAID,eAAS,WAAW,CAAA;AACjD,EAAA,MAAM,CAAC,QAAA,EAAU,gBAAgB,CAAA,GAAIA,eAAS,eAAe,CAAA;AAE7D,EAAA,MAAM,UAAA,GAAaM,aAAA;AAAA,IACjB,MAAM,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,UAAA,GAAa,QAAQ,CAAC,CAAA;AAAA,IAClD,CAAC,YAAY,QAAQ;AAAA,GACvB;AAEA,EAAA,MAAM,OAAA,GAAUL,iBAAAA;AAAA,IACd,CAAC,OAAA,KAAoB;AACnB,MAAA,YAAA,CAAa,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IACzD,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,WAAA,GAAcA,iBAAAA,CAAY,CAAC,OAAA,KAAoB;AACnD,IAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,IAAA,YAAA,CAAa,CAAC,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAY,MAAM,OAAA,CAAQ,IAAA,GAAO,CAAC,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AACjE,EAAA,MAAM,IAAA,GAAOA,iBAAAA,CAAY,MAAM,OAAA,CAAQ,IAAA,GAAO,CAAC,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAEjE,EAAA,MAAM,UAAA,GAAA,CAAc,OAAO,CAAA,IAAK,QAAA;AAChC,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,aAAa,QAAA,GAAW,CAAA,EAAG,aAAa,CAAC,CAAA;AAEnE,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAS,IAAA,GAAO,UAAA;AAAA,IAChB,SAAS,IAAA,GAAO,CAAA;AAAA,IAChB,IAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["import { useCallback, useState } from 'react'\n\nexport function useToggle(initialValue = false): [boolean, (value?: boolean) => void] {\n const [value, setValue] = useState(initialValue)\n\n const toggle = useCallback((newValue?: boolean) => {\n setValue((prev) => (typeof newValue === 'boolean' ? newValue : !prev))\n }, [])\n\n return [value, toggle]\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseBooleanReturn {\n value: boolean\n setTrue: () => void\n setFalse: () => void\n toggle: () => void\n setValue: (value: boolean) => void\n}\n\nexport function useBoolean(initialValue = false): UseBooleanReturn {\n const [value, setValue] = useState(initialValue)\n\n const setTrue = useCallback(() => setValue(true), [])\n const setFalse = useCallback(() => setValue(false), [])\n const toggle = useCallback(() => setValue((prev) => !prev), [])\n\n return { value, setTrue, setFalse, toggle, setValue }\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseCounterOptions {\n min?: number\n max?: number\n}\n\ninterface UseCounterActions {\n increment: (delta?: number) => void\n decrement: (delta?: number) => void\n set: (value: number) => void\n reset: () => void\n}\n\nexport function useCounter(\n initialValue = 0,\n options: UseCounterOptions = {},\n): [number, UseCounterActions] {\n const { min, max } = options\n const [count, setCount] = useState(initialValue)\n\n const clamp = useCallback(\n (value: number) => {\n let clamped = value\n if (min !== undefined) clamped = Math.max(min, clamped)\n if (max !== undefined) clamped = Math.min(max, clamped)\n return clamped\n },\n [min, max],\n )\n\n const increment = useCallback((delta = 1) => setCount((prev) => clamp(prev + delta)), [clamp])\n const decrement = useCallback((delta = 1) => setCount((prev) => clamp(prev - delta)), [clamp])\n const set = useCallback((value: number) => setCount(clamp(value)), [clamp])\n const reset = useCallback(() => setCount(initialValue), [initialValue])\n\n return [count, { increment, decrement, set, reset }]\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseMapActions<K, V> {\n set: (key: K, value: V) => void\n setAll: (entries: Iterable<[K, V]>) => void\n delete: (key: K) => void\n clear: () => void\n reset: () => void\n}\n\nexport function useMap<K, V>(\n initialValue: Iterable<[K, V]> = [],\n): [Map<K, V>, UseMapActions<K, V>] {\n const [map, setMap] = useState(() => new Map(initialValue))\n\n const actions: UseMapActions<K, V> = {\n set: useCallback((key: K, value: V) => {\n setMap((prev) => {\n const next = new Map(prev)\n next.set(key, value)\n return next\n })\n }, []),\n\n setAll: useCallback((entries: Iterable<[K, V]>) => {\n setMap((prev) => {\n const next = new Map(prev)\n for (const [key, value] of entries) {\n next.set(key, value)\n }\n return next\n })\n }, []),\n\n delete: useCallback((key: K) => {\n setMap((prev) => {\n const next = new Map(prev)\n next.delete(key)\n return next\n })\n }, []),\n\n clear: useCallback(() => {\n setMap(new Map())\n }, []),\n\n reset: useCallback(() => {\n setMap(new Map(initialValue))\n }, []),\n }\n\n return [map, actions]\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseSetActions<T> {\n add: (value: T) => void\n delete: (value: T) => void\n clear: () => void\n reset: () => void\n toggle: (value: T) => void\n}\n\nexport function useSet<T>(initialValue: Iterable<T> = []): [Set<T>, UseSetActions<T>] {\n const [set, setSet] = useState(() => new Set(initialValue))\n\n const actions: UseSetActions<T> = {\n add: useCallback((value: T) => {\n setSet((prev) => new Set([...prev, value]))\n }, []),\n\n delete: useCallback((value: T) => {\n setSet((prev) => {\n const next = new Set(prev)\n next.delete(value)\n return next\n })\n }, []),\n\n clear: useCallback(() => {\n setSet(new Set())\n }, []),\n\n reset: useCallback(() => {\n setSet(new Set(initialValue))\n }, []),\n\n toggle: useCallback((value: T) => {\n setSet((prev) => {\n const next = new Set(prev)\n if (next.has(value)) {\n next.delete(value)\n } else {\n next.add(value)\n }\n return next\n })\n }, []),\n }\n\n return [set, actions]\n}\n","import { useEffect, useRef } from 'react'\n\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n","import { useCallback, useRef, useState } from 'react'\n\ninterface UseStateHistoryReturn<T> {\n value: T\n set: (value: T) => void\n undo: () => void\n redo: () => void\n canUndo: boolean\n canRedo: boolean\n history: T[]\n}\n\nexport function useStateHistory<T>(initialValue: T): UseStateHistoryReturn<T> {\n const [value, setValue] = useState(initialValue)\n const historyRef = useRef<T[]>([initialValue])\n const pointerRef = useRef(0)\n\n const set = useCallback((newValue: T) => {\n const pointer = pointerRef.current\n const newHistory = historyRef.current.slice(0, pointer + 1)\n newHistory.push(newValue)\n historyRef.current = newHistory\n pointerRef.current = newHistory.length - 1\n setValue(newValue)\n }, [])\n\n const undo = useCallback(() => {\n if (pointerRef.current > 0) {\n pointerRef.current -= 1\n setValue(historyRef.current[pointerRef.current]!)\n }\n }, [])\n\n const redo = useCallback(() => {\n if (pointerRef.current < historyRef.current.length - 1) {\n pointerRef.current += 1\n setValue(historyRef.current[pointerRef.current]!)\n }\n }, [])\n\n return {\n value,\n set,\n undo,\n redo,\n canUndo: pointerRef.current > 0,\n canRedo: pointerRef.current < historyRef.current.length - 1,\n history: historyRef.current,\n }\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nfunction getStoredValue<T>(key: string, initialValue: T): T {\n if (typeof window === 'undefined') return initialValue\n try {\n const item = window.localStorage.getItem(key)\n return item ? (JSON.parse(item) as T) : initialValue\n } catch {\n return initialValue\n }\n}\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void, () => void] {\n const [storedValue, setStoredValue] = useState<T>(() => getStoredValue(key, initialValue))\n\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue((prev) => {\n const nextValue = value instanceof Function ? value(prev) : value\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(nextValue))\n }\n return nextValue\n })\n },\n [key],\n )\n\n const removeValue = useCallback(() => {\n setStoredValue(initialValue)\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(key)\n }\n }, [key, initialValue])\n\n useEffect(() => {\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === key && e.newValue !== null) {\n try {\n setStoredValue(JSON.parse(e.newValue) as T)\n } catch {\n // ignore parse errors\n }\n }\n }\n window.addEventListener('storage', handleStorageChange)\n return () => window.removeEventListener('storage', handleStorageChange)\n }, [key])\n\n return [storedValue, setValue, removeValue]\n}\n","import { useCallback, useState } from 'react'\n\nfunction getStoredValue<T>(key: string, initialValue: T): T {\n if (typeof window === 'undefined') return initialValue\n try {\n const item = window.sessionStorage.getItem(key)\n return item ? (JSON.parse(item) as T) : initialValue\n } catch {\n return initialValue\n }\n}\n\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void, () => void] {\n const [storedValue, setStoredValue] = useState<T>(() => getStoredValue(key, initialValue))\n\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue((prev) => {\n const nextValue = value instanceof Function ? value(prev) : value\n if (typeof window !== 'undefined') {\n window.sessionStorage.setItem(key, JSON.stringify(nextValue))\n }\n return nextValue\n })\n },\n [key],\n )\n\n const removeValue = useCallback(() => {\n setStoredValue(initialValue)\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem(key)\n }\n }, [key, initialValue])\n\n return [storedValue, setValue, removeValue]\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\ntype EventMap = WindowEventMap & DocumentEventMap & HTMLElementEventMap\n\nexport function useEventListener<K extends keyof EventMap>(\n eventName: K,\n handler: (event: EventMap[K]) => void,\n element?: RefObject<HTMLElement | null> | null,\n options?: boolean | AddEventListenerOptions,\n): void {\n const savedHandler = useRef(handler)\n\n useEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n const target = element?.current ?? window\n if (!target?.addEventListener) return\n\n const listener = (event: Event) => savedHandler.current(event as EventMap[K])\n target.addEventListener(eventName, listener, options)\n return () => target.removeEventListener(eventName, listener, options)\n }, [eventName, element, options])\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nexport function useClickOutside<T extends HTMLElement>(\n handler: (event: MouseEvent | TouchEvent) => void,\n): RefObject<T | null> {\n const ref = useRef<T | null>(null)\n const savedHandler = useRef(handler)\n\n useEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(event.target as Node)) return\n savedHandler.current(event)\n }\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [])\n\n return ref\n}\n","import { useCallback, useRef, useState } from 'react'\n\nexport function useHover<T extends HTMLElement>(): [\n (node: T | null) => void,\n boolean,\n] {\n const [isHovered, setIsHovered] = useState(false)\n const ref = useRef<T | null>(null)\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), [])\n const handleMouseLeave = useCallback(() => setIsHovered(false), [])\n\n const callbackRef = useCallback(\n (node: T | null) => {\n if (ref.current) {\n ref.current.removeEventListener('mouseenter', handleMouseEnter)\n ref.current.removeEventListener('mouseleave', handleMouseLeave)\n }\n ref.current = node\n if (node) {\n node.addEventListener('mouseenter', handleMouseEnter)\n node.addEventListener('mouseleave', handleMouseLeave)\n }\n },\n [handleMouseEnter, handleMouseLeave],\n )\n\n return [callbackRef, isHovered]\n}\n","import { useEffect, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\n\ninterface UseIntersectionObserverOptions {\n threshold?: number | number[]\n root?: Element | null\n rootMargin?: string\n freezeOnceVisible?: boolean\n}\n\ninterface UseIntersectionObserverReturn {\n ref: RefObject<HTMLElement | null>\n isIntersecting: boolean\n entry: IntersectionObserverEntry | null\n}\n\nexport function useIntersectionObserver(\n options: UseIntersectionObserverOptions = {},\n): UseIntersectionObserverReturn {\n const { threshold = 0, root = null, rootMargin = '0px', freezeOnceVisible = false } = options\n const ref = useRef<HTMLElement | null>(null)\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null)\n\n const frozen = entry?.isIntersecting && freezeOnceVisible\n\n useEffect(() => {\n const node = ref.current\n if (!node || frozen) return\n\n const observer = new IntersectionObserver(\n ([observerEntry]) => {\n if (observerEntry) setEntry(observerEntry)\n },\n { threshold, root, rootMargin },\n )\n\n observer.observe(node)\n return () => observer.disconnect()\n }, [threshold, root, rootMargin, frozen])\n\n return {\n ref,\n isIntersecting: entry?.isIntersecting ?? false,\n entry,\n }\n}\n","import { useEffect, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\n\ninterface Size {\n width: number\n height: number\n}\n\nexport function useResizeObserver<T extends HTMLElement>(): [RefObject<T | null>, Size] {\n const ref = useRef<T | null>(null)\n const [size, setSize] = useState<Size>({ width: 0, height: 0 })\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n\n const observer = new ResizeObserver(([resizeEntry]) => {\n if (resizeEntry) {\n const { width, height } = resizeEntry.contentRect\n setSize({ width, height })\n }\n })\n\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n return [ref, size]\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nexport function useMutationObserver(\n callback: MutationCallback,\n options: MutationObserverInit = { childList: true, subtree: true },\n): RefObject<HTMLElement | null> {\n const ref = useRef<HTMLElement | null>(null)\n const savedCallback = useRef(callback)\n\n useEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n\n const observer = new MutationObserver((...args) => savedCallback.current(...args))\n observer.observe(node, options)\n return () => observer.disconnect()\n }, [options])\n\n return ref\n}\n","import { useEffect, useState } from 'react'\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false\n return window.matchMedia(query).matches\n })\n\n useEffect(() => {\n const mql = window.matchMedia(query)\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches)\n\n setMatches(mql.matches)\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n }, [query])\n\n return matches\n}\n","import { useEffect, useState } from 'react'\n\ninterface WindowSize {\n width: number\n height: number\n}\n\nexport function useWindowSize(): WindowSize {\n const [size, setSize] = useState<WindowSize>(() => ({\n width: typeof window !== 'undefined' ? window.innerWidth : 0,\n height: typeof window !== 'undefined' ? window.innerHeight : 0,\n }))\n\n useEffect(() => {\n const handleResize = () => {\n setSize({ width: window.innerWidth, height: window.innerHeight })\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n return size\n}\n","import { useEffect, useState } from 'react'\nimport type { RefObject } from 'react'\n\ninterface ScrollPosition {\n x: number\n y: number\n}\n\nexport function useScroll(element?: RefObject<HTMLElement | null>): ScrollPosition {\n const [position, setPosition] = useState<ScrollPosition>({ x: 0, y: 0 })\n\n useEffect(() => {\n const target = element?.current ?? window\n\n const handleScroll = () => {\n if ('scrollX' in target) {\n setPosition({ x: (target as Window).scrollX ?? 0, y: (target as Window).scrollY ?? 0 })\n } else if (target instanceof HTMLElement) {\n setPosition({ x: target.scrollLeft, y: target.scrollTop })\n }\n }\n\n handleScroll()\n target.addEventListener('scroll', handleScroll, { passive: true })\n return () => target.removeEventListener('scroll', handleScroll)\n }, [element])\n\n return position\n}\n","import { useEffect, useState } from 'react'\n\ninterface MousePosition {\n x: number\n y: number\n}\n\nexport function useMouse(): MousePosition {\n const [position, setPosition] = useState<MousePosition>({ x: 0, y: 0 })\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n setPosition({ x: e.clientX, y: e.clientY })\n }\n window.addEventListener('mousemove', handleMouseMove)\n return () => window.removeEventListener('mousemove', handleMouseMove)\n }, [])\n\n return position\n}\n","import { useEffect, useState } from 'react'\n\ninterface NetworkState {\n online: boolean\n downlink?: number\n effectiveType?: string\n rtt?: number\n saveData?: boolean\n}\n\ninterface NetworkInformation extends EventTarget {\n downlink?: number\n effectiveType?: string\n rtt?: number\n saveData?: boolean\n}\n\nexport function useNetwork(): NetworkState {\n const [state, setState] = useState<NetworkState>(() => ({\n online: typeof navigator !== 'undefined' ? navigator.onLine : true,\n }))\n\n useEffect(() => {\n const connection = (navigator as unknown as { connection?: NetworkInformation }).connection\n\n const updateNetworkInfo = () => {\n setState({\n online: navigator.onLine,\n downlink: connection?.downlink,\n effectiveType: connection?.effectiveType,\n rtt: connection?.rtt,\n saveData: connection?.saveData,\n })\n }\n\n updateNetworkInfo()\n window.addEventListener('online', updateNetworkInfo)\n window.addEventListener('offline', updateNetworkInfo)\n connection?.addEventListener?.('change', updateNetworkInfo)\n\n return () => {\n window.removeEventListener('online', updateNetworkInfo)\n window.removeEventListener('offline', updateNetworkInfo)\n connection?.removeEventListener?.('change', updateNetworkInfo)\n }\n }, [])\n\n return state\n}\n","import { useEffect, useState } from 'react'\n\nexport function useDebounceValue<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debouncedValue\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounceCallback<T extends (...args: any[]) => any>(\n callback: T,\n delay: number,\n): (...args: Parameters<T>) => void {\n const callbackRef = useRef(callback)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n callbackRef.current = callback\n }, [callback])\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n return useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay)\n },\n [delay],\n )\n}\n","import { useEffect, useRef, useState } from 'react'\n\nexport function useThrottleValue<T>(value: T, interval: number): T {\n const [throttledValue, setThrottledValue] = useState(value)\n const lastUpdated = useRef(Date.now())\n\n useEffect(() => {\n const now = Date.now()\n const elapsed = now - lastUpdated.current\n\n if (elapsed >= interval) {\n lastUpdated.current = now\n setThrottledValue(value)\n } else {\n const timer = setTimeout(() => {\n lastUpdated.current = Date.now()\n setThrottledValue(value)\n }, interval - elapsed)\n return () => clearTimeout(timer)\n }\n }, [value, interval])\n\n return throttledValue\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useThrottleCallback<T extends (...args: any[]) => any>(\n callback: T,\n interval: number,\n): (...args: Parameters<T>) => void {\n const callbackRef = useRef(callback)\n const lastCalledRef = useRef(0)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n callbackRef.current = callback\n }, [callback])\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n return useCallback(\n (...args: Parameters<T>) => {\n const now = Date.now()\n const elapsed = now - lastCalledRef.current\n\n if (elapsed >= interval) {\n lastCalledRef.current = now\n callbackRef.current(...args)\n } else if (!timerRef.current) {\n timerRef.current = setTimeout(() => {\n lastCalledRef.current = Date.now()\n timerRef.current = null\n callbackRef.current(...args)\n }, interval - elapsed)\n }\n },\n [interval],\n )\n}\n","import { useEffect } from 'react'\n\nexport function useMount(callback: () => void): void {\n useEffect(() => {\n callback()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import { useEffect, useRef } from 'react'\n\nexport function useUnmount(callback: () => void): void {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n\n useEffect(() => {\n return () => callbackRef.current()\n }, [])\n}\n","import { useEffect, useRef } from 'react'\nimport type { DependencyList, EffectCallback } from 'react'\n\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void {\n const isFirst = useRef(true)\n\n useEffect(() => {\n if (isFirst.current) {\n isFirst.current = false\n return\n }\n return effect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nexport function useIsMounted(): () => boolean {\n const isMounted = useRef(false)\n\n useEffect(() => {\n isMounted.current = true\n return () => {\n isMounted.current = false\n }\n }, [])\n\n return useCallback(() => isMounted.current, [])\n}\n","import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n","import { useEffect, useRef } from 'react'\nimport type { DependencyList, EffectCallback } from 'react'\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true\n if (typeof a !== typeof b) return false\n if (a === null || b === null) return false\n if (typeof a !== 'object') return false\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n return a.every((item, index) => deepEqual(item, b[index]))\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false\n\n const objA = a as Record<string, unknown>\n const objB = b as Record<string, unknown>\n\n const keysA = Object.keys(objA)\n const keysB = Object.keys(objB)\n\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(objB, key)) return false\n if (!deepEqual(objA[key], objB[key])) return false\n }\n\n return true\n}\n\nfunction useDeepCompareMemoize(deps: DependencyList): DependencyList {\n const ref = useRef<DependencyList>(deps)\n\n if (!deepEqual(deps, ref.current)) {\n ref.current = deps\n }\n\n return ref.current\n}\n\nexport function useDeepCompareEffect(effect: EffectCallback, deps: DependencyList): void {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, useDeepCompareMemoize(deps))\n}\n","import { useEffect } from 'react'\n\nexport function useScrollLock(locked: boolean): void {\n useEffect(() => {\n if (!locked) return\n\n const originalOverflow = document.body.style.overflow\n const originalPaddingRight = document.body.style.paddingRight\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n\n document.body.style.overflow = 'hidden'\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`\n }\n\n return () => {\n document.body.style.overflow = originalOverflow\n document.body.style.paddingRight = originalPaddingRight\n }\n }, [locked])\n}\n","import { useCallback, useEffect, useState } from 'react'\n\ntype Theme = 'light' | 'dark' | 'system'\n\ninterface UseDarkModeReturn {\n isDark: boolean\n theme: Theme\n setTheme: (theme: Theme) => void\n toggle: () => void\n}\n\nexport function useDarkMode(defaultTheme: Theme = 'system'): UseDarkModeReturn {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme\n return (localStorage.getItem('theme') as Theme) ?? defaultTheme\n })\n\n const [systemDark, setSystemDark] = useState(() => {\n if (typeof window === 'undefined') return false\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n })\n\n useEffect(() => {\n const mql = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches)\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n }, [])\n\n const isDark = theme === 'system' ? systemDark : theme === 'dark'\n\n const setTheme = useCallback((newTheme: Theme) => {\n setThemeState(newTheme)\n localStorage.setItem('theme', newTheme)\n }, [])\n\n const toggle = useCallback(() => {\n setTheme(isDark ? 'light' : 'dark')\n }, [isDark, setTheme])\n\n useEffect(() => {\n document.documentElement.classList.toggle('dark', isDark)\n }, [isDark])\n\n return { isDark, theme, setTheme, toggle }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\n\ninterface UseFullscreenReturn {\n ref: RefObject<HTMLElement | null>\n isFullscreen: boolean\n enter: () => Promise<void>\n exit: () => Promise<void>\n toggle: () => Promise<void>\n}\n\nexport function useFullscreen(): UseFullscreenReturn {\n const ref = useRef<HTMLElement | null>(null)\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n useEffect(() => {\n const handler = () => setIsFullscreen(!!document.fullscreenElement)\n document.addEventListener('fullscreenchange', handler)\n return () => document.removeEventListener('fullscreenchange', handler)\n }, [])\n\n const enter = useCallback(async () => {\n const element = ref.current\n if (element) await element.requestFullscreen()\n }, [])\n\n const exit = useCallback(async () => {\n if (document.fullscreenElement) await document.exitFullscreen()\n }, [])\n\n const toggle = useCallback(async () => {\n if (isFullscreen) await exit()\n else await enter()\n }, [isFullscreen, enter, exit])\n\n return { ref, isFullscreen, enter, exit, toggle }\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseCopyToClipboardReturn {\n copiedText: string | null\n copy: (text: string) => Promise<boolean>\n}\n\nexport function useCopyToClipboard(): UseCopyToClipboardReturn {\n const [copiedText, setCopiedText] = useState<string | null>(null)\n\n const copy = useCallback(async (text: string): Promise<boolean> => {\n if (!navigator?.clipboard) {\n return false\n }\n try {\n await navigator.clipboard.writeText(text)\n setCopiedText(text)\n return true\n } catch {\n setCopiedText(null)\n return false\n }\n }, [])\n\n return { copiedText, copy }\n}\n","import { useEffect, useRef } from 'react'\n\nfunction parseKeyCombo(combo: string): {\n key: string\n ctrl: boolean\n shift: boolean\n alt: boolean\n meta: boolean\n} {\n const parts = combo.toLowerCase().split('+')\n return {\n key: parts[parts.length - 1]!,\n ctrl: parts.includes('ctrl') || parts.includes('control'),\n shift: parts.includes('shift'),\n alt: parts.includes('alt'),\n meta: parts.includes('meta') || parts.includes('cmd'),\n }\n}\n\nexport function useHotkeys(\n keyCombo: string,\n callback: (event: KeyboardEvent) => void,\n enabled = true,\n): void {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n\n useEffect(() => {\n if (!enabled) return\n\n const parsed = parseKeyCombo(keyCombo)\n\n const handler = (event: KeyboardEvent) => {\n const matches =\n event.key.toLowerCase() === parsed.key &&\n event.ctrlKey === parsed.ctrl &&\n event.shiftKey === parsed.shift &&\n event.altKey === parsed.alt &&\n event.metaKey === parsed.meta\n\n if (matches) {\n event.preventDefault()\n callbackRef.current(event)\n }\n }\n\n window.addEventListener('keydown', handler)\n return () => window.removeEventListener('keydown', handler)\n }, [keyCombo, enabled])\n}\n","import { useCallback, useEffect, useState } from 'react'\n\ninterface AsyncState<T> {\n data: T | null\n loading: boolean\n error: Error | null\n}\n\ninterface UseAsyncReturn<T> extends AsyncState<T> {\n execute: () => Promise<void>\n}\n\nexport function useAsync<T>(\n asyncFunction: () => Promise<T>,\n immediate = true,\n): UseAsyncReturn<T> {\n const [state, setState] = useState<AsyncState<T>>({\n data: null,\n loading: immediate,\n error: null,\n })\n\n const execute = useCallback(async () => {\n setState({ data: null, loading: true, error: null })\n try {\n const data = await asyncFunction()\n setState({ data, loading: false, error: null })\n } catch (error) {\n setState({ data: null, loading: false, error: error as Error })\n }\n }, [asyncFunction])\n\n useEffect(() => {\n if (immediate) {\n execute()\n }\n }, [execute, immediate])\n\n return { ...state, execute }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\ninterface UseFetchOptions extends RequestInit {\n enabled?: boolean\n}\n\ninterface UseFetchReturn<T> {\n data: T | null\n loading: boolean\n error: Error | null\n refetch: () => Promise<void>\n}\n\nexport function useFetch<T>(url: string, options: UseFetchOptions = {}): UseFetchReturn<T> {\n const { enabled = true, ...fetchOptions } = options\n const [data, setData] = useState<T | null>(null)\n const [loading, setLoading] = useState(enabled)\n const [error, setError] = useState<Error | null>(null)\n const abortControllerRef = useRef<AbortController | null>(null)\n\n const fetchData = useCallback(async () => {\n abortControllerRef.current?.abort()\n abortControllerRef.current = new AbortController()\n\n setLoading(true)\n setError(null)\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: abortControllerRef.current.signal,\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n const json = (await response.json()) as T\n setData(json)\n } catch (err) {\n if ((err as Error).name !== 'AbortError') {\n setError(err as Error)\n }\n } finally {\n setLoading(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url])\n\n useEffect(() => {\n if (!enabled) return\n fetchData()\n return () => abortControllerRef.current?.abort()\n }, [fetchData, enabled])\n\n return { data, loading, error, refetch: fetchData }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\n\ninterface UseInfiniteScrollOptions {\n threshold?: number\n rootMargin?: string\n}\n\ninterface UseInfiniteScrollReturn {\n sentinelRef: RefObject<HTMLElement | null>\n loading: boolean\n reset: () => void\n}\n\nexport function useInfiniteScroll(\n loadMore: () => Promise<void>,\n hasMore: boolean,\n options: UseInfiniteScrollOptions = {},\n): UseInfiniteScrollReturn {\n const { threshold = 0, rootMargin = '100px' } = options\n const sentinelRef = useRef<HTMLElement | null>(null)\n const [loading, setLoading] = useState(false)\n const loadingRef = useRef(false)\n\n const handleLoadMore = useCallback(async () => {\n if (loadingRef.current || !hasMore) return\n loadingRef.current = true\n setLoading(true)\n try {\n await loadMore()\n } finally {\n loadingRef.current = false\n setLoading(false)\n }\n }, [loadMore, hasMore])\n\n useEffect(() => {\n const node = sentinelRef.current\n if (!node || !hasMore) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting) {\n handleLoadMore()\n }\n },\n { threshold, rootMargin },\n )\n\n observer.observe(node)\n return () => observer.disconnect()\n }, [handleLoadMore, hasMore, threshold, rootMargin])\n\n const reset = useCallback(() => {\n loadingRef.current = false\n setLoading(false)\n }, [])\n\n return { sentinelRef, loading, reset }\n}\n","import { useCallback, useMemo, useState } from 'react'\n\ninterface UsePaginationOptions {\n totalItems: number\n pageSize?: number\n initialPage?: number\n}\n\ninterface UsePaginationReturn {\n page: number\n pageSize: number\n totalPages: number\n hasNext: boolean\n hasPrev: boolean\n next: () => void\n prev: () => void\n setPage: (page: number) => void\n setPageSize: (size: number) => void\n startIndex: number\n endIndex: number\n}\n\nexport function usePagination(options: UsePaginationOptions): UsePaginationReturn {\n const { totalItems, pageSize: initialPageSize = 10, initialPage = 1 } = options\n const [page, setPageState] = useState(initialPage)\n const [pageSize, setPageSizeState] = useState(initialPageSize)\n\n const totalPages = useMemo(\n () => Math.max(1, Math.ceil(totalItems / pageSize)),\n [totalItems, pageSize],\n )\n\n const setPage = useCallback(\n (newPage: number) => {\n setPageState(Math.min(Math.max(1, newPage), totalPages))\n },\n [totalPages],\n )\n\n const setPageSize = useCallback((newSize: number) => {\n setPageSizeState(newSize)\n setPageState(1)\n }, [])\n\n const next = useCallback(() => setPage(page + 1), [page, setPage])\n const prev = useCallback(() => setPage(page - 1), [page, setPage])\n\n const startIndex = (page - 1) * pageSize\n const endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1)\n\n return {\n page,\n pageSize,\n totalPages,\n hasNext: page < totalPages,\n hasPrev: page > 1,\n next,\n prev,\n setPage,\n setPageSize,\n startIndex,\n endIndex,\n }\n}\n"]}
@@ -0,0 +1,221 @@
1
+ import { RefObject, EffectCallback, DependencyList, useEffect } from 'react';
2
+
3
+ declare function useToggle(initialValue?: boolean): [boolean, (value?: boolean) => void];
4
+
5
+ interface UseBooleanReturn {
6
+ value: boolean;
7
+ setTrue: () => void;
8
+ setFalse: () => void;
9
+ toggle: () => void;
10
+ setValue: (value: boolean) => void;
11
+ }
12
+ declare function useBoolean(initialValue?: boolean): UseBooleanReturn;
13
+
14
+ interface UseCounterOptions {
15
+ min?: number;
16
+ max?: number;
17
+ }
18
+ interface UseCounterActions {
19
+ increment: (delta?: number) => void;
20
+ decrement: (delta?: number) => void;
21
+ set: (value: number) => void;
22
+ reset: () => void;
23
+ }
24
+ declare function useCounter(initialValue?: number, options?: UseCounterOptions): [number, UseCounterActions];
25
+
26
+ interface UseMapActions<K, V> {
27
+ set: (key: K, value: V) => void;
28
+ setAll: (entries: Iterable<[K, V]>) => void;
29
+ delete: (key: K) => void;
30
+ clear: () => void;
31
+ reset: () => void;
32
+ }
33
+ declare function useMap<K, V>(initialValue?: Iterable<[K, V]>): [Map<K, V>, UseMapActions<K, V>];
34
+
35
+ interface UseSetActions<T> {
36
+ add: (value: T) => void;
37
+ delete: (value: T) => void;
38
+ clear: () => void;
39
+ reset: () => void;
40
+ toggle: (value: T) => void;
41
+ }
42
+ declare function useSet<T>(initialValue?: Iterable<T>): [Set<T>, UseSetActions<T>];
43
+
44
+ declare function usePrevious<T>(value: T): T | undefined;
45
+
46
+ interface UseStateHistoryReturn<T> {
47
+ value: T;
48
+ set: (value: T) => void;
49
+ undo: () => void;
50
+ redo: () => void;
51
+ canUndo: boolean;
52
+ canRedo: boolean;
53
+ history: T[];
54
+ }
55
+ declare function useStateHistory<T>(initialValue: T): UseStateHistoryReturn<T>;
56
+
57
+ declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void, () => void];
58
+
59
+ declare function useSessionStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void, () => void];
60
+
61
+ type EventMap = WindowEventMap & DocumentEventMap & HTMLElementEventMap;
62
+ declare function useEventListener<K extends keyof EventMap>(eventName: K, handler: (event: EventMap[K]) => void, element?: RefObject<HTMLElement | null> | null, options?: boolean | AddEventListenerOptions): void;
63
+
64
+ declare function useClickOutside<T extends HTMLElement>(handler: (event: MouseEvent | TouchEvent) => void): RefObject<T | null>;
65
+
66
+ declare function useHover<T extends HTMLElement>(): [
67
+ (node: T | null) => void,
68
+ boolean
69
+ ];
70
+
71
+ interface UseIntersectionObserverOptions {
72
+ threshold?: number | number[];
73
+ root?: Element | null;
74
+ rootMargin?: string;
75
+ freezeOnceVisible?: boolean;
76
+ }
77
+ interface UseIntersectionObserverReturn {
78
+ ref: RefObject<HTMLElement | null>;
79
+ isIntersecting: boolean;
80
+ entry: IntersectionObserverEntry | null;
81
+ }
82
+ declare function useIntersectionObserver(options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;
83
+
84
+ interface Size {
85
+ width: number;
86
+ height: number;
87
+ }
88
+ declare function useResizeObserver<T extends HTMLElement>(): [RefObject<T | null>, Size];
89
+
90
+ declare function useMutationObserver(callback: MutationCallback, options?: MutationObserverInit): RefObject<HTMLElement | null>;
91
+
92
+ declare function useMediaQuery(query: string): boolean;
93
+
94
+ interface WindowSize {
95
+ width: number;
96
+ height: number;
97
+ }
98
+ declare function useWindowSize(): WindowSize;
99
+
100
+ interface ScrollPosition {
101
+ x: number;
102
+ y: number;
103
+ }
104
+ declare function useScroll(element?: RefObject<HTMLElement | null>): ScrollPosition;
105
+
106
+ interface MousePosition {
107
+ x: number;
108
+ y: number;
109
+ }
110
+ declare function useMouse(): MousePosition;
111
+
112
+ interface NetworkState {
113
+ online: boolean;
114
+ downlink?: number;
115
+ effectiveType?: string;
116
+ rtt?: number;
117
+ saveData?: boolean;
118
+ }
119
+ declare function useNetwork(): NetworkState;
120
+
121
+ declare function useDebounceValue<T>(value: T, delay: number): T;
122
+
123
+ declare function useDebounceCallback<T extends (...args: any[]) => any>(callback: T, delay: number): (...args: Parameters<T>) => void;
124
+
125
+ declare function useThrottleValue<T>(value: T, interval: number): T;
126
+
127
+ declare function useThrottleCallback<T extends (...args: any[]) => any>(callback: T, interval: number): (...args: Parameters<T>) => void;
128
+
129
+ declare function useMount(callback: () => void): void;
130
+
131
+ declare function useUnmount(callback: () => void): void;
132
+
133
+ declare function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
134
+
135
+ declare function useIsMounted(): () => boolean;
136
+
137
+ declare const useIsomorphicLayoutEffect: typeof useEffect;
138
+
139
+ declare function useDeepCompareEffect(effect: EffectCallback, deps: DependencyList): void;
140
+
141
+ declare function useScrollLock(locked: boolean): void;
142
+
143
+ type Theme = 'light' | 'dark' | 'system';
144
+ interface UseDarkModeReturn {
145
+ isDark: boolean;
146
+ theme: Theme;
147
+ setTheme: (theme: Theme) => void;
148
+ toggle: () => void;
149
+ }
150
+ declare function useDarkMode(defaultTheme?: Theme): UseDarkModeReturn;
151
+
152
+ interface UseFullscreenReturn {
153
+ ref: RefObject<HTMLElement | null>;
154
+ isFullscreen: boolean;
155
+ enter: () => Promise<void>;
156
+ exit: () => Promise<void>;
157
+ toggle: () => Promise<void>;
158
+ }
159
+ declare function useFullscreen(): UseFullscreenReturn;
160
+
161
+ interface UseCopyToClipboardReturn {
162
+ copiedText: string | null;
163
+ copy: (text: string) => Promise<boolean>;
164
+ }
165
+ declare function useCopyToClipboard(): UseCopyToClipboardReturn;
166
+
167
+ declare function useHotkeys(keyCombo: string, callback: (event: KeyboardEvent) => void, enabled?: boolean): void;
168
+
169
+ interface AsyncState<T> {
170
+ data: T | null;
171
+ loading: boolean;
172
+ error: Error | null;
173
+ }
174
+ interface UseAsyncReturn<T> extends AsyncState<T> {
175
+ execute: () => Promise<void>;
176
+ }
177
+ declare function useAsync<T>(asyncFunction: () => Promise<T>, immediate?: boolean): UseAsyncReturn<T>;
178
+
179
+ interface UseFetchOptions extends RequestInit {
180
+ enabled?: boolean;
181
+ }
182
+ interface UseFetchReturn<T> {
183
+ data: T | null;
184
+ loading: boolean;
185
+ error: Error | null;
186
+ refetch: () => Promise<void>;
187
+ }
188
+ declare function useFetch<T>(url: string, options?: UseFetchOptions): UseFetchReturn<T>;
189
+
190
+ interface UseInfiniteScrollOptions {
191
+ threshold?: number;
192
+ rootMargin?: string;
193
+ }
194
+ interface UseInfiniteScrollReturn {
195
+ sentinelRef: RefObject<HTMLElement | null>;
196
+ loading: boolean;
197
+ reset: () => void;
198
+ }
199
+ declare function useInfiniteScroll(loadMore: () => Promise<void>, hasMore: boolean, options?: UseInfiniteScrollOptions): UseInfiniteScrollReturn;
200
+
201
+ interface UsePaginationOptions {
202
+ totalItems: number;
203
+ pageSize?: number;
204
+ initialPage?: number;
205
+ }
206
+ interface UsePaginationReturn {
207
+ page: number;
208
+ pageSize: number;
209
+ totalPages: number;
210
+ hasNext: boolean;
211
+ hasPrev: boolean;
212
+ next: () => void;
213
+ prev: () => void;
214
+ setPage: (page: number) => void;
215
+ setPageSize: (size: number) => void;
216
+ startIndex: number;
217
+ endIndex: number;
218
+ }
219
+ declare function usePagination(options: UsePaginationOptions): UsePaginationReturn;
220
+
221
+ export { useAsync, useBoolean, useClickOutside, useCopyToClipboard, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDeepCompareEffect, useEventListener, useFetch, useFullscreen, useHotkeys, useHover, useInfiniteScroll, useIntersectionObserver, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useMount, useMouse, useMutationObserver, useNetwork, usePagination, usePrevious, useResizeObserver, useScroll, useScrollLock, useSessionStorage, useSet, useStateHistory, useThrottleCallback, useThrottleValue, useToggle, useUnmount, useUpdateEffect, useWindowSize };
@@ -0,0 +1,221 @@
1
+ import { RefObject, EffectCallback, DependencyList, useEffect } from 'react';
2
+
3
+ declare function useToggle(initialValue?: boolean): [boolean, (value?: boolean) => void];
4
+
5
+ interface UseBooleanReturn {
6
+ value: boolean;
7
+ setTrue: () => void;
8
+ setFalse: () => void;
9
+ toggle: () => void;
10
+ setValue: (value: boolean) => void;
11
+ }
12
+ declare function useBoolean(initialValue?: boolean): UseBooleanReturn;
13
+
14
+ interface UseCounterOptions {
15
+ min?: number;
16
+ max?: number;
17
+ }
18
+ interface UseCounterActions {
19
+ increment: (delta?: number) => void;
20
+ decrement: (delta?: number) => void;
21
+ set: (value: number) => void;
22
+ reset: () => void;
23
+ }
24
+ declare function useCounter(initialValue?: number, options?: UseCounterOptions): [number, UseCounterActions];
25
+
26
+ interface UseMapActions<K, V> {
27
+ set: (key: K, value: V) => void;
28
+ setAll: (entries: Iterable<[K, V]>) => void;
29
+ delete: (key: K) => void;
30
+ clear: () => void;
31
+ reset: () => void;
32
+ }
33
+ declare function useMap<K, V>(initialValue?: Iterable<[K, V]>): [Map<K, V>, UseMapActions<K, V>];
34
+
35
+ interface UseSetActions<T> {
36
+ add: (value: T) => void;
37
+ delete: (value: T) => void;
38
+ clear: () => void;
39
+ reset: () => void;
40
+ toggle: (value: T) => void;
41
+ }
42
+ declare function useSet<T>(initialValue?: Iterable<T>): [Set<T>, UseSetActions<T>];
43
+
44
+ declare function usePrevious<T>(value: T): T | undefined;
45
+
46
+ interface UseStateHistoryReturn<T> {
47
+ value: T;
48
+ set: (value: T) => void;
49
+ undo: () => void;
50
+ redo: () => void;
51
+ canUndo: boolean;
52
+ canRedo: boolean;
53
+ history: T[];
54
+ }
55
+ declare function useStateHistory<T>(initialValue: T): UseStateHistoryReturn<T>;
56
+
57
+ declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void, () => void];
58
+
59
+ declare function useSessionStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void, () => void];
60
+
61
+ type EventMap = WindowEventMap & DocumentEventMap & HTMLElementEventMap;
62
+ declare function useEventListener<K extends keyof EventMap>(eventName: K, handler: (event: EventMap[K]) => void, element?: RefObject<HTMLElement | null> | null, options?: boolean | AddEventListenerOptions): void;
63
+
64
+ declare function useClickOutside<T extends HTMLElement>(handler: (event: MouseEvent | TouchEvent) => void): RefObject<T | null>;
65
+
66
+ declare function useHover<T extends HTMLElement>(): [
67
+ (node: T | null) => void,
68
+ boolean
69
+ ];
70
+
71
+ interface UseIntersectionObserverOptions {
72
+ threshold?: number | number[];
73
+ root?: Element | null;
74
+ rootMargin?: string;
75
+ freezeOnceVisible?: boolean;
76
+ }
77
+ interface UseIntersectionObserverReturn {
78
+ ref: RefObject<HTMLElement | null>;
79
+ isIntersecting: boolean;
80
+ entry: IntersectionObserverEntry | null;
81
+ }
82
+ declare function useIntersectionObserver(options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;
83
+
84
+ interface Size {
85
+ width: number;
86
+ height: number;
87
+ }
88
+ declare function useResizeObserver<T extends HTMLElement>(): [RefObject<T | null>, Size];
89
+
90
+ declare function useMutationObserver(callback: MutationCallback, options?: MutationObserverInit): RefObject<HTMLElement | null>;
91
+
92
+ declare function useMediaQuery(query: string): boolean;
93
+
94
+ interface WindowSize {
95
+ width: number;
96
+ height: number;
97
+ }
98
+ declare function useWindowSize(): WindowSize;
99
+
100
+ interface ScrollPosition {
101
+ x: number;
102
+ y: number;
103
+ }
104
+ declare function useScroll(element?: RefObject<HTMLElement | null>): ScrollPosition;
105
+
106
+ interface MousePosition {
107
+ x: number;
108
+ y: number;
109
+ }
110
+ declare function useMouse(): MousePosition;
111
+
112
+ interface NetworkState {
113
+ online: boolean;
114
+ downlink?: number;
115
+ effectiveType?: string;
116
+ rtt?: number;
117
+ saveData?: boolean;
118
+ }
119
+ declare function useNetwork(): NetworkState;
120
+
121
+ declare function useDebounceValue<T>(value: T, delay: number): T;
122
+
123
+ declare function useDebounceCallback<T extends (...args: any[]) => any>(callback: T, delay: number): (...args: Parameters<T>) => void;
124
+
125
+ declare function useThrottleValue<T>(value: T, interval: number): T;
126
+
127
+ declare function useThrottleCallback<T extends (...args: any[]) => any>(callback: T, interval: number): (...args: Parameters<T>) => void;
128
+
129
+ declare function useMount(callback: () => void): void;
130
+
131
+ declare function useUnmount(callback: () => void): void;
132
+
133
+ declare function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
134
+
135
+ declare function useIsMounted(): () => boolean;
136
+
137
+ declare const useIsomorphicLayoutEffect: typeof useEffect;
138
+
139
+ declare function useDeepCompareEffect(effect: EffectCallback, deps: DependencyList): void;
140
+
141
+ declare function useScrollLock(locked: boolean): void;
142
+
143
+ type Theme = 'light' | 'dark' | 'system';
144
+ interface UseDarkModeReturn {
145
+ isDark: boolean;
146
+ theme: Theme;
147
+ setTheme: (theme: Theme) => void;
148
+ toggle: () => void;
149
+ }
150
+ declare function useDarkMode(defaultTheme?: Theme): UseDarkModeReturn;
151
+
152
+ interface UseFullscreenReturn {
153
+ ref: RefObject<HTMLElement | null>;
154
+ isFullscreen: boolean;
155
+ enter: () => Promise<void>;
156
+ exit: () => Promise<void>;
157
+ toggle: () => Promise<void>;
158
+ }
159
+ declare function useFullscreen(): UseFullscreenReturn;
160
+
161
+ interface UseCopyToClipboardReturn {
162
+ copiedText: string | null;
163
+ copy: (text: string) => Promise<boolean>;
164
+ }
165
+ declare function useCopyToClipboard(): UseCopyToClipboardReturn;
166
+
167
+ declare function useHotkeys(keyCombo: string, callback: (event: KeyboardEvent) => void, enabled?: boolean): void;
168
+
169
+ interface AsyncState<T> {
170
+ data: T | null;
171
+ loading: boolean;
172
+ error: Error | null;
173
+ }
174
+ interface UseAsyncReturn<T> extends AsyncState<T> {
175
+ execute: () => Promise<void>;
176
+ }
177
+ declare function useAsync<T>(asyncFunction: () => Promise<T>, immediate?: boolean): UseAsyncReturn<T>;
178
+
179
+ interface UseFetchOptions extends RequestInit {
180
+ enabled?: boolean;
181
+ }
182
+ interface UseFetchReturn<T> {
183
+ data: T | null;
184
+ loading: boolean;
185
+ error: Error | null;
186
+ refetch: () => Promise<void>;
187
+ }
188
+ declare function useFetch<T>(url: string, options?: UseFetchOptions): UseFetchReturn<T>;
189
+
190
+ interface UseInfiniteScrollOptions {
191
+ threshold?: number;
192
+ rootMargin?: string;
193
+ }
194
+ interface UseInfiniteScrollReturn {
195
+ sentinelRef: RefObject<HTMLElement | null>;
196
+ loading: boolean;
197
+ reset: () => void;
198
+ }
199
+ declare function useInfiniteScroll(loadMore: () => Promise<void>, hasMore: boolean, options?: UseInfiniteScrollOptions): UseInfiniteScrollReturn;
200
+
201
+ interface UsePaginationOptions {
202
+ totalItems: number;
203
+ pageSize?: number;
204
+ initialPage?: number;
205
+ }
206
+ interface UsePaginationReturn {
207
+ page: number;
208
+ pageSize: number;
209
+ totalPages: number;
210
+ hasNext: boolean;
211
+ hasPrev: boolean;
212
+ next: () => void;
213
+ prev: () => void;
214
+ setPage: (page: number) => void;
215
+ setPageSize: (size: number) => void;
216
+ startIndex: number;
217
+ endIndex: number;
218
+ }
219
+ declare function usePagination(options: UsePaginationOptions): UsePaginationReturn;
220
+
221
+ export { useAsync, useBoolean, useClickOutside, useCopyToClipboard, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDeepCompareEffect, useEventListener, useFetch, useFullscreen, useHotkeys, useHover, useInfiniteScroll, useIntersectionObserver, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useMount, useMouse, useMutationObserver, useNetwork, usePagination, usePrevious, useResizeObserver, useScroll, useScrollLock, useSessionStorage, useSet, useStateHistory, useThrottleCallback, useThrottleValue, useToggle, useUnmount, useUpdateEffect, useWindowSize };