@usefy/usefy 0.0.29 → 0.0.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.
package/README.md CHANGED
@@ -107,24 +107,26 @@ All packages require React 18 or 19:
107
107
 
108
108
  ### 📦 Available Hooks
109
109
 
110
- | Hook | Description | npm | Coverage |
111
- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
112
- | <a href="https://www.npmjs.com/package/@usefy/use-toggle" target="_blank" rel="noopener noreferrer">@usefy/use-toggle</a> | Boolean state management with toggle, setTrue, setFalse | <a href="https://www.npmjs.com/package/@usefy/use-toggle" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-toggle.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
113
- | <a href="https://www.npmjs.com/package/@usefy/use-counter" target="_blank" rel="noopener noreferrer">@usefy/use-counter</a> | Counter state with increment, decrement, reset | <a href="https://www.npmjs.com/package/@usefy/use-counter" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-counter.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
114
- | <a href="https://www.npmjs.com/package/@usefy/use-debounce" target="_blank" rel="noopener noreferrer">@usefy/use-debounce</a> | Value debouncing with leading/trailing edge | <a href="https://www.npmjs.com/package/@usefy/use-debounce" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-debounce.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |
115
- | <a href="https://www.npmjs.com/package/@usefy/use-debounce-callback" target="_blank" rel="noopener noreferrer">@usefy/use-debounce-callback</a> | Debounced callbacks with cancel/flush/pending | <a href="https://www.npmjs.com/package/@usefy/use-debounce-callback" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-debounce-callback.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![93%](https://img.shields.io/badge/coverage-93%25-brightgreen?style=flat-square) |
116
- | <a href="https://www.npmjs.com/package/@usefy/use-throttle" target="_blank" rel="noopener noreferrer">@usefy/use-throttle</a> | Value throttling for rate-limiting updates | <a href="https://www.npmjs.com/package/@usefy/use-throttle" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-throttle.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
117
- | <a href="https://www.npmjs.com/package/@usefy/use-throttle-callback" target="_blank" rel="noopener noreferrer">@usefy/use-throttle-callback</a> | Throttled callbacks with cancel/flush/pending | <a href="https://www.npmjs.com/package/@usefy/use-throttle-callback" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-throttle-callback.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
118
- | <a href="https://www.npmjs.com/package/@usefy/use-local-storage" target="_blank" rel="noopener noreferrer">@usefy/use-local-storage</a> | localStorage persistence with cross-tab sync | <a href="https://www.npmjs.com/package/@usefy/use-local-storage" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-local-storage.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square) |
119
- | <a href="https://www.npmjs.com/package/@usefy/use-session-storage" target="_blank" rel="noopener noreferrer">@usefy/use-session-storage</a> | sessionStorage persistence for tab lifetime | <a href="https://www.npmjs.com/package/@usefy/use-session-storage" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-session-storage.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square) |
120
- | <a href="https://www.npmjs.com/package/@usefy/use-click-any-where" target="_blank" rel="noopener noreferrer">@usefy/use-click-any-where</a> | Document-wide click event detection | <a href="https://www.npmjs.com/package/@usefy/use-click-any-where" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-click-any-where.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |
121
- | <a href="https://www.npmjs.com/package/@usefy/use-copy-to-clipboard" target="_blank" rel="noopener noreferrer">@usefy/use-copy-to-clipboard</a> | Clipboard copy with fallback support | <a href="https://www.npmjs.com/package/@usefy/use-copy-to-clipboard" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-copy-to-clipboard.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![88%](https://img.shields.io/badge/coverage-88%25-brightgreen?style=flat-square) |
122
- | <a href="https://www.npmjs.com/package/@usefy/use-event-listener" target="_blank" rel="noopener noreferrer">@usefy/use-event-listener</a> | DOM event listener with auto cleanup | <a href="https://www.npmjs.com/package/@usefy/use-event-listener" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-event-listener.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square) |
123
- | <a href="https://www.npmjs.com/package/@usefy/use-on-click-outside" target="_blank" rel="noopener noreferrer">@usefy/use-on-click-outside</a> | Outside click detection for modals/dropdowns | <a href="https://www.npmjs.com/package/@usefy/use-on-click-outside" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-on-click-outside.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square) |
124
- | <a href="https://www.npmjs.com/package/@usefy/use-unmount" target="_blank" rel="noopener noreferrer">@usefy/use-unmount</a> | Execute callback on component unmount | <a href="https://www.npmjs.com/package/@usefy/use-unmount" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-unmount.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
125
- | <a href="https://www.npmjs.com/package/@usefy/use-init" target="_blank" rel="noopener noreferrer">@usefy/use-init</a> | One-time initialization with async, retry, timeout | <a href="https://www.npmjs.com/package/@usefy/use-init" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-init.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square) |
126
- | <a href="https://www.npmjs.com/package/@usefy/use-timer" target="_blank" rel="noopener noreferrer">@usefy/use-timer</a> | Countdown timer with drift compensation and formats | <a href="https://www.npmjs.com/package/@usefy/use-timer" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-timer.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![84%](https://img.shields.io/badge/coverage-84%25-brightgreen?style=flat-square) |
127
- | <a href="https://www.npmjs.com/package/@usefy/use-geolocation" target="_blank" rel="noopener noreferrer">@usefy/use-geolocation</a> | Device geolocation with real-time tracking and distance | <a href="https://www.npmjs.com/package/@usefy/use-geolocation" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-geolocation.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![90%](https://img.shields.io/badge/coverage-90%25-brightgreen?style=flat-square) |
110
+ | Hook | Description | npm | Coverage |
111
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
112
+ | <a href="https://www.npmjs.com/package/@usefy/use-toggle" target="_blank" rel="noopener noreferrer">@usefy/use-toggle</a> | Boolean state management with toggle, setTrue, setFalse | <a href="https://www.npmjs.com/package/@usefy/use-toggle" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-toggle.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
113
+ | <a href="https://www.npmjs.com/package/@usefy/use-counter" target="_blank" rel="noopener noreferrer">@usefy/use-counter</a> | Counter state with increment, decrement, reset | <a href="https://www.npmjs.com/package/@usefy/use-counter" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-counter.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
114
+ | <a href="https://www.npmjs.com/package/@usefy/use-debounce" target="_blank" rel="noopener noreferrer">@usefy/use-debounce</a> | Value debouncing with leading/trailing edge | <a href="https://www.npmjs.com/package/@usefy/use-debounce" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-debounce.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |
115
+ | <a href="https://www.npmjs.com/package/@usefy/use-debounce-callback" target="_blank" rel="noopener noreferrer">@usefy/use-debounce-callback</a> | Debounced callbacks with cancel/flush/pending | <a href="https://www.npmjs.com/package/@usefy/use-debounce-callback" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-debounce-callback.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![93%](https://img.shields.io/badge/coverage-93%25-brightgreen?style=flat-square) |
116
+ | <a href="https://www.npmjs.com/package/@usefy/use-throttle" target="_blank" rel="noopener noreferrer">@usefy/use-throttle</a> | Value throttling for rate-limiting updates | <a href="https://www.npmjs.com/package/@usefy/use-throttle" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-throttle.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
117
+ | <a href="https://www.npmjs.com/package/@usefy/use-throttle-callback" target="_blank" rel="noopener noreferrer">@usefy/use-throttle-callback</a> | Throttled callbacks with cancel/flush/pending | <a href="https://www.npmjs.com/package/@usefy/use-throttle-callback" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-throttle-callback.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
118
+ | <a href="https://www.npmjs.com/package/@usefy/use-local-storage" target="_blank" rel="noopener noreferrer">@usefy/use-local-storage</a> | localStorage persistence with cross-tab sync | <a href="https://www.npmjs.com/package/@usefy/use-local-storage" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-local-storage.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square) |
119
+ | <a href="https://www.npmjs.com/package/@usefy/use-session-storage" target="_blank" rel="noopener noreferrer">@usefy/use-session-storage</a> | sessionStorage persistence for tab lifetime | <a href="https://www.npmjs.com/package/@usefy/use-session-storage" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-session-storage.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square) |
120
+ | <a href="https://www.npmjs.com/package/@usefy/use-click-any-where" target="_blank" rel="noopener noreferrer">@usefy/use-click-any-where</a> | Document-wide click event detection | <a href="https://www.npmjs.com/package/@usefy/use-click-any-where" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-click-any-where.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |
121
+ | <a href="https://www.npmjs.com/package/@usefy/use-copy-to-clipboard" target="_blank" rel="noopener noreferrer">@usefy/use-copy-to-clipboard</a> | Clipboard copy with fallback support | <a href="https://www.npmjs.com/package/@usefy/use-copy-to-clipboard" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-copy-to-clipboard.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![88%](https://img.shields.io/badge/coverage-88%25-brightgreen?style=flat-square) |
122
+ | <a href="https://www.npmjs.com/package/@usefy/use-event-listener" target="_blank" rel="noopener noreferrer">@usefy/use-event-listener</a> | DOM event listener with auto cleanup | <a href="https://www.npmjs.com/package/@usefy/use-event-listener" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-event-listener.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square) |
123
+ | <a href="https://www.npmjs.com/package/@usefy/use-on-click-outside" target="_blank" rel="noopener noreferrer">@usefy/use-on-click-outside</a> | Outside click detection for modals/dropdowns | <a href="https://www.npmjs.com/package/@usefy/use-on-click-outside" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-on-click-outside.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square) |
124
+ | <a href="https://www.npmjs.com/package/@usefy/use-unmount" target="_blank" rel="noopener noreferrer">@usefy/use-unmount</a> | Execute callback on component unmount | <a href="https://www.npmjs.com/package/@usefy/use-unmount" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-unmount.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |
125
+ | <a href="https://www.npmjs.com/package/@usefy/use-init" target="_blank" rel="noopener noreferrer">@usefy/use-init</a> | One-time initialization with async, retry, timeout | <a href="https://www.npmjs.com/package/@usefy/use-init" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-init.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square) |
126
+ | <a href="https://www.npmjs.com/package/@usefy/use-timer" target="_blank" rel="noopener noreferrer">@usefy/use-timer</a> | Countdown timer with drift compensation and formats | <a href="https://www.npmjs.com/package/@usefy/use-timer" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-timer.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![84%](https://img.shields.io/badge/coverage-84%25-brightgreen?style=flat-square) |
127
+ | <a href="https://www.npmjs.com/package/@usefy/use-geolocation" target="_blank" rel="noopener noreferrer">@usefy/use-geolocation</a> | Device geolocation with real-time tracking and distance | <a href="https://www.npmjs.com/package/@usefy/use-geolocation" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-geolocation.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![90%](https://img.shields.io/badge/coverage-90%25-brightgreen?style=flat-square) |
128
+ | <a href="https://www.npmjs.com/package/@usefy/use-intersection-observer" target="_blank" rel="noopener noreferrer">@usefy/use-intersection-observer</a> | Element visibility detection with Intersection Observer | <a href="https://www.npmjs.com/package/@usefy/use-intersection-observer" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-intersection-observer.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![94%](https://img.shields.io/badge/coverage-94%25-brightgreen?style=flat-square) |
129
+ | <a href="https://www.npmjs.com/package/@usefy/use-signal" target="_blank" rel="noopener noreferrer">@usefy/use-signal</a> | Event-driven communication between components | <a href="https://www.npmjs.com/package/@usefy/use-signal" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/npm/v/@usefy/use-signal.svg?style=flat-square&color=007acc" alt="npm version" /></a> | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square) |
128
130
 
129
131
  ---
130
132
 
@@ -141,6 +143,8 @@ import {
141
143
  useCopyToClipboard,
142
144
  useEventListener,
143
145
  useOnClickOutside,
146
+ useIntersectionObserver,
147
+ useSignal,
144
148
  useUnmount,
145
149
  useInit,
146
150
  } from "@usefy/usefy";
@@ -162,6 +166,12 @@ function App() {
162
166
  // Copy functionality
163
167
  const [copiedText, copy] = useCopyToClipboard();
164
168
 
169
+ // Lazy loading image
170
+ const { ref: imageRef, inView } = useIntersectionObserver({
171
+ triggerOnce: true,
172
+ rootMargin: "50px",
173
+ });
174
+
165
175
  return (
166
176
  <div data-theme={theme}>
167
177
  {/* Modal */}
@@ -195,6 +205,11 @@ function App() {
195
205
  <button onClick={() => copy("Hello World!")}>
196
206
  {copiedText ? "Copied!" : "Copy"}
197
207
  </button>
208
+
209
+ {/* Lazy Loading */}
210
+ <div ref={imageRef}>
211
+ {inView && <img src="large-image.jpg" alt="Lazy loaded" />}
212
+ </div>
198
213
  </div>
199
214
  );
200
215
  }
@@ -369,6 +384,71 @@ Data persists during tab lifetime, isolated per tab.
369
384
 
370
385
  </details>
371
386
 
387
+ ### 📡 Communication
388
+
389
+ <details>
390
+ <summary><strong>useSignal</strong> — Event-driven communication between components</summary>
391
+
392
+ ```tsx
393
+ import { useSignal } from "@usefy/use-signal";
394
+
395
+ // Emitter component
396
+ function RefreshButton() {
397
+ const { emit, info } = useSignal("dashboard-refresh");
398
+
399
+ return (
400
+ <button onClick={() => emit()}>
401
+ Refresh All ({info.subscriberCount} widgets)
402
+ </button>
403
+ );
404
+ }
405
+
406
+ // Subscriber component
407
+ function DataWidget() {
408
+ const { signal } = useSignal("dashboard-refresh");
409
+
410
+ useEffect(() => {
411
+ fetchData(); // Refetch when signal changes
412
+ }, [signal]);
413
+
414
+ return <div>Widget Content</div>;
415
+ }
416
+
417
+ // With typed data payload
418
+ interface NotificationData {
419
+ type: "success" | "error";
420
+ message: string;
421
+ }
422
+
423
+ function NotificationEmitter() {
424
+ const { emit } = useSignal<NotificationData>("notification");
425
+
426
+ return (
427
+ <button onClick={() => emit({ type: "success", message: "Done!" })}>
428
+ Notify
429
+ </button>
430
+ );
431
+ }
432
+
433
+ function NotificationReceiver() {
434
+ const { signal, info } = useSignal<NotificationData>("notification");
435
+
436
+ useEffect(() => {
437
+ if (signal > 0 && info.data) {
438
+ toast[info.data.type](info.data.message);
439
+ }
440
+ }, [signal]);
441
+
442
+ return null;
443
+ }
444
+ ```
445
+
446
+ **Perfect for:** Dashboard refresh, form reset, cache invalidation, multi-step flows, and event broadcasting.
447
+
448
+ > ⚠️ **Note:** `useSignal` is NOT a global state management solution. It's designed for lightweight event-driven communication. For complex state management, use Context, Zustand, Jotai, or Recoil.
449
+
450
+ </details>
451
+
372
452
  ### 🖱️ Events
373
453
 
374
454
  <details>
@@ -510,6 +590,66 @@ Perfect for location-based apps, maps, navigation, distance tracking, and geofen
510
590
 
511
591
  </details>
512
592
 
593
+ ### 👁️ Visibility
594
+
595
+ <details>
596
+ <summary><strong>useIntersectionObserver</strong> — Efficient element visibility detection with Intersection Observer API</summary>
597
+
598
+ ```tsx
599
+ import { useIntersectionObserver } from "@usefy/use-intersection-observer";
600
+
601
+ // Basic usage - detect when element enters viewport
602
+ const { ref, inView, entry } = useIntersectionObserver();
603
+
604
+ // Lazy loading images
605
+ const { ref, inView } = useIntersectionObserver({
606
+ triggerOnce: true, // Stop observing after first detection
607
+ threshold: 0.1, // Trigger when 10% visible
608
+ rootMargin: "50px", // Start loading 50px before entering viewport
609
+ });
610
+
611
+ // Infinite scroll with sentinel element
612
+ const { ref, inView } = useIntersectionObserver({
613
+ threshold: 1.0,
614
+ rootMargin: "100px", // Preload 100px ahead
615
+ });
616
+
617
+ useEffect(() => {
618
+ if (inView) loadMoreItems();
619
+ }, [inView]);
620
+
621
+ // Scroll animations
622
+ const { ref, inView } = useIntersectionObserver({
623
+ triggerOnce: true,
624
+ threshold: 0.3,
625
+ });
626
+
627
+ // Progress tracking with multiple thresholds
628
+ const thresholds = Array.from({ length: 101 }, (_, i) => i / 100);
629
+ const { ref, entry } = useIntersectionObserver({
630
+ threshold: thresholds,
631
+ onChange: (entry) => {
632
+ setProgress(Math.round(entry.intersectionRatio * 100));
633
+ },
634
+ });
635
+
636
+ // Custom scroll container
637
+ const containerRef = useRef<HTMLDivElement>(null);
638
+ const { ref, inView } = useIntersectionObserver({
639
+ root: containerRef.current,
640
+ rootMargin: "0px",
641
+ });
642
+
643
+ // Delayed observation
644
+ const { ref, inView } = useIntersectionObserver({
645
+ delay: 500, // Wait 500ms before creating observer
646
+ });
647
+ ```
648
+
649
+ Perfect for lazy loading, infinite scroll, scroll animations, progress tracking, and any visibility-based interactions with smart re-render optimization.
650
+
651
+ </details>
652
+
513
653
  ### 🔄 Lifecycle
514
654
 
515
655
  <details>
@@ -591,24 +731,26 @@ All packages are comprehensively tested using Vitest to ensure reliability and s
591
731
 
592
732
  > 💡 To generate coverage report locally, run `pnpm test:coverage`. The report will be available at `coverage/index.html`.
593
733
 
594
- | Package | Statements | Branches | Functions | Lines |
595
- | --------------------- | ---------- | -------- | --------- | ------ |
596
- | use-toggle | 100% | 100% | 100% | 100% |
597
- | use-counter | 100% | 100% | 100% | 100% |
598
- | use-throttle | 100% | 100% | 100% | 100% |
599
- | use-throttle-callback | 100% | 100% | 100% | 100% |
600
- | use-on-click-outside | 97.61% | 93.93% | 100% | 97.61% |
601
- | use-event-listener | 96.29% | 91.66% | 100% | 96.29% |
602
- | use-init | 96.1% | 88.63% | 100% | 96% |
603
- | use-local-storage | 95.18% | 86.84% | 93.75% | 95.12% |
604
- | use-session-storage | 94.66% | 82.75% | 93.33% | 94.59% |
605
- | use-debounce-callback | 93.2% | 76% | 93.75% | 93.13% |
606
- | use-click-any-where | 92.3% | 87.5% | 100% | 92.3% |
607
- | use-debounce | 90% | 82.6% | 66.66% | 91.95% |
608
- | use-copy-to-clipboard | 87.87% | 79.16% | 85.71% | 87.87% |
609
- | use-unmount | 100% | 100% | 100% | 100% |
610
- | use-timer | 83.8% | 72.63% | 93.93% | 84.13% |
611
- | use-geolocation | 90% | 85% | 95% | 90% |
734
+ | Package | Statements | Branches | Functions | Lines |
735
+ | ------------------------- | ---------- | -------- | --------- | ------ |
736
+ | use-toggle | 100% | 100% | 100% | 100% |
737
+ | use-counter | 100% | 100% | 100% | 100% |
738
+ | use-throttle | 100% | 100% | 100% | 100% |
739
+ | use-throttle-callback | 100% | 100% | 100% | 100% |
740
+ | use-on-click-outside | 97.61% | 93.93% | 100% | 97.61% |
741
+ | use-event-listener | 96.29% | 91.66% | 100% | 96.29% |
742
+ | use-init | 96.1% | 88.63% | 100% | 96% |
743
+ | use-local-storage | 95.18% | 86.84% | 93.75% | 95.12% |
744
+ | use-session-storage | 94.66% | 82.75% | 93.33% | 94.59% |
745
+ | use-debounce-callback | 93.2% | 76% | 93.75% | 93.13% |
746
+ | use-click-any-where | 92.3% | 87.5% | 100% | 92.3% |
747
+ | use-debounce | 90% | 82.6% | 66.66% | 91.95% |
748
+ | use-copy-to-clipboard | 87.87% | 79.16% | 85.71% | 87.87% |
749
+ | use-unmount | 100% | 100% | 100% | 100% |
750
+ | use-timer | 83.8% | 72.63% | 93.93% | 84.13% |
751
+ | use-geolocation | 90% | 85% | 95% | 90% |
752
+ | use-intersection-observer | 94% | 85% | 95% | 93.93% |
753
+ | use-signal | 98.61% | 90.9% | 96.42% | 98.59% |
612
754
 
613
755
  ---
614
756
 
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { ClickAnyWhereHandler, UseClickAnyWhereOptions, useClickAnyWhere } from '@usefy/use-click-any-where';
2
2
  export { CopyFn, UseCopyToClipboardOptions, UseCopyToClipboardReturn, useCopyToClipboard } from '@usefy/use-copy-to-clipboard';
3
3
  export { useCounter } from '@usefy/use-counter';
4
+ export { SignalInfo, SignalOptions, UseSignalReturn, useSignal } from '@usefy/use-signal';
4
5
  export { UseToggleReturn, useToggle } from '@usefy/use-toggle';
5
6
  export { UseDebounceOptions, useDebounce } from '@usefy/use-debounce';
6
7
  export { DebouncedFunction, UseDebounceCallbackOptions, useDebounceCallback } from '@usefy/use-debounce-callback';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { ClickAnyWhereHandler, UseClickAnyWhereOptions, useClickAnyWhere } from '@usefy/use-click-any-where';
2
2
  export { CopyFn, UseCopyToClipboardOptions, UseCopyToClipboardReturn, useCopyToClipboard } from '@usefy/use-copy-to-clipboard';
3
3
  export { useCounter } from '@usefy/use-counter';
4
+ export { SignalInfo, SignalOptions, UseSignalReturn, useSignal } from '@usefy/use-signal';
4
5
  export { UseToggleReturn, useToggle } from '@usefy/use-toggle';
5
6
  export { UseDebounceOptions, useDebounce } from '@usefy/use-debounce';
6
7
  export { DebouncedFunction, UseDebounceCallbackOptions, useDebounceCallback } from '@usefy/use-debounce-callback';
package/dist/index.js CHANGED
@@ -37,6 +37,7 @@ __export(index_exports, {
37
37
  useLocalStorage: () => import_use_local_storage.useLocalStorage,
38
38
  useOnClickOutside: () => import_use_on_click_outside.useOnClickOutside,
39
39
  useSessionStorage: () => import_use_session_storage.useSessionStorage,
40
+ useSignal: () => import_use_signal.useSignal,
40
41
  useThrottle: () => import_use_throttle.useThrottle,
41
42
  useThrottleCallback: () => import_use_throttle_callback.useThrottleCallback,
42
43
  useTimer: () => import_use_timer.useTimer,
@@ -47,6 +48,7 @@ module.exports = __toCommonJS(index_exports);
47
48
  var import_use_click_any_where = require("@usefy/use-click-any-where");
48
49
  var import_use_copy_to_clipboard = require("@usefy/use-copy-to-clipboard");
49
50
  var import_use_counter = require("@usefy/use-counter");
51
+ var import_use_signal = require("@usefy/use-signal");
50
52
  var import_use_toggle = require("@usefy/use-toggle");
51
53
  var import_use_debounce = require("@usefy/use-debounce");
52
54
  var import_use_debounce_callback = require("@usefy/use-debounce-callback");
@@ -80,6 +82,7 @@ var import_use_intersection_observer = require("@usefy/use-intersection-observer
80
82
  useLocalStorage,
81
83
  useOnClickOutside,
82
84
  useSessionStorage,
85
+ useSignal,
83
86
  useThrottle,
84
87
  useThrottleCallback,
85
88
  useTimer,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export all hooks from individual packages\n\n// useClickAnyWhere\nexport {\n useClickAnyWhere,\n type UseClickAnyWhereOptions,\n type ClickAnyWhereHandler,\n} from \"@usefy/use-click-any-where\";\n\n// useCopyToClipboard\nexport {\n useCopyToClipboard,\n type UseCopyToClipboardOptions,\n type UseCopyToClipboardReturn,\n type CopyFn,\n} from \"@usefy/use-copy-to-clipboard\";\n\n// useCounter\nexport { useCounter } from \"@usefy/use-counter\";\n\n// useToggle\nexport { useToggle, type UseToggleReturn } from \"@usefy/use-toggle\";\n\n// useDebounce\nexport { useDebounce, type UseDebounceOptions } from \"@usefy/use-debounce\";\n\n// useDebounceCallback\nexport {\n useDebounceCallback,\n type UseDebounceCallbackOptions,\n type DebouncedFunction,\n} from \"@usefy/use-debounce-callback\";\n\n// useThrottle\nexport { useThrottle, type UseThrottleOptions } from \"@usefy/use-throttle\";\n\n// useThrottleCallback\nexport {\n useThrottleCallback,\n type UseThrottleCallbackOptions,\n type ThrottledFunction,\n} from \"@usefy/use-throttle-callback\";\n\n// useLocalStorage\nexport {\n useLocalStorage,\n type UseLocalStorageOptions,\n type UseLocalStorageReturn,\n type InitialValue,\n} from \"@usefy/use-local-storage\";\n\n// useSessionStorage\nexport {\n useSessionStorage,\n type UseSessionStorageOptions,\n type UseSessionStorageReturn,\n type InitialValue as SessionStorageInitialValue,\n} from \"@usefy/use-session-storage\";\n\n// useOnClickOutside\nexport {\n useOnClickOutside,\n type UseOnClickOutsideOptions,\n type OnClickOutsideHandler,\n type ClickOutsideEvent,\n type RefTarget,\n type MouseEventType,\n type TouchEventType,\n} from \"@usefy/use-on-click-outside\";\n\n// useEventListener\nexport {\n useEventListener,\n type UseEventListenerOptions,\n type EventTargetType,\n} from \"@usefy/use-event-listener\";\n\n// useTimer\nexport {\n useTimer,\n type TimeUnit,\n type TimeFormat,\n type UseTimerOptions,\n type UseTimerReturn,\n} from \"@usefy/use-timer\";\n\n// useUnmount\nexport { useUnmount, type UseUnmountOptions } from \"@usefy/use-unmount\";\n\n// useInit\nexport {\n useInit,\n type UseInitOptions,\n type UseInitResult,\n} from \"@usefy/use-init\";\n\n// useGeolocation\nexport {\n useGeolocation,\n haversineDistance,\n calculateBearing,\n type GeoCoordinates,\n type GeoPosition,\n type GeolocationError,\n type GeolocationErrorCode,\n type PermissionState,\n type UseGeolocationOptions,\n type UseGeolocationReturn,\n} from \"@usefy/use-geolocation\";\n\n// useIntersectionObserver\nexport {\n useIntersectionObserver,\n isIntersectionObserverSupported,\n toIntersectionEntry,\n createInitialEntry,\n type UseIntersectionObserverOptions,\n type UseIntersectionObserverReturn,\n type IntersectionEntry,\n type OnChangeCallback,\n} from \"@usefy/use-intersection-observer\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iCAIO;AAGP,mCAKO;AAGP,yBAA2B;AAG3B,wBAAgD;AAGhD,0BAAqD;AAGrD,mCAIO;AAGP,0BAAqD;AAGrD,mCAIO;AAGP,+BAKO;AAGP,iCAKO;AAGP,kCAQO;AAGP,gCAIO;AAGP,uBAMO;AAGP,yBAAmD;AAGnD,sBAIO;AAGP,6BAWO;AAGP,uCASO;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export all hooks from individual packages\n\n// useClickAnyWhere\nexport {\n useClickAnyWhere,\n type UseClickAnyWhereOptions,\n type ClickAnyWhereHandler,\n} from \"@usefy/use-click-any-where\";\n\n// useCopyToClipboard\nexport {\n useCopyToClipboard,\n type UseCopyToClipboardOptions,\n type UseCopyToClipboardReturn,\n type CopyFn,\n} from \"@usefy/use-copy-to-clipboard\";\n\n// useCounter\nexport { useCounter } from \"@usefy/use-counter\";\n\n// useSignal\nexport {\n useSignal,\n type UseSignalReturn,\n type SignalOptions,\n type SignalInfo,\n} from \"@usefy/use-signal\";\n\n// useToggle\nexport { useToggle, type UseToggleReturn } from \"@usefy/use-toggle\";\n\n// useDebounce\nexport { useDebounce, type UseDebounceOptions } from \"@usefy/use-debounce\";\n\n// useDebounceCallback\nexport {\n useDebounceCallback,\n type UseDebounceCallbackOptions,\n type DebouncedFunction,\n} from \"@usefy/use-debounce-callback\";\n\n// useThrottle\nexport { useThrottle, type UseThrottleOptions } from \"@usefy/use-throttle\";\n\n// useThrottleCallback\nexport {\n useThrottleCallback,\n type UseThrottleCallbackOptions,\n type ThrottledFunction,\n} from \"@usefy/use-throttle-callback\";\n\n// useLocalStorage\nexport {\n useLocalStorage,\n type UseLocalStorageOptions,\n type UseLocalStorageReturn,\n type InitialValue,\n} from \"@usefy/use-local-storage\";\n\n// useSessionStorage\nexport {\n useSessionStorage,\n type UseSessionStorageOptions,\n type UseSessionStorageReturn,\n type InitialValue as SessionStorageInitialValue,\n} from \"@usefy/use-session-storage\";\n\n// useOnClickOutside\nexport {\n useOnClickOutside,\n type UseOnClickOutsideOptions,\n type OnClickOutsideHandler,\n type ClickOutsideEvent,\n type RefTarget,\n type MouseEventType,\n type TouchEventType,\n} from \"@usefy/use-on-click-outside\";\n\n// useEventListener\nexport {\n useEventListener,\n type UseEventListenerOptions,\n type EventTargetType,\n} from \"@usefy/use-event-listener\";\n\n// useTimer\nexport {\n useTimer,\n type TimeUnit,\n type TimeFormat,\n type UseTimerOptions,\n type UseTimerReturn,\n} from \"@usefy/use-timer\";\n\n// useUnmount\nexport { useUnmount, type UseUnmountOptions } from \"@usefy/use-unmount\";\n\n// useInit\nexport {\n useInit,\n type UseInitOptions,\n type UseInitResult,\n} from \"@usefy/use-init\";\n\n// useGeolocation\nexport {\n useGeolocation,\n haversineDistance,\n calculateBearing,\n type GeoCoordinates,\n type GeoPosition,\n type GeolocationError,\n type GeolocationErrorCode,\n type PermissionState,\n type UseGeolocationOptions,\n type UseGeolocationReturn,\n} from \"@usefy/use-geolocation\";\n\n// useIntersectionObserver\nexport {\n useIntersectionObserver,\n isIntersectionObserverSupported,\n toIntersectionEntry,\n createInitialEntry,\n type UseIntersectionObserverOptions,\n type UseIntersectionObserverReturn,\n type IntersectionEntry,\n type OnChangeCallback,\n} from \"@usefy/use-intersection-observer\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iCAIO;AAGP,mCAKO;AAGP,yBAA2B;AAG3B,wBAKO;AAGP,wBAAgD;AAGhD,0BAAqD;AAGrD,mCAIO;AAGP,0BAAqD;AAGrD,mCAIO;AAGP,+BAKO;AAGP,iCAKO;AAGP,kCAQO;AAGP,gCAIO;AAGP,uBAMO;AAGP,yBAAmD;AAGnD,sBAIO;AAGP,6BAWO;AAGP,uCASO;","names":[]}
package/dist/index.mjs CHANGED
@@ -6,6 +6,9 @@ import {
6
6
  useCopyToClipboard
7
7
  } from "@usefy/use-copy-to-clipboard";
8
8
  import { useCounter } from "@usefy/use-counter";
9
+ import {
10
+ useSignal
11
+ } from "@usefy/use-signal";
9
12
  import { useToggle } from "@usefy/use-toggle";
10
13
  import { useDebounce } from "@usefy/use-debounce";
11
14
  import {
@@ -63,6 +66,7 @@ export {
63
66
  useLocalStorage,
64
67
  useOnClickOutside,
65
68
  useSessionStorage,
69
+ useSignal,
66
70
  useThrottle,
67
71
  useThrottleCallback,
68
72
  useTimer,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export all hooks from individual packages\n\n// useClickAnyWhere\nexport {\n useClickAnyWhere,\n type UseClickAnyWhereOptions,\n type ClickAnyWhereHandler,\n} from \"@usefy/use-click-any-where\";\n\n// useCopyToClipboard\nexport {\n useCopyToClipboard,\n type UseCopyToClipboardOptions,\n type UseCopyToClipboardReturn,\n type CopyFn,\n} from \"@usefy/use-copy-to-clipboard\";\n\n// useCounter\nexport { useCounter } from \"@usefy/use-counter\";\n\n// useToggle\nexport { useToggle, type UseToggleReturn } from \"@usefy/use-toggle\";\n\n// useDebounce\nexport { useDebounce, type UseDebounceOptions } from \"@usefy/use-debounce\";\n\n// useDebounceCallback\nexport {\n useDebounceCallback,\n type UseDebounceCallbackOptions,\n type DebouncedFunction,\n} from \"@usefy/use-debounce-callback\";\n\n// useThrottle\nexport { useThrottle, type UseThrottleOptions } from \"@usefy/use-throttle\";\n\n// useThrottleCallback\nexport {\n useThrottleCallback,\n type UseThrottleCallbackOptions,\n type ThrottledFunction,\n} from \"@usefy/use-throttle-callback\";\n\n// useLocalStorage\nexport {\n useLocalStorage,\n type UseLocalStorageOptions,\n type UseLocalStorageReturn,\n type InitialValue,\n} from \"@usefy/use-local-storage\";\n\n// useSessionStorage\nexport {\n useSessionStorage,\n type UseSessionStorageOptions,\n type UseSessionStorageReturn,\n type InitialValue as SessionStorageInitialValue,\n} from \"@usefy/use-session-storage\";\n\n// useOnClickOutside\nexport {\n useOnClickOutside,\n type UseOnClickOutsideOptions,\n type OnClickOutsideHandler,\n type ClickOutsideEvent,\n type RefTarget,\n type MouseEventType,\n type TouchEventType,\n} from \"@usefy/use-on-click-outside\";\n\n// useEventListener\nexport {\n useEventListener,\n type UseEventListenerOptions,\n type EventTargetType,\n} from \"@usefy/use-event-listener\";\n\n// useTimer\nexport {\n useTimer,\n type TimeUnit,\n type TimeFormat,\n type UseTimerOptions,\n type UseTimerReturn,\n} from \"@usefy/use-timer\";\n\n// useUnmount\nexport { useUnmount, type UseUnmountOptions } from \"@usefy/use-unmount\";\n\n// useInit\nexport {\n useInit,\n type UseInitOptions,\n type UseInitResult,\n} from \"@usefy/use-init\";\n\n// useGeolocation\nexport {\n useGeolocation,\n haversineDistance,\n calculateBearing,\n type GeoCoordinates,\n type GeoPosition,\n type GeolocationError,\n type GeolocationErrorCode,\n type PermissionState,\n type UseGeolocationOptions,\n type UseGeolocationReturn,\n} from \"@usefy/use-geolocation\";\n\n// useIntersectionObserver\nexport {\n useIntersectionObserver,\n isIntersectionObserverSupported,\n toIntersectionEntry,\n createInitialEntry,\n type UseIntersectionObserverOptions,\n type UseIntersectionObserverReturn,\n type IntersectionEntry,\n type OnChangeCallback,\n} from \"@usefy/use-intersection-observer\";\n"],"mappings":";AAGA;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP,SAAS,kBAAkB;AAG3B,SAAS,iBAAuC;AAGhD,SAAS,mBAA4C;AAGrD;AAAA,EACE;AAAA,OAGK;AAGP,SAAS,mBAA4C;AAGrD;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP;AAAA,EACE;AAAA,OAOK;AAGP;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAKK;AAGP,SAAS,kBAA0C;AAGnD;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export all hooks from individual packages\n\n// useClickAnyWhere\nexport {\n useClickAnyWhere,\n type UseClickAnyWhereOptions,\n type ClickAnyWhereHandler,\n} from \"@usefy/use-click-any-where\";\n\n// useCopyToClipboard\nexport {\n useCopyToClipboard,\n type UseCopyToClipboardOptions,\n type UseCopyToClipboardReturn,\n type CopyFn,\n} from \"@usefy/use-copy-to-clipboard\";\n\n// useCounter\nexport { useCounter } from \"@usefy/use-counter\";\n\n// useSignal\nexport {\n useSignal,\n type UseSignalReturn,\n type SignalOptions,\n type SignalInfo,\n} from \"@usefy/use-signal\";\n\n// useToggle\nexport { useToggle, type UseToggleReturn } from \"@usefy/use-toggle\";\n\n// useDebounce\nexport { useDebounce, type UseDebounceOptions } from \"@usefy/use-debounce\";\n\n// useDebounceCallback\nexport {\n useDebounceCallback,\n type UseDebounceCallbackOptions,\n type DebouncedFunction,\n} from \"@usefy/use-debounce-callback\";\n\n// useThrottle\nexport { useThrottle, type UseThrottleOptions } from \"@usefy/use-throttle\";\n\n// useThrottleCallback\nexport {\n useThrottleCallback,\n type UseThrottleCallbackOptions,\n type ThrottledFunction,\n} from \"@usefy/use-throttle-callback\";\n\n// useLocalStorage\nexport {\n useLocalStorage,\n type UseLocalStorageOptions,\n type UseLocalStorageReturn,\n type InitialValue,\n} from \"@usefy/use-local-storage\";\n\n// useSessionStorage\nexport {\n useSessionStorage,\n type UseSessionStorageOptions,\n type UseSessionStorageReturn,\n type InitialValue as SessionStorageInitialValue,\n} from \"@usefy/use-session-storage\";\n\n// useOnClickOutside\nexport {\n useOnClickOutside,\n type UseOnClickOutsideOptions,\n type OnClickOutsideHandler,\n type ClickOutsideEvent,\n type RefTarget,\n type MouseEventType,\n type TouchEventType,\n} from \"@usefy/use-on-click-outside\";\n\n// useEventListener\nexport {\n useEventListener,\n type UseEventListenerOptions,\n type EventTargetType,\n} from \"@usefy/use-event-listener\";\n\n// useTimer\nexport {\n useTimer,\n type TimeUnit,\n type TimeFormat,\n type UseTimerOptions,\n type UseTimerReturn,\n} from \"@usefy/use-timer\";\n\n// useUnmount\nexport { useUnmount, type UseUnmountOptions } from \"@usefy/use-unmount\";\n\n// useInit\nexport {\n useInit,\n type UseInitOptions,\n type UseInitResult,\n} from \"@usefy/use-init\";\n\n// useGeolocation\nexport {\n useGeolocation,\n haversineDistance,\n calculateBearing,\n type GeoCoordinates,\n type GeoPosition,\n type GeolocationError,\n type GeolocationErrorCode,\n type PermissionState,\n type UseGeolocationOptions,\n type UseGeolocationReturn,\n} from \"@usefy/use-geolocation\";\n\n// useIntersectionObserver\nexport {\n useIntersectionObserver,\n isIntersectionObserverSupported,\n toIntersectionEntry,\n createInitialEntry,\n type UseIntersectionObserverOptions,\n type UseIntersectionObserverReturn,\n type IntersectionEntry,\n type OnChangeCallback,\n} from \"@usefy/use-intersection-observer\";\n"],"mappings":";AAGA;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP,SAAS,kBAAkB;AAG3B;AAAA,EACE;AAAA,OAIK;AAGP,SAAS,iBAAuC;AAGhD,SAAS,mBAA4C;AAGrD;AAAA,EACE;AAAA,OAGK;AAGP,SAAS,mBAA4C;AAGrD;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP;AAAA,EACE;AAAA,OAIK;AAGP;AAAA,EACE;AAAA,OAOK;AAGP;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,OAKK;AAGP,SAAS,kBAA0C;AAGnD;AAAA,EACE;AAAA,OAGK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usefy/usefy",
3
- "version": "0.0.29",
3
+ "version": "0.0.31",
4
4
  "description": "A collection of useful React hooks",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -17,23 +17,24 @@
17
17
  ],
18
18
  "sideEffects": false,
19
19
  "dependencies": {
20
- "@usefy/use-click-any-where": "0.0.29",
21
- "@usefy/use-copy-to-clipboard": "0.0.29",
22
- "@usefy/use-counter": "0.0.29",
23
- "@usefy/use-toggle": "0.0.29",
24
- "@usefy/use-debounce": "0.0.29",
25
- "@usefy/use-debounce-callback": "0.0.29",
26
- "@usefy/use-throttle": "0.0.29",
27
- "@usefy/use-throttle-callback": "0.0.29",
28
- "@usefy/use-local-storage": "0.0.29",
29
- "@usefy/use-session-storage": "0.0.29",
30
- "@usefy/use-on-click-outside": "0.0.29",
31
- "@usefy/use-event-listener": "0.0.29",
32
- "@usefy/use-timer": "0.0.29",
33
- "@usefy/use-unmount": "0.0.29",
34
- "@usefy/use-init": "0.0.29",
35
- "@usefy/use-geolocation": "0.0.29",
36
- "@usefy/use-intersection-observer": "0.0.29"
20
+ "@usefy/use-click-any-where": "0.0.31",
21
+ "@usefy/use-copy-to-clipboard": "0.0.31",
22
+ "@usefy/use-counter": "0.0.31",
23
+ "@usefy/use-signal": "0.0.31",
24
+ "@usefy/use-toggle": "0.0.31",
25
+ "@usefy/use-debounce": "0.0.31",
26
+ "@usefy/use-debounce-callback": "0.0.31",
27
+ "@usefy/use-throttle": "0.0.31",
28
+ "@usefy/use-throttle-callback": "0.0.31",
29
+ "@usefy/use-local-storage": "0.0.31",
30
+ "@usefy/use-session-storage": "0.0.31",
31
+ "@usefy/use-on-click-outside": "0.0.31",
32
+ "@usefy/use-timer": "0.0.31",
33
+ "@usefy/use-unmount": "0.0.31",
34
+ "@usefy/use-init": "0.0.31",
35
+ "@usefy/use-geolocation": "0.0.31",
36
+ "@usefy/use-event-listener": "0.0.31",
37
+ "@usefy/use-intersection-observer": "0.0.31"
37
38
  },
38
39
  "peerDependencies": {
39
40
  "react": "^18.0.0 || ^19.0.0"