react-kanca 1.2.0 → 1.3.1
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 +35 -21
- package/dist/index.js +229 -32
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +221 -32
- package/dist/index.modern.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -11,41 +11,56 @@ yarn add react-kanca
|
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install
|
|
14
|
+
npm install react-kanca
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm i react-kanca
|
|
15
19
|
```
|
|
16
20
|
|
|
17
21
|

|
|
18
22
|
|
|
19
23
|
## Usage
|
|
20
24
|
|
|
25
|
+
Storybook Demo:
|
|
26
|
+
[](https://react-kanca-storybook.vercel.app/)
|
|
27
|
+
|
|
21
28
|
```jsx
|
|
22
29
|
import {
|
|
23
|
-
|
|
24
|
-
usePageVisible,
|
|
25
|
-
useDebounce,
|
|
26
|
-
usePrevious,
|
|
27
|
-
useHover,
|
|
28
|
-
useScrolling,
|
|
30
|
+
useBatteryInfo,
|
|
29
31
|
useBeforeUnload,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
useClickOutside,
|
|
33
|
+
useColorScheme,
|
|
34
|
+
useConnection,
|
|
33
35
|
useCookie,
|
|
36
|
+
useCopyToClipboard,
|
|
37
|
+
useDebounce,
|
|
38
|
+
useEqualObject,
|
|
39
|
+
useForceUpdate,
|
|
40
|
+
useFullScreen,
|
|
34
41
|
useGeolocation,
|
|
42
|
+
useHover,
|
|
43
|
+
useIntersectionObserver,
|
|
44
|
+
useInterval,
|
|
35
45
|
useIsFirstRender,
|
|
36
|
-
|
|
37
|
-
useBatteryInfo,
|
|
38
|
-
useCopyToClipboard,
|
|
46
|
+
useLocalStorage,
|
|
39
47
|
useMedia,
|
|
40
|
-
|
|
41
|
-
useColorScheme,
|
|
42
|
-
useFullScreen,
|
|
43
|
-
useSessionStorage,
|
|
44
|
-
useScrollLock,
|
|
45
|
-
usePreferredLanguage,
|
|
48
|
+
useMobileLandscape,
|
|
46
49
|
useMousePageLeave,
|
|
50
|
+
useMultiStateValidator,
|
|
51
|
+
useOnlineStatus,
|
|
47
52
|
usePageLeave,
|
|
48
|
-
|
|
53
|
+
usePageVisible,
|
|
54
|
+
usePreferredLanguage,
|
|
55
|
+
usePrevious,
|
|
56
|
+
useScrolling,
|
|
57
|
+
useScrollLock,
|
|
58
|
+
useScrollToElement,
|
|
59
|
+
useSessionStorage,
|
|
60
|
+
useStateValidator,
|
|
61
|
+
useThrottle,
|
|
62
|
+
useWindowScroll,
|
|
63
|
+
useWindowSize,
|
|
49
64
|
} from 'react-kanca'
|
|
50
65
|
|
|
51
66
|
// import 'react-kanca/dist/index.css'
|
|
@@ -53,7 +68,6 @@ import {
|
|
|
53
68
|
const App = () => {
|
|
54
69
|
const { width, height } = useWindowSize()
|
|
55
70
|
const isVisible = usePageVisible()
|
|
56
|
-
const debounce = useDebounce('React Kanca', 5000)
|
|
57
71
|
|
|
58
72
|
.
|
|
59
73
|
.
|
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) {
|
|
@@ -417,11 +416,8 @@ var useBatteryInfo = function useBatteryInfo() {
|
|
|
417
416
|
isCharging = _useState2[0],
|
|
418
417
|
setIsCharging = _useState2[1];
|
|
419
418
|
var _useState3 = react.useState(null),
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
var _useState4 = react.useState(null),
|
|
423
|
-
dischargingTime = _useState4[0],
|
|
424
|
-
setDischargingTime = _useState4[1];
|
|
419
|
+
dischargingTime = _useState3[0],
|
|
420
|
+
setDischargingTime = _useState3[1];
|
|
425
421
|
react.useEffect(function () {
|
|
426
422
|
var getBatteryInfo = function getBatteryInfo() {
|
|
427
423
|
try {
|
|
@@ -430,7 +426,6 @@ var useBatteryInfo = function useBatteryInfo() {
|
|
|
430
426
|
var updateBatteryInfo = function updateBatteryInfo() {
|
|
431
427
|
setBatteryLevel(Math.round(battery.level * 100));
|
|
432
428
|
setIsCharging(battery.charging);
|
|
433
|
-
setChargingTime(battery.chargingTime);
|
|
434
429
|
setDischargingTime(battery.dischargingTime);
|
|
435
430
|
};
|
|
436
431
|
updateBatteryInfo();
|
|
@@ -458,7 +453,6 @@ var useBatteryInfo = function useBatteryInfo() {
|
|
|
458
453
|
return {
|
|
459
454
|
batteryLevel: batteryLevel,
|
|
460
455
|
isCharging: isCharging,
|
|
461
|
-
chargingTime: chargingTime,
|
|
462
456
|
dischargingTime: dischargingTime
|
|
463
457
|
};
|
|
464
458
|
};
|
|
@@ -656,6 +650,201 @@ var useForceUpdate = function useForceUpdate() {
|
|
|
656
650
|
return update;
|
|
657
651
|
};
|
|
658
652
|
|
|
653
|
+
var useInterval = function useInterval(callback, delay) {
|
|
654
|
+
var savedCallback = react.useRef(function () {});
|
|
655
|
+
react.useEffect(function () {
|
|
656
|
+
savedCallback.current = callback;
|
|
657
|
+
});
|
|
658
|
+
react.useEffect(function () {
|
|
659
|
+
if (delay !== null) {
|
|
660
|
+
var interval = setInterval(function () {
|
|
661
|
+
return savedCallback.current();
|
|
662
|
+
}, delay || 0);
|
|
663
|
+
return function () {
|
|
664
|
+
return clearInterval(interval);
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
return undefined;
|
|
668
|
+
}, [delay]);
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
var useIntersectionObserver = function useIntersectionObserver(targetRef, options) {
|
|
672
|
+
var _useState = react.useState(false),
|
|
673
|
+
isIntersecting = _useState[0],
|
|
674
|
+
setIsIntersecting = _useState[1];
|
|
675
|
+
react.useEffect(function () {
|
|
676
|
+
var observer = new IntersectionObserver(function (_ref) {
|
|
677
|
+
var entry = _ref[0];
|
|
678
|
+
setIsIntersecting(entry.isIntersecting);
|
|
679
|
+
}, options);
|
|
680
|
+
if (targetRef.current) {
|
|
681
|
+
observer.observe(targetRef.current);
|
|
682
|
+
}
|
|
683
|
+
return function () {
|
|
684
|
+
if (targetRef.current) {
|
|
685
|
+
observer.unobserve(targetRef.current);
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
}, [targetRef, options]);
|
|
689
|
+
return isIntersecting;
|
|
690
|
+
};
|
|
691
|
+
|
|
692
|
+
var useMobileLandscape = function useMobileLandscape() {
|
|
693
|
+
var _useState = react.useState(false),
|
|
694
|
+
isLandscape = _useState[0],
|
|
695
|
+
setIsLandscape = _useState[1];
|
|
696
|
+
var _useState2 = react.useState(false),
|
|
697
|
+
isMobile = _useState2[0],
|
|
698
|
+
setIsMobile = _useState2[1];
|
|
699
|
+
var _useState3 = react.useState(false),
|
|
700
|
+
isMobileLandscape = _useState3[0],
|
|
701
|
+
setIsMobileLandscape = _useState3[1];
|
|
702
|
+
var handleResize = function handleResize() {
|
|
703
|
+
var landscape = window.innerWidth > window.innerHeight;
|
|
704
|
+
var mobile = window.innerWidth <= 996;
|
|
705
|
+
setIsLandscape(landscape);
|
|
706
|
+
setIsMobile(mobile);
|
|
707
|
+
setIsMobileLandscape(landscape && mobile);
|
|
708
|
+
};
|
|
709
|
+
react.useEffect(function () {
|
|
710
|
+
handleResize();
|
|
711
|
+
window.addEventListener('resize', handleResize);
|
|
712
|
+
return function () {
|
|
713
|
+
window.removeEventListener('resize', handleResize);
|
|
714
|
+
};
|
|
715
|
+
}, []);
|
|
716
|
+
return {
|
|
717
|
+
isMobileLandscape: isMobileLandscape,
|
|
718
|
+
isLandscape: isLandscape,
|
|
719
|
+
isMobile: isMobile
|
|
720
|
+
};
|
|
721
|
+
};
|
|
722
|
+
|
|
723
|
+
var useOnlineStatus = function useOnlineStatus() {
|
|
724
|
+
var _useState = react.useState(navigator.onLine),
|
|
725
|
+
isOnline = _useState[0],
|
|
726
|
+
setIsOnline = _useState[1];
|
|
727
|
+
react.useEffect(function () {
|
|
728
|
+
var handleOnline = function handleOnline() {
|
|
729
|
+
return setIsOnline(true);
|
|
730
|
+
};
|
|
731
|
+
var handleOffline = function handleOffline() {
|
|
732
|
+
return setIsOnline(false);
|
|
733
|
+
};
|
|
734
|
+
window.addEventListener('online', handleOnline);
|
|
735
|
+
window.addEventListener('offline', handleOffline);
|
|
736
|
+
return function () {
|
|
737
|
+
window.removeEventListener('online', handleOnline);
|
|
738
|
+
window.removeEventListener('offline', handleOffline);
|
|
739
|
+
};
|
|
740
|
+
}, []);
|
|
741
|
+
return isOnline;
|
|
742
|
+
};
|
|
743
|
+
|
|
744
|
+
var useScrollToElement = function useScrollToElement() {
|
|
745
|
+
var scrollToElement = react.useCallback(function (selectorOrRef, options) {
|
|
746
|
+
if (options === void 0) {
|
|
747
|
+
options = {};
|
|
748
|
+
}
|
|
749
|
+
var element;
|
|
750
|
+
if (typeof selectorOrRef === 'string') {
|
|
751
|
+
element = document.querySelector(selectorOrRef);
|
|
752
|
+
} else if (selectorOrRef.current) {
|
|
753
|
+
element = selectorOrRef.current;
|
|
754
|
+
}
|
|
755
|
+
if (element) {
|
|
756
|
+
element.scrollIntoView(_extends({
|
|
757
|
+
behavior: 'smooth'
|
|
758
|
+
}, options));
|
|
759
|
+
}
|
|
760
|
+
}, []);
|
|
761
|
+
return scrollToElement;
|
|
762
|
+
};
|
|
763
|
+
|
|
764
|
+
var useStateValidator = function useStateValidator(state, validator, initialState) {
|
|
765
|
+
if (initialState === void 0) {
|
|
766
|
+
initialState = [undefined];
|
|
767
|
+
}
|
|
768
|
+
var validatorInner = react.useRef(validator);
|
|
769
|
+
var stateInner = react.useRef(state);
|
|
770
|
+
validatorInner.current = validator;
|
|
771
|
+
stateInner.current = state;
|
|
772
|
+
var _useState = react.useState(initialState),
|
|
773
|
+
validity = _useState[0],
|
|
774
|
+
setValidity = _useState[1];
|
|
775
|
+
var validate = react.useCallback(function () {
|
|
776
|
+
if (validatorInner.current.length >= 2) {
|
|
777
|
+
validatorInner.current(stateInner.current, setValidity);
|
|
778
|
+
} else {
|
|
779
|
+
setValidity(validatorInner.current(stateInner.current));
|
|
780
|
+
}
|
|
781
|
+
}, [setValidity]);
|
|
782
|
+
react.useEffect(function () {
|
|
783
|
+
validate();
|
|
784
|
+
}, [state]);
|
|
785
|
+
return [validity, validate];
|
|
786
|
+
};
|
|
787
|
+
|
|
788
|
+
var useMultiStateValidator = function useMultiStateValidator(states, validator, initialValidity) {
|
|
789
|
+
if (initialValidity === void 0) {
|
|
790
|
+
initialValidity = [undefined];
|
|
791
|
+
}
|
|
792
|
+
if (typeof states !== 'object') {
|
|
793
|
+
throw new Error("state'in bir nesne ya da dizi olması beklenirken -> " + typeof states);
|
|
794
|
+
}
|
|
795
|
+
var validatorInner = react.useRef(validator);
|
|
796
|
+
var statesInner = react.useRef(states);
|
|
797
|
+
validatorInner.current = validator;
|
|
798
|
+
statesInner.current = states;
|
|
799
|
+
var _useState = react.useState(initialValidity),
|
|
800
|
+
validity = _useState[0],
|
|
801
|
+
setValidity = _useState[1];
|
|
802
|
+
var validate = react.useCallback(function () {
|
|
803
|
+
if (validatorInner.current.length >= 2) {
|
|
804
|
+
validatorInner.current(statesInner.current, setValidity);
|
|
805
|
+
} else {
|
|
806
|
+
setValidity(validatorInner.current(statesInner.current));
|
|
807
|
+
}
|
|
808
|
+
}, [setValidity]);
|
|
809
|
+
react.useEffect(function () {
|
|
810
|
+
validate();
|
|
811
|
+
}, Object.values(states));
|
|
812
|
+
return [validity, validate];
|
|
813
|
+
};
|
|
814
|
+
|
|
815
|
+
var useWindowScroll = function useWindowScroll() {
|
|
816
|
+
var _useState = react.useState(function () {
|
|
817
|
+
return {
|
|
818
|
+
x: isBrowser ? window.pageXOffset : 0,
|
|
819
|
+
y: isBrowser ? window.pageYOffset : 0
|
|
820
|
+
};
|
|
821
|
+
}),
|
|
822
|
+
state = _useState[0],
|
|
823
|
+
setState = _useState[1];
|
|
824
|
+
react.useEffect(function () {
|
|
825
|
+
var handler = function handler() {
|
|
826
|
+
setState(function (state) {
|
|
827
|
+
var _window = window,
|
|
828
|
+
pageXOffset = _window.pageXOffset,
|
|
829
|
+
pageYOffset = _window.pageYOffset;
|
|
830
|
+
return state.x !== pageXOffset || state.y !== pageYOffset ? {
|
|
831
|
+
x: pageXOffset,
|
|
832
|
+
y: pageYOffset
|
|
833
|
+
} : state;
|
|
834
|
+
});
|
|
835
|
+
};
|
|
836
|
+
handler();
|
|
837
|
+
on(window, 'scroll', handler, {
|
|
838
|
+
capture: false,
|
|
839
|
+
passive: true
|
|
840
|
+
});
|
|
841
|
+
return function () {
|
|
842
|
+
off(window, 'scroll', handler);
|
|
843
|
+
};
|
|
844
|
+
}, []);
|
|
845
|
+
return state;
|
|
846
|
+
};
|
|
847
|
+
|
|
659
848
|
exports.useBatteryInfo = useBatteryInfo;
|
|
660
849
|
exports.useBeforeUnload = useBeforeUnload;
|
|
661
850
|
exports.useClickOutside = useClickOutside;
|
|
@@ -664,22 +853,30 @@ exports.useConnection = useConnection;
|
|
|
664
853
|
exports.useCookie = useCookie;
|
|
665
854
|
exports.useCopyToClipboard = useCopyToClipboard;
|
|
666
855
|
exports.useDebounce = useDebounce;
|
|
667
|
-
exports.useEqualObject =
|
|
856
|
+
exports.useEqualObject = _useEqualObject;
|
|
668
857
|
exports.useForceUpdate = useForceUpdate;
|
|
669
858
|
exports.useFullScreen = useFullScreen;
|
|
670
859
|
exports.useGeolocation = useGeolocation;
|
|
671
860
|
exports.useHover = useHover;
|
|
861
|
+
exports.useIntersectionObserver = useIntersectionObserver;
|
|
862
|
+
exports.useInterval = useInterval;
|
|
672
863
|
exports.useIsFirstRender = useIsFirstRender;
|
|
673
864
|
exports.useLocalStorage = useLocalStorage;
|
|
674
865
|
exports.useMedia = useMedia;
|
|
866
|
+
exports.useMobileLandscape = useMobileLandscape;
|
|
675
867
|
exports.useMousePageLeave = useMousePageLeave;
|
|
868
|
+
exports.useMultiStateValidator = useMultiStateValidator;
|
|
869
|
+
exports.useOnlineStatus = useOnlineStatus;
|
|
676
870
|
exports.usePageLeave = usePageLeave;
|
|
677
871
|
exports.usePageVisible = usePageVisible;
|
|
678
872
|
exports.usePreferredLanguage = usePreferredLanguage;
|
|
679
873
|
exports.usePrevious = usePrevious;
|
|
680
874
|
exports.useScrollLock = useScrollLock;
|
|
875
|
+
exports.useScrollToElement = useScrollToElement;
|
|
681
876
|
exports.useScrolling = useScrolling;
|
|
682
877
|
exports.useSessionStorage = useSessionStorage;
|
|
878
|
+
exports.useStateValidator = useStateValidator;
|
|
683
879
|
exports.useThrottle = useThrottle;
|
|
880
|
+
exports.useWindowScroll = useWindowScroll;
|
|
684
881
|
exports.useWindowSize = useWindowSize;
|
|
685
882
|
//# sourceMappingURL=index.js.map
|