@itcase/ui-core 1.10.78 → 1.10.82

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 (97) hide show
  1. package/dist/cjs/context/Notifications/index.js +14 -0
  2. package/dist/cjs/context/{UIContext.js → UIProvider/UIProvider.js} +14 -24
  3. package/dist/cjs/context/UIProvider/index.js +15 -0
  4. package/dist/cjs/context/UIProviderApp/UIProviderApp.js +20 -0
  5. package/dist/cjs/context/UIProviderApp/index.js +11 -0
  6. package/dist/cjs/context/UrlAssetPrefix/index.js +10 -0
  7. package/dist/cjs/context/UserDeviceContext/UserDeviceContext.helpers.js +16 -0
  8. package/dist/cjs/context/UserDeviceContext/UserDeviceContext.js +24 -0
  9. package/dist/cjs/context/UserDeviceContext/index.js +12 -0
  10. package/dist/cjs/context/index.js +5 -18
  11. package/dist/cjs/context/index2.js +26 -0
  12. package/dist/cjs/hoc/index.js +1 -1
  13. package/dist/cjs/hoc/urlWithAssetPrefix.js +1 -1
  14. package/dist/cjs/hooks/index.js +8 -14
  15. package/dist/cjs/hooks/useDevicePropsGenerator/index.js +6 -14
  16. package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +7 -15
  17. package/dist/cjs/hooks/useDeviceTargetClass/index.js +10 -0
  18. package/dist/cjs/hooks/useDeviceTargetClass/useDeviceTargetClass.js +50 -0
  19. package/dist/cjs/hooks/useStyles/index.js +5 -13
  20. package/dist/cjs/hooks/useStyles/useStyles.js +6 -14
  21. package/dist/cjs/hooks/useStylesReactNative/index.js +12 -0
  22. package/dist/cjs/hooks/useStylesReactNative/styleAttributes.js +137 -0
  23. package/dist/cjs/hooks/useStylesReactNative/useStyles.js +59 -0
  24. package/dist/cjs/hooks/useViewportFix/index.js +8 -0
  25. package/dist/cjs/utils/setViewportProperty.js +3 -0
  26. package/dist/context/Notifications/index.js +5 -0
  27. package/dist/context/{UIContext.js → UIProvider/UIProvider.js} +15 -24
  28. package/dist/context/UIProvider/index.js +9 -0
  29. package/dist/context/UIProviderApp/UIProviderApp.js +18 -0
  30. package/dist/context/UIProviderApp/index.js +4 -0
  31. package/dist/context/UrlAssetPrefix/index.js +3 -0
  32. package/dist/context/UserDeviceContext/UserDeviceContext.helpers.js +14 -0
  33. package/dist/context/UserDeviceContext/UserDeviceContext.js +20 -0
  34. package/dist/context/UserDeviceContext/index.js +3 -0
  35. package/dist/context/index.js +3 -10
  36. package/dist/context/index2.js +13 -0
  37. package/dist/hoc/index.js +1 -1
  38. package/dist/hoc/urlWithAssetPrefix.js +1 -1
  39. package/dist/hooks/index.js +8 -14
  40. package/dist/hooks/useDevicePropsGenerator/index.js +6 -14
  41. package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +6 -14
  42. package/dist/hooks/useDeviceTargetClass/index.js +4 -0
  43. package/dist/hooks/useDeviceTargetClass/useDeviceTargetClass.js +48 -0
  44. package/dist/hooks/useStyles/index.js +5 -13
  45. package/dist/hooks/useStyles/useStyles.js +5 -13
  46. package/dist/hooks/useStylesReactNative/index.js +5 -0
  47. package/dist/hooks/useStylesReactNative/styleAttributes.js +135 -0
  48. package/dist/hooks/useStylesReactNative/useStyles.js +57 -0
  49. package/dist/hooks/useViewportFix/index.js +2 -0
  50. package/dist/stories/useDevicePropsGenerator.mdx +1 -1
  51. package/dist/types/context/Notifications/index.d.ts +4 -0
  52. package/dist/types/context/UIProvider/UIProvider.d.ts +3 -0
  53. package/dist/types/context/UIProvider/UIProvider.interface.d.ts +7 -0
  54. package/dist/types/context/UIProvider/index.d.ts +4 -0
  55. package/dist/types/context/UIProviderApp/UIProviderApp.d.ts +3 -0
  56. package/dist/types/context/UIProviderApp/UIProviderApp.interface.d.ts +5 -0
  57. package/dist/types/context/UIProviderApp/index.d.ts +6 -0
  58. package/dist/types/context/{UrlAssetPrefix.d.ts → UrlAssetPrefix/UrlAssetPrefix.d.ts} +1 -9
  59. package/dist/types/context/UrlAssetPrefix/UrlAssetPrefix.interface.d.ts +11 -0
  60. package/dist/types/context/UrlAssetPrefix/index.d.ts +4 -0
  61. package/dist/types/context/UserDeviceContext/UserDeviceContext.d.ts +5 -0
  62. package/dist/types/context/UserDeviceContext/UserDeviceContext.helpers.d.ts +3 -0
  63. package/dist/types/context/UserDeviceContext/UserDeviceContext.interface.d.ts +10 -0
  64. package/dist/types/context/UserDeviceContext/index.d.ts +5 -0
  65. package/dist/types/context/index.d.ts +10 -4
  66. package/dist/types/context/index.native.d.ts +4 -0
  67. package/dist/types/hooks/useDeviceTargetClass/index.d.ts +4 -0
  68. package/dist/types/hooks/useDeviceTargetClass/useDeviceTargetClass.d.ts +7 -0
  69. package/dist/types/hooks/useDeviceTargetClass/useDeviceTargetClass.interface.d.ts +9 -0
  70. package/dist/types/hooks/useStylesReactNative/index.d.ts +6 -0
  71. package/dist/types/hooks/useStylesReactNative/styleAttributes.d.ts +30 -0
  72. package/dist/types/hooks/useStylesReactNative/styleAttributes.interface.d.ts +143 -0
  73. package/dist/types/hooks/useStylesReactNative/useStyles.d.ts +6 -0
  74. package/dist/types/hooks/useViewportFix/index.d.ts +2 -0
  75. package/dist/utils/setViewportProperty.js +3 -0
  76. package/package.json +44 -6
  77. package/dist/cjs/context/Notifications.interface.js +0 -2
  78. package/dist/cjs/hooks/useActiveClasses/useActiveClasses.interface.js +0 -65
  79. package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +0 -2
  80. package/dist/cjs/hooks/useDeviceTargetClass.js +0 -64
  81. package/dist/cjs/hooks/useStyles/styleAttributes.interface.js +0 -2
  82. package/dist/context/Notifications.interface.js +0 -1
  83. package/dist/hooks/useActiveClasses/useActiveClasses.interface.js +0 -63
  84. package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +0 -1
  85. package/dist/hooks/useDeviceTargetClass.js +0 -62
  86. package/dist/hooks/useStyles/styleAttributes.interface.js +0 -1
  87. package/dist/types/context/UIContext.d.ts +0 -23
  88. package/dist/types/hooks/useDeviceTargetClass.d.ts +0 -6
  89. /package/dist/cjs/context/{Notifications.js → Notifications/Notifications.js} +0 -0
  90. /package/dist/cjs/context/{UrlAssetPrefix.js → UrlAssetPrefix/UrlAssetPrefix.js} +0 -0
  91. /package/dist/cjs/hooks/{useViewportFix.js → useViewportFix/useViewportFix.js} +0 -0
  92. /package/dist/context/{Notifications.js → Notifications/Notifications.js} +0 -0
  93. /package/dist/context/{UrlAssetPrefix.js → UrlAssetPrefix/UrlAssetPrefix.js} +0 -0
  94. /package/dist/hooks/{useViewportFix.js → useViewportFix/useViewportFix.js} +0 -0
  95. /package/dist/types/context/{Notifications.d.ts → Notifications/Notifications.d.ts} +0 -0
  96. /package/dist/types/context/{Notifications.interface.d.ts → Notifications/Notifications.interface.d.ts} +0 -0
  97. /package/dist/types/hooks/{useViewportFix.d.ts → useViewportFix/useViewportFix.d.ts} +0 -0
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var camelCase = require('lodash-es/camelCase');
5
+ var maxBy = require('lodash-es/maxBy');
6
+ var styleAttributes = require('./styleAttributes.js');
7
+
8
+ /*
9
+ * rule of prop key:
10
+ *
11
+ * first is style second is target
12
+ * paddingHorizontal GridInnerWrapper
13
+ *
14
+ * paddingHorizontalGridInnerWrapper: 10
15
+ */
16
+ function useStyles(props) {
17
+ const display = 'display' in props ? props.display : undefined;
18
+ const collectedStyles = React.useMemo(() => {
19
+ const resultStyles = {};
20
+ Object.entries(props).forEach(([propKey, propValue]) => {
21
+ const possibleStyleAttributes = styleAttributes.styleAttributes.filter((styleAttribute) => propKey.startsWith(styleAttribute));
22
+ const currentStyleAttribute = maxBy(possibleStyleAttributes, (styleAttribute) => styleAttribute.length);
23
+ if (!currentStyleAttribute) {
24
+ return;
25
+ }
26
+ const targetElementKey = propKey.replace(currentStyleAttribute, '');
27
+ const targetElementResultKey = camelCase(targetElementKey) || 'styles';
28
+ if (!resultStyles[targetElementResultKey]) {
29
+ resultStyles[targetElementResultKey] = {};
30
+ }
31
+ if (!propValue) {
32
+ return;
33
+ }
34
+ if (currentStyleAttribute.includes('Horizontal')) {
35
+ const keyLeft = currentStyleAttribute.replace('Horizontal', 'Left');
36
+ const keyRight = currentStyleAttribute.replace('Horizontal', 'Right');
37
+ resultStyles[targetElementResultKey][keyLeft] = propValue;
38
+ resultStyles[targetElementResultKey][keyRight] = propValue;
39
+ }
40
+ else if (currentStyleAttribute.includes('Vertical')) {
41
+ const keyTop = currentStyleAttribute.replace('Vertical', 'Top');
42
+ const keyBottom = currentStyleAttribute.replace('Vertical', 'Bottom');
43
+ resultStyles[targetElementResultKey][keyTop] = propValue;
44
+ resultStyles[targetElementResultKey][keyBottom] =
45
+ propValue;
46
+ }
47
+ else {
48
+ resultStyles[targetElementResultKey][currentStyleAttribute] =
49
+ propValue;
50
+ }
51
+ });
52
+ return resultStyles;
53
+ // "props" object maybe big and frequently changing
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, [display]);
56
+ return collectedStyles;
57
+ }
58
+
59
+ exports.useStyles = useStyles;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var useViewportFix = require('./useViewportFix.js');
4
+ require('react');
5
+
6
+
7
+
8
+ exports.useViewportFix = useViewportFix.useViewportFix;
@@ -1,6 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  const setViewportProperty = () => {
4
+ if (typeof document === 'undefined') {
5
+ return;
6
+ }
4
7
  const vh = window.innerHeight * 0.01;
5
8
  document.documentElement.style.setProperty('--vh', `${vh}px`);
6
9
  };
@@ -0,0 +1,5 @@
1
+ export { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI } from './Notifications.js';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
4
+ import 'uuid';
5
+ import '@itcase/common';
@@ -1,19 +1,13 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { createContext, memo, useMemo, useEffect, useContext } from 'react';
4
- import camelCase from 'lodash/camelCase';
5
- import { useMediaQueries } from '../hooks/useMediaQueries/useMediaQueries.js';
6
- import { setViewportProperty } from '../utils/setViewportProperty.js';
3
+ import { memo, useMemo, useEffect } from 'react';
4
+ import camelCase from 'lodash-es/camelCase';
5
+ import { useMediaQueries } from '../../hooks/useMediaQueries/useMediaQueries.js';
6
+ import { setViewportProperty } from '../../utils/setViewportProperty.js';
7
+ import { UserDeviceContext } from '../UserDeviceContext/UserDeviceContext.js';
8
+ import { getDeviceMainTypeFromFlags } from '../UserDeviceContext/UserDeviceContext.helpers.js';
7
9
  import 'react-responsive';
8
10
 
9
- const UserDeviceContext = createContext({
10
- isMobile: false,
11
- isTablet: false,
12
- isDesktop: false,
13
- deviceCurrentMainType: '',
14
- deviceCurrentType: '',
15
- deviceTypesList: [],
16
- });
17
11
  const UIProvider = memo(function UIProvider(props) {
18
12
  const { userDeviceState = {}, children } = props;
19
13
  /** NOTE:
@@ -25,10 +19,11 @@ const UIProvider = memo(function UIProvider(props) {
25
19
  */
26
20
  const allDevicesTypes = useMediaQueries(userDeviceState);
27
21
  const { isMobile, isTablet, isDesktop, ...fullNamedDeviceTypes } = allDevicesTypes;
28
- const deviceCurrentMainType = (isMobile && 'mobile') ||
29
- (isTablet && 'tablet') ||
30
- (isDesktop && 'desktop') ||
31
- '';
22
+ const deviceCurrentMainType = getDeviceMainTypeFromFlags({
23
+ isMobile: isMobile,
24
+ isTablet: isTablet,
25
+ isDesktop: isDesktop,
26
+ });
32
27
  const [deviceCurrentType, deviceTypesList] = useMemo(() => {
33
28
  const deviceTypesList = Object.keys(allDevicesTypes).map((key) => camelCase(key.replace('is', '')));
34
29
  // In same time "allDevicesTypes" can contain "isMobile" and "isMobileLarge" as true
@@ -57,17 +52,13 @@ const UIProvider = memo(function UIProvider(props) {
57
52
  deviceTypesList,
58
53
  ]);
59
54
  useEffect(() => {
55
+ if (typeof document === 'undefined') {
56
+ return;
57
+ }
60
58
  setViewportProperty();
61
59
  window.addEventListener('resize', setViewportProperty);
62
60
  }, []);
63
61
  return (jsx(UserDeviceContext.Provider, { value: deviceContextState, children: children }));
64
62
  });
65
- function useUserDeviceContext() {
66
- const context = useContext(UserDeviceContext);
67
- if (!context) {
68
- throw new Error('useUserDeviceContext is not defined');
69
- }
70
- return context;
71
- }
72
63
 
73
- export { UIProvider, useUserDeviceContext };
64
+ export { UIProvider };
@@ -0,0 +1,9 @@
1
+ export { UIProvider } from './UIProvider.js';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
4
+ import 'lodash-es/camelCase';
5
+ import '../../hooks/useMediaQueries/useMediaQueries.js';
6
+ import 'react-responsive';
7
+ import '../../utils/setViewportProperty.js';
8
+ import '../UserDeviceContext/UserDeviceContext.js';
9
+ import '../UserDeviceContext/UserDeviceContext.helpers.js';
@@ -0,0 +1,18 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { memo } from 'react';
3
+ import { UserDeviceContext } from '../UserDeviceContext/UserDeviceContext.js';
4
+
5
+ const appUserDeviceState = {
6
+ isMobile: true,
7
+ isTablet: false,
8
+ isDesktop: false,
9
+ deviceCurrentMainType: 'mobile',
10
+ deviceCurrentType: 'mobile',
11
+ deviceTypesList: ['mobile'],
12
+ };
13
+ const UIProviderApp = memo(function UIProviderApp(props) {
14
+ const { children } = props;
15
+ return (jsx(UserDeviceContext.Provider, { value: appUserDeviceState, children: children }));
16
+ });
17
+
18
+ export { UIProviderApp };
@@ -0,0 +1,4 @@
1
+ export { useUserDeviceContext } from '../UserDeviceContext/UserDeviceContext.js';
2
+ export { UIProviderApp } from './UIProviderApp.js';
3
+ import 'react';
4
+ import 'react/jsx-runtime';
@@ -0,0 +1,3 @@
1
+ export { UrlAssetPrefixContext, UrlAssetPrefixProvider } from './UrlAssetPrefix.js';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
@@ -0,0 +1,14 @@
1
+ function getDeviceMainTypeFromFlags(userDeviceState) {
2
+ if (userDeviceState?.isMobile) {
3
+ return 'mobile';
4
+ }
5
+ if (userDeviceState?.isTablet) {
6
+ return 'tablet';
7
+ }
8
+ if (userDeviceState?.isDesktop) {
9
+ return 'desktop';
10
+ }
11
+ return '';
12
+ }
13
+
14
+ export { getDeviceMainTypeFromFlags };
@@ -0,0 +1,20 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ const defaultUserDeviceState = {
4
+ isMobile: false,
5
+ isTablet: false,
6
+ isDesktop: false,
7
+ deviceCurrentMainType: '',
8
+ deviceCurrentType: '',
9
+ deviceTypesList: [],
10
+ };
11
+ const UserDeviceContext = createContext(defaultUserDeviceState);
12
+ function useUserDeviceContext() {
13
+ const context = useContext(UserDeviceContext);
14
+ if (!context) {
15
+ throw new Error('useUserDeviceContext is not defined');
16
+ }
17
+ return context;
18
+ }
19
+
20
+ export { UserDeviceContext, defaultUserDeviceState, useUserDeviceContext };
@@ -0,0 +1,3 @@
1
+ export { UserDeviceContext, defaultUserDeviceState, useUserDeviceContext } from './UserDeviceContext.js';
2
+ export { getDeviceMainTypeFromFlags } from './UserDeviceContext.helpers.js';
3
+ import 'react';
@@ -1,11 +1,4 @@
1
- export { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI } from './Notifications.js';
2
- export { UIProvider, useUserDeviceContext } from './UIContext.js';
3
- export { UrlAssetPrefixContext, UrlAssetPrefixProvider } from './UrlAssetPrefix.js';
4
- import 'react/jsx-runtime';
1
+ export { useUserDeviceContext } from './UserDeviceContext/UserDeviceContext.js';
2
+ export { UIProviderApp } from './UIProviderApp/UIProviderApp.js';
5
3
  import 'react';
6
- import 'uuid';
7
- import '@itcase/common';
8
- import 'lodash/camelCase';
9
- import '../hooks/useMediaQueries/useMediaQueries.js';
10
- import 'react-responsive';
11
- import '../utils/setViewportProperty.js';
4
+ import 'react/jsx-runtime';
@@ -0,0 +1,13 @@
1
+ export { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI } from './Notifications/Notifications.js';
2
+ export { UIProvider } from './UIProvider/UIProvider.js';
3
+ export { UrlAssetPrefixContext, UrlAssetPrefixProvider } from './UrlAssetPrefix/UrlAssetPrefix.js';
4
+ export { useUserDeviceContext } from './UserDeviceContext/UserDeviceContext.js';
5
+ import 'react/jsx-runtime';
6
+ import 'react';
7
+ import 'uuid';
8
+ import '@itcase/common';
9
+ import 'lodash-es/camelCase';
10
+ import '../hooks/useMediaQueries/useMediaQueries.js';
11
+ import 'react-responsive';
12
+ import '../utils/setViewportProperty.js';
13
+ import './UserDeviceContext/UserDeviceContext.helpers.js';
package/dist/hoc/index.js CHANGED
@@ -2,4 +2,4 @@ export { urlWithAssetPrefix } from './urlWithAssetPrefix.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import '@itcase/common';
5
- import '../context/UrlAssetPrefix.js';
5
+ import '../context/UrlAssetPrefix/UrlAssetPrefix.js';
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import React, { useContext } from 'react';
3
3
  import { formatURL } from '@itcase/common';
4
- import { UrlAssetPrefixContext } from '../context/UrlAssetPrefix.js';
4
+ import { UrlAssetPrefixContext } from '../context/UrlAssetPrefix/UrlAssetPrefix.js';
5
5
 
6
6
  const urlPropsList = ['src', 'imageSrc', 'svgSrc', 'placeholderUrl'];
7
7
  /**
@@ -1,25 +1,19 @@
1
1
  export { useActiveClasses } from './useActiveClasses/useActiveClasses.js';
2
2
  export { useAppearanceConfig } from './useAppearanceConfig/useAppearanceConfig.js';
3
3
  export { useDevicePropsGenerator } from './useDevicePropsGenerator/useDevicePropsGenerator.js';
4
- export { useDeviceTargetClass } from './useDeviceTargetClass.js';
4
+ export { useDeviceTargetClass } from './useDeviceTargetClass/useDeviceTargetClass.js';
5
5
  export { useMediaQueries } from './useMediaQueries/useMediaQueries.js';
6
6
  export { styleAttributes } from './useStyles/styleAttributes.js';
7
7
  export { getStyleAttributeKey } from './useStyles/styleAttributes.helpers.js';
8
8
  export { useStyles } from './useStyles/useStyles.js';
9
- export { useViewportFix } from './useViewportFix.js';
9
+ export { useViewportFix } from './useViewportFix/useViewportFix.js';
10
10
  import 'clsx';
11
11
  import './useActiveClasses/useActiveClasses.helpers.js';
12
12
  import 'react';
13
- import 'lodash/camelCase';
14
- import 'lodash/castArray';
15
- import 'lodash/upperFirst';
16
- import '../context/Notifications.js';
17
- import 'react/jsx-runtime';
18
- import 'uuid';
19
- import '@itcase/common';
20
- import '../context/UIContext.js';
21
- import '../utils/setViewportProperty.js';
22
- import '../context/UrlAssetPrefix.js';
23
- import 'lodash/kebabCase';
24
- import 'lodash/maxBy';
13
+ import 'lodash-es/camelCase';
14
+ import 'lodash-es/castArray';
15
+ import 'lodash-es/upperFirst';
16
+ import '../context/UserDeviceContext/UserDeviceContext.js';
17
+ import 'lodash-es/kebabCase';
18
+ import 'lodash-es/maxBy';
25
19
  import 'react-responsive';
@@ -1,18 +1,10 @@
1
1
  export { useDevicePropsGenerator } from './useDevicePropsGenerator.js';
2
2
  import 'react';
3
- import 'lodash/camelCase';
4
- import 'lodash/castArray';
5
- import 'lodash/upperFirst';
6
- import '../../context/Notifications.js';
7
- import 'react/jsx-runtime';
8
- import 'uuid';
9
- import '@itcase/common';
10
- import '../../context/UIContext.js';
11
- import '../useMediaQueries/useMediaQueries.js';
12
- import 'react-responsive';
13
- import '../../utils/setViewportProperty.js';
14
- import '../../context/UrlAssetPrefix.js';
3
+ import 'lodash-es/camelCase';
4
+ import 'lodash-es/castArray';
5
+ import 'lodash-es/upperFirst';
6
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
15
7
  import '../useStyles/styleAttributes.js';
16
8
  import '../useStyles/styleAttributes.helpers.js';
17
- import 'lodash/kebabCase';
18
- import 'lodash/maxBy';
9
+ import 'lodash-es/kebabCase';
10
+ import 'lodash-es/maxBy';
@@ -1,20 +1,12 @@
1
1
  import { useRef, useMemo } from 'react';
2
- import camelCase from 'lodash/camelCase';
3
- import castArray from 'lodash/castArray';
4
- import upperFirst from 'lodash/upperFirst';
5
- import '../../context/Notifications.js';
6
- import { useUserDeviceContext } from '../../context/UIContext.js';
7
- import '../../context/UrlAssetPrefix.js';
2
+ import camelCase from 'lodash-es/camelCase';
3
+ import castArray from 'lodash-es/castArray';
4
+ import upperFirst from 'lodash-es/upperFirst';
5
+ import { useUserDeviceContext } from '../../context/UserDeviceContext/UserDeviceContext.js';
8
6
  import { styleAttributes } from '../useStyles/styleAttributes.js';
9
7
  import { getStyleAttributeKey } from '../useStyles/styleAttributes.helpers.js';
10
- import 'lodash/kebabCase';
11
- import 'lodash/maxBy';
12
- import 'react/jsx-runtime';
13
- import 'uuid';
14
- import '@itcase/common';
15
- import '../useMediaQueries/useMediaQueries.js';
16
- import 'react-responsive';
17
- import '../../utils/setViewportProperty.js';
8
+ import 'lodash-es/kebabCase';
9
+ import 'lodash-es/maxBy';
18
10
 
19
11
  /* eslint-disable react-hooks/immutability */
20
12
  /* eslint-disable react-hooks/refs */
@@ -0,0 +1,4 @@
1
+ export { useDeviceTargetClass } from './useDeviceTargetClass.js';
2
+ import 'react';
3
+ import 'lodash-es/camelCase';
4
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
@@ -0,0 +1,48 @@
1
+ import { useMemo } from 'react';
2
+ import camelCase from 'lodash-es/camelCase';
3
+ import { useUserDeviceContext } from '../../context/UserDeviceContext/UserDeviceContext.js';
4
+
5
+ /** TODO:
6
+ * Hook is still used in "itcase-forms".
7
+ * Need replace with "useDevicePropsGenerator" and delete this.
8
+ */
9
+ function useDeviceTargetClass(componentProps, hookProps) {
10
+ /** Generate a class depending on the user's device.
11
+ *
12
+ * Usage:
13
+ * const sizeClass = useDeviceTargetClass(props, {
14
+ * prefix: 'some-item_size_',
15
+ * propsKey: 'size',
16
+ * })
17
+ * Return: "some-item_size_m" (or "s", or "l", or something else)
18
+ *
19
+ * "componentProps" - "props" from component
20
+ * "hookProps" - special props for generating class
21
+ **/
22
+ const { prefix = '', propsKey, replace = [/([A-Z])/g, '-$1'] } = hookProps;
23
+ const { isMobile, isTablet, isDesktop } = useUserDeviceContext();
24
+ const targetClassValue = useMemo(() => {
25
+ // prettier-ignore
26
+ const deviceCurrentMainType = ((isMobile && 'Mobile') ||
27
+ (isTablet && 'Tablet') ||
28
+ (isDesktop && 'Desktop') ||
29
+ '');
30
+ const valueForDevice = componentProps[`${propsKey}${deviceCurrentMainType}`];
31
+ const valueDefault = componentProps[propsKey];
32
+ return valueForDevice || valueDefault;
33
+ }, [isMobile, isTablet, isDesktop, componentProps, propsKey]);
34
+ const targetClass = useMemo(() => {
35
+ if (!targetClassValue) {
36
+ return null;
37
+ }
38
+ let cleanClassValue = camelCase(String(targetClassValue));
39
+ if (replace) {
40
+ const [searchValue, replaceValue = ''] = replace;
41
+ cleanClassValue = cleanClassValue.replace(searchValue, replaceValue);
42
+ }
43
+ return `${prefix}${cleanClassValue}`.toLowerCase();
44
+ }, [targetClassValue, prefix, replace]);
45
+ return targetClass;
46
+ }
47
+
48
+ export { useDeviceTargetClass };
@@ -2,16 +2,8 @@ export { styleAttributes } from './styleAttributes.js';
2
2
  export { getStyleAttributeKey } from './styleAttributes.helpers.js';
3
3
  export { useStyles } from './useStyles.js';
4
4
  import 'react';
5
- import 'lodash/camelCase';
6
- import 'lodash/kebabCase';
7
- import 'lodash/maxBy';
8
- import 'lodash/upperFirst';
9
- import '../../context/Notifications.js';
10
- import 'react/jsx-runtime';
11
- import 'uuid';
12
- import '@itcase/common';
13
- import '../../context/UIContext.js';
14
- import '../useMediaQueries/useMediaQueries.js';
15
- import 'react-responsive';
16
- import '../../utils/setViewportProperty.js';
17
- import '../../context/UrlAssetPrefix.js';
5
+ import 'lodash-es/camelCase';
6
+ import 'lodash-es/kebabCase';
7
+ import 'lodash-es/maxBy';
8
+ import 'lodash-es/upperFirst';
9
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
@@ -1,19 +1,11 @@
1
1
  import { useMemo } from 'react';
2
- import camelCase from 'lodash/camelCase';
3
- import kebabCase from 'lodash/kebabCase';
4
- import maxBy from 'lodash/maxBy';
5
- import upperFirst from 'lodash/upperFirst';
6
- import '../../context/Notifications.js';
7
- import { useUserDeviceContext } from '../../context/UIContext.js';
8
- import '../../context/UrlAssetPrefix.js';
2
+ import camelCase from 'lodash-es/camelCase';
3
+ import kebabCase from 'lodash-es/kebabCase';
4
+ import maxBy from 'lodash-es/maxBy';
5
+ import upperFirst from 'lodash-es/upperFirst';
6
+ import { useUserDeviceContext } from '../../context/UserDeviceContext/UserDeviceContext.js';
9
7
  import { styleAttributes } from './styleAttributes.js';
10
8
  import { getStyleAttributeKey } from './styleAttributes.helpers.js';
11
- import 'react/jsx-runtime';
12
- import 'uuid';
13
- import '@itcase/common';
14
- import '../useMediaQueries/useMediaQueries.js';
15
- import 'react-responsive';
16
- import '../../utils/setViewportProperty.js';
17
9
 
18
10
  const LAYOUT_STYLE_KEYS = new Set([
19
11
  'alignContent',
@@ -0,0 +1,5 @@
1
+ export { styleAttributes } from './styleAttributes.js';
2
+ export { useStyles } from './useStyles.js';
3
+ import 'react';
4
+ import 'lodash-es/camelCase';
5
+ import 'lodash-es/maxBy';
@@ -0,0 +1,135 @@
1
+ const styleAttributes = [
2
+ /**
3
+ * Layout
4
+ */
5
+ 'alignContent',
6
+ 'alignItems',
7
+ 'alignSelf',
8
+ 'aspectRatio',
9
+ 'border',
10
+ 'borderBottomWidth',
11
+ 'borderEndWidth',
12
+ 'borderLeftWidth',
13
+ 'borderRightWidth',
14
+ 'borderStartWidth',
15
+ 'borderTopWidth',
16
+ 'borderWidth',
17
+ 'bottom',
18
+ 'display',
19
+ 'end',
20
+ 'flex',
21
+ 'flexBasis',
22
+ 'flexDirection',
23
+ 'flexGrow',
24
+ 'flexShrink',
25
+ 'flexWrap',
26
+ 'gap',
27
+ 'rowGap',
28
+ 'columnGap',
29
+ 'columnWidth',
30
+ 'height',
31
+ 'justifyContent',
32
+ 'left',
33
+ 'margin',
34
+ 'marginBottom',
35
+ 'marginEnd',
36
+ 'marginHorizontal',
37
+ 'marginLeft',
38
+ 'marginRight',
39
+ 'marginStart',
40
+ 'marginTop',
41
+ 'marginVertical',
42
+ 'maxHeight',
43
+ 'maxWidth',
44
+ 'minHeight',
45
+ 'minWidth',
46
+ 'overflow',
47
+ 'padding',
48
+ 'paddingBottom',
49
+ 'paddingEnd',
50
+ 'paddingHorizontal',
51
+ 'paddingLeft',
52
+ 'paddingRight',
53
+ 'paddingStart',
54
+ 'paddingTop',
55
+ 'paddingVertical',
56
+ 'position',
57
+ 'right',
58
+ 'start',
59
+ 'top',
60
+ 'width',
61
+ 'zIndex',
62
+ 'order',
63
+ /**
64
+ * Shadow
65
+ */
66
+ 'elevation',
67
+ 'shadowColor',
68
+ 'shadowOffset',
69
+ 'shadowOpacity',
70
+ 'shadowRadius',
71
+ /**
72
+ * Transform
73
+ */
74
+ 'transform',
75
+ /**
76
+ * View
77
+ */
78
+ 'background',
79
+ 'backgroundColor',
80
+ 'borderBottomColor',
81
+ 'borderBottomEndRadius',
82
+ 'borderBottomLeftRadius',
83
+ 'borderBottomRightRadius',
84
+ 'borderBottomStartRadius',
85
+ 'borderColor',
86
+ 'borderCurve',
87
+ 'borderEndColor',
88
+ 'borderLeftColor',
89
+ 'borderRadius',
90
+ 'borderRightColor',
91
+ 'borderStartColor',
92
+ 'borderStyle',
93
+ 'borderTopColor',
94
+ 'borderTopEndRadius',
95
+ 'borderTopLeftRadius',
96
+ 'borderTopRightRadius',
97
+ 'borderTopStartRadius',
98
+ 'opacity',
99
+ 'cursor',
100
+ /**
101
+ * Text
102
+ */
103
+ 'color',
104
+ 'fontFamily',
105
+ 'fontSize',
106
+ 'fontStyle',
107
+ 'fontVariant',
108
+ 'fontWeight',
109
+ 'letterSpacing',
110
+ 'lineHeight',
111
+ 'textAlign',
112
+ 'textDecorationColor',
113
+ 'textDecorationLine',
114
+ 'textDecorationStyle',
115
+ 'textShadowColor',
116
+ 'textShadowOffset',
117
+ 'textShadowRadius',
118
+ 'textTransform',
119
+ 'verticalAlign',
120
+ 'writingMode',
121
+ 'whiteSpace',
122
+ /**
123
+ * Image
124
+ */
125
+ 'overlayColor',
126
+ 'resizeMode',
127
+ 'tintColor',
128
+ 'objectFit',
129
+ /**
130
+ * Filter
131
+ */
132
+ 'backdropFilter',
133
+ ];
134
+
135
+ export { styleAttributes };