react-kanca 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -15
- package/dist/index.js +293 -25
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +280 -25
- package/dist/index.modern.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -20,26 +20,40 @@ npm install --save react-kanca
|
|
|
20
20
|
|
|
21
21
|
```jsx
|
|
22
22
|
import {
|
|
23
|
-
|
|
24
|
-
usePageVisible,
|
|
25
|
-
useDebounce,
|
|
26
|
-
usePrevious,
|
|
27
|
-
useHover,
|
|
28
|
-
useScrolling,
|
|
23
|
+
useBatteryInfo,
|
|
29
24
|
useBeforeUnload,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
useClickOutside,
|
|
26
|
+
useColorScheme,
|
|
27
|
+
useConnection,
|
|
33
28
|
useCookie,
|
|
29
|
+
useCopyToClipboard,
|
|
30
|
+
useDebounce,
|
|
31
|
+
useEqualObject,
|
|
32
|
+
useForceUpdate,
|
|
33
|
+
useFullScreen,
|
|
34
34
|
useGeolocation,
|
|
35
|
+
useHover,
|
|
36
|
+
useIntersectionObserver,
|
|
37
|
+
useInterval,
|
|
35
38
|
useIsFirstRender,
|
|
36
|
-
|
|
37
|
-
useBatteryInfo,
|
|
38
|
-
useCopyToClipboard,
|
|
39
|
+
useLocalStorage,
|
|
39
40
|
useMedia,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
useMobileLandscape,
|
|
42
|
+
useMousePageLeave,
|
|
43
|
+
useMultiStateValidator,
|
|
44
|
+
useOnlineStatus,
|
|
45
|
+
usePageLeave,
|
|
46
|
+
usePageVisible,
|
|
47
|
+
usePreferredLanguage,
|
|
48
|
+
usePrevious,
|
|
49
|
+
useScrolling,
|
|
50
|
+
useScrollLock,
|
|
51
|
+
useScrollToElement,
|
|
52
|
+
useSessionStorage,
|
|
53
|
+
useStateValidator,
|
|
54
|
+
useThrottle,
|
|
55
|
+
useWindowScroll
|
|
56
|
+
useWindowSize,
|
|
43
57
|
} from 'react-kanca'
|
|
44
58
|
|
|
45
59
|
// import 'react-kanca/dist/index.css'
|
package/dist/index.js
CHANGED
|
@@ -42,19 +42,23 @@ var useWindowSize = function useWindowSize() {
|
|
|
42
42
|
return size;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
var useDebounce = function useDebounce(
|
|
46
|
-
var _useState = react.useState(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
var useDebounce = function useDebounce() {
|
|
46
|
+
var _useState = react.useState(null),
|
|
47
|
+
debouncedValue = _useState[0],
|
|
48
|
+
setDebouncedValue = _useState[1];
|
|
49
|
+
var debounce = function debounce(value, delay) {
|
|
50
50
|
var handler = setTimeout(function () {
|
|
51
|
-
|
|
51
|
+
if (typeof value === 'function') {
|
|
52
|
+
value();
|
|
53
|
+
} else {
|
|
54
|
+
setDebouncedValue(value);
|
|
55
|
+
}
|
|
52
56
|
}, delay);
|
|
53
57
|
return function () {
|
|
54
58
|
clearTimeout(handler);
|
|
55
59
|
};
|
|
56
|
-
}
|
|
57
|
-
return debounce;
|
|
60
|
+
};
|
|
61
|
+
return [debouncedValue, debounce];
|
|
58
62
|
};
|
|
59
63
|
|
|
60
64
|
var usePrevious = function usePrevious(value) {
|
|
@@ -188,16 +192,16 @@ var useThrottle = function useThrottle(value, ms) {
|
|
|
188
192
|
react.useEffect(function () {
|
|
189
193
|
if (!timeout.current) {
|
|
190
194
|
setState(value);
|
|
191
|
-
var
|
|
195
|
+
var _timeoutCallback = function timeoutCallback() {
|
|
192
196
|
if (hasNextValue.current) {
|
|
193
197
|
hasNextValue.current = false;
|
|
194
198
|
setState(nextValue.current);
|
|
195
|
-
timeout.current = setTimeout(
|
|
199
|
+
timeout.current = setTimeout(_timeoutCallback, ms);
|
|
196
200
|
} else {
|
|
197
201
|
timeout.current = undefined;
|
|
198
202
|
}
|
|
199
203
|
};
|
|
200
|
-
timeout.current = setTimeout(
|
|
204
|
+
timeout.current = setTimeout(_timeoutCallback, ms);
|
|
201
205
|
} else {
|
|
202
206
|
nextValue.current = value;
|
|
203
207
|
hasNextValue.current = true;
|
|
@@ -264,7 +268,7 @@ var useLocalStorage = function useLocalStorage(key, initialValue, options) {
|
|
|
264
268
|
return [state, set, remove];
|
|
265
269
|
};
|
|
266
270
|
|
|
267
|
-
var
|
|
271
|
+
var _useEqualObject = function useEqualObject(obj1, obj2) {
|
|
268
272
|
if (obj1 === obj2) return true;
|
|
269
273
|
if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) return false;
|
|
270
274
|
var keys1 = Object.keys(obj1);
|
|
@@ -272,7 +276,7 @@ var useEqualObject = function useEqualObject(obj1, obj2) {
|
|
|
272
276
|
if (keys1.length !== keys2.length) return false;
|
|
273
277
|
for (var _i = 0, _keys = keys1; _i < _keys.length; _i++) {
|
|
274
278
|
var key = _keys[_i];
|
|
275
|
-
if (!keys2.includes(key) || !
|
|
279
|
+
if (!keys2.includes(key) || !_useEqualObject(obj1[key], obj2[key])) return false;
|
|
276
280
|
}
|
|
277
281
|
return true;
|
|
278
282
|
};
|
|
@@ -295,18 +299,13 @@ var useCookie = function useCookie(cookieName) {
|
|
|
295
299
|
};
|
|
296
300
|
|
|
297
301
|
function _extends() {
|
|
298
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
299
|
-
for (var
|
|
300
|
-
var
|
|
301
|
-
for (var
|
|
302
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
303
|
-
target[key] = source[key];
|
|
304
|
-
}
|
|
305
|
-
}
|
|
302
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
303
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
304
|
+
var t = arguments[e];
|
|
305
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
306
306
|
}
|
|
307
|
-
return
|
|
308
|
-
};
|
|
309
|
-
return _extends.apply(this, arguments);
|
|
307
|
+
return n;
|
|
308
|
+
}, _extends.apply(null, arguments);
|
|
310
309
|
}
|
|
311
310
|
|
|
312
311
|
var useGeolocation = function useGeolocation(options) {
|
|
@@ -595,6 +594,262 @@ var useSessionStorage = function useSessionStorage(key, initialValue) {
|
|
|
595
594
|
return [storedValue, setValue];
|
|
596
595
|
};
|
|
597
596
|
|
|
597
|
+
var useScrollLock = function useScrollLock(lock) {
|
|
598
|
+
react.useEffect(function () {
|
|
599
|
+
if (lock) {
|
|
600
|
+
document.body.style.overflow = 'hidden';
|
|
601
|
+
} else {
|
|
602
|
+
document.body.style.overflow = 'unset';
|
|
603
|
+
}
|
|
604
|
+
return function () {
|
|
605
|
+
document.body.style.overflow = 'unset';
|
|
606
|
+
};
|
|
607
|
+
}, [lock]);
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
var usePreferredLanguage = function usePreferredLanguage() {
|
|
611
|
+
var _useState = react.useState(''),
|
|
612
|
+
preferredLanguage = _useState[0],
|
|
613
|
+
setPreferredLanguage = _useState[1];
|
|
614
|
+
react.useEffect(function () {
|
|
615
|
+
var language = navigator.language || navigator.userLanguage;
|
|
616
|
+
setPreferredLanguage(language);
|
|
617
|
+
}, []);
|
|
618
|
+
return preferredLanguage;
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
function useMousePageLeave(onPageLeave) {
|
|
622
|
+
react.useEffect(function () {
|
|
623
|
+
document.documentElement.addEventListener('mouseleave', onPageLeave);
|
|
624
|
+
return function () {
|
|
625
|
+
return document.documentElement.removeEventListener('mouseleave', onPageLeave);
|
|
626
|
+
};
|
|
627
|
+
}, []);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
var usePageLeave = function usePageLeave(onLeave) {
|
|
631
|
+
react.useEffect(function () {
|
|
632
|
+
var handleBeforeUnload = function handleBeforeUnload(event) {
|
|
633
|
+
var returnValue = onLeave();
|
|
634
|
+
if (returnValue) {
|
|
635
|
+
event.preventDefault();
|
|
636
|
+
event.returnValue = returnValue;
|
|
637
|
+
return returnValue;
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
window.addEventListener('beforeunload', handleBeforeUnload);
|
|
641
|
+
return function () {
|
|
642
|
+
window.removeEventListener('beforeunload', handleBeforeUnload);
|
|
643
|
+
};
|
|
644
|
+
}, [onLeave]);
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
var useForceUpdate = function useForceUpdate() {
|
|
648
|
+
var _useState = react.useState(0),
|
|
649
|
+
setTick = _useState[1];
|
|
650
|
+
var update = react.useCallback(function () {
|
|
651
|
+
setTick(function (tick) {
|
|
652
|
+
return tick + 1;
|
|
653
|
+
});
|
|
654
|
+
}, []);
|
|
655
|
+
return update;
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
var useInterval = function useInterval(callback, delay) {
|
|
659
|
+
var savedCallback = react.useRef(function () {});
|
|
660
|
+
react.useEffect(function () {
|
|
661
|
+
savedCallback.current = callback;
|
|
662
|
+
});
|
|
663
|
+
react.useEffect(function () {
|
|
664
|
+
if (delay !== null) {
|
|
665
|
+
var interval = setInterval(function () {
|
|
666
|
+
return savedCallback.current();
|
|
667
|
+
}, delay || 0);
|
|
668
|
+
return function () {
|
|
669
|
+
return clearInterval(interval);
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
return undefined;
|
|
673
|
+
}, [delay]);
|
|
674
|
+
};
|
|
675
|
+
|
|
676
|
+
var useIntersectionObserver = function useIntersectionObserver(targetRef, options) {
|
|
677
|
+
var _useState = react.useState(false),
|
|
678
|
+
isIntersecting = _useState[0],
|
|
679
|
+
setIsIntersecting = _useState[1];
|
|
680
|
+
react.useEffect(function () {
|
|
681
|
+
var observer = new IntersectionObserver(function (_ref) {
|
|
682
|
+
var entry = _ref[0];
|
|
683
|
+
setIsIntersecting(entry.isIntersecting);
|
|
684
|
+
}, options);
|
|
685
|
+
if (targetRef.current) {
|
|
686
|
+
observer.observe(targetRef.current);
|
|
687
|
+
}
|
|
688
|
+
return function () {
|
|
689
|
+
if (targetRef.current) {
|
|
690
|
+
observer.unobserve(targetRef.current);
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
}, [targetRef, options]);
|
|
694
|
+
return isIntersecting;
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
var useMobileLandscape = function useMobileLandscape() {
|
|
698
|
+
var _useState = react.useState(false),
|
|
699
|
+
isLandscape = _useState[0],
|
|
700
|
+
setIsLandscape = _useState[1];
|
|
701
|
+
var _useState2 = react.useState(false),
|
|
702
|
+
isMobile = _useState2[0],
|
|
703
|
+
setIsMobile = _useState2[1];
|
|
704
|
+
var _useState3 = react.useState(false),
|
|
705
|
+
isMobileLandscape = _useState3[0],
|
|
706
|
+
setIsMobileLandscape = _useState3[1];
|
|
707
|
+
var handleResize = function handleResize() {
|
|
708
|
+
var landscape = window.innerWidth > window.innerHeight;
|
|
709
|
+
var mobile = window.innerWidth <= 996;
|
|
710
|
+
setIsLandscape(landscape);
|
|
711
|
+
setIsMobile(mobile);
|
|
712
|
+
setIsMobileLandscape(landscape && mobile);
|
|
713
|
+
};
|
|
714
|
+
react.useEffect(function () {
|
|
715
|
+
handleResize();
|
|
716
|
+
window.addEventListener('resize', handleResize);
|
|
717
|
+
return function () {
|
|
718
|
+
window.removeEventListener('resize', handleResize);
|
|
719
|
+
};
|
|
720
|
+
}, []);
|
|
721
|
+
return {
|
|
722
|
+
isMobileLandscape: isMobileLandscape,
|
|
723
|
+
isLandscape: isLandscape,
|
|
724
|
+
isMobile: isMobile
|
|
725
|
+
};
|
|
726
|
+
};
|
|
727
|
+
|
|
728
|
+
var useOnlineStatus = function useOnlineStatus() {
|
|
729
|
+
var _useState = react.useState(navigator.onLine),
|
|
730
|
+
isOnline = _useState[0],
|
|
731
|
+
setIsOnline = _useState[1];
|
|
732
|
+
react.useEffect(function () {
|
|
733
|
+
var handleOnline = function handleOnline() {
|
|
734
|
+
return setIsOnline(true);
|
|
735
|
+
};
|
|
736
|
+
var handleOffline = function handleOffline() {
|
|
737
|
+
return setIsOnline(false);
|
|
738
|
+
};
|
|
739
|
+
window.addEventListener('online', handleOnline);
|
|
740
|
+
window.addEventListener('offline', handleOffline);
|
|
741
|
+
return function () {
|
|
742
|
+
window.removeEventListener('online', handleOnline);
|
|
743
|
+
window.removeEventListener('offline', handleOffline);
|
|
744
|
+
};
|
|
745
|
+
}, []);
|
|
746
|
+
return isOnline;
|
|
747
|
+
};
|
|
748
|
+
|
|
749
|
+
var useScrollToElement = function useScrollToElement() {
|
|
750
|
+
var scrollToElement = react.useCallback(function (selectorOrRef, options) {
|
|
751
|
+
if (options === void 0) {
|
|
752
|
+
options = {};
|
|
753
|
+
}
|
|
754
|
+
var element;
|
|
755
|
+
if (typeof selectorOrRef === 'string') {
|
|
756
|
+
element = document.querySelector(selectorOrRef);
|
|
757
|
+
} else if (selectorOrRef.current) {
|
|
758
|
+
element = selectorOrRef.current;
|
|
759
|
+
}
|
|
760
|
+
if (element) {
|
|
761
|
+
element.scrollIntoView(_extends({
|
|
762
|
+
behavior: 'smooth'
|
|
763
|
+
}, options));
|
|
764
|
+
}
|
|
765
|
+
}, []);
|
|
766
|
+
return scrollToElement;
|
|
767
|
+
};
|
|
768
|
+
|
|
769
|
+
var useStateValidator = function useStateValidator(state, validator, initialState) {
|
|
770
|
+
if (initialState === void 0) {
|
|
771
|
+
initialState = [undefined];
|
|
772
|
+
}
|
|
773
|
+
var validatorInner = react.useRef(validator);
|
|
774
|
+
var stateInner = react.useRef(state);
|
|
775
|
+
validatorInner.current = validator;
|
|
776
|
+
stateInner.current = state;
|
|
777
|
+
var _useState = react.useState(initialState),
|
|
778
|
+
validity = _useState[0],
|
|
779
|
+
setValidity = _useState[1];
|
|
780
|
+
var validate = react.useCallback(function () {
|
|
781
|
+
if (validatorInner.current.length >= 2) {
|
|
782
|
+
validatorInner.current(stateInner.current, setValidity);
|
|
783
|
+
} else {
|
|
784
|
+
setValidity(validatorInner.current(stateInner.current));
|
|
785
|
+
}
|
|
786
|
+
}, [setValidity]);
|
|
787
|
+
react.useEffect(function () {
|
|
788
|
+
validate();
|
|
789
|
+
}, [state]);
|
|
790
|
+
return [validity, validate];
|
|
791
|
+
};
|
|
792
|
+
|
|
793
|
+
var useMultiStateValidator = function useMultiStateValidator(states, validator, initialValidity) {
|
|
794
|
+
if (initialValidity === void 0) {
|
|
795
|
+
initialValidity = [undefined];
|
|
796
|
+
}
|
|
797
|
+
if (typeof states !== 'object') {
|
|
798
|
+
throw new Error("state'in bir nesne ya da dizi olması beklenirken -> " + typeof states);
|
|
799
|
+
}
|
|
800
|
+
var validatorInner = react.useRef(validator);
|
|
801
|
+
var statesInner = react.useRef(states);
|
|
802
|
+
validatorInner.current = validator;
|
|
803
|
+
statesInner.current = states;
|
|
804
|
+
var _useState = react.useState(initialValidity),
|
|
805
|
+
validity = _useState[0],
|
|
806
|
+
setValidity = _useState[1];
|
|
807
|
+
var validate = react.useCallback(function () {
|
|
808
|
+
if (validatorInner.current.length >= 2) {
|
|
809
|
+
validatorInner.current(statesInner.current, setValidity);
|
|
810
|
+
} else {
|
|
811
|
+
setValidity(validatorInner.current(statesInner.current));
|
|
812
|
+
}
|
|
813
|
+
}, [setValidity]);
|
|
814
|
+
react.useEffect(function () {
|
|
815
|
+
validate();
|
|
816
|
+
}, Object.values(states));
|
|
817
|
+
return [validity, validate];
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
var useWindowScroll = function useWindowScroll() {
|
|
821
|
+
var _useState = react.useState(function () {
|
|
822
|
+
return {
|
|
823
|
+
x: isBrowser ? window.pageXOffset : 0,
|
|
824
|
+
y: isBrowser ? window.pageYOffset : 0
|
|
825
|
+
};
|
|
826
|
+
}),
|
|
827
|
+
state = _useState[0],
|
|
828
|
+
setState = _useState[1];
|
|
829
|
+
react.useEffect(function () {
|
|
830
|
+
var handler = function handler() {
|
|
831
|
+
setState(function (state) {
|
|
832
|
+
var _window = window,
|
|
833
|
+
pageXOffset = _window.pageXOffset,
|
|
834
|
+
pageYOffset = _window.pageYOffset;
|
|
835
|
+
return state.x !== pageXOffset || state.y !== pageYOffset ? {
|
|
836
|
+
x: pageXOffset,
|
|
837
|
+
y: pageYOffset
|
|
838
|
+
} : state;
|
|
839
|
+
});
|
|
840
|
+
};
|
|
841
|
+
handler();
|
|
842
|
+
on(window, 'scroll', handler, {
|
|
843
|
+
capture: false,
|
|
844
|
+
passive: true
|
|
845
|
+
});
|
|
846
|
+
return function () {
|
|
847
|
+
off(window, 'scroll', handler);
|
|
848
|
+
};
|
|
849
|
+
}, []);
|
|
850
|
+
return state;
|
|
851
|
+
};
|
|
852
|
+
|
|
598
853
|
exports.useBatteryInfo = useBatteryInfo;
|
|
599
854
|
exports.useBeforeUnload = useBeforeUnload;
|
|
600
855
|
exports.useClickOutside = useClickOutside;
|
|
@@ -603,17 +858,30 @@ exports.useConnection = useConnection;
|
|
|
603
858
|
exports.useCookie = useCookie;
|
|
604
859
|
exports.useCopyToClipboard = useCopyToClipboard;
|
|
605
860
|
exports.useDebounce = useDebounce;
|
|
606
|
-
exports.useEqualObject =
|
|
861
|
+
exports.useEqualObject = _useEqualObject;
|
|
862
|
+
exports.useForceUpdate = useForceUpdate;
|
|
607
863
|
exports.useFullScreen = useFullScreen;
|
|
608
864
|
exports.useGeolocation = useGeolocation;
|
|
609
865
|
exports.useHover = useHover;
|
|
866
|
+
exports.useIntersectionObserver = useIntersectionObserver;
|
|
867
|
+
exports.useInterval = useInterval;
|
|
610
868
|
exports.useIsFirstRender = useIsFirstRender;
|
|
611
869
|
exports.useLocalStorage = useLocalStorage;
|
|
612
870
|
exports.useMedia = useMedia;
|
|
871
|
+
exports.useMobileLandscape = useMobileLandscape;
|
|
872
|
+
exports.useMousePageLeave = useMousePageLeave;
|
|
873
|
+
exports.useMultiStateValidator = useMultiStateValidator;
|
|
874
|
+
exports.useOnlineStatus = useOnlineStatus;
|
|
875
|
+
exports.usePageLeave = usePageLeave;
|
|
613
876
|
exports.usePageVisible = usePageVisible;
|
|
877
|
+
exports.usePreferredLanguage = usePreferredLanguage;
|
|
614
878
|
exports.usePrevious = usePrevious;
|
|
879
|
+
exports.useScrollLock = useScrollLock;
|
|
880
|
+
exports.useScrollToElement = useScrollToElement;
|
|
615
881
|
exports.useScrolling = useScrolling;
|
|
616
882
|
exports.useSessionStorage = useSessionStorage;
|
|
883
|
+
exports.useStateValidator = useStateValidator;
|
|
617
884
|
exports.useThrottle = useThrottle;
|
|
885
|
+
exports.useWindowScroll = useWindowScroll;
|
|
618
886
|
exports.useWindowSize = useWindowSize;
|
|
619
887
|
//# sourceMappingURL=index.js.map
|