@mantine/hooks 9.0.0-alpha.5 → 9.0.0-alpha.7
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/cjs/index.cjs +183 -188
- package/cjs/use-click-outside/use-click-outside.cjs +22 -26
- package/cjs/use-click-outside/use-click-outside.cjs.map +1 -1
- package/cjs/use-clipboard/use-clipboard.cjs +29 -28
- package/cjs/use-clipboard/use-clipboard.cjs.map +1 -1
- package/cjs/use-collapse/use-collapse.cjs +95 -98
- package/cjs/use-collapse/use-collapse.cjs.map +1 -1
- package/cjs/use-collapse/use-horizontal-collapse.cjs +94 -97
- package/cjs/use-collapse/use-horizontal-collapse.cjs.map +1 -1
- package/cjs/use-color-scheme/use-color-scheme.cjs +7 -8
- package/cjs/use-color-scheme/use-color-scheme.cjs.map +1 -1
- package/cjs/use-counter/use-counter.cjs +24 -26
- package/cjs/use-counter/use-counter.cjs.map +1 -1
- package/cjs/use-debounced-callback/use-debounced-callback.cjs +89 -93
- package/cjs/use-debounced-callback/use-debounced-callback.cjs.map +1 -1
- package/cjs/use-debounced-state/use-debounced-state.cjs +20 -28
- package/cjs/use-debounced-state/use-debounced-state.cjs.map +1 -1
- package/cjs/use-debounced-value/use-debounced-value.cjs +32 -31
- package/cjs/use-debounced-value/use-debounced-value.cjs.map +1 -1
- package/cjs/use-did-update/use-did-update.cjs +14 -21
- package/cjs/use-did-update/use-did-update.cjs.map +1 -1
- package/cjs/use-disclosure/use-disclosure.cjs +37 -30
- package/cjs/use-disclosure/use-disclosure.cjs.map +1 -1
- package/cjs/use-document-title/use-document-title.cjs +9 -12
- package/cjs/use-document-title/use-document-title.cjs.map +1 -1
- package/cjs/use-document-visibility/use-document-visibility.cjs +14 -15
- package/cjs/use-document-visibility/use-document-visibility.cjs.map +1 -1
- package/cjs/use-event-listener/use-event-listener.cjs +23 -32
- package/cjs/use-event-listener/use-event-listener.cjs.map +1 -1
- package/cjs/use-eye-dropper/use-eye-dropper.cjs +19 -24
- package/cjs/use-eye-dropper/use-eye-dropper.cjs.map +1 -1
- package/cjs/use-favicon/use-favicon.cjs +25 -32
- package/cjs/use-favicon/use-favicon.cjs.map +1 -1
- package/cjs/use-fetch/use-fetch.cjs +43 -45
- package/cjs/use-fetch/use-fetch.cjs.map +1 -1
- package/cjs/use-file-dialog/use-file-dialog.cjs +65 -77
- package/cjs/use-file-dialog/use-file-dialog.cjs.map +1 -1
- package/cjs/use-floating-window/use-floating-window.cjs +244 -255
- package/cjs/use-floating-window/use-floating-window.cjs.map +1 -1
- package/cjs/use-focus-return/use-focus-return.cjs +26 -37
- package/cjs/use-focus-return/use-focus-return.cjs.map +1 -1
- package/cjs/use-focus-trap/scope-tab.cjs +20 -31
- package/cjs/use-focus-trap/scope-tab.cjs.map +1 -1
- package/cjs/use-focus-trap/tabbable.cjs +24 -40
- package/cjs/use-focus-trap/tabbable.cjs.map +1 -1
- package/cjs/use-focus-trap/use-focus-trap.cjs +41 -68
- package/cjs/use-focus-trap/use-focus-trap.cjs.map +1 -1
- package/cjs/use-focus-within/use-focus-within.cjs +51 -62
- package/cjs/use-focus-within/use-focus-within.cjs.map +1 -1
- package/cjs/use-force-update/use-force-update.cjs +8 -9
- package/cjs/use-force-update/use-force-update.cjs.map +1 -1
- package/cjs/use-fullscreen/use-fullscreen.cjs +80 -89
- package/cjs/use-fullscreen/use-fullscreen.cjs.map +1 -1
- package/cjs/use-hash/use-hash.cjs +21 -28
- package/cjs/use-hash/use-hash.cjs.map +1 -1
- package/cjs/use-headroom/use-headroom.cjs +71 -94
- package/cjs/use-headroom/use-headroom.cjs.map +1 -1
- package/cjs/use-hotkeys/parse-hotkey.cjs +74 -82
- package/cjs/use-hotkeys/parse-hotkey.cjs.map +1 -1
- package/cjs/use-hotkeys/use-hotkeys.cjs +32 -33
- package/cjs/use-hotkeys/use-hotkeys.cjs.map +1 -1
- package/cjs/use-hover/use-hover.cjs +31 -33
- package/cjs/use-hover/use-hover.cjs.map +1 -1
- package/cjs/use-id/use-id.cjs +14 -18
- package/cjs/use-id/use-id.cjs.map +1 -1
- package/cjs/use-idle/use-idle.cjs +40 -33
- package/cjs/use-idle/use-idle.cjs.map +1 -1
- package/cjs/use-in-viewport/use-in-viewport.cjs +22 -27
- package/cjs/use-in-viewport/use-in-viewport.cjs.map +1 -1
- package/cjs/use-input-state/use-input-state.cjs +17 -26
- package/cjs/use-input-state/use-input-state.cjs.map +1 -1
- package/cjs/use-intersection/use-intersection.cjs +29 -27
- package/cjs/use-intersection/use-intersection.cjs.map +1 -1
- package/cjs/use-interval/use-interval.cjs +42 -41
- package/cjs/use-interval/use-interval.cjs.map +1 -1
- package/cjs/use-is-first-render/use-is-first-render.cjs +12 -13
- package/cjs/use-is-first-render/use-is-first-render.cjs.map +1 -1
- package/cjs/use-isomorphic-effect/use-isomorphic-effect.cjs +6 -7
- package/cjs/use-isomorphic-effect/use-isomorphic-effect.cjs.map +1 -1
- package/cjs/use-list-state/use-list-state.cjs +74 -73
- package/cjs/use-list-state/use-list-state.cjs.map +1 -1
- package/cjs/use-local-storage/create-storage.cjs +127 -139
- package/cjs/use-local-storage/create-storage.cjs.map +1 -1
- package/cjs/use-local-storage/use-local-storage.cjs +8 -9
- package/cjs/use-local-storage/use-local-storage.cjs.map +1 -1
- package/cjs/use-logger/use-logger.cjs +15 -16
- package/cjs/use-logger/use-logger.cjs.map +1 -1
- package/cjs/use-long-press/use-long-press.cjs +49 -58
- package/cjs/use-long-press/use-long-press.cjs.map +1 -1
- package/cjs/use-map/use-map.cjs +24 -25
- package/cjs/use-map/use-map.cjs.map +1 -1
- package/cjs/use-media-query/use-media-query.cjs +27 -33
- package/cjs/use-media-query/use-media-query.cjs.map +1 -1
- package/cjs/use-merged-ref/use-merged-ref.cjs +24 -35
- package/cjs/use-merged-ref/use-merged-ref.cjs.map +1 -1
- package/cjs/use-mounted/use-mounted.cjs +9 -10
- package/cjs/use-mounted/use-mounted.cjs.map +1 -1
- package/cjs/use-mouse/use-mouse.cjs +55 -53
- package/cjs/use-mouse/use-mouse.cjs.map +1 -1
- package/cjs/use-move/use-move.cjs +98 -98
- package/cjs/use-move/use-move.cjs.map +1 -1
- package/cjs/use-mutation-observer/use-mutation-observer.cjs +45 -46
- package/cjs/use-mutation-observer/use-mutation-observer.cjs.map +1 -1
- package/cjs/use-network/use-network.cjs +48 -44
- package/cjs/use-network/use-network.cjs.map +1 -1
- package/cjs/use-orientation/use-orientation.cjs +30 -41
- package/cjs/use-orientation/use-orientation.cjs.map +1 -1
- package/cjs/use-os/use-os.cjs +27 -52
- package/cjs/use-os/use-os.cjs.map +1 -1
- package/cjs/use-page-leave/use-page-leave.cjs +11 -12
- package/cjs/use-page-leave/use-page-leave.cjs.map +1 -1
- package/cjs/use-pagination/use-pagination.cjs +75 -88
- package/cjs/use-pagination/use-pagination.cjs.map +1 -1
- package/cjs/use-previous/use-previous.cjs +11 -12
- package/cjs/use-previous/use-previous.cjs.map +1 -1
- package/cjs/use-queue/use-queue.cjs +40 -37
- package/cjs/use-queue/use-queue.cjs.map +1 -1
- package/cjs/use-radial-move/use-radial-move.cjs +87 -94
- package/cjs/use-radial-move/use-radial-move.cjs.map +1 -1
- package/cjs/use-reduced-motion/use-reduced-motion.cjs +7 -8
- package/cjs/use-reduced-motion/use-reduced-motion.cjs.map +1 -1
- package/cjs/use-resize-observer/use-resize-observer.cjs +55 -62
- package/cjs/use-resize-observer/use-resize-observer.cjs.map +1 -1
- package/cjs/use-scroll-direction/use-scroll-direction.cjs +33 -36
- package/cjs/use-scroll-direction/use-scroll-direction.cjs.map +1 -1
- package/cjs/use-scroll-into-view/use-scroll-into-view.cjs +128 -160
- package/cjs/use-scroll-into-view/use-scroll-into-view.cjs.map +1 -1
- package/cjs/use-scroll-spy/use-scroll-spy.cjs +58 -84
- package/cjs/use-scroll-spy/use-scroll-spy.cjs.map +1 -1
- package/cjs/use-scroller/use-scroller.cjs +128 -151
- package/cjs/use-scroller/use-scroller.cjs.map +1 -1
- package/cjs/use-selection/use-selection.cjs +61 -72
- package/cjs/use-selection/use-selection.cjs.map +1 -1
- package/cjs/use-session-storage/use-session-storage.cjs +8 -9
- package/cjs/use-session-storage/use-session-storage.cjs.map +1 -1
- package/cjs/use-set/use-set.cjs +60 -74
- package/cjs/use-set/use-set.cjs.map +1 -1
- package/cjs/use-set-state/use-set-state.cjs +11 -16
- package/cjs/use-set-state/use-set-state.cjs.map +1 -1
- package/cjs/use-shallow-effect/use-shallow-effect.cjs +20 -31
- package/cjs/use-shallow-effect/use-shallow-effect.cjs.map +1 -1
- package/cjs/use-state-history/use-state-history.cjs +47 -40
- package/cjs/use-state-history/use-state-history.cjs.map +1 -1
- package/cjs/use-text-selection/use-text-selection.cjs +19 -20
- package/cjs/use-text-selection/use-text-selection.cjs.map +1 -1
- package/cjs/use-throttled-callback/use-throttled-callback.cjs +37 -48
- package/cjs/use-throttled-callback/use-throttled-callback.cjs.map +1 -1
- package/cjs/use-throttled-state/use-throttled-state.cjs +11 -12
- package/cjs/use-throttled-state/use-throttled-state.cjs.map +1 -1
- package/cjs/use-throttled-value/use-throttled-value.cjs +18 -22
- package/cjs/use-throttled-value/use-throttled-value.cjs.map +1 -1
- package/cjs/use-timeout/use-timeout.cjs +27 -32
- package/cjs/use-timeout/use-timeout.cjs.map +1 -1
- package/cjs/use-toggle/use-toggle.cjs +12 -13
- package/cjs/use-toggle/use-toggle.cjs.map +1 -1
- package/cjs/use-uncontrolled/use-uncontrolled.cjs +22 -25
- package/cjs/use-uncontrolled/use-uncontrolled.cjs.map +1 -1
- package/cjs/use-validated-state/use-validated-state.cjs +21 -24
- package/cjs/use-validated-state/use-validated-state.cjs.map +1 -1
- package/cjs/use-viewport-size/use-viewport-size.cjs +22 -22
- package/cjs/use-viewport-size/use-viewport-size.cjs.map +1 -1
- package/cjs/use-window-event/use-window-event.cjs +11 -12
- package/cjs/use-window-event/use-window-event.cjs.map +1 -1
- package/cjs/use-window-scroll/use-window-scroll.cjs +30 -26
- package/cjs/use-window-scroll/use-window-scroll.cjs.map +1 -1
- package/cjs/utils/clamp/clamp.cjs +9 -15
- package/cjs/utils/clamp/clamp.cjs.map +1 -1
- package/cjs/utils/lower-first/lower-first.cjs +6 -6
- package/cjs/utils/lower-first/lower-first.cjs.map +1 -1
- package/cjs/utils/random-id/random-id.cjs +6 -6
- package/cjs/utils/random-id/random-id.cjs.map +1 -1
- package/cjs/utils/range/range.cjs +8 -11
- package/cjs/utils/range/range.cjs.map +1 -1
- package/cjs/utils/shallow-equal/shallow-equal.cjs +17 -29
- package/cjs/utils/shallow-equal/shallow-equal.cjs.map +1 -1
- package/cjs/utils/upper-first/upper-first.cjs +6 -6
- package/cjs/utils/upper-first/upper-first.cjs.map +1 -1
- package/cjs/utils/use-callback-ref/use-callback-ref.cjs +11 -12
- package/cjs/utils/use-callback-ref/use-callback-ref.cjs.map +1 -1
- package/esm/index.mjs +87 -87
- package/esm/use-click-outside/use-click-outside.mjs +22 -24
- package/esm/use-click-outside/use-click-outside.mjs.map +1 -1
- package/esm/use-clipboard/use-clipboard.mjs +29 -26
- package/esm/use-clipboard/use-clipboard.mjs.map +1 -1
- package/esm/use-collapse/use-collapse.mjs +95 -95
- package/esm/use-collapse/use-collapse.mjs.map +1 -1
- package/esm/use-collapse/use-horizontal-collapse.mjs +94 -94
- package/esm/use-collapse/use-horizontal-collapse.mjs.map +1 -1
- package/esm/use-color-scheme/use-color-scheme.mjs +7 -6
- package/esm/use-color-scheme/use-color-scheme.mjs.map +1 -1
- package/esm/use-counter/use-counter.mjs +24 -24
- package/esm/use-counter/use-counter.mjs.map +1 -1
- package/esm/use-debounced-callback/use-debounced-callback.mjs +89 -91
- package/esm/use-debounced-callback/use-debounced-callback.mjs.map +1 -1
- package/esm/use-debounced-state/use-debounced-state.mjs +20 -26
- package/esm/use-debounced-state/use-debounced-state.mjs.map +1 -1
- package/esm/use-debounced-value/use-debounced-value.mjs +32 -29
- package/esm/use-debounced-value/use-debounced-value.mjs.map +1 -1
- package/esm/use-did-update/use-did-update.mjs +14 -19
- package/esm/use-did-update/use-did-update.mjs.map +1 -1
- package/esm/use-disclosure/use-disclosure.mjs +37 -28
- package/esm/use-disclosure/use-disclosure.mjs.map +1 -1
- package/esm/use-document-title/use-document-title.mjs +9 -10
- package/esm/use-document-title/use-document-title.mjs.map +1 -1
- package/esm/use-document-visibility/use-document-visibility.mjs +14 -13
- package/esm/use-document-visibility/use-document-visibility.mjs.map +1 -1
- package/esm/use-event-listener/use-event-listener.mjs +23 -30
- package/esm/use-event-listener/use-event-listener.mjs.map +1 -1
- package/esm/use-eye-dropper/use-eye-dropper.mjs +19 -22
- package/esm/use-eye-dropper/use-eye-dropper.mjs.map +1 -1
- package/esm/use-favicon/use-favicon.mjs +25 -30
- package/esm/use-favicon/use-favicon.mjs.map +1 -1
- package/esm/use-fetch/use-fetch.mjs +43 -43
- package/esm/use-fetch/use-fetch.mjs.map +1 -1
- package/esm/use-file-dialog/use-file-dialog.mjs +65 -75
- package/esm/use-file-dialog/use-file-dialog.mjs.map +1 -1
- package/esm/use-floating-window/use-floating-window.mjs +244 -253
- package/esm/use-floating-window/use-floating-window.mjs.map +1 -1
- package/esm/use-focus-return/use-focus-return.mjs +26 -35
- package/esm/use-focus-return/use-focus-return.mjs.map +1 -1
- package/esm/use-focus-trap/scope-tab.mjs +20 -29
- package/esm/use-focus-trap/scope-tab.mjs.map +1 -1
- package/esm/use-focus-trap/tabbable.mjs +23 -38
- package/esm/use-focus-trap/tabbable.mjs.map +1 -1
- package/esm/use-focus-trap/use-focus-trap.mjs +41 -66
- package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -1
- package/esm/use-focus-within/use-focus-within.mjs +51 -60
- package/esm/use-focus-within/use-focus-within.mjs.map +1 -1
- package/esm/use-force-update/use-force-update.mjs +8 -7
- package/esm/use-force-update/use-force-update.mjs.map +1 -1
- package/esm/use-fullscreen/use-fullscreen.mjs +80 -87
- package/esm/use-fullscreen/use-fullscreen.mjs.map +1 -1
- package/esm/use-hash/use-hash.mjs +21 -26
- package/esm/use-hash/use-hash.mjs.map +1 -1
- package/esm/use-headroom/use-headroom.mjs +71 -89
- package/esm/use-headroom/use-headroom.mjs.map +1 -1
- package/esm/use-hotkeys/parse-hotkey.mjs +74 -79
- package/esm/use-hotkeys/parse-hotkey.mjs.map +1 -1
- package/esm/use-hotkeys/use-hotkeys.mjs +32 -31
- package/esm/use-hotkeys/use-hotkeys.mjs.map +1 -1
- package/esm/use-hover/use-hover.mjs +31 -31
- package/esm/use-hover/use-hover.mjs.map +1 -1
- package/esm/use-id/use-id.mjs +15 -17
- package/esm/use-id/use-id.mjs.map +1 -1
- package/esm/use-idle/use-idle.mjs +40 -31
- package/esm/use-idle/use-idle.mjs.map +1 -1
- package/esm/use-in-viewport/use-in-viewport.mjs +22 -25
- package/esm/use-in-viewport/use-in-viewport.mjs.map +1 -1
- package/esm/use-input-state/use-input-state.mjs +17 -23
- package/esm/use-input-state/use-input-state.mjs.map +1 -1
- package/esm/use-intersection/use-intersection.mjs +29 -25
- package/esm/use-intersection/use-intersection.mjs.map +1 -1
- package/esm/use-interval/use-interval.mjs +42 -39
- package/esm/use-interval/use-interval.mjs.map +1 -1
- package/esm/use-is-first-render/use-is-first-render.mjs +12 -11
- package/esm/use-is-first-render/use-is-first-render.mjs.map +1 -1
- package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs +6 -5
- package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs.map +1 -1
- package/esm/use-list-state/use-list-state.mjs +74 -71
- package/esm/use-list-state/use-list-state.mjs.map +1 -1
- package/esm/use-local-storage/create-storage.mjs +127 -137
- package/esm/use-local-storage/create-storage.mjs.map +1 -1
- package/esm/use-local-storage/use-local-storage.mjs +7 -6
- package/esm/use-local-storage/use-local-storage.mjs.map +1 -1
- package/esm/use-logger/use-logger.mjs +15 -14
- package/esm/use-logger/use-logger.mjs.map +1 -1
- package/esm/use-long-press/use-long-press.mjs +49 -56
- package/esm/use-long-press/use-long-press.mjs.map +1 -1
- package/esm/use-map/use-map.mjs +24 -23
- package/esm/use-map/use-map.mjs.map +1 -1
- package/esm/use-media-query/use-media-query.mjs +27 -31
- package/esm/use-media-query/use-media-query.mjs.map +1 -1
- package/esm/use-merged-ref/use-merged-ref.mjs +24 -33
- package/esm/use-merged-ref/use-merged-ref.mjs.map +1 -1
- package/esm/use-mounted/use-mounted.mjs +9 -8
- package/esm/use-mounted/use-mounted.mjs.map +1 -1
- package/esm/use-mouse/use-mouse.mjs +55 -51
- package/esm/use-mouse/use-mouse.mjs.map +1 -1
- package/esm/use-move/use-move.mjs +98 -96
- package/esm/use-move/use-move.mjs.map +1 -1
- package/esm/use-mutation-observer/use-mutation-observer.mjs +45 -44
- package/esm/use-mutation-observer/use-mutation-observer.mjs.map +1 -1
- package/esm/use-network/use-network.mjs +48 -42
- package/esm/use-network/use-network.mjs.map +1 -1
- package/esm/use-orientation/use-orientation.mjs +30 -39
- package/esm/use-orientation/use-orientation.mjs.map +1 -1
- package/esm/use-os/use-os.mjs +27 -50
- package/esm/use-os/use-os.mjs.map +1 -1
- package/esm/use-page-leave/use-page-leave.mjs +11 -10
- package/esm/use-page-leave/use-page-leave.mjs.map +1 -1
- package/esm/use-pagination/use-pagination.mjs +75 -85
- package/esm/use-pagination/use-pagination.mjs.map +1 -1
- package/esm/use-previous/use-previous.mjs +11 -10
- package/esm/use-previous/use-previous.mjs.map +1 -1
- package/esm/use-queue/use-queue.mjs +40 -35
- package/esm/use-queue/use-queue.mjs.map +1 -1
- package/esm/use-radial-move/use-radial-move.mjs +87 -92
- package/esm/use-radial-move/use-radial-move.mjs.map +1 -1
- package/esm/use-reduced-motion/use-reduced-motion.mjs +7 -6
- package/esm/use-reduced-motion/use-reduced-motion.mjs.map +1 -1
- package/esm/use-resize-observer/use-resize-observer.mjs +55 -60
- package/esm/use-resize-observer/use-resize-observer.mjs.map +1 -1
- package/esm/use-scroll-direction/use-scroll-direction.mjs +33 -34
- package/esm/use-scroll-direction/use-scroll-direction.mjs.map +1 -1
- package/esm/use-scroll-into-view/use-scroll-into-view.mjs +128 -158
- package/esm/use-scroll-into-view/use-scroll-into-view.mjs.map +1 -1
- package/esm/use-scroll-spy/use-scroll-spy.mjs +58 -82
- package/esm/use-scroll-spy/use-scroll-spy.mjs.map +1 -1
- package/esm/use-scroller/use-scroller.mjs +128 -149
- package/esm/use-scroller/use-scroller.mjs.map +1 -1
- package/esm/use-selection/use-selection.mjs +61 -70
- package/esm/use-selection/use-selection.mjs.map +1 -1
- package/esm/use-session-storage/use-session-storage.mjs +7 -6
- package/esm/use-session-storage/use-session-storage.mjs.map +1 -1
- package/esm/use-set/use-set.mjs +60 -71
- package/esm/use-set/use-set.mjs.map +1 -1
- package/esm/use-set-state/use-set-state.mjs +11 -14
- package/esm/use-set-state/use-set-state.mjs.map +1 -1
- package/esm/use-shallow-effect/use-shallow-effect.mjs +20 -29
- package/esm/use-shallow-effect/use-shallow-effect.mjs.map +1 -1
- package/esm/use-state-history/use-state-history.mjs +47 -38
- package/esm/use-state-history/use-state-history.mjs.map +1 -1
- package/esm/use-text-selection/use-text-selection.mjs +19 -18
- package/esm/use-text-selection/use-text-selection.mjs.map +1 -1
- package/esm/use-throttled-callback/use-throttled-callback.mjs +37 -46
- package/esm/use-throttled-callback/use-throttled-callback.mjs.map +1 -1
- package/esm/use-throttled-state/use-throttled-state.mjs +11 -10
- package/esm/use-throttled-state/use-throttled-state.mjs.map +1 -1
- package/esm/use-throttled-value/use-throttled-value.mjs +18 -20
- package/esm/use-throttled-value/use-throttled-value.mjs.map +1 -1
- package/esm/use-timeout/use-timeout.mjs +27 -30
- package/esm/use-timeout/use-timeout.mjs.map +1 -1
- package/esm/use-toggle/use-toggle.mjs +12 -11
- package/esm/use-toggle/use-toggle.mjs.map +1 -1
- package/esm/use-uncontrolled/use-uncontrolled.mjs +22 -23
- package/esm/use-uncontrolled/use-uncontrolled.mjs.map +1 -1
- package/esm/use-validated-state/use-validated-state.mjs +21 -22
- package/esm/use-validated-state/use-validated-state.mjs.map +1 -1
- package/esm/use-viewport-size/use-viewport-size.mjs +22 -20
- package/esm/use-viewport-size/use-viewport-size.mjs.map +1 -1
- package/esm/use-window-event/use-window-event.mjs +11 -10
- package/esm/use-window-event/use-window-event.mjs.map +1 -1
- package/esm/use-window-scroll/use-window-scroll.mjs +30 -24
- package/esm/use-window-scroll/use-window-scroll.mjs.map +1 -1
- package/esm/utils/clamp/clamp.mjs +9 -13
- package/esm/utils/clamp/clamp.mjs.map +1 -1
- package/esm/utils/lower-first/lower-first.mjs +6 -4
- package/esm/utils/lower-first/lower-first.mjs.map +1 -1
- package/esm/utils/random-id/random-id.mjs +6 -4
- package/esm/utils/random-id/random-id.mjs.map +1 -1
- package/esm/utils/range/range.mjs +8 -9
- package/esm/utils/range/range.mjs.map +1 -1
- package/esm/utils/shallow-equal/shallow-equal.mjs +17 -27
- package/esm/utils/shallow-equal/shallow-equal.mjs.map +1 -1
- package/esm/utils/upper-first/upper-first.mjs +6 -4
- package/esm/utils/upper-first/upper-first.mjs.map +1 -1
- package/esm/utils/use-callback-ref/use-callback-ref.mjs +11 -10
- package/esm/utils/use-callback-ref/use-callback-ref.mjs.map +1 -1
- package/lib/use-local-storage/use-local-storage.d.ts +13 -3
- package/lib/use-session-storage/use-session-storage.d.ts +13 -3
- package/package.json +1 -1
- package/cjs/index.cjs.map +0 -1
- package/cjs/use-drag/use-drag.cjs +0 -304
- package/cjs/use-drag/use-drag.cjs.map +0 -1
- package/cjs/use-mask/use-mask.cjs +0 -583
- package/cjs/use-mask/use-mask.cjs.map +0 -1
- package/cjs/use-roving-index/use-roving-index.cjs +0 -270
- package/cjs/use-roving-index/use-roving-index.cjs.map +0 -1
- package/esm/index.mjs.map +0 -1
- package/esm/use-drag/use-drag.mjs +0 -302
- package/esm/use-drag/use-drag.mjs.map +0 -1
- package/esm/use-mask/use-mask.mjs +0 -577
- package/esm/use-mask/use-mask.mjs.map +0 -1
- package/esm/use-roving-index/use-roving-index.mjs +0 -268
- package/esm/use-roving-index/use-roving-index.mjs.map +0 -1
- package/lib/use-drag/use-drag.d.ts +0 -60
- package/lib/use-mask/use-mask.d.ts +0 -60
- package/lib/use-roving-index/use-roving-index.d.ts +0 -49
|
@@ -1,33 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
3
|
+
//#region packages/@mantine/hooks/src/use-event-listener/use-event-listener.ts
|
|
4
4
|
function useEventListener(type, listener, options) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
() => () => {
|
|
23
|
-
if (previousNode.current && previousListener.current) {
|
|
24
|
-
previousNode.current.removeEventListener(type, previousListener.current, options);
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
[type, options]
|
|
28
|
-
);
|
|
29
|
-
return callbackRef;
|
|
5
|
+
const previousListener = useRef(null);
|
|
6
|
+
const previousNode = useRef(null);
|
|
7
|
+
const callbackRef = useCallback((node) => {
|
|
8
|
+
if (!node) return;
|
|
9
|
+
if (previousNode.current && previousListener.current) previousNode.current.removeEventListener(type, previousListener.current, options);
|
|
10
|
+
node.addEventListener(type, listener, options);
|
|
11
|
+
previousNode.current = node;
|
|
12
|
+
previousListener.current = listener;
|
|
13
|
+
}, [
|
|
14
|
+
type,
|
|
15
|
+
listener,
|
|
16
|
+
options
|
|
17
|
+
]);
|
|
18
|
+
useEffect(() => () => {
|
|
19
|
+
if (previousNode.current && previousListener.current) previousNode.current.removeEventListener(type, previousListener.current, options);
|
|
20
|
+
}, [type, options]);
|
|
21
|
+
return callbackRef;
|
|
30
22
|
}
|
|
31
|
-
|
|
23
|
+
//#endregion
|
|
32
24
|
export { useEventListener };
|
|
33
|
-
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=use-event-listener.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-event-listener.mjs","sources":["../../src/use-event-listener/use-event-listener.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = any>(\n type: K,\n listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n): React.RefCallback<T | null> {\n const previousListener = useRef<Function | null>(null);\n const previousNode = useRef<T | null>(null);\n\n const callbackRef: React.RefCallback<T | null> = useCallback(\n (node) => {\n if (!node) {\n return;\n }\n\n if (previousNode.current && previousListener.current) {\n previousNode.current.removeEventListener(type, previousListener.current as any, options);\n }\n\n node.addEventListener(type, listener as any, options);\n previousNode.current = node;\n previousListener.current = listener;\n },\n [type, listener, options]\n );\n\n useEffect(\n () => () => {\n if (previousNode.current && previousListener.current) {\n previousNode.current.removeEventListener(type, previousListener.current as any, options);\n }\n },\n [type, options]\n );\n\n return callbackRef;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-event-listener.mjs","names":[],"sources":["../../src/use-event-listener/use-event-listener.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = any>(\n type: K,\n listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n): React.RefCallback<T | null> {\n const previousListener = useRef<Function | null>(null);\n const previousNode = useRef<T | null>(null);\n\n const callbackRef: React.RefCallback<T | null> = useCallback(\n (node) => {\n if (!node) {\n return;\n }\n\n if (previousNode.current && previousListener.current) {\n previousNode.current.removeEventListener(type, previousListener.current as any, options);\n }\n\n node.addEventListener(type, listener as any, options);\n previousNode.current = node;\n previousListener.current = listener;\n },\n [type, listener, options]\n );\n\n useEffect(\n () => () => {\n if (previousNode.current && previousListener.current) {\n previousNode.current.removeEventListener(type, previousListener.current as any, options);\n }\n },\n [type, options]\n );\n\n return callbackRef;\n}\n"],"mappings":";;;AAEA,SAAgB,iBACd,MACA,UACA,SAC6B;CAC7B,MAAM,mBAAmB,OAAwB,KAAK;CACtD,MAAM,eAAe,OAAiB,KAAK;CAE3C,MAAM,cAA2C,aAC9C,SAAS;AACR,MAAI,CAAC,KACH;AAGF,MAAI,aAAa,WAAW,iBAAiB,QAC3C,cAAa,QAAQ,oBAAoB,MAAM,iBAAiB,SAAgB,QAAQ;AAG1F,OAAK,iBAAiB,MAAM,UAAiB,QAAQ;AACrD,eAAa,UAAU;AACvB,mBAAiB,UAAU;IAE7B;EAAC;EAAM;EAAU;EAAQ,CAC1B;AAED,uBACc;AACV,MAAI,aAAa,WAAW,iBAAiB,QAC3C,cAAa,QAAQ,oBAAoB,MAAM,iBAAiB,SAAgB,QAAQ;IAG5F,CAAC,MAAM,QAAQ,CAChB;AAED,QAAO"}
|
|
@@ -1,27 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicEffect } from "../use-isomorphic-effect/use-isomorphic-effect.mjs";
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
//#region packages/@mantine/hooks/src/use-eye-dropper/use-eye-dropper.ts
|
|
5
5
|
function useEyeDropper() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
[supported]
|
|
19
|
-
);
|
|
20
|
-
return { supported, open };
|
|
6
|
+
const [supported, setSupported] = useState(false);
|
|
7
|
+
useIsomorphicEffect(() => {
|
|
8
|
+
setSupported(typeof window !== "undefined" && !isOpera() && "EyeDropper" in window);
|
|
9
|
+
}, []);
|
|
10
|
+
return {
|
|
11
|
+
supported,
|
|
12
|
+
open: useCallback((options = {}) => {
|
|
13
|
+
if (supported) return new window.EyeDropper().open(options);
|
|
14
|
+
return Promise.resolve(void 0);
|
|
15
|
+
}, [supported])
|
|
16
|
+
};
|
|
21
17
|
}
|
|
22
18
|
function isOpera() {
|
|
23
|
-
|
|
19
|
+
return navigator.userAgent.includes("OPR");
|
|
24
20
|
}
|
|
25
|
-
|
|
21
|
+
//#endregion
|
|
26
22
|
export { useEyeDropper };
|
|
27
|
-
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=use-eye-dropper.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-eye-dropper.mjs","sources":["../../src/use-eye-dropper/use-eye-dropper.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport interface EyeDropperOpenOptions {\n signal?: AbortSignal;\n}\n\nexport interface EyeDropperOpenReturnType {\n sRGBHex: string;\n}\n\nexport interface UseEyeDropperReturnValue {\n supported: boolean;\n open: (options?: EyeDropperOpenOptions) => Promise<EyeDropperOpenReturnType | undefined>;\n}\n\nexport function useEyeDropper(): UseEyeDropperReturnValue {\n const [supported, setSupported] = useState(false);\n\n useIsomorphicEffect(() => {\n setSupported(typeof window !== 'undefined' && !isOpera() && 'EyeDropper' in window);\n }, []);\n\n const open = useCallback(\n (options: EyeDropperOpenOptions = {}): Promise<EyeDropperOpenReturnType | undefined> => {\n if (supported) {\n const eyeDropper = new (window as any).EyeDropper();\n return eyeDropper.open(options);\n }\n\n return Promise.resolve(undefined);\n },\n [supported]\n );\n\n return { supported, open };\n}\n\nfunction isOpera() {\n return navigator.userAgent.includes('OPR');\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-eye-dropper.mjs","names":[],"sources":["../../src/use-eye-dropper/use-eye-dropper.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport interface EyeDropperOpenOptions {\n signal?: AbortSignal;\n}\n\nexport interface EyeDropperOpenReturnType {\n sRGBHex: string;\n}\n\nexport interface UseEyeDropperReturnValue {\n supported: boolean;\n open: (options?: EyeDropperOpenOptions) => Promise<EyeDropperOpenReturnType | undefined>;\n}\n\nexport function useEyeDropper(): UseEyeDropperReturnValue {\n const [supported, setSupported] = useState(false);\n\n useIsomorphicEffect(() => {\n setSupported(typeof window !== 'undefined' && !isOpera() && 'EyeDropper' in window);\n }, []);\n\n const open = useCallback(\n (options: EyeDropperOpenOptions = {}): Promise<EyeDropperOpenReturnType | undefined> => {\n if (supported) {\n const eyeDropper = new (window as any).EyeDropper();\n return eyeDropper.open(options);\n }\n\n return Promise.resolve(undefined);\n },\n [supported]\n );\n\n return { supported, open };\n}\n\nfunction isOpera() {\n return navigator.userAgent.includes('OPR');\n}\n"],"mappings":";;;;AAgBA,SAAgB,gBAA0C;CACxD,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,2BAA0B;AACxB,eAAa,OAAO,WAAW,eAAe,CAAC,SAAS,IAAI,gBAAgB,OAAO;IAClF,EAAE,CAAC;AAcN,QAAO;EAAE;EAAW,MAZP,aACV,UAAiC,EAAE,KAAoD;AACtF,OAAI,UAEF,QADmB,IAAK,OAAe,YAAY,CACjC,KAAK,QAAQ;AAGjC,UAAO,QAAQ,QAAQ,KAAA,EAAU;KAEnC,CAAC,UAAU,CACZ;EAEyB;;AAG5B,SAAS,UAAU;AACjB,QAAO,UAAU,UAAU,SAAS,MAAM"}
|
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicEffect } from "../use-isomorphic-effect/use-isomorphic-effect.mjs";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
//#region packages/@mantine/hooks/src/use-favicon/use-favicon.ts
|
|
5
5
|
const MIME_TYPES = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
ico: "image/x-icon",
|
|
7
|
+
png: "image/png",
|
|
8
|
+
svg: "image/svg+xml",
|
|
9
|
+
gif: "image/gif"
|
|
10
10
|
};
|
|
11
11
|
function useFavicon(url) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
link.current.setAttribute(
|
|
27
|
-
"type",
|
|
28
|
-
MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]
|
|
29
|
-
);
|
|
30
|
-
link.current.setAttribute("href", url);
|
|
31
|
-
}, [url]);
|
|
12
|
+
const link = useRef(null);
|
|
13
|
+
useIsomorphicEffect(() => {
|
|
14
|
+
if (!url) return;
|
|
15
|
+
if (!link.current) {
|
|
16
|
+
document.querySelectorAll("link[rel*=\"icon\"]").forEach((element) => document.head.removeChild(element));
|
|
17
|
+
const element = document.createElement("link");
|
|
18
|
+
element.rel = "shortcut icon";
|
|
19
|
+
link.current = element;
|
|
20
|
+
document.querySelector("head").appendChild(element);
|
|
21
|
+
}
|
|
22
|
+
const splittedUrl = url.split(".");
|
|
23
|
+
link.current.setAttribute("type", MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]);
|
|
24
|
+
link.current.setAttribute("href", url);
|
|
25
|
+
}, [url]);
|
|
32
26
|
}
|
|
33
|
-
|
|
27
|
+
//#endregion
|
|
34
28
|
export { useFavicon };
|
|
35
|
-
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=use-favicon.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-favicon.mjs","sources":["../../src/use-favicon/use-favicon.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nconst MIME_TYPES: Record<string, string> = {\n ico: 'image/x-icon',\n png: 'image/png',\n svg: 'image/svg+xml',\n gif: 'image/gif',\n};\n\nexport function useFavicon(url: string) {\n const link = useRef<HTMLLinkElement>(null);\n\n useIsomorphicEffect(() => {\n if (!url) {\n return;\n }\n\n if (!link.current) {\n const existingElements = document.querySelectorAll<HTMLLinkElement>('link[rel*=\"icon\"]');\n existingElements.forEach((element) => document.head.removeChild(element));\n\n const element = document.createElement('link');\n element.rel = 'shortcut icon';\n link.current = element;\n document.querySelector('head')!.appendChild(element);\n }\n\n const splittedUrl = url.split('.');\n link.current.setAttribute(\n 'type',\n MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]\n );\n link.current.setAttribute('href', url);\n }, [url]);\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-favicon.mjs","names":[],"sources":["../../src/use-favicon/use-favicon.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nconst MIME_TYPES: Record<string, string> = {\n ico: 'image/x-icon',\n png: 'image/png',\n svg: 'image/svg+xml',\n gif: 'image/gif',\n};\n\nexport function useFavicon(url: string) {\n const link = useRef<HTMLLinkElement>(null);\n\n useIsomorphicEffect(() => {\n if (!url) {\n return;\n }\n\n if (!link.current) {\n const existingElements = document.querySelectorAll<HTMLLinkElement>('link[rel*=\"icon\"]');\n existingElements.forEach((element) => document.head.removeChild(element));\n\n const element = document.createElement('link');\n element.rel = 'shortcut icon';\n link.current = element;\n document.querySelector('head')!.appendChild(element);\n }\n\n const splittedUrl = url.split('.');\n link.current.setAttribute(\n 'type',\n MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]\n );\n link.current.setAttribute('href', url);\n }, [url]);\n}\n"],"mappings":";;;;AAGA,MAAM,aAAqC;CACzC,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACN;AAED,SAAgB,WAAW,KAAa;CACtC,MAAM,OAAO,OAAwB,KAAK;AAE1C,2BAA0B;AACxB,MAAI,CAAC,IACH;AAGF,MAAI,CAAC,KAAK,SAAS;AACQ,YAAS,iBAAkC,sBAAoB,CACvE,SAAS,YAAY,SAAS,KAAK,YAAY,QAAQ,CAAC;GAEzE,MAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,WAAQ,MAAM;AACd,QAAK,UAAU;AACf,YAAS,cAAc,OAAO,CAAE,YAAY,QAAQ;;EAGtD,MAAM,cAAc,IAAI,MAAM,IAAI;AAClC,OAAK,QAAQ,aACX,QACA,WAAW,YAAY,YAAY,SAAS,GAAG,aAAa,EAC7D;AACD,OAAK,QAAQ,aAAa,QAAQ,IAAI;IACrC,CAAC,IAAI,CAAC"}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
//#region packages/@mantine/hooks/src/use-fetch/use-fetch.ts
|
|
4
4
|
function useFetch(url, { autoInvoke = true, ...options } = {}) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return { data, loading, error, refetch, abort };
|
|
5
|
+
const [data, setData] = useState(null);
|
|
6
|
+
const [loading, setLoading] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const controller = useRef(null);
|
|
9
|
+
const refetch = useCallback(() => {
|
|
10
|
+
if (controller.current) controller.current.abort();
|
|
11
|
+
controller.current = new AbortController();
|
|
12
|
+
setLoading(true);
|
|
13
|
+
return fetch(url, {
|
|
14
|
+
signal: controller.current.signal,
|
|
15
|
+
...options
|
|
16
|
+
}).then((res) => res.json()).then((res) => {
|
|
17
|
+
setData(res);
|
|
18
|
+
setLoading(false);
|
|
19
|
+
return res;
|
|
20
|
+
}).catch((err) => {
|
|
21
|
+
setLoading(false);
|
|
22
|
+
if (err.name !== "AbortError") setError(err);
|
|
23
|
+
return err;
|
|
24
|
+
});
|
|
25
|
+
}, [url]);
|
|
26
|
+
const abort = useCallback(() => {
|
|
27
|
+
if (controller.current) controller.current?.abort("");
|
|
28
|
+
}, []);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (autoInvoke) refetch();
|
|
31
|
+
return () => {
|
|
32
|
+
if (controller.current) controller.current.abort("");
|
|
33
|
+
};
|
|
34
|
+
}, [refetch, autoInvoke]);
|
|
35
|
+
return {
|
|
36
|
+
data,
|
|
37
|
+
loading,
|
|
38
|
+
error,
|
|
39
|
+
refetch,
|
|
40
|
+
abort
|
|
41
|
+
};
|
|
43
42
|
}
|
|
44
|
-
|
|
43
|
+
//#endregion
|
|
45
44
|
export { useFetch };
|
|
46
|
-
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=use-fetch.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fetch.mjs","sources":["../../src/use-fetch/use-fetch.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseFetchOptions extends RequestInit {\n autoInvoke?: boolean;\n}\n\nexport interface UseFetchReturnValue<T> {\n data: T | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<any>;\n abort: () => void;\n}\n\nexport function useFetch<T>(\n url: string,\n { autoInvoke = true, ...options }: UseFetchOptions = {}\n): UseFetchReturnValue<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const controller = useRef<AbortController | null>(null);\n\n const refetch = useCallback(() => {\n if (controller.current) {\n controller.current.abort();\n }\n\n controller.current = new AbortController();\n\n setLoading(true);\n\n return fetch(url, { signal: controller.current.signal, ...options })\n .then((res) => res.json())\n .then((res) => {\n setData(res);\n setLoading(false);\n return res as T;\n })\n .catch((err) => {\n setLoading(false);\n\n if (err.name !== 'AbortError') {\n setError(err);\n }\n\n return err;\n });\n }, [url]);\n\n const abort = useCallback(() => {\n if (controller.current) {\n controller.current?.abort('');\n }\n }, []);\n\n useEffect(() => {\n if (autoInvoke) {\n refetch();\n }\n\n return () => {\n if (controller.current) {\n controller.current.abort('');\n }\n };\n }, [refetch, autoInvoke]);\n\n return { data, loading, error, refetch, abort };\n}\n\nexport namespace useFetch {\n export type Options = UseFetchOptions;\n export type ReturnValue<T> = UseFetchReturnValue<T>;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"use-fetch.mjs","names":[],"sources":["../../src/use-fetch/use-fetch.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseFetchOptions extends RequestInit {\n autoInvoke?: boolean;\n}\n\nexport interface UseFetchReturnValue<T> {\n data: T | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<any>;\n abort: () => void;\n}\n\nexport function useFetch<T>(\n url: string,\n { autoInvoke = true, ...options }: UseFetchOptions = {}\n): UseFetchReturnValue<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const controller = useRef<AbortController | null>(null);\n\n const refetch = useCallback(() => {\n if (controller.current) {\n controller.current.abort();\n }\n\n controller.current = new AbortController();\n\n setLoading(true);\n\n return fetch(url, { signal: controller.current.signal, ...options })\n .then((res) => res.json())\n .then((res) => {\n setData(res);\n setLoading(false);\n return res as T;\n })\n .catch((err) => {\n setLoading(false);\n\n if (err.name !== 'AbortError') {\n setError(err);\n }\n\n return err;\n });\n }, [url]);\n\n const abort = useCallback(() => {\n if (controller.current) {\n controller.current?.abort('');\n }\n }, []);\n\n useEffect(() => {\n if (autoInvoke) {\n refetch();\n }\n\n return () => {\n if (controller.current) {\n controller.current.abort('');\n }\n };\n }, [refetch, autoInvoke]);\n\n return { data, loading, error, refetch, abort };\n}\n\nexport namespace useFetch {\n export type Options = UseFetchOptions;\n export type ReturnValue<T> = UseFetchReturnValue<T>;\n}\n"],"mappings":";;;AAcA,SAAgB,SACd,KACA,EAAE,aAAa,MAAM,GAAG,YAA6B,EAAE,EAC/B;CACxB,MAAM,CAAC,MAAM,WAAW,SAAmB,KAAK;CAChD,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;CACtD,MAAM,aAAa,OAA+B,KAAK;CAEvD,MAAM,UAAU,kBAAkB;AAChC,MAAI,WAAW,QACb,YAAW,QAAQ,OAAO;AAG5B,aAAW,UAAU,IAAI,iBAAiB;AAE1C,aAAW,KAAK;AAEhB,SAAO,MAAM,KAAK;GAAE,QAAQ,WAAW,QAAQ;GAAQ,GAAG;GAAS,CAAC,CACjE,MAAM,QAAQ,IAAI,MAAM,CAAC,CACzB,MAAM,QAAQ;AACb,WAAQ,IAAI;AACZ,cAAW,MAAM;AACjB,UAAO;IACP,CACD,OAAO,QAAQ;AACd,cAAW,MAAM;AAEjB,OAAI,IAAI,SAAS,aACf,UAAS,IAAI;AAGf,UAAO;IACP;IACH,CAAC,IAAI,CAAC;CAET,MAAM,QAAQ,kBAAkB;AAC9B,MAAI,WAAW,QACb,YAAW,SAAS,MAAM,GAAG;IAE9B,EAAE,CAAC;AAEN,iBAAgB;AACd,MAAI,WACF,UAAS;AAGX,eAAa;AACX,OAAI,WAAW,QACb,YAAW,QAAQ,MAAM,GAAG;;IAG/B,CAAC,SAAS,WAAW,CAAC;AAEzB,QAAO;EAAE;EAAM;EAAS;EAAO;EAAS;EAAO"}
|
|
@@ -1,84 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicEffect } from "../use-isomorphic-effect/use-isomorphic-effect.mjs";
|
|
3
|
+
import { useCallback, useRef, useState } from "react";
|
|
4
|
+
//#region packages/@mantine/hooks/src/use-file-dialog/use-file-dialog.ts
|
|
5
5
|
const defaultOptions = {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
multiple: true,
|
|
7
|
+
accept: "*"
|
|
8
8
|
};
|
|
9
9
|
function getInitialFilesList(files) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
const result = new DataTransfer();
|
|
17
|
-
for (const file of files) {
|
|
18
|
-
result.items.add(file);
|
|
19
|
-
}
|
|
20
|
-
return result.files;
|
|
10
|
+
if (!files) return null;
|
|
11
|
+
if (files instanceof FileList) return files;
|
|
12
|
+
const result = new DataTransfer();
|
|
13
|
+
for (const file of files) result.items.add(file);
|
|
14
|
+
return result.files;
|
|
21
15
|
}
|
|
22
16
|
function createInput(options) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
input.multiple = options.multiple;
|
|
33
|
-
}
|
|
34
|
-
if (options.capture) {
|
|
35
|
-
input.capture = options.capture;
|
|
36
|
-
}
|
|
37
|
-
if (options.directory) {
|
|
38
|
-
input.webkitdirectory = options.directory;
|
|
39
|
-
}
|
|
40
|
-
input.style.display = "none";
|
|
41
|
-
return input;
|
|
17
|
+
if (typeof document === "undefined") return null;
|
|
18
|
+
const input = document.createElement("input");
|
|
19
|
+
input.type = "file";
|
|
20
|
+
if (options.accept) input.accept = options.accept;
|
|
21
|
+
if (options.multiple) input.multiple = options.multiple;
|
|
22
|
+
if (options.capture) input.capture = options.capture;
|
|
23
|
+
if (options.directory) input.webkitdirectory = options.directory;
|
|
24
|
+
input.style.display = "none";
|
|
25
|
+
return input;
|
|
42
26
|
}
|
|
43
27
|
function useFileDialog(input = {}) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
28
|
+
const options = {
|
|
29
|
+
...defaultOptions,
|
|
30
|
+
...input
|
|
31
|
+
};
|
|
32
|
+
const [files, setFiles] = useState(getInitialFilesList(options.initialFiles));
|
|
33
|
+
const inputRef = useRef(null);
|
|
34
|
+
const handleChange = useCallback((event) => {
|
|
35
|
+
const target = event.target;
|
|
36
|
+
if (target?.files) {
|
|
37
|
+
setFiles(target.files);
|
|
38
|
+
options.onChange?.(target.files);
|
|
39
|
+
}
|
|
40
|
+
}, [options.onChange]);
|
|
41
|
+
const createAndSetupInput = useCallback(() => {
|
|
42
|
+
inputRef.current?.remove();
|
|
43
|
+
inputRef.current = createInput(options);
|
|
44
|
+
if (inputRef.current) {
|
|
45
|
+
inputRef.current.addEventListener("change", handleChange, { once: true });
|
|
46
|
+
document.body.appendChild(inputRef.current);
|
|
47
|
+
}
|
|
48
|
+
}, [options, handleChange]);
|
|
49
|
+
useIsomorphicEffect(() => {
|
|
50
|
+
createAndSetupInput();
|
|
51
|
+
return () => inputRef.current?.remove();
|
|
52
|
+
}, []);
|
|
53
|
+
const reset = useCallback(() => {
|
|
54
|
+
setFiles(null);
|
|
55
|
+
options.onChange?.(null);
|
|
56
|
+
}, [options.onChange]);
|
|
57
|
+
return {
|
|
58
|
+
files,
|
|
59
|
+
open: useCallback(() => {
|
|
60
|
+
if (options.resetOnOpen) reset();
|
|
61
|
+
createAndSetupInput();
|
|
62
|
+
inputRef.current?.click();
|
|
63
|
+
}, [
|
|
64
|
+
options.resetOnOpen,
|
|
65
|
+
reset,
|
|
66
|
+
createAndSetupInput
|
|
67
|
+
]),
|
|
68
|
+
reset
|
|
69
|
+
};
|
|
81
70
|
}
|
|
82
|
-
|
|
71
|
+
//#endregion
|
|
83
72
|
export { useFileDialog };
|
|
84
|
-
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=use-file-dialog.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-file-dialog.mjs","sources":["../../src/use-file-dialog/use-file-dialog.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport interface UseFileDialogOptions {\n /** Determines whether multiple files are allowed, `true` by default */\n multiple?: boolean;\n\n /** `accept` attribute of the file input, '*' by default */\n accept?: string;\n\n /** `capture` attribute of the file input */\n capture?: string;\n\n /** Determines whether the user can pick a directory instead of file, `false` by default */\n directory?: boolean;\n\n /** Determines whether the file input state should be reset when the file dialog is opened, `false` by default */\n resetOnOpen?: boolean;\n\n /** Initial selected files */\n initialFiles?: FileList | File[];\n\n /** Called when files are selected */\n onChange?: (files: FileList | null) => void;\n\n /** Called when file dialog is canceled */\n onCancel?: () => void;\n}\n\nconst defaultOptions: UseFileDialogOptions = {\n multiple: true,\n accept: '*',\n};\n\nfunction getInitialFilesList(files: UseFileDialogOptions['initialFiles']): FileList | null {\n if (!files) {\n return null;\n }\n\n if (files instanceof FileList) {\n return files;\n }\n\n const result = new DataTransfer();\n for (const file of files) {\n result.items.add(file);\n }\n\n return result.files;\n}\n\nfunction createInput(options: UseFileDialogOptions) {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const input = document.createElement('input');\n input.type = 'file';\n\n if (options.accept) {\n input.accept = options.accept;\n }\n\n if (options.multiple) {\n input.multiple = options.multiple;\n }\n\n if (options.capture) {\n input.capture = options.capture;\n }\n\n if (options.directory) {\n input.webkitdirectory = options.directory;\n }\n\n input.style.display = 'none';\n return input;\n}\n\nexport interface UseFileDialogReturnValue {\n files: FileList | null;\n open: () => void;\n reset: () => void;\n}\n\nexport function useFileDialog(input: UseFileDialogOptions = {}): UseFileDialogReturnValue {\n const options: UseFileDialogOptions = { ...defaultOptions, ...input };\n const [files, setFiles] = useState<FileList | null>(getInitialFilesList(options.initialFiles));\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const handleChange = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target?.files) {\n setFiles(target.files);\n options.onChange?.(target.files);\n }\n },\n [options.onChange]\n );\n\n const createAndSetupInput = useCallback(() => {\n inputRef.current?.remove();\n inputRef.current = createInput(options);\n\n if (inputRef.current) {\n inputRef.current.addEventListener('change', handleChange, { once: true });\n document.body.appendChild(inputRef.current);\n }\n }, [options, handleChange]);\n\n useIsomorphicEffect(() => {\n createAndSetupInput();\n return () => inputRef.current?.remove();\n }, []);\n\n const reset = useCallback(() => {\n setFiles(null);\n options.onChange?.(null);\n }, [options.onChange]);\n\n const open = useCallback(() => {\n if (options.resetOnOpen) {\n reset();\n }\n\n createAndSetupInput();\n inputRef.current?.click();\n }, [options.resetOnOpen, reset, createAndSetupInput]);\n\n return { files, open, reset };\n}\n\nexport namespace useFileDialog {\n export type Options = UseFileDialogOptions;\n export type ReturnValue = UseFileDialogReturnValue;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-file-dialog.mjs","names":[],"sources":["../../src/use-file-dialog/use-file-dialog.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport interface UseFileDialogOptions {\n /** Determines whether multiple files are allowed, `true` by default */\n multiple?: boolean;\n\n /** `accept` attribute of the file input, '*' by default */\n accept?: string;\n\n /** `capture` attribute of the file input */\n capture?: string;\n\n /** Determines whether the user can pick a directory instead of file, `false` by default */\n directory?: boolean;\n\n /** Determines whether the file input state should be reset when the file dialog is opened, `false` by default */\n resetOnOpen?: boolean;\n\n /** Initial selected files */\n initialFiles?: FileList | File[];\n\n /** Called when files are selected */\n onChange?: (files: FileList | null) => void;\n\n /** Called when file dialog is canceled */\n onCancel?: () => void;\n}\n\nconst defaultOptions: UseFileDialogOptions = {\n multiple: true,\n accept: '*',\n};\n\nfunction getInitialFilesList(files: UseFileDialogOptions['initialFiles']): FileList | null {\n if (!files) {\n return null;\n }\n\n if (files instanceof FileList) {\n return files;\n }\n\n const result = new DataTransfer();\n for (const file of files) {\n result.items.add(file);\n }\n\n return result.files;\n}\n\nfunction createInput(options: UseFileDialogOptions) {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const input = document.createElement('input');\n input.type = 'file';\n\n if (options.accept) {\n input.accept = options.accept;\n }\n\n if (options.multiple) {\n input.multiple = options.multiple;\n }\n\n if (options.capture) {\n input.capture = options.capture;\n }\n\n if (options.directory) {\n input.webkitdirectory = options.directory;\n }\n\n input.style.display = 'none';\n return input;\n}\n\nexport interface UseFileDialogReturnValue {\n files: FileList | null;\n open: () => void;\n reset: () => void;\n}\n\nexport function useFileDialog(input: UseFileDialogOptions = {}): UseFileDialogReturnValue {\n const options: UseFileDialogOptions = { ...defaultOptions, ...input };\n const [files, setFiles] = useState<FileList | null>(getInitialFilesList(options.initialFiles));\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const handleChange = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target?.files) {\n setFiles(target.files);\n options.onChange?.(target.files);\n }\n },\n [options.onChange]\n );\n\n const createAndSetupInput = useCallback(() => {\n inputRef.current?.remove();\n inputRef.current = createInput(options);\n\n if (inputRef.current) {\n inputRef.current.addEventListener('change', handleChange, { once: true });\n document.body.appendChild(inputRef.current);\n }\n }, [options, handleChange]);\n\n useIsomorphicEffect(() => {\n createAndSetupInput();\n return () => inputRef.current?.remove();\n }, []);\n\n const reset = useCallback(() => {\n setFiles(null);\n options.onChange?.(null);\n }, [options.onChange]);\n\n const open = useCallback(() => {\n if (options.resetOnOpen) {\n reset();\n }\n\n createAndSetupInput();\n inputRef.current?.click();\n }, [options.resetOnOpen, reset, createAndSetupInput]);\n\n return { files, open, reset };\n}\n\nexport namespace useFileDialog {\n export type Options = UseFileDialogOptions;\n export type ReturnValue = UseFileDialogReturnValue;\n}\n"],"mappings":";;;;AA6BA,MAAM,iBAAuC;CAC3C,UAAU;CACV,QAAQ;CACT;AAED,SAAS,oBAAoB,OAA8D;AACzF,KAAI,CAAC,MACH,QAAO;AAGT,KAAI,iBAAiB,SACnB,QAAO;CAGT,MAAM,SAAS,IAAI,cAAc;AACjC,MAAK,MAAM,QAAQ,MACjB,QAAO,MAAM,IAAI,KAAK;AAGxB,QAAO,OAAO;;AAGhB,SAAS,YAAY,SAA+B;AAClD,KAAI,OAAO,aAAa,YACtB,QAAO;CAGT,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,OAAM,OAAO;AAEb,KAAI,QAAQ,OACV,OAAM,SAAS,QAAQ;AAGzB,KAAI,QAAQ,SACV,OAAM,WAAW,QAAQ;AAG3B,KAAI,QAAQ,QACV,OAAM,UAAU,QAAQ;AAG1B,KAAI,QAAQ,UACV,OAAM,kBAAkB,QAAQ;AAGlC,OAAM,MAAM,UAAU;AACtB,QAAO;;AAST,SAAgB,cAAc,QAA8B,EAAE,EAA4B;CACxF,MAAM,UAAgC;EAAE,GAAG;EAAgB,GAAG;EAAO;CACrE,MAAM,CAAC,OAAO,YAAY,SAA0B,oBAAoB,QAAQ,aAAa,CAAC;CAC9F,MAAM,WAAW,OAAgC,KAAK;CAEtD,MAAM,eAAe,aAClB,UAAiB;EAChB,MAAM,SAAS,MAAM;AACrB,MAAI,QAAQ,OAAO;AACjB,YAAS,OAAO,MAAM;AACtB,WAAQ,WAAW,OAAO,MAAM;;IAGpC,CAAC,QAAQ,SAAS,CACnB;CAED,MAAM,sBAAsB,kBAAkB;AAC5C,WAAS,SAAS,QAAQ;AAC1B,WAAS,UAAU,YAAY,QAAQ;AAEvC,MAAI,SAAS,SAAS;AACpB,YAAS,QAAQ,iBAAiB,UAAU,cAAc,EAAE,MAAM,MAAM,CAAC;AACzE,YAAS,KAAK,YAAY,SAAS,QAAQ;;IAE5C,CAAC,SAAS,aAAa,CAAC;AAE3B,2BAA0B;AACxB,uBAAqB;AACrB,eAAa,SAAS,SAAS,QAAQ;IACtC,EAAE,CAAC;CAEN,MAAM,QAAQ,kBAAkB;AAC9B,WAAS,KAAK;AACd,UAAQ,WAAW,KAAK;IACvB,CAAC,QAAQ,SAAS,CAAC;AAWtB,QAAO;EAAE;EAAO,MATH,kBAAkB;AAC7B,OAAI,QAAQ,YACV,QAAO;AAGT,wBAAqB;AACrB,YAAS,SAAS,OAAO;KACxB;GAAC,QAAQ;GAAa;GAAO;GAAoB,CAAC;EAE/B;EAAO"}
|