@itcase/ui-core 1.10.46 → 1.10.48
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/dist/cjs/context/Notifications.interface.js +2 -1
- package/dist/cjs/context/Notifications.js +207 -1
- package/dist/cjs/context/UIContext.js +76 -1
- package/dist/cjs/context/UrlAssetPrefix.js +17 -1
- package/dist/cjs/context/index.js +24 -1
- package/dist/cjs/hoc/index.js +11 -1
- package/dist/cjs/hoc/urlWithAssetPrefix.js +78 -1
- package/dist/cjs/hooks/index.js +37 -1
- package/dist/cjs/hooks/useActiveClasses/index.js +9 -1
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.helpers.js +93 -1
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.interface.js +65 -1
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.js +60 -1
- package/dist/cjs/hooks/useAppearanceConfig/index.js +8 -1
- package/dist/cjs/hooks/useAppearanceConfig/useAppearanceConfig.js +30 -1
- package/dist/cjs/hooks/useDevicePropsGenerator/index.js +23 -1
- package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +2 -1
- package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +236 -1
- package/dist/cjs/hooks/useDeviceTargetClass.js +64 -1
- package/dist/cjs/hooks/useMediaQueries/index.js +9 -1
- package/dist/cjs/hooks/useMediaQueries/useMediaQueries.js +124 -1
- package/dist/cjs/hooks/useStyles/index.js +23 -1
- package/dist/cjs/hooks/useStyles/styleAttributes.helpers.js +9 -1
- package/dist/cjs/hooks/useStyles/styleAttributes.interface.js +2 -1
- package/dist/cjs/hooks/useStyles/styleAttributes.js +177 -1
- package/dist/cjs/hooks/useStyles/useStyles.js +224 -1
- package/dist/cjs/hooks/useViewportFix.js +43 -1
- package/dist/cjs/utils/index.js +9 -1
- package/dist/cjs/utils/mergeAppearanceKeys.js +18 -1
- package/dist/cjs/utils/setViewportProperty.js +8 -1
- package/dist/context/Notifications.js +202 -1
- package/dist/context/UIContext.js +73 -1
- package/dist/context/UrlAssetPrefix.js +14 -1
- package/dist/context/index.js +11 -1
- package/dist/hoc/index.js +5 -1
- package/dist/hoc/urlWithAssetPrefix.js +76 -1
- package/dist/hooks/index.js +24 -1
- package/dist/hooks/useActiveClasses/index.js +3 -1
- package/dist/hooks/useActiveClasses/useActiveClasses.helpers.js +89 -1
- package/dist/hooks/useActiveClasses/useActiveClasses.interface.js +63 -1
- package/dist/hooks/useActiveClasses/useActiveClasses.js +58 -1
- package/dist/hooks/useAppearanceConfig/index.js +2 -1
- package/dist/hooks/useAppearanceConfig/useAppearanceConfig.js +28 -1
- package/dist/hooks/useDevicePropsGenerator/index.js +17 -1
- package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +234 -1
- package/dist/hooks/useDeviceTargetClass.js +62 -1
- package/dist/hooks/useMediaQueries/index.js +3 -1
- package/dist/hooks/useMediaQueries/useMediaQueries.js +122 -1
- package/dist/hooks/useStyles/index.js +16 -1
- package/dist/hooks/useStyles/styleAttributes.helpers.js +7 -1
- package/dist/hooks/useStyles/styleAttributes.js +173 -1
- package/dist/hooks/useStyles/useStyles.js +222 -1
- package/dist/hooks/useViewportFix.js +41 -1
- package/dist/types/context/Notifications.d.ts +8 -8
- package/dist/types/hoc/urlWithAssetPrefix.d.ts +2 -3
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useActiveClasses/useActiveClasses.interface.d.ts +4 -4
- package/dist/types/hooks/useAppearanceConfig/useAppearanceConfig.d.ts +1 -1
- package/dist/types/hooks/useDevicePropsGenerator/useDevicePropsGenerator.d.ts +1 -1
- package/dist/types/hooks/useDeviceTargetClass.d.ts +2 -1
- package/dist/types/hooks/useMediaQueries/useMediaQueries.d.ts +2 -1
- package/dist/types/hooks/useStyles/styleAttributes.helpers.d.ts +1 -1
- package/dist/types/types/exactlyOne.d.ts +5 -0
- package/dist/types/types/index.d.ts +5 -1
- package/dist/types/types/kebabCase.d.ts +1 -0
- package/dist/types/types/{utils.d.ts → requireAtLeastOneProp.d.ts} +0 -9
- package/dist/types/types/withClassKeys.d.ts +4 -0
- package/dist/types/types/withDeviceProps.d.ts +33 -0
- package/dist/utils/index.js +2 -1
- package/dist/utils/mergeAppearanceKeys.js +16 -1
- package/dist/utils/setViewportProperty.js +6 -1
- package/package.json +4 -4
|
@@ -1 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var clsx = require('clsx');
|
|
4
|
+
var useActiveClasses_helpers = require('./useActiveClasses.helpers.js');
|
|
5
|
+
|
|
6
|
+
const useActiveClasses = (params) => {
|
|
7
|
+
const { propsGenerator, suffixes = [], isActive, isDisabled } = params;
|
|
8
|
+
const rootClassesArray = [];
|
|
9
|
+
Object.entries(useActiveClasses_helpers.CLASS_RULES).forEach(([rulesName, rules]) => {
|
|
10
|
+
const kebabRuleName = useActiveClasses_helpers.toKebabCase(rulesName);
|
|
11
|
+
rules.forEach(({ key, stateFn }) => {
|
|
12
|
+
const value = propsGenerator[key];
|
|
13
|
+
if (!value) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (stateFn) {
|
|
17
|
+
const active = stateFn({ isActive, isDisabled });
|
|
18
|
+
if (!active) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const stateName = useActiveClasses_helpers.formatState(key);
|
|
23
|
+
rootClassesArray.push(`${kebabRuleName}${stateName}_${value}`);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
const rootClasses = clsx(rootClassesArray);
|
|
27
|
+
const suffixClasses = suffixes.reduce((acc, suffix) => {
|
|
28
|
+
const classes = [];
|
|
29
|
+
Object.entries(useActiveClasses_helpers.CLASS_RULES).forEach(([rulesName, rules]) => {
|
|
30
|
+
rules.forEach(({ key, stateFn }) => {
|
|
31
|
+
const withoutPrefixRulesName = key.replace(rulesName, '');
|
|
32
|
+
const propKey = rulesName + suffix + withoutPrefixRulesName;
|
|
33
|
+
const value = propsGenerator[propKey];
|
|
34
|
+
if (!value) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (stateFn) {
|
|
38
|
+
const active = stateFn({ isActive, isDisabled });
|
|
39
|
+
if (!active) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const state = useActiveClasses_helpers.formatState(propKey);
|
|
44
|
+
const kebabName = useActiveClasses_helpers.toKebabCase(rulesName);
|
|
45
|
+
classes.push(`${kebabName}${state}_${value}`);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
const suffixKey = suffix === 'HTMLContent'
|
|
49
|
+
? 'htmlContent'
|
|
50
|
+
: (suffix[0].toLowerCase() + suffix.slice(1));
|
|
51
|
+
acc[suffixKey] = clsx(classes);
|
|
52
|
+
return acc;
|
|
53
|
+
}, {});
|
|
54
|
+
return {
|
|
55
|
+
rootClasses,
|
|
56
|
+
suffixClasses,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
exports.useActiveClasses = useActiveClasses;
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useAppearanceConfig = require('./useAppearanceConfig.js');
|
|
4
|
+
require('react');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
exports.useAppearanceConfig = useAppearanceConfig.useAppearanceConfig;
|
|
@@ -1 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
const useAppearanceConfig = (appearance, componentConfig, isDisabled) => {
|
|
6
|
+
const appearanceConfig = React.useMemo(() => {
|
|
7
|
+
if (appearance) {
|
|
8
|
+
const appearanceProps = appearance
|
|
9
|
+
.split(' ')
|
|
10
|
+
.reduce((resultConfig, appearanceKey) => {
|
|
11
|
+
return Object.assign(resultConfig, componentConfig?.appearance?.[appearanceKey]);
|
|
12
|
+
}, {});
|
|
13
|
+
if (isDisabled &&
|
|
14
|
+
(componentConfig?.appearance?.disabled ||
|
|
15
|
+
componentConfig?.appearance?.disabledPrimary)) {
|
|
16
|
+
Object.assign(appearanceProps, componentConfig?.appearance?.disabled ||
|
|
17
|
+
componentConfig?.appearance?.disabledPrimary);
|
|
18
|
+
}
|
|
19
|
+
return appearanceProps;
|
|
20
|
+
}
|
|
21
|
+
if (isDisabled) {
|
|
22
|
+
return (componentConfig?.appearance?.disabled ||
|
|
23
|
+
componentConfig?.appearance?.disabledPrimary);
|
|
24
|
+
}
|
|
25
|
+
return {};
|
|
26
|
+
}, [appearance, componentConfig?.appearance, isDisabled]);
|
|
27
|
+
return appearanceConfig;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.useAppearanceConfig = useAppearanceConfig;
|
|
@@ -1 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useDevicePropsGenerator = require('./useDevicePropsGenerator.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('lodash/camelCase');
|
|
6
|
+
require('lodash/castArray');
|
|
7
|
+
require('lodash/upperFirst');
|
|
8
|
+
require('../../context/Notifications.js');
|
|
9
|
+
require('react/jsx-runtime');
|
|
10
|
+
require('uuid');
|
|
11
|
+
require('@itcase/common');
|
|
12
|
+
require('../../context/UIContext.js');
|
|
13
|
+
require('../useMediaQueries/useMediaQueries.js');
|
|
14
|
+
require('react-responsive');
|
|
15
|
+
require('../../utils/setViewportProperty.js');
|
|
16
|
+
require('../../context/UrlAssetPrefix.js');
|
|
17
|
+
require('../useStyles/styleAttributes.js');
|
|
18
|
+
require('../useStyles/styleAttributes.helpers.js');
|
|
19
|
+
require('lodash/maxBy');
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
exports.useDevicePropsGenerator = useDevicePropsGenerator.useDevicePropsGenerator;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
@@ -1 +1,236 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var camelCase = require('lodash/camelCase');
|
|
5
|
+
var castArray = require('lodash/castArray');
|
|
6
|
+
var upperFirst = require('lodash/upperFirst');
|
|
7
|
+
require('../../context/Notifications.js');
|
|
8
|
+
var UIContext = require('../../context/UIContext.js');
|
|
9
|
+
require('../../context/UrlAssetPrefix.js');
|
|
10
|
+
var styleAttributes = require('../useStyles/styleAttributes.js');
|
|
11
|
+
var styleAttributes_helpers = require('../useStyles/styleAttributes.helpers.js');
|
|
12
|
+
require('lodash/maxBy');
|
|
13
|
+
require('react/jsx-runtime');
|
|
14
|
+
require('uuid');
|
|
15
|
+
require('@itcase/common');
|
|
16
|
+
require('../useMediaQueries/useMediaQueries.js');
|
|
17
|
+
require('react-responsive');
|
|
18
|
+
require('../../utils/setViewportProperty.js');
|
|
19
|
+
|
|
20
|
+
/* eslint-disable react-hooks/immutability */
|
|
21
|
+
/* eslint-disable react-hooks/refs */
|
|
22
|
+
function useDevicePropsGenerator(componentProps, appearanceConfig) {
|
|
23
|
+
/** Get or generate(classname) a prop depending on the user's device.
|
|
24
|
+
* Props:
|
|
25
|
+
* - "componentProps" - original "props" from component
|
|
26
|
+
* - "appearanceConfig" - special appearance dictionary with styles presets
|
|
27
|
+
*
|
|
28
|
+
* Usage for create class value:
|
|
29
|
+
* const appearanceConfig = (
|
|
30
|
+
* appearance && componentConfig.appearance && componentConfig.appearance[appearance]
|
|
31
|
+
* )
|
|
32
|
+
* const propsGenerator = useDevicePropsGenerator(props, appearanceConfig)
|
|
33
|
+
* ---------
|
|
34
|
+
* const fillClass = propsGenerator.getClassName('fill')
|
|
35
|
+
* "fillClass" - is "surface-secondary"
|
|
36
|
+
* ---------
|
|
37
|
+
* const fillClass = propsGenerator.getClassName('fill', { prefix: 'fill_' })
|
|
38
|
+
* "fillClass" - is "fill_surface-secondary"
|
|
39
|
+
* ---------
|
|
40
|
+
* const fillClass = propsGenerator.fillClass
|
|
41
|
+
* "fillClass" - is "surface-secondary"
|
|
42
|
+
* ---------
|
|
43
|
+
* const { fillClass } = propsGenerator
|
|
44
|
+
* "fillClass" - is "surface-secondary"
|
|
45
|
+
*
|
|
46
|
+
* Usage for props value for device:
|
|
47
|
+
* const { titleTextSize } = propsGenerator / const titleTextSize = propsGenerator.titleTextSize
|
|
48
|
+
*
|
|
49
|
+
* "titleTextSize" - contain some value from props:
|
|
50
|
+
* - titleTextSize
|
|
51
|
+
* - titleTextSizeMobile
|
|
52
|
+
* - titleTextSizeTablet
|
|
53
|
+
* - titleTextSizeDesktop
|
|
54
|
+
* ---------
|
|
55
|
+
**/
|
|
56
|
+
const { deviceCurrentMainType } = UIContext.useUserDeviceContext();
|
|
57
|
+
// if (isDevelopmentEnv && isClientEnv) {
|
|
58
|
+
// if (window.__cache === undefined) {
|
|
59
|
+
// window.__cache = {
|
|
60
|
+
// reset: () => {
|
|
61
|
+
// window.__cache.cache_creation_count = 0
|
|
62
|
+
// window.__cache.proxy_field_access_count = 0
|
|
63
|
+
// window.__cache.proxy_creation_count = 0
|
|
64
|
+
// window.__cache.cache_miss_count = 0
|
|
65
|
+
// window.__cache.cache_hit_count = 0
|
|
66
|
+
// window.__cache.cache_early_avoid_count = 0
|
|
67
|
+
// },
|
|
68
|
+
// cache_creation_count: 0,
|
|
69
|
+
// cache_early_avoid_count: 0,
|
|
70
|
+
// cache_hit_count: 0,
|
|
71
|
+
// cache_miss_count: 0,
|
|
72
|
+
// proxy_creation_count: 0,
|
|
73
|
+
// proxy_field_access_count: 0,
|
|
74
|
+
// }
|
|
75
|
+
// }
|
|
76
|
+
// }
|
|
77
|
+
// Used by proxy getter.
|
|
78
|
+
// Proxy getter does not care about reference of "componentProps" and
|
|
79
|
+
// "deviceCurrentMainType", because it always get actual value from these refs.
|
|
80
|
+
// We should not pass these values in proxy's dependency list.
|
|
81
|
+
// All we have to do is to update these refs on each render.
|
|
82
|
+
const propsRef = React.useRef(componentProps);
|
|
83
|
+
propsRef.current = componentProps;
|
|
84
|
+
const deviceCurrentMainTypeRef = React.useRef(deviceCurrentMainType);
|
|
85
|
+
deviceCurrentMainTypeRef.current = deviceCurrentMainType;
|
|
86
|
+
const appearanceConfigRef = React.useRef(appearanceConfig);
|
|
87
|
+
appearanceConfigRef.current = appearanceConfig;
|
|
88
|
+
// Store mutable cache.
|
|
89
|
+
// Cache will be reset on "appearanceConfig" or "deviceCurrentMainType" change.
|
|
90
|
+
const cachedClassValueMap = React.useMemo(() => {
|
|
91
|
+
// if (isDevelopmentEnv && isClientEnv) {
|
|
92
|
+
// window.__cache.cache_creation_count += 1
|
|
93
|
+
// }
|
|
94
|
+
return new Map();
|
|
95
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
96
|
+
}, [appearanceConfig, deviceCurrentMainType]);
|
|
97
|
+
// Same as before, we need to keep track of updated value in stable reference.
|
|
98
|
+
const cachedClassValueMapRef = React.useRef(cachedClassValueMap);
|
|
99
|
+
cachedClassValueMapRef.current = cachedClassValueMap;
|
|
100
|
+
const devicePropsGenerator = React.useMemo(() => {
|
|
101
|
+
// if (isDevelopmentEnv && isClientEnv) {
|
|
102
|
+
// window.__cache.proxy_creation_count += 1;
|
|
103
|
+
// }
|
|
104
|
+
let cachedDeviceType;
|
|
105
|
+
let cachedDeviceTypeUpperFirst;
|
|
106
|
+
const propsGenerator = {
|
|
107
|
+
getProp(propKey) {
|
|
108
|
+
const deviceType = deviceCurrentMainTypeRef.current;
|
|
109
|
+
if (cachedDeviceType !== deviceType) {
|
|
110
|
+
cachedDeviceType = deviceType;
|
|
111
|
+
cachedDeviceTypeUpperFirst = upperFirst(deviceType);
|
|
112
|
+
}
|
|
113
|
+
const propsForDeviceKey = propKey + cachedDeviceTypeUpperFirst;
|
|
114
|
+
let targetPropsValue = undefined;
|
|
115
|
+
if (propsForDeviceKey in propsRef.current) {
|
|
116
|
+
// Value for device from props is first priority
|
|
117
|
+
targetPropsValue = propsRef.current[propsForDeviceKey];
|
|
118
|
+
}
|
|
119
|
+
else if (propKey in propsRef.current) {
|
|
120
|
+
// Value without device from props is second priority
|
|
121
|
+
targetPropsValue = propsRef.current[propKey];
|
|
122
|
+
}
|
|
123
|
+
else if (appearanceConfigRef.current &&
|
|
124
|
+
propsForDeviceKey in appearanceConfigRef.current) {
|
|
125
|
+
// Value for device from appearance config is third priority
|
|
126
|
+
targetPropsValue = appearanceConfigRef.current[propsForDeviceKey];
|
|
127
|
+
}
|
|
128
|
+
else if (appearanceConfigRef.current &&
|
|
129
|
+
propKey in appearanceConfigRef.current) {
|
|
130
|
+
// Value without device from appearance config is last priority
|
|
131
|
+
targetPropsValue = appearanceConfigRef.current[propKey];
|
|
132
|
+
}
|
|
133
|
+
// prettier-ignore
|
|
134
|
+
// const targetPropsValue = (
|
|
135
|
+
// // Value for device from props is first priority
|
|
136
|
+
// propsRef.current[propsForDeviceKey] ||
|
|
137
|
+
// // Value without device from props is second priority
|
|
138
|
+
// propsRef.current[propKey] ||
|
|
139
|
+
// // Value for device from appearance config is third priority
|
|
140
|
+
// appearanceConfigRef.current?.[propsForDeviceKey] ||
|
|
141
|
+
// // Value without device from appearance config is last priority
|
|
142
|
+
// appearanceConfigRef.current?.[propKey]
|
|
143
|
+
// )
|
|
144
|
+
return targetPropsValue;
|
|
145
|
+
},
|
|
146
|
+
// eslint-disable-next-line perfectionist/sort-objects
|
|
147
|
+
getClassName(propKey, params) {
|
|
148
|
+
let prefix = '';
|
|
149
|
+
let replace = defaultReplacePattern;
|
|
150
|
+
if (params) {
|
|
151
|
+
prefix = params.prefix ?? '';
|
|
152
|
+
replace = params.replace ?? defaultReplacePattern;
|
|
153
|
+
}
|
|
154
|
+
const targetClassValue = this.getProp(propKey);
|
|
155
|
+
if (!targetClassValue) {
|
|
156
|
+
// if (isClientEnv && isDevelopmentEnv) {
|
|
157
|
+
// window.__cache.cache_early_avoid_count += 1
|
|
158
|
+
// }
|
|
159
|
+
// If target key not exists in props and appearance config - return empty class
|
|
160
|
+
return '';
|
|
161
|
+
}
|
|
162
|
+
const stringifiedReplace = replace === defaultReplacePattern
|
|
163
|
+
? defaultStringifiedReplacePattern
|
|
164
|
+
: String(replace);
|
|
165
|
+
const cacheKey = `${prefix}_${stringifiedReplace}_${propKey}_${targetClassValue}`;
|
|
166
|
+
const cachedClassValue = cachedClassValueMapRef.current.get(cacheKey);
|
|
167
|
+
if (cachedClassValue !== undefined) {
|
|
168
|
+
// if (isClientEnv && isDevelopmentEnv) {
|
|
169
|
+
// window.__cache.cache_hit_count += 1
|
|
170
|
+
// }
|
|
171
|
+
return cachedClassValue;
|
|
172
|
+
}
|
|
173
|
+
// if (isClientEnv && isDevelopmentEnv) {
|
|
174
|
+
// window.__cache.cache_miss_count += 1
|
|
175
|
+
// }
|
|
176
|
+
if (styleAttributeKeysSet.has(propKey) &&
|
|
177
|
+
(typeof targetClassValue === 'number' ||
|
|
178
|
+
(typeof targetClassValue === 'string' &&
|
|
179
|
+
!isNaN(parseFloat(targetClassValue))))) {
|
|
180
|
+
const newClassValue = '';
|
|
181
|
+
cachedClassValueMapRef.current.set(cacheKey, newClassValue);
|
|
182
|
+
return newClassValue;
|
|
183
|
+
}
|
|
184
|
+
let cleanClassValue = String(targetClassValue);
|
|
185
|
+
if (!cleanClassValue.includes('.')) {
|
|
186
|
+
cleanClassValue = camelCase(cleanClassValue);
|
|
187
|
+
}
|
|
188
|
+
if (replace) {
|
|
189
|
+
const replaceList = castArray(replace);
|
|
190
|
+
cleanClassValue = cleanClassValue.replace(replaceList[0],
|
|
191
|
+
// @ts-expect-error
|
|
192
|
+
replaceList[1] || '');
|
|
193
|
+
}
|
|
194
|
+
const newClassValue = `${prefix}${cleanClassValue}`.toLowerCase();
|
|
195
|
+
cachedClassValueMapRef.current.set(cacheKey, newClassValue);
|
|
196
|
+
return newClassValue;
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
const generatorProxyHandler = {
|
|
200
|
+
get(target, propKey, receiver, ...args) {
|
|
201
|
+
if (typeof propKey === 'string') {
|
|
202
|
+
// If object does not have the property being retrieved
|
|
203
|
+
if (propKey !== 'getProp' && propKey !== 'getClassName') {
|
|
204
|
+
// if (isClientEnv && isDevelopmentEnv) {
|
|
205
|
+
// window.__cache.proxy_field_access_count += 1
|
|
206
|
+
// }
|
|
207
|
+
// And property ended on "Class" keyword
|
|
208
|
+
if (propKey.endsWith('Class')) {
|
|
209
|
+
// prettier-ignore
|
|
210
|
+
const shortProp = propKey.substring(0, propKey.lastIndexOf('Class'));
|
|
211
|
+
// Return prop from props for device as formatted class name
|
|
212
|
+
// prettier-ignore
|
|
213
|
+
return propsGenerator.getClassName(shortProp);
|
|
214
|
+
}
|
|
215
|
+
// Return prop from props for device
|
|
216
|
+
return propsGenerator.getProp(propKey);
|
|
217
|
+
}
|
|
218
|
+
// Return object property. Original "get".
|
|
219
|
+
// @ts-expect-error
|
|
220
|
+
return Reflect.get(target, propKey, receiver, ...args);
|
|
221
|
+
}
|
|
222
|
+
// In some cases, like in Chrome browser, sometime "prop" is not string.
|
|
223
|
+
// We return this object as is.
|
|
224
|
+
return propKey;
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
return new Proxy(propsGenerator, generatorProxyHandler);
|
|
228
|
+
// Proxy does not care about references, we can create proxy only once.
|
|
229
|
+
}, []);
|
|
230
|
+
return devicePropsGenerator;
|
|
231
|
+
}
|
|
232
|
+
const defaultReplacePattern = [/([A-Z])/g, '-$1'];
|
|
233
|
+
const defaultStringifiedReplacePattern = String(defaultReplacePattern);
|
|
234
|
+
const styleAttributeKeysSet = new Set(styleAttributes.default.map((attr) => styleAttributes_helpers.getStyleAttributeKey(attr)));
|
|
235
|
+
|
|
236
|
+
exports.useDevicePropsGenerator = useDevicePropsGenerator;
|
|
@@ -1 +1,64 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var camelCase = require('lodash/camelCase');
|
|
5
|
+
var castArray = require('lodash/castArray');
|
|
6
|
+
require('../context/Notifications.js');
|
|
7
|
+
var UIContext = require('../context/UIContext.js');
|
|
8
|
+
require('../context/UrlAssetPrefix.js');
|
|
9
|
+
require('react/jsx-runtime');
|
|
10
|
+
require('uuid');
|
|
11
|
+
require('@itcase/common');
|
|
12
|
+
require('./useMediaQueries/useMediaQueries.js');
|
|
13
|
+
require('react-responsive');
|
|
14
|
+
require('../utils/setViewportProperty.js');
|
|
15
|
+
|
|
16
|
+
/** TODO:
|
|
17
|
+
* Hook is still used in "itcase-forms".
|
|
18
|
+
* Need replace with "useDevicePropsGenerator" and delete this.
|
|
19
|
+
*/
|
|
20
|
+
function useDeviceTargetClass(componentProps, hookProps) {
|
|
21
|
+
/** Generate a class depending on the user's device.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* const sizeClass = useDeviceTargetClass(props, {
|
|
25
|
+
* prefix: 'some-item_size_',
|
|
26
|
+
* propsKey: 'size',
|
|
27
|
+
* })
|
|
28
|
+
* Return: "some-item_size_m" (or "s", or "l", or something else)
|
|
29
|
+
*
|
|
30
|
+
* "componentProps" - "props" from component
|
|
31
|
+
* "hookProps" - special props for generating class
|
|
32
|
+
**/
|
|
33
|
+
const {
|
|
34
|
+
prefix = '',
|
|
35
|
+
propsKey,
|
|
36
|
+
replace = [/([A-Z])/g, '-$1']
|
|
37
|
+
} = hookProps;
|
|
38
|
+
const {
|
|
39
|
+
isMobile,
|
|
40
|
+
isTablet,
|
|
41
|
+
isDesktop
|
|
42
|
+
} = UIContext.useUserDeviceContext();
|
|
43
|
+
const targetClassValue = React.useMemo(() => {
|
|
44
|
+
// prettier-ignore
|
|
45
|
+
const deviceCurrentMainType = isMobile && 'Mobile' || isTablet && 'Tablet' || isDesktop && 'Desktop' || '';
|
|
46
|
+
const valueForDevice = componentProps[`${propsKey}${deviceCurrentMainType}`];
|
|
47
|
+
const valueDefault = componentProps[propsKey];
|
|
48
|
+
return valueForDevice || valueDefault;
|
|
49
|
+
}, [isMobile, isTablet, isDesktop, componentProps, propsKey]);
|
|
50
|
+
const targetClass = React.useMemo(() => {
|
|
51
|
+
if (targetClassValue) {
|
|
52
|
+
let cleanClassValue = camelCase(String(targetClassValue));
|
|
53
|
+
if (replace) {
|
|
54
|
+
const replaceList = castArray(replace);
|
|
55
|
+
cleanClassValue = cleanClassValue.replace(replaceList[0], replaceList[1] || '');
|
|
56
|
+
}
|
|
57
|
+
return `${prefix}${cleanClassValue}`.toLowerCase();
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}, [targetClassValue, prefix, replace]);
|
|
61
|
+
return targetClass;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
exports.useDeviceTargetClass = useDeviceTargetClass;
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useMediaQueries = require('./useMediaQueries.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react-responsive');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.useMediaQueries = useMediaQueries.useMediaQueries;
|
|
@@ -1 +1,124 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var reactResponsive = require('react-responsive');
|
|
5
|
+
|
|
6
|
+
var tablet = "48em";
|
|
7
|
+
var mediaQueries = {
|
|
8
|
+
"mobile-tiny": "15em",
|
|
9
|
+
tablet: tablet,
|
|
10
|
+
"desktop-small": "60em",
|
|
11
|
+
"desktop-huge": "160em"
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const isSSR = typeof window === 'undefined';
|
|
15
|
+
function withUserDeviceOverride(hasOverride, userValue, matchedValue) {
|
|
16
|
+
return hasOverride ? Boolean(userValue) : matchedValue;
|
|
17
|
+
}
|
|
18
|
+
function useMediaQueries(userDevice = {}) {
|
|
19
|
+
const hasUserDeviceOverride = userDevice.isMobile === true || userDevice.isTablet === true || userDevice.isDesktop === true;
|
|
20
|
+
// const isWarning = useMediaQuery({ maxWidth: mediaQueries['mobile-tiny'] })
|
|
21
|
+
// prettier-ignore
|
|
22
|
+
const isMobile = withUserDeviceOverride(hasUserDeviceOverride, userDevice.isMobile, reactResponsive.useMediaQuery({
|
|
23
|
+
minWidth: mediaQueries['mobile-tiny'],
|
|
24
|
+
maxWidth: mediaQueries['tablet']
|
|
25
|
+
}) || isSSR && Boolean(userDevice.isMobile));
|
|
26
|
+
// const isMobileTiny = useMediaQuery({
|
|
27
|
+
// minWidth: mediaQueries['mobile-tiny'],
|
|
28
|
+
// maxWidth: mediaQueries['mobile-small'],
|
|
29
|
+
// })
|
|
30
|
+
// const isMobileSmall = useMediaQuery({
|
|
31
|
+
// minWidth: mediaQueries['mobile-small'],
|
|
32
|
+
// maxWidth: mediaQueries['mobile-medium'],
|
|
33
|
+
// })
|
|
34
|
+
// const isMobileMedium = useMediaQuery({
|
|
35
|
+
// minWidth: mediaQueries['mobile-medium'],
|
|
36
|
+
// maxWidth: mediaQueries['mobile-normal'],
|
|
37
|
+
// })
|
|
38
|
+
// const isMobileNormal = useMediaQuery({
|
|
39
|
+
// minWidth: mediaQueries['mobile-normal'],
|
|
40
|
+
// maxWidth: mediaQueries['mobile-large'],
|
|
41
|
+
// })
|
|
42
|
+
// const isMobileStandart = useMediaQuery({
|
|
43
|
+
// minWidth: mediaQueries['mobile-large'],
|
|
44
|
+
// maxWidth: mediaQueries['mobile-extra-large'],
|
|
45
|
+
// })
|
|
46
|
+
// const isMobileLarge = useMediaQuery({
|
|
47
|
+
// minWidth: mediaQueries['mobile-extra-large'],
|
|
48
|
+
// maxWidth: mediaQueries['mobile-super-extra-large'],
|
|
49
|
+
// })
|
|
50
|
+
// const isMobileHuge = useMediaQuery({
|
|
51
|
+
// minWidth: mediaQueries['mobile-super-extra-large'],
|
|
52
|
+
// maxWidth: mediaQueries['tablet'],
|
|
53
|
+
// })
|
|
54
|
+
// prettier-ignore
|
|
55
|
+
const isTablet = withUserDeviceOverride(hasUserDeviceOverride, userDevice.isTablet, reactResponsive.useMediaQuery({
|
|
56
|
+
minWidth: mediaQueries['tablet'],
|
|
57
|
+
maxWidth: mediaQueries['desktop-small']
|
|
58
|
+
}) || isSSR && Boolean(userDevice.isTablet));
|
|
59
|
+
// const isTabletSmall = useMediaQuery({
|
|
60
|
+
// minWidth: mediaQueries['tablet-small'],
|
|
61
|
+
// maxWidth: mediaQueries['tablet'],
|
|
62
|
+
// })
|
|
63
|
+
// const isTabletLarge = useMediaQuery({
|
|
64
|
+
// minWidth: mediaQueries['tablet'],
|
|
65
|
+
// maxWidth: mediaQueries['tablet-large'],
|
|
66
|
+
// })
|
|
67
|
+
// prettier-ignore
|
|
68
|
+
const isDesktop = withUserDeviceOverride(hasUserDeviceOverride, userDevice.isDesktop, reactResponsive.useMediaQuery({
|
|
69
|
+
minWidth: mediaQueries['desktop-small'],
|
|
70
|
+
maxWidth: mediaQueries['desktop-super-huge']
|
|
71
|
+
}) || isSSR && Boolean(userDevice.isDesktop));
|
|
72
|
+
// const isDesktopSmall = useMediaQuery({
|
|
73
|
+
// minWidth: mediaQueries['desktop-small'],
|
|
74
|
+
// maxWidth: mediaQueries['desktop-medium'],
|
|
75
|
+
// })
|
|
76
|
+
// const isDesktopMedium = useMediaQuery({
|
|
77
|
+
// minWidth: mediaQueries['desktop-medium'],
|
|
78
|
+
// maxWidth: mediaQueries['desktop-normal'],
|
|
79
|
+
// })
|
|
80
|
+
// const isDesktopNormal = useMediaQuery({
|
|
81
|
+
// minWidth: mediaQueries['desktop-normal'],
|
|
82
|
+
// maxWidth: mediaQueries['desktop-large'],
|
|
83
|
+
// })
|
|
84
|
+
// const isDesktopStandart = useMediaQuery({
|
|
85
|
+
// minWidth: mediaQueries['desktop-large'],
|
|
86
|
+
// maxWidth: mediaQueries['desktop-extra-large'],
|
|
87
|
+
// })
|
|
88
|
+
// const isDesktopLarge = useMediaQuery({
|
|
89
|
+
// minWidth: mediaQueries['desktop-extra-large'],
|
|
90
|
+
// maxWidth: mediaQueries['desktop-super-extra-large'],
|
|
91
|
+
// })
|
|
92
|
+
// const isDesktopHuge = useMediaQuery({
|
|
93
|
+
// minWidth: mediaQueries['desktop-super-extra-large'],
|
|
94
|
+
// maxWidth: mediaQueries['desktop-huge'],
|
|
95
|
+
// })
|
|
96
|
+
const isDesktopMega = reactResponsive.useMediaQuery({
|
|
97
|
+
minWidth: mediaQueries['desktop-huge']
|
|
98
|
+
});
|
|
99
|
+
const deviceTypes = React.useMemo(() => ({
|
|
100
|
+
// isWarning,
|
|
101
|
+
isMobile: isMobile,
|
|
102
|
+
// isMobileTiny,
|
|
103
|
+
// isMobileSmall,
|
|
104
|
+
// isMobileMedium,
|
|
105
|
+
// isMobileNormal,
|
|
106
|
+
// isMobileStandart,
|
|
107
|
+
// isMobileLarge,
|
|
108
|
+
isMobileHuge: isMobile,
|
|
109
|
+
isTablet: isTablet,
|
|
110
|
+
// isTabletSmall,
|
|
111
|
+
// isTabletLarge,
|
|
112
|
+
isDesktop: isDesktop,
|
|
113
|
+
// isDesktopSmall,
|
|
114
|
+
// isDesktopMedium,
|
|
115
|
+
// isDesktopNormal,
|
|
116
|
+
// isDesktopStandart,
|
|
117
|
+
// isDesktopLarge,
|
|
118
|
+
// isDesktopHuge,
|
|
119
|
+
isDesktopMega: isDesktopMega
|
|
120
|
+
}), [isMobile, isTablet, isDesktop, isDesktopMega]);
|
|
121
|
+
return deviceTypes;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
exports.useMediaQueries = useMediaQueries;
|
|
@@ -1 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var styleAttributes_helpers = require('./styleAttributes.helpers.js');
|
|
4
|
+
var useStyles = require('./useStyles.js');
|
|
5
|
+
require('react');
|
|
6
|
+
require('lodash/camelCase');
|
|
7
|
+
require('lodash/maxBy');
|
|
8
|
+
require('lodash/upperFirst');
|
|
9
|
+
require('../../context/Notifications.js');
|
|
10
|
+
require('react/jsx-runtime');
|
|
11
|
+
require('uuid');
|
|
12
|
+
require('@itcase/common');
|
|
13
|
+
require('../../context/UIContext.js');
|
|
14
|
+
require('../useMediaQueries/useMediaQueries.js');
|
|
15
|
+
require('react-responsive');
|
|
16
|
+
require('../../utils/setViewportProperty.js');
|
|
17
|
+
require('../../context/UrlAssetPrefix.js');
|
|
18
|
+
require('./styleAttributes.js');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
exports.getStyleAttributeKey = styleAttributes_helpers.getStyleAttributeKey;
|
|
23
|
+
exports.useStyles = useStyles.useStyles;
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const getStyleAttributeKey = (targetStyleAttribute) => {
|
|
4
|
+
return Array.isArray(targetStyleAttribute)
|
|
5
|
+
? targetStyleAttribute[0]
|
|
6
|
+
: targetStyleAttribute;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.getStyleAttributeKey = getStyleAttributeKey;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|