@itcase/ui-core 1.10.77 → 1.10.79

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} +13 -23
  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 +3 -9
  15. package/dist/cjs/hooks/useDevicePropsGenerator/index.js +1 -9
  16. package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +2 -10
  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 +1 -9
  20. package/dist/cjs/hooks/useStyles/useStyles.js +2 -10
  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} +14 -23
  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 +3 -9
  40. package/dist/hooks/useDevicePropsGenerator/index.js +1 -9
  41. package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +1 -9
  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 +1 -9
  45. package/dist/hooks/useStyles/useStyles.js +1 -9
  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 +42 -4
  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/camelCase');
5
+ var maxBy = require('lodash/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';
3
+ import { memo, useMemo, useEffect } from 'react';
4
4
  import camelCase from 'lodash/camelCase';
5
- import { useMediaQueries } from '../hooks/useMediaQueries/useMediaQueries.js';
6
- import { setViewportProperty } from '../utils/setViewportProperty.js';
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/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/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
13
  import 'lodash/camelCase';
14
14
  import 'lodash/castArray';
15
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';
16
+ import '../context/UserDeviceContext/UserDeviceContext.js';
23
17
  import 'lodash/kebabCase';
24
18
  import 'lodash/maxBy';
25
19
  import 'react-responsive';
@@ -3,15 +3,7 @@ import 'react';
3
3
  import 'lodash/camelCase';
4
4
  import 'lodash/castArray';
5
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';
6
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
15
7
  import '../useStyles/styleAttributes.js';
16
8
  import '../useStyles/styleAttributes.helpers.js';
17
9
  import 'lodash/kebabCase';
@@ -2,19 +2,11 @@ import { useRef, useMemo } from 'react';
2
2
  import camelCase from 'lodash/camelCase';
3
3
  import castArray from 'lodash/castArray';
4
4
  import upperFirst from 'lodash/upperFirst';
5
- import '../../context/Notifications.js';
6
- import { useUserDeviceContext } from '../../context/UIContext.js';
7
- import '../../context/UrlAssetPrefix.js';
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
8
  import 'lodash/kebabCase';
11
9
  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';
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/camelCase';
4
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
@@ -0,0 +1,48 @@
1
+ import { useMemo } from 'react';
2
+ import camelCase from 'lodash/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 };
@@ -6,12 +6,4 @@ import 'lodash/camelCase';
6
6
  import 'lodash/kebabCase';
7
7
  import 'lodash/maxBy';
8
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';
9
+ import '../../context/UserDeviceContext/UserDeviceContext.js';
@@ -3,17 +3,9 @@ import camelCase from 'lodash/camelCase';
3
3
  import kebabCase from 'lodash/kebabCase';
4
4
  import maxBy from 'lodash/maxBy';
5
5
  import upperFirst from 'lodash/upperFirst';
6
- import '../../context/Notifications.js';
7
- import { useUserDeviceContext } from '../../context/UIContext.js';
8
- import '../../context/UrlAssetPrefix.js';
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/camelCase';
5
+ import 'lodash/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 };
@@ -0,0 +1,57 @@
1
+ import { useMemo } from 'react';
2
+ import camelCase from 'lodash/camelCase';
3
+ import maxBy from 'lodash/maxBy';
4
+ import { styleAttributes } from './styleAttributes.js';
5
+
6
+ /*
7
+ * rule of prop key:
8
+ *
9
+ * first is style second is target
10
+ * paddingHorizontal GridInnerWrapper
11
+ *
12
+ * paddingHorizontalGridInnerWrapper: 10
13
+ */
14
+ function useStyles(props) {
15
+ const display = 'display' in props ? props.display : undefined;
16
+ const collectedStyles = useMemo(() => {
17
+ const resultStyles = {};
18
+ Object.entries(props).forEach(([propKey, propValue]) => {
19
+ const possibleStyleAttributes = styleAttributes.filter((styleAttribute) => propKey.startsWith(styleAttribute));
20
+ const currentStyleAttribute = maxBy(possibleStyleAttributes, (styleAttribute) => styleAttribute.length);
21
+ if (!currentStyleAttribute) {
22
+ return;
23
+ }
24
+ const targetElementKey = propKey.replace(currentStyleAttribute, '');
25
+ const targetElementResultKey = camelCase(targetElementKey) || 'styles';
26
+ if (!resultStyles[targetElementResultKey]) {
27
+ resultStyles[targetElementResultKey] = {};
28
+ }
29
+ if (!propValue) {
30
+ return;
31
+ }
32
+ if (currentStyleAttribute.includes('Horizontal')) {
33
+ const keyLeft = currentStyleAttribute.replace('Horizontal', 'Left');
34
+ const keyRight = currentStyleAttribute.replace('Horizontal', 'Right');
35
+ resultStyles[targetElementResultKey][keyLeft] = propValue;
36
+ resultStyles[targetElementResultKey][keyRight] = propValue;
37
+ }
38
+ else if (currentStyleAttribute.includes('Vertical')) {
39
+ const keyTop = currentStyleAttribute.replace('Vertical', 'Top');
40
+ const keyBottom = currentStyleAttribute.replace('Vertical', 'Bottom');
41
+ resultStyles[targetElementResultKey][keyTop] = propValue;
42
+ resultStyles[targetElementResultKey][keyBottom] =
43
+ propValue;
44
+ }
45
+ else {
46
+ resultStyles[targetElementResultKey][currentStyleAttribute] =
47
+ propValue;
48
+ }
49
+ });
50
+ return resultStyles;
51
+ // "props" object maybe big and frequently changing
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, [display]);
54
+ return collectedStyles;
55
+ }
56
+
57
+ export { useStyles };
@@ -0,0 +1,2 @@
1
+ export { useViewportFix } from './useViewportFix.js';
2
+ import 'react';
@@ -199,4 +199,4 @@ const componentConfig: ComponentConfig = {
199
199
  2. Tablet (от `768px` до `960px`)
200
200
  3. Desktop (от `960px` до `1920px`)
201
201
 
202
- Подробнее об этом можно узнать в `src/context/UIContext.tsx`, ознакомиться с размерами для (`Mobile`, `Tablet`, `Desktop`) можно в `../../hooks/useMediaQueries/mediaQueries.json`
202
+ Подробнее об этом можно узнать в `src/context/UIProvider/UIProvider.tsx`, ознакомиться с размерами для (`Mobile`, `Tablet`, `Desktop`) можно в `../../hooks/useMediaQueries/mediaQueries.json`
@@ -0,0 +1,4 @@
1
+ import { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI } from './Notifications';
2
+ import type { CreatedNotification, Notification, NotificationAppearance, NotificationsProviderProps } from './Notifications.interface';
3
+ export { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI, };
4
+ export type { CreatedNotification, Notification, NotificationAppearance, NotificationsProviderProps, };