@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.
Files changed (71) hide show
  1. package/dist/cjs/context/Notifications.interface.js +2 -1
  2. package/dist/cjs/context/Notifications.js +207 -1
  3. package/dist/cjs/context/UIContext.js +76 -1
  4. package/dist/cjs/context/UrlAssetPrefix.js +17 -1
  5. package/dist/cjs/context/index.js +24 -1
  6. package/dist/cjs/hoc/index.js +11 -1
  7. package/dist/cjs/hoc/urlWithAssetPrefix.js +78 -1
  8. package/dist/cjs/hooks/index.js +37 -1
  9. package/dist/cjs/hooks/useActiveClasses/index.js +9 -1
  10. package/dist/cjs/hooks/useActiveClasses/useActiveClasses.helpers.js +93 -1
  11. package/dist/cjs/hooks/useActiveClasses/useActiveClasses.interface.js +65 -1
  12. package/dist/cjs/hooks/useActiveClasses/useActiveClasses.js +60 -1
  13. package/dist/cjs/hooks/useAppearanceConfig/index.js +8 -1
  14. package/dist/cjs/hooks/useAppearanceConfig/useAppearanceConfig.js +30 -1
  15. package/dist/cjs/hooks/useDevicePropsGenerator/index.js +23 -1
  16. package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +2 -1
  17. package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +236 -1
  18. package/dist/cjs/hooks/useDeviceTargetClass.js +64 -1
  19. package/dist/cjs/hooks/useMediaQueries/index.js +9 -1
  20. package/dist/cjs/hooks/useMediaQueries/useMediaQueries.js +124 -1
  21. package/dist/cjs/hooks/useStyles/index.js +23 -1
  22. package/dist/cjs/hooks/useStyles/styleAttributes.helpers.js +9 -1
  23. package/dist/cjs/hooks/useStyles/styleAttributes.interface.js +2 -1
  24. package/dist/cjs/hooks/useStyles/styleAttributes.js +177 -1
  25. package/dist/cjs/hooks/useStyles/useStyles.js +224 -1
  26. package/dist/cjs/hooks/useViewportFix.js +43 -1
  27. package/dist/cjs/utils/index.js +9 -1
  28. package/dist/cjs/utils/mergeAppearanceKeys.js +18 -1
  29. package/dist/cjs/utils/setViewportProperty.js +8 -1
  30. package/dist/context/Notifications.js +202 -1
  31. package/dist/context/UIContext.js +73 -1
  32. package/dist/context/UrlAssetPrefix.js +14 -1
  33. package/dist/context/index.js +11 -1
  34. package/dist/hoc/index.js +5 -1
  35. package/dist/hoc/urlWithAssetPrefix.js +76 -1
  36. package/dist/hooks/index.js +24 -1
  37. package/dist/hooks/useActiveClasses/index.js +3 -1
  38. package/dist/hooks/useActiveClasses/useActiveClasses.helpers.js +89 -1
  39. package/dist/hooks/useActiveClasses/useActiveClasses.interface.js +63 -1
  40. package/dist/hooks/useActiveClasses/useActiveClasses.js +58 -1
  41. package/dist/hooks/useAppearanceConfig/index.js +2 -1
  42. package/dist/hooks/useAppearanceConfig/useAppearanceConfig.js +28 -1
  43. package/dist/hooks/useDevicePropsGenerator/index.js +17 -1
  44. package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +234 -1
  45. package/dist/hooks/useDeviceTargetClass.js +62 -1
  46. package/dist/hooks/useMediaQueries/index.js +3 -1
  47. package/dist/hooks/useMediaQueries/useMediaQueries.js +122 -1
  48. package/dist/hooks/useStyles/index.js +16 -1
  49. package/dist/hooks/useStyles/styleAttributes.helpers.js +7 -1
  50. package/dist/hooks/useStyles/styleAttributes.js +173 -1
  51. package/dist/hooks/useStyles/useStyles.js +222 -1
  52. package/dist/hooks/useViewportFix.js +41 -1
  53. package/dist/types/context/Notifications.d.ts +8 -8
  54. package/dist/types/hoc/urlWithAssetPrefix.d.ts +2 -3
  55. package/dist/types/hooks/index.d.ts +1 -0
  56. package/dist/types/hooks/useActiveClasses/useActiveClasses.interface.d.ts +4 -4
  57. package/dist/types/hooks/useAppearanceConfig/useAppearanceConfig.d.ts +1 -1
  58. package/dist/types/hooks/useDevicePropsGenerator/useDevicePropsGenerator.d.ts +1 -1
  59. package/dist/types/hooks/useDeviceTargetClass.d.ts +2 -1
  60. package/dist/types/hooks/useMediaQueries/useMediaQueries.d.ts +2 -1
  61. package/dist/types/hooks/useStyles/styleAttributes.helpers.d.ts +1 -1
  62. package/dist/types/types/exactlyOne.d.ts +5 -0
  63. package/dist/types/types/index.d.ts +5 -1
  64. package/dist/types/types/kebabCase.d.ts +1 -0
  65. package/dist/types/types/{utils.d.ts → requireAtLeastOneProp.d.ts} +0 -9
  66. package/dist/types/types/withClassKeys.d.ts +4 -0
  67. package/dist/types/types/withDeviceProps.d.ts +33 -0
  68. package/dist/utils/index.js +2 -1
  69. package/dist/utils/mergeAppearanceKeys.js +16 -1
  70. package/dist/utils/setViewportProperty.js +6 -1
  71. package/package.json +4 -4
@@ -1 +1,60 @@
1
- "use strict";var e=require("clsx"),s=require("./useActiveClasses.helpers.js");exports.useActiveClasses=t=>{const{propsGenerator:r,suffixes:i=[],isActive:a,isDisabled:o}=t,c=[];Object.entries(s.CLASS_RULES).forEach(([e,t])=>{const i=s.toKebabCase(e);t.forEach(({key:e,stateFn:t})=>{const n=r[e];if(!n)return;if(t){if(!t({isActive:a,isDisabled:o}))return}const f=s.formatState(e);c.push(`${i}${f}_${n}`)})});return{rootClasses:e(c),suffixClasses:i.reduce((t,i)=>{const c=[];Object.entries(s.CLASS_RULES).forEach(([e,t])=>{t.forEach(({key:t,stateFn:n})=>{const f=t.replace(e,""),u=e+i+f,l=r[u];if(!l)return;if(n){if(!n({isActive:a,isDisabled:o}))return}const C=s.formatState(u),b=s.toKebabCase(e);c.push(`${b}${C}_${l}`)})});return t["HTMLContent"===i?"htmlContent":i[0].toLowerCase()+i.slice(1)]=e(c),t},{})}};
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
- "use strict";var e=require("./useAppearanceConfig.js");require("react"),exports.useAppearanceConfig=e.useAppearanceConfig;
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
- "use strict";var a=require("react");exports.useAppearanceConfig=(e,r,p)=>a.useMemo(()=>{if(e){const a=e.split(" ").reduce((a,e)=>Object.assign(a,r?.appearance?.[e]),{});return p&&(r?.appearance?.disabled||r?.appearance?.disabledPrimary)&&Object.assign(a,r?.appearance?.disabled||r?.appearance?.disabledPrimary),a}return p?r?.appearance?.disabled||r?.appearance?.disabledPrimary:{}},[e,r?.appearance,p]);
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
- "use strict";var e=require("./useDevicePropsGenerator.js");require("react"),require("lodash/camelCase"),require("lodash/castArray"),require("lodash/upperFirst"),require("../../context/Notifications.js"),require("react/jsx-runtime"),require("uuid"),require("@itcase/common"),require("../../context/UIContext.js"),require("../useMediaQueries/useMediaQueries.js"),require("react-responsive"),require("../../utils/setViewportProperty.js"),require("../../context/UrlAssetPrefix.js"),require("../useStyles/styleAttributes.js"),require("../useStyles/styleAttributes.helpers.js"),require("lodash/maxBy"),exports.useDevicePropsGenerator=e.useDevicePropsGenerator;
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
- "use strict";
1
+ 'use strict';
2
+
@@ -1 +1,236 @@
1
- "use strict";var e=require("react"),r=require("lodash/camelCase"),t=require("lodash/castArray"),s=require("lodash/upperFirst");require("../../context/Notifications.js");var u=require("../../context/UIContext.js");require("../../context/UrlAssetPrefix.js");var n=require("../useStyles/styleAttributes.js"),i=require("../useStyles/styleAttributes.helpers.js");require("lodash/maxBy"),require("react/jsx-runtime"),require("uuid"),require("@itcase/common"),require("../useMediaQueries/useMediaQueries.js"),require("react-responsive"),require("../../utils/setViewportProperty.js");const o=[/([A-Z])/g,"-$1"],c=String(o),a=new Set(n.default.map(e=>i.getStyleAttributeKey(e)));exports.useDevicePropsGenerator=function(n,i){const{deviceCurrentMainType:l}=u.useUserDeviceContext(),p=e.useRef(n);p.current=n;const f=e.useRef(l);f.current=l;const g=e.useRef(i);g.current=i;const q=e.useMemo(()=>new Map,[i,l]),y=e.useRef(q);return y.current=q,e.useMemo(()=>{let e,u;const n={getProp(r){const t=f.current;e!==t&&(e=t,u=s(t));const n=r+u;return p.current[n]||p.current[r]||g.current?.[n]||g.current?.[r]},getClassName(e,s){let u="",n=o;s&&(u=s.prefix??"",n=s.replace??o);const i=this.getProp(e);if(!i)return"";const l=`${u}_${n===o?c:String(n)}_${e}_${i}`,p=y.current.get(l);if(void 0!==p)return p;if(a.has(e)&&("number"==typeof i||"string"==typeof i&&!isNaN(parseFloat(i)))){const e="";return y.current.set(l,e),e}let f=String(i);if(f.includes(".")||(f=r(f)),n){const e=t(n);f=f.replace(e[0],e[1]||"")}const g=`${u}${f}`.toLowerCase();return y.current.set(l,g),g}},i={get(e,r,t,...s){if("string"==typeof r){if("getProp"!==r&&"getClassName"!==r){if(r.endsWith("Class")){const e=r.substring(0,r.lastIndexOf("Class"));return n.getClassName(e)}return n.getProp(r)}return Reflect.get(e,r,t,...s)}return r}};return new Proxy(n,i)},[])};
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
- "use strict";var e=require("react"),r=require("lodash/camelCase"),s=require("lodash/castArray");require("../context/Notifications.js");var t=require("../context/UIContext.js");require("../context/UrlAssetPrefix.js"),require("react/jsx-runtime"),require("uuid"),require("@itcase/common"),require("./useMediaQueries/useMediaQueries.js"),require("react-responsive"),require("../utils/setViewportProperty.js"),exports.useDeviceTargetClass=function(i,u){const{prefix:o="",propsKey:a,replace:c=[/([A-Z])/g,"-$1"]}=u,{isMobile:n,isTablet:l,isDesktop:q}=t.useUserDeviceContext(),p=e.useMemo(()=>{const e=i[`${a}${(n?"Mobile":l&&"Tablet")||q&&"Desktop"||""}`],r=i[a];return e||r},[n,l,q,i,a]);return e.useMemo(()=>{if(p){let e=r(String(p));if(c){const r=s(c);e=e.replace(r[0],r[1]||"")}return`${o}${e}`.toLowerCase()}return null},[p,o,c])};
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
- "use strict";var e=require("./useMediaQueries.js");require("react"),require("react-responsive"),exports.useMediaQueries=e.useMediaQueries;
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
- "use strict";var e=require("react"),i=require("react-responsive"),s={"mobile-tiny":"15em",tablet:"48em","desktop-small":"60em","desktop-huge":"160em"};const t="undefined"==typeof window;function o(e,i,s){return e?Boolean(i):s}exports.useMediaQueries=function(a={}){const l=!0===a.isMobile||!0===a.isTablet||!0===a.isDesktop,u=o(l,a.isMobile,i.useMediaQuery({minWidth:s["mobile-tiny"],maxWidth:s.tablet})||t&&Boolean(a.isMobile)),n=o(l,a.isTablet,i.useMediaQuery({minWidth:s.tablet,maxWidth:s["desktop-small"]})||t&&Boolean(a.isTablet)),d=o(l,a.isDesktop,i.useMediaQuery({minWidth:s["desktop-small"],maxWidth:s["desktop-super-huge"]})||t&&Boolean(a.isDesktop)),r=i.useMediaQuery({minWidth:s["desktop-huge"]});return e.useMemo(()=>({isMobile:u,isMobileHuge:u,isTablet:n,isDesktop:d,isDesktopMega:r}),[u,n,d,r])};
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
- "use strict";var e=require("./styleAttributes.helpers.js"),r=require("./useStyles.js");require("react"),require("lodash/camelCase"),require("lodash/maxBy"),require("lodash/upperFirst"),require("../../context/Notifications.js"),require("react/jsx-runtime"),require("uuid"),require("@itcase/common"),require("../../context/UIContext.js"),require("../useMediaQueries/useMediaQueries.js"),require("react-responsive"),require("../../utils/setViewportProperty.js"),require("../../context/UrlAssetPrefix.js"),require("./styleAttributes.js"),exports.getStyleAttributeKey=e.getStyleAttributeKey,exports.useStyles=r.useStyles;
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
- "use strict";exports.getStyleAttributeKey=t=>Array.isArray(t)?t[0]:t;
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
- "use strict";
1
+ 'use strict';
2
+