react-kanca 1.2.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 +27 -19
- package/dist/index.js +227 -25
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +219 -25
- package/dist/index.modern.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -20,32 +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
|
-
useColorScheme,
|
|
42
|
-
useFullScreen,
|
|
43
|
-
useSessionStorage,
|
|
44
|
-
useScrollLock,
|
|
45
|
-
usePreferredLanguage,
|
|
41
|
+
useMobileLandscape,
|
|
46
42
|
useMousePageLeave,
|
|
43
|
+
useMultiStateValidator,
|
|
44
|
+
useOnlineStatus,
|
|
47
45
|
usePageLeave,
|
|
48
|
-
|
|
46
|
+
usePageVisible,
|
|
47
|
+
usePreferredLanguage,
|
|
48
|
+
usePrevious,
|
|
49
|
+
useScrolling,
|
|
50
|
+
useScrollLock,
|
|
51
|
+
useScrollToElement,
|
|
52
|
+
useSessionStorage,
|
|
53
|
+
useStateValidator,
|
|
54
|
+
useThrottle,
|
|
55
|
+
useWindowScroll
|
|
56
|
+
useWindowSize,
|
|
49
57
|
} from 'react-kanca'
|
|
50
58
|
|
|
51
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) {
|
|
@@ -656,6 +655,201 @@ var useForceUpdate = function useForceUpdate() {
|
|
|
656
655
|
return update;
|
|
657
656
|
};
|
|
658
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
|
+
|
|
659
853
|
exports.useBatteryInfo = useBatteryInfo;
|
|
660
854
|
exports.useBeforeUnload = useBeforeUnload;
|
|
661
855
|
exports.useClickOutside = useClickOutside;
|
|
@@ -664,22 +858,30 @@ exports.useConnection = useConnection;
|
|
|
664
858
|
exports.useCookie = useCookie;
|
|
665
859
|
exports.useCopyToClipboard = useCopyToClipboard;
|
|
666
860
|
exports.useDebounce = useDebounce;
|
|
667
|
-
exports.useEqualObject =
|
|
861
|
+
exports.useEqualObject = _useEqualObject;
|
|
668
862
|
exports.useForceUpdate = useForceUpdate;
|
|
669
863
|
exports.useFullScreen = useFullScreen;
|
|
670
864
|
exports.useGeolocation = useGeolocation;
|
|
671
865
|
exports.useHover = useHover;
|
|
866
|
+
exports.useIntersectionObserver = useIntersectionObserver;
|
|
867
|
+
exports.useInterval = useInterval;
|
|
672
868
|
exports.useIsFirstRender = useIsFirstRender;
|
|
673
869
|
exports.useLocalStorage = useLocalStorage;
|
|
674
870
|
exports.useMedia = useMedia;
|
|
871
|
+
exports.useMobileLandscape = useMobileLandscape;
|
|
675
872
|
exports.useMousePageLeave = useMousePageLeave;
|
|
873
|
+
exports.useMultiStateValidator = useMultiStateValidator;
|
|
874
|
+
exports.useOnlineStatus = useOnlineStatus;
|
|
676
875
|
exports.usePageLeave = usePageLeave;
|
|
677
876
|
exports.usePageVisible = usePageVisible;
|
|
678
877
|
exports.usePreferredLanguage = usePreferredLanguage;
|
|
679
878
|
exports.usePrevious = usePrevious;
|
|
680
879
|
exports.useScrollLock = useScrollLock;
|
|
880
|
+
exports.useScrollToElement = useScrollToElement;
|
|
681
881
|
exports.useScrolling = useScrolling;
|
|
682
882
|
exports.useSessionStorage = useSessionStorage;
|
|
883
|
+
exports.useStateValidator = useStateValidator;
|
|
683
884
|
exports.useThrottle = useThrottle;
|
|
885
|
+
exports.useWindowScroll = useWindowScroll;
|
|
684
886
|
exports.useWindowSize = useWindowSize;
|
|
685
887
|
//# sourceMappingURL=index.js.map
|