jordy 0.17.0 → 0.18.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/esm5/adaptive-render/DeviceDetectContext.js +60 -30
- package/esm5/util/envCheck.js +0 -15
- package/esm5/validate/index.js +2 -2
- package/libs/adaptive-render/DeviceDetectContext.d.ts +20 -2
- package/libs/util/envCheck.d.ts +0 -5
- package/libs/validate/index.d.ts +1 -1
- package/package.json +1 -1
- package/esm5/adaptive-render/device.type.js +0 -9
- package/libs/adaptive-render/device.type.d.ts +0 -14
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __read } from "tslib";
|
|
2
|
+
import { noop } from '../util/etc';
|
|
2
3
|
import React, { createContext, useContext, useEffect, useMemo, useState, } from 'react';
|
|
3
|
-
import { isMobile as isMobileCheck,
|
|
4
|
-
|
|
5
|
-
function getIsMobile() {
|
|
4
|
+
import { isMobile as isMobileCheck, isServer, isTablet as isTabletCheck, } from '../util/envCheck';
|
|
5
|
+
function getIsMobile(breakpoint) {
|
|
6
6
|
if (isServer()) {
|
|
7
7
|
try {
|
|
8
8
|
return isMobileCheck();
|
|
@@ -11,9 +11,9 @@ function getIsMobile() {
|
|
|
11
11
|
}
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
return isMobileCheck() || window.innerWidth
|
|
14
|
+
return isMobileCheck() || window.innerWidth <= breakpoint;
|
|
15
15
|
}
|
|
16
|
-
function getIsTablet() {
|
|
16
|
+
function getIsTablet(breakpoints) {
|
|
17
17
|
if (isServer()) {
|
|
18
18
|
try {
|
|
19
19
|
return isTabletCheck();
|
|
@@ -22,40 +22,70 @@ function getIsTablet() {
|
|
|
22
22
|
}
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
|
+
if (isTabletCheck()) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
if (breakpoints.length < 2) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
25
31
|
return (isTabletCheck() ||
|
|
26
|
-
(window.innerWidth
|
|
27
|
-
|
|
32
|
+
(window.innerWidth > breakpoints[0] && window.innerWidth <= breakpoints[1]));
|
|
33
|
+
}
|
|
34
|
+
function defNativeAppChecker() {
|
|
35
|
+
return false;
|
|
28
36
|
}
|
|
29
|
-
export var DeviceDetectContext = createContext([
|
|
30
|
-
getIsMobile(),
|
|
31
|
-
getIsTablet(),
|
|
32
|
-
isNativeAppCheck(),
|
|
33
|
-
]);
|
|
37
|
+
export var DeviceDetectContext = createContext([false, false, false]);
|
|
34
38
|
var DeviceDetectContextProvider = DeviceDetectContext.Provider;
|
|
39
|
+
var DEVICE_DETECT_DEFAULT_BREAKPOINTS = [539, 1080];
|
|
40
|
+
function subscribeForMobile(breakpoint, setIsMobile) {
|
|
41
|
+
var mqMobile = window.matchMedia("screen and (max-width: ".concat(breakpoint, "px)"));
|
|
42
|
+
var handleResizeForMobile = function (e) {
|
|
43
|
+
setIsMobile(e.matches);
|
|
44
|
+
};
|
|
45
|
+
mqMobile.addEventListener('change', handleResizeForMobile);
|
|
46
|
+
return {
|
|
47
|
+
unsubscribe: function () {
|
|
48
|
+
mqMobile.removeEventListener('change', handleResizeForMobile);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function subscribeForTablet(breakpoints, setIsTablet) {
|
|
53
|
+
if (breakpoints.length < 2) {
|
|
54
|
+
return {
|
|
55
|
+
unsubscribe: noop,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
var mqTablet = window.matchMedia("screen and (min-width: ".concat(breakpoints[0] + 1, "px) and (max-width: ").concat(breakpoints[1], "px)"));
|
|
59
|
+
var handleResizeForTablet = function (e) {
|
|
60
|
+
setIsTablet(e.matches);
|
|
61
|
+
};
|
|
62
|
+
mqTablet.addEventListener('change', handleResizeForTablet);
|
|
63
|
+
return {
|
|
64
|
+
unsubscribe: function () {
|
|
65
|
+
mqTablet.removeEventListener('change', handleResizeForTablet);
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
35
69
|
export var DeviceDetectProvider = function (_a) {
|
|
36
|
-
var children = _a.children;
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var isNative = useMemo(
|
|
70
|
+
var _b = _a.breakpoints, breakpoints = _b === void 0 ? DEVICE_DETECT_DEFAULT_BREAKPOINTS : _b, _c = _a.nativeAppChecker, nativeAppChecker = _c === void 0 ? defNativeAppChecker : _c, children = _a.children;
|
|
71
|
+
var _d = __read(useState(getIsMobile(breakpoints[0])), 2), isMobile = _d[0], setIsMobile = _d[1];
|
|
72
|
+
var _e = __read(useState(getIsTablet(breakpoints)), 2), isTablet = _e[0], setIsTablet = _e[1];
|
|
73
|
+
var isNative = useMemo(nativeAppChecker, []);
|
|
40
74
|
useEffect(function () {
|
|
41
|
-
if (isServer() ||
|
|
75
|
+
if (isServer() ||
|
|
76
|
+
!window ||
|
|
77
|
+
typeof window.matchMedia !== 'function' ||
|
|
78
|
+
!breakpoints ||
|
|
79
|
+
breakpoints.length === 0) {
|
|
42
80
|
return undefined;
|
|
43
81
|
}
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var handleResizeForMobile = function (e) {
|
|
47
|
-
setIsMobile(e.matches);
|
|
48
|
-
};
|
|
49
|
-
var handleResizeForTablet = function (e) {
|
|
50
|
-
setIsTablet(e.matches);
|
|
51
|
-
};
|
|
52
|
-
mqMobile.addEventListener('change', handleResizeForMobile);
|
|
53
|
-
mqTablet.addEventListener('change', handleResizeForTablet);
|
|
82
|
+
var subMobile = subscribeForMobile(breakpoints[0], setIsMobile);
|
|
83
|
+
var subTablet = subscribeForTablet(breakpoints, setIsTablet);
|
|
54
84
|
return function () {
|
|
55
|
-
|
|
56
|
-
|
|
85
|
+
subMobile.unsubscribe();
|
|
86
|
+
subTablet.unsubscribe();
|
|
57
87
|
};
|
|
58
|
-
}, []);
|
|
88
|
+
}, [breakpoints]);
|
|
59
89
|
return (React.createElement(DeviceDetectContextProvider, { value: [isMobile, isTablet, isNative] }, children));
|
|
60
90
|
};
|
|
61
91
|
export var useIsMobile = function () { return useContext(DeviceDetectContext)[0]; };
|
package/esm5/util/envCheck.js
CHANGED
|
@@ -38,18 +38,3 @@ export function isIOS() {
|
|
|
38
38
|
}
|
|
39
39
|
return /iPad|iPhone|iPad/.test(ua);
|
|
40
40
|
}
|
|
41
|
-
var nativeAppKeyword = '';
|
|
42
|
-
var bIsNativeApp = null;
|
|
43
|
-
export function setNativeAppKeyword(keyword) {
|
|
44
|
-
nativeAppKeyword = keyword;
|
|
45
|
-
}
|
|
46
|
-
export function isNativeApp() {
|
|
47
|
-
var ua = userAgent;
|
|
48
|
-
if (!ua) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
if (bIsNativeApp === null) {
|
|
52
|
-
bIsNativeApp = ua.indexOf(nativeAppKeyword) >= 0;
|
|
53
|
-
}
|
|
54
|
-
return bIsNativeApp;
|
|
55
|
-
}
|
package/esm5/validate/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { validate as validateOrigin } from './validate';
|
|
2
2
|
import fn from './fn';
|
|
3
|
-
export var
|
|
4
|
-
|
|
3
|
+
export var validate = validateOrigin;
|
|
4
|
+
validate.fn = fn;
|
|
5
5
|
export * from './mergeValidates';
|
|
6
6
|
export * from './validate.type';
|
|
7
7
|
export * from './useValidate';
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export declare const DeviceDetectContext: React.Context<boolean[]>;
|
|
3
3
|
interface DeviceDetectProviderProps {
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 디바이스 디텍터에서 모바일및 태블릿 여부를 확인하는 사이즈 기준.
|
|
6
|
+
*
|
|
7
|
+
* - 하나만 설정하면 mobile / desktop 으로 구분된다.
|
|
8
|
+
* - 두개를 설정하면 mobile / tablet / desktop 3가지로 구분된다.
|
|
9
|
+
*
|
|
10
|
+
* @default [539, 1080]
|
|
11
|
+
*/
|
|
12
|
+
breakpoints?: number[];
|
|
13
|
+
/**
|
|
14
|
+
* 네이티브 앱 여부를 확인하는 콜백.
|
|
15
|
+
*
|
|
16
|
+
* 결과가 true 면 네이티브앱, false 면 일반 웹이다.
|
|
17
|
+
*
|
|
18
|
+
* 콜백을 설정하지 않으면 항상 false 로 간주된다.
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
nativeAppChecker?: () => boolean;
|
|
22
|
+
children?: React.ReactNode;
|
|
5
23
|
}
|
|
6
24
|
/**
|
|
7
25
|
* 컨텍스트: UserAgent 및 Resizing 여부에 따른 태블릿/모바일 여부를 판별 해 준다.
|
|
@@ -13,7 +31,7 @@ interface DeviceDetectProviderProps {
|
|
|
13
31
|
* @see https://stackoverflow.com/questions/29046324/whats-the-most-reliable-way-to-integrate-javascript-with-media-queries
|
|
14
32
|
* @see https://jsperf.com/matchmedia-vs-resize/3
|
|
15
33
|
*/
|
|
16
|
-
export declare const DeviceDetectProvider: ({ children, }: DeviceDetectProviderProps) => JSX.Element;
|
|
34
|
+
export declare const DeviceDetectProvider: ({ breakpoints, nativeAppChecker, children, }: DeviceDetectProviderProps) => JSX.Element;
|
|
17
35
|
export declare const useIsMobile: () => boolean;
|
|
18
36
|
export declare const useIsTablet: () => boolean;
|
|
19
37
|
export declare const useIsNative: () => boolean;
|
package/libs/util/envCheck.d.ts
CHANGED
|
@@ -49,8 +49,3 @@ export declare function isTablet(): boolean;
|
|
|
49
49
|
* user-agent 정보를 이용하여 ios 여부를 판단한다.
|
|
50
50
|
*/
|
|
51
51
|
export declare function isIOS(): boolean;
|
|
52
|
-
export declare function setNativeAppKeyword(keyword: string): void;
|
|
53
|
-
/**
|
|
54
|
-
* user-agent 정보를 이용하여 native app 여부를 판단한다.
|
|
55
|
-
*/
|
|
56
|
-
export declare function isNativeApp(): boolean;
|
package/libs/validate/index.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ declare type ValidationCheckerType = typeof validateOrigin & {
|
|
|
52
52
|
*
|
|
53
53
|
* @see ValidateBulkResultModel
|
|
54
54
|
*/
|
|
55
|
-
export declare const
|
|
55
|
+
export declare const validate: ValidationCheckerType;
|
|
56
56
|
export * from './mergeValidates';
|
|
57
57
|
export * from './validate.type';
|
|
58
58
|
export * from './useValidate';
|
package/package.json
CHANGED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export var DeviceSizeEnum;
|
|
2
|
-
(function (DeviceSizeEnum) {
|
|
3
|
-
DeviceSizeEnum[DeviceSizeEnum["MOBILE_SM"] = 320] = "MOBILE_SM";
|
|
4
|
-
DeviceSizeEnum[DeviceSizeEnum["MOBILE"] = 481] = "MOBILE";
|
|
5
|
-
DeviceSizeEnum[DeviceSizeEnum["TABLET_SM"] = 768] = "TABLET_SM";
|
|
6
|
-
DeviceSizeEnum[DeviceSizeEnum["TABLET"] = 961] = "TABLET";
|
|
7
|
-
DeviceSizeEnum[DeviceSizeEnum["DESKTOP_SM"] = 1025] = "DESKTOP_SM";
|
|
8
|
-
DeviceSizeEnum[DeviceSizeEnum["DESKTOP"] = 1120] = "DESKTOP";
|
|
9
|
-
})(DeviceSizeEnum || (DeviceSizeEnum = {}));
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 기기별 사이즈를 정의한 것.
|
|
3
|
-
*
|
|
4
|
-
* 사이즈 참고:
|
|
5
|
-
* https://stackoverflow.com/questions/6370690/media-queries-how-to-target-desktop-tablet-and-mobile
|
|
6
|
-
*/
|
|
7
|
-
export declare enum DeviceSizeEnum {
|
|
8
|
-
MOBILE_SM = 320,
|
|
9
|
-
MOBILE = 481,
|
|
10
|
-
TABLET_SM = 768,
|
|
11
|
-
TABLET = 961,
|
|
12
|
-
DESKTOP_SM = 1025,
|
|
13
|
-
DESKTOP = 1120
|
|
14
|
-
}
|