@nyris/nyris-webapp 0.3.39 → 0.3.40

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 (48) hide show
  1. package/build/asset-manifest.json +16 -13
  2. package/build/index.html +1 -1
  3. package/build/{precache-manifest.3b5a3a7e1d0fa75fd54cc6ebaf64d225.js → precache-manifest.ad1e72495167d7e9d93f00c47916ab94.js} +22 -10
  4. package/build/service-worker.js +1 -1
  5. package/build/static/css/main.86d40309.chunk.css +2 -0
  6. package/build/static/css/main.86d40309.chunk.css.map +1 -0
  7. package/build/static/js/2.1e5f374f.chunk.js +3 -0
  8. package/build/static/js/2.1e5f374f.chunk.js.map +1 -0
  9. package/build/static/js/main.1532f80b.chunk.js +3 -0
  10. package/build/static/js/main.1532f80b.chunk.js.map +1 -0
  11. package/build/static/media/arrow_down.c1b611db.svg +3 -0
  12. package/build/static/media/arrow_up.fcd6b144.svg +3 -0
  13. package/build/static/media/trash.1624780d.svg +3 -0
  14. package/package.json +3 -3
  15. package/src/App.tsx +14 -14
  16. package/src/common/assets/icons/arrow_down.svg +3 -0
  17. package/src/common/assets/icons/arrow_up.svg +3 -0
  18. package/src/common/assets/icons/trash.svg +3 -0
  19. package/src/components/AppMobile.tsx +1 -0
  20. package/src/components/CadenasLoading.tsx +4 -3
  21. package/src/components/DragDropFile.tsx +8 -8
  22. package/src/components/HeaderMobile.tsx +11 -5
  23. package/src/components/ImageCaptureHelpModal.tsx +9 -4
  24. package/src/components/ImagePreviewMobile.tsx +230 -43
  25. package/src/components/Inquiry/InquiryBanner.tsx +1 -1
  26. package/src/components/Layout.tsx +35 -3
  27. package/src/components/Loading.tsx +69 -0
  28. package/src/components/PanelResult/index.tsx +6 -2
  29. package/src/components/ProductDetailView.tsx +2 -2
  30. package/src/components/ProductList/index.tsx +4 -2
  31. package/src/components/appMobile.scss +4 -28
  32. package/src/components/common.scss +68 -3
  33. package/src/components/drawer/cameraCustom.tsx +2 -2
  34. package/src/components/input/inputSearch.tsx +3 -3
  35. package/src/components/results/ItemResult.tsx +2 -2
  36. package/src/components/rfq/RfqBanner.tsx +2 -2
  37. package/src/page/landingPage/AppMD.tsx +11 -10
  38. package/src/page/landingPage/common.scss +5 -81
  39. package/src/page/result/index.tsx +1 -1
  40. package/src/translations.ts +59 -8
  41. package/build/static/css/main.37f029a6.chunk.css +0 -2
  42. package/build/static/css/main.37f029a6.chunk.css.map +0 -1
  43. package/build/static/js/2.38a0d15b.chunk.js +0 -3
  44. package/build/static/js/2.38a0d15b.chunk.js.map +0 -1
  45. package/build/static/js/main.263e0030.chunk.js +0 -3
  46. package/build/static/js/main.263e0030.chunk.js.map +0 -1
  47. /package/build/static/js/{2.38a0d15b.chunk.js.LICENSE.txt → 2.1e5f374f.chunk.js.LICENSE.txt} +0 -0
  48. /package/build/static/js/{main.263e0030.chunk.js.LICENSE.txt → main.1532f80b.chunk.js.LICENSE.txt} +0 -0
@@ -22,6 +22,10 @@ import { createSessionByApi } from 'services/session';
22
22
  import { isUndefined } from 'lodash';
23
23
  import AppMobile from './AppMobile';
24
24
  import jQuery from 'jquery';
25
+ import Loading from './Loading';
26
+ import i18n from 'i18next';
27
+ import { initReactI18next } from 'react-i18next';
28
+ import { translations } from 'translations';
25
29
 
26
30
  declare var psol: any;
27
31
 
@@ -44,6 +48,15 @@ jQuery(document).ready(function () {
44
48
  psol.core.setServiceBaseUrl('https://webapi.partcommunity.com');
45
49
  });
46
50
 
51
+ i18n.use(initReactI18next).init({
52
+ resources: translations,
53
+ fallbackLng: 'en',
54
+ interpolation: {
55
+ escapeValue: false,
56
+ },
57
+ returnNull: false,
58
+ });
59
+
47
60
  function Layout({ children }: ReactNode): JSX.Element {
48
61
  const dispatch = useAppDispatch();
49
62
  const { settings, search } = useAppSelector<AppState>((state: any) => state);
@@ -55,6 +68,9 @@ function Layout({ children }: ReactNode): JSX.Element {
55
68
  let isShowHeaderMobile =
56
69
  (isMobile && history.location?.pathname === '/result') ||
57
70
  history.location?.pathname === '/';
71
+ const language = useAppSelector(state => state.settings.language);
72
+
73
+ i18n.changeLanguage(language);
58
74
 
59
75
  useEffect(() => {
60
76
  const createSession = async () => {
@@ -114,13 +130,29 @@ function Layout({ children }: ReactNode): JSX.Element {
114
130
  };
115
131
  }, [apiKey, appId, indexName]);
116
132
 
133
+ // First we get the viewport height and we multiple it by 1% to get a value for a vh unit
134
+ let vh = window.innerHeight * 0.01;
135
+ // Then we set the value in the --vh custom property to the root of the document
136
+ document.documentElement.style.setProperty('--vh', `${vh}px`);
137
+
138
+ useEffect(() => {
139
+ const handleResize = () => {
140
+ let vh = window.innerHeight * 0.01;
141
+ document.documentElement.style.setProperty('--vh', `${vh}px`);
142
+ };
143
+
144
+ window.addEventListener('resize', handleResize);
145
+
146
+ return () => {
147
+ window.removeEventListener('resize', handleResize);
148
+ };
149
+ }, []);
150
+
117
151
  return (
118
152
  <div style={{ position: 'relative' }}>
119
153
  {loadingSearchAlgolia && (
120
154
  <Box className="box-wrap-loading" style={{ zIndex: 99999999 }}>
121
- <Box className="loadingSpinCT" style={{ top: 0, bottom: 0 }}>
122
- <Box className="box-content-spin"></Box>
123
- </Box>
155
+ <Loading />
124
156
  </Box>
125
157
  )}
126
158
  <InstantSearch
@@ -0,0 +1,69 @@
1
+ import { Box } from '@material-ui/core';
2
+ import React from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+
5
+ const LoadingSvg = () => {
6
+ return (
7
+ <svg
8
+ width={150}
9
+ height={150}
10
+ viewBox="0 0 150 150"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ className="loading-spinner"
14
+ >
15
+ <path
16
+ fillRule="evenodd"
17
+ clipRule="evenodd"
18
+ d="M75 150C116.421 150 150 116.421 150 75C150 33.5786 116.421 0 75 0C33.5786 0 0 33.5786 0 75C0 116.421 33.5786 150 75 150ZM75 140.367C111.101 140.367 140.367 111.101 140.367 75.0003C140.367 38.8991 111.101 9.63332 75 9.63332C38.8988 9.63332 9.63304 38.8991 9.63304 75.0003C9.63304 111.101 38.8988 140.367 75 140.367Z"
19
+ fill="url(#paint0_linear_2236_26778)"
20
+ />
21
+ <defs>
22
+ <linearGradient
23
+ id="paint0_linear_2236_26778"
24
+ x1={75}
25
+ y1={0}
26
+ x2={75}
27
+ y2={150}
28
+ gradientUnits="userSpaceOnUse"
29
+ >
30
+ <stop stopColor="#3E36DC" />
31
+ <stop offset={0.916667} stopColor="#1E1F31" />
32
+ </linearGradient>
33
+ </defs>
34
+ </svg>
35
+ );
36
+ };
37
+
38
+ const Loading = () => {
39
+ const { t } = useTranslation();
40
+ return (
41
+ <Box
42
+ className="loadingSpinCT"
43
+ style={{
44
+ top: 0,
45
+ bottom: 0,
46
+ display: 'flex',
47
+ justifyContent: 'center',
48
+ alignItems: 'center',
49
+ }}
50
+ >
51
+ <p
52
+ style={{
53
+ position: 'absolute',
54
+ top: '50%',
55
+ left: '50%',
56
+ transform: 'translate(-50%, -50%)',
57
+ fontSize: 16,
58
+ color: '#fff',
59
+ fontWeight: 300,
60
+ }}
61
+ >
62
+ {t('loading')}
63
+ </p>
64
+ <LoadingSvg />
65
+ </Box>
66
+ );
67
+ };
68
+
69
+ export default Loading;
@@ -14,6 +14,7 @@ import { useAppSelector } from 'Store/Store';
14
14
  import { ExpandablePanelCustom } from './expandable-panel';
15
15
  import { getPanelAttributes, getPanelId } from './refinements';
16
16
  import CloseIcon from '@material-ui/icons/Close';
17
+ import { useTranslation } from 'react-i18next';
17
18
 
18
19
  export type ExpandablePanelProps = CurrentRefinementsProvided & {
19
20
  children: React.ReactNode;
@@ -103,6 +104,7 @@ export default function ExpandablePanelComponent({
103
104
  );
104
105
  const history = useHistory();
105
106
  const isMobile = useMediaQuery({ query: '(max-width: 776px)' });
107
+ const { t } = useTranslation();
106
108
 
107
109
  // Set initial panels value
108
110
  useEffect(() => {
@@ -199,8 +201,10 @@ export default function ExpandablePanelComponent({
199
201
  <IconLabel
200
202
  icon={refinementsPanelsExpanded ? 'remove' : 'add'}
201
203
  label={`${
202
- refinementsPanelsExpanded ? 'Collapse' : 'Expand'
203
- } all`}
204
+ refinementsPanelsExpanded
205
+ ? t('Collapse all')
206
+ : t('Expand all')
207
+ } `}
204
208
  />
205
209
  </Button>
206
210
  </Box>
@@ -347,7 +347,7 @@ function ProductDetailView(props: Props) {
347
347
  )}
348
348
  {(brand || settings.brandName) && (
349
349
  <ProductAttribute
350
- title={'Brand'}
350
+ title={t('Brand')}
351
351
  value={brand || settings.brandName}
352
352
  width={
353
353
  dataItem[settings.field.manufacturerNumber]
@@ -467,7 +467,7 @@ function ProductDetailView(props: Props) {
467
467
  }}
468
468
  onClick={() => setCollapDescription(e => !e)}
469
469
  >
470
- View details
470
+ {t('View details')}
471
471
  {collapDescription ? (
472
472
  <KeyboardArrowUpIcon
473
473
  htmlColor={settings.theme?.secondaryColor}
@@ -2,6 +2,7 @@ import { Box } from '@material-ui/core';
2
2
  import ItemResult from 'components/results/ItemResult';
3
3
  import { groupBy, uniqueId } from 'lodash';
4
4
  import React, { memo, useEffect, useMemo, useState } from 'react';
5
+ import { useTranslation } from 'react-i18next';
5
6
  import { connectStateResults } from 'react-instantsearch-dom';
6
7
  import { useMediaQuery } from 'react-responsive';
7
8
  import { useAppSelector } from 'Store/Store';
@@ -32,6 +33,7 @@ function ProductListComponent({
32
33
  const [itemShowDefault, setItemShowDefault] = useState<any[]>([]);
33
34
  const [algoliaRequest, setAlgoliaRequest] = useState(false);
34
35
  const isMobile = useMediaQuery({ query: '(max-width: 776px)' });
36
+ const { t } = useTranslation();
35
37
 
36
38
  useEffect(() => {
37
39
  if (isSearchStalled) {
@@ -118,7 +120,7 @@ function ProductListComponent({
118
120
  if (!requestImage && !search.valueTextSearch.query && !isSearchStalled) {
119
121
  return (
120
122
  <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>
121
- Please upload an image or enter a keyword to search.
123
+ {t('Please upload an image or enter a keyword to search.')}
122
124
  </Box>
123
125
  );
124
126
  }
@@ -130,7 +132,7 @@ function ProductListComponent({
130
132
  ) {
131
133
  return (
132
134
  <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>
133
- No products were found matching your search criteria.
135
+ {t('No products were found matching your search criteria.')}
134
136
  </Box>
135
137
  );
136
138
  }
@@ -444,39 +444,14 @@
444
444
  //TODO: Custom css modal filter
445
445
  @media screen and (max-width: 776px) {
446
446
  .wrap-mobile {
447
- height: 100svh;
447
+ height: 100vh; /* Fallback for browsers that do not support Custom Properties */
448
+ height: calc(var(--vh, 1vh) * 100);
448
449
  background-color: #F3F3F5;
449
450
  display: flex;
450
451
  flex-direction: column;
451
452
 
452
453
  }
453
- .box-filter-mobile {
454
- .MuiBackdrop-root {
455
- background-color: initial !important;
456
- }
457
-
458
- .MuiDrawer-paperAnchorLeft {
459
- width: 100%;
460
- height: calc(100svh - 60px) !important;
461
- bottom: 0px !important;
462
- top: initial !important;
463
- background-color: #fafafa !important;
464
- // box-shadow: none !important;
465
- border-right: 1px solid #4d4646 !important;
466
- // padding: 24px;
467
- ul {
468
- li {
469
- list-style-type: none;
470
454
 
471
- input {
472
- margin-right: 15px;
473
- }
474
- }
475
- }
476
- }
477
-
478
-
479
- }
480
455
 
481
456
  #box-input-search {
482
457
  position: relative;
@@ -504,7 +479,8 @@
504
479
  .modal-togggle-cam {
505
480
  .wrap-camera {
506
481
  position: relative;
507
- height: 100svh;
482
+ height: 100vh;
483
+ height: calc(var(--vh, 1vh) * 100);
508
484
  display: flex;
509
485
  justify-content: center;
510
486
  align-items: center;
@@ -22,10 +22,11 @@
22
22
  padding-bottom: 6px;
23
23
  }
24
24
 
25
- .LoadingSpinner {
25
+ .loading-spinner {
26
26
  animation: spin 3s linear infinite;
27
27
  }
28
28
 
29
+
29
30
  @keyframes spin {
30
31
  from {
31
32
  transform: rotate(0deg);
@@ -35,8 +36,14 @@
35
36
  }
36
37
  }
37
38
 
39
+ .full-height {
40
+ height: 100vh; /* Fallback for browsers that do not support Custom Properties */
41
+ height: calc(var(--vh, 1vh) * 100);
42
+ }
43
+
38
44
  .layout-main-newVersion {
39
- height: 100svh;
45
+ height: 100vh; /* Fallback for browsers that do not support Custom Properties */
46
+ height: calc(var(--vh, 1vh) * 100);
40
47
  display: flex;
41
48
  flex-direction: column;
42
49
  justify-content: space-between;
@@ -63,4 +70,62 @@
63
70
 
64
71
  .d-none {
65
72
  display: none;
66
- }
73
+ }
74
+
75
+ @keyframes slidedown {
76
+ 0% { transform: translateY(0px); }
77
+ 100% { transform: translateY(0); }
78
+ }
79
+
80
+ @keyframes slideup {
81
+ 0% { transform: translateY(40px); }
82
+ 100% { transform: translateY(0); }
83
+ }
84
+
85
+ .slideDown {
86
+ animation: slidedown 1s ease-in-out;
87
+ }
88
+
89
+ .slideUp {
90
+ animation: slideup 0.5s ease-in-out;
91
+ }
92
+
93
+ @keyframes reduceSize {
94
+ from {
95
+ height: 240px;
96
+ width: 240px;
97
+ }
98
+ to {
99
+ height: 80px;
100
+ width: 81px;
101
+ }
102
+ }
103
+
104
+ .shrink-animation{
105
+ animation: reduceSize 0.3s;
106
+ }
107
+
108
+ @keyframes extendSize {
109
+ from {
110
+ height: 80px;
111
+ width: 81px;
112
+ }
113
+ to {
114
+ height: 240px;
115
+ width: 240px;
116
+ }
117
+ }
118
+
119
+ .expand-animation{
120
+ animation: extendSize 0.25s;
121
+ animation-timing-function: linear;
122
+ }
123
+
124
+ .circle-layer{
125
+ position: absolute;
126
+ width: 81px;
127
+ height: 80px;
128
+ clip-path: polygon(100% 50%, 100% 100%, 0px 100%, 0px 0px, 100% 0px, 100% 50%, 80% 50%, 79.85092326096205% 47.0129646021255%, 79.40517463545632% 44.055615704018074%, 78.66718417358422% 41.157344767672875%, 77.64428635611223% 38.346956111759155%, 76.34664720110686% 35.65238064136045%, 74.78716322947984% 33.100398258091346%, 72.98133329356934% 30.716371709403823%, 70.94710454258218% 28.52399452220845%, 68.704694055762% 26.545055525959107%, 66.27638791597278% 24.799222305476857%, 63.686319720594895% 23.303845735655944%, 60.96023073099185% 22.073787540673877%, 58.12521404429015% 21.12127259149964%, 55.20944533000791% 20.455767409633758%, 52.24190280759273% 20.083886084564597%, 49.25207924785782% 20.009324539975513%, 46.26968886057545% 20.232823801994837%, 43.32437198131057% 20.752162634545293%, 40.44540049244947% 21.562179614986047%, 37.66138690608166% 22.654824430649803%, 35.00000000000001% 24.01923788646684%, 32.487689832956306% 25.6418598285243%, 30.149424872094226% 27.506563910967966%, 28.008443845105216% 29.59481786687241%, 26.086024783312336% 31.885867690235667%, 24.40127355103533% 34.35694389861506%, 22.97093396292743% 36.98348782647325%, 21.80922137642275% 39.739395700229935%, 20.927681413127665% 42.597278069291185%, 20.335075213246146% 45.528732014714755%, 20.03729236343233% 48.50462343017907%, 20.03729236343233% 51.495376569820905%, 20.335075213246146% 54.47126798528524%, 20.927681413127658% 57.40272193070879%, 21.809221376422748% 60.26060429977006%, 22.970933962927425% 63.01651217352674%, 24.401273551035327% 65.64305610138494%, 26.08602478331232% 68.11413230976432%, 28.008443845105212% 70.40518213312758%, 30.149424872094208% 72.49343608903202%, 32.487689832956306% 74.3581401714757%, 34.999999999999986% 75.98076211353316%, 37.66138690608165% 77.34517556935019%, 40.44540049244945% 78.43782038501395%, 43.32437198131056% 79.2478373654547%, 46.26968886057543% 79.76717619800516%, 49.25207924785781% 79.99067546002449%, 52.2419028075927% 79.9161139154354%, 55.209445330007895% 79.54423259036625%, 58.12521404429013% 78.87872740850037%, 60.96023073099184% 77.92621245932614%, 63.68631972059489% 76.69615426434406%, 66.27638791597279% 75.20077769452314%, 68.704694055762% 73.4549444740409%, 70.9471045425822% 71.47600547779155%, 72.98133329356934% 69.28362829059618%, 74.78716322947984% 66.89960174190865%, 76.34664720110685% 64.34761935863956%, 77.64428635611223% 61.653043888240845%, 78.66718417358422% 58.84265523232714%, 79.40517463545632% 55.94438429598193%, 79.85092326096203% 52.98703539787452%, 80% 50.00000000000001%);
129
+ background-color: hsla(0, 0%, 0%, 0.3);
130
+ z-index: 1;
131
+ }
@@ -193,14 +193,14 @@ function CameraCustom(props: Props) {
193
193
  justifyContent: 'center',
194
194
  alignItems: 'center',
195
195
  overflow: 'hidden',
196
- height: '100svh',
197
196
  width: '100%',
198
197
  }}
198
+ className="full-height"
199
199
  >
200
200
  <Webcam
201
201
  audio={false}
202
- height={'100svh'}
203
202
  width={'100%'}
203
+ className="full-height"
204
204
  imageSmoothing={true}
205
205
  screenshotFormat="image/jpeg"
206
206
  forceScreenshotSourceSize={true}
@@ -160,7 +160,7 @@ const SearchBox = (props: any) => {
160
160
  title={
161
161
  !isEmpty(preFilter)
162
162
  ? Object.keys(preFilter).join(', ')
163
- : 'Add pre-filter'
163
+ : t('Add or change pre-filter')
164
164
  }
165
165
  placement="top"
166
166
  arrow={true}
@@ -234,7 +234,7 @@ const SearchBox = (props: any) => {
234
234
  <Box
235
235
  style={{
236
236
  border: `2px solid ${settings.theme?.primaryColor}`,
237
- backgroundColor: '#E4E3FF',
237
+ backgroundColor: `${settings.theme?.primaryColor}26`,
238
238
  marginRight: '5px',
239
239
  }}
240
240
  className="box-image-search-thumb"
@@ -246,7 +246,7 @@ const SearchBox = (props: any) => {
246
246
  alt="img_search"
247
247
  />
248
248
  <Tooltip
249
- title="Clear image search"
249
+ title={t('Clear image search')}
250
250
  placement="top"
251
251
  arrow={true}
252
252
  >
@@ -287,7 +287,7 @@ function ItemResult(props: Props) {
287
287
  >
288
288
  {(brand || settings.brandName) && (
289
289
  <ProductAttribute
290
- title={'Brand'}
290
+ title={t('Brand')}
291
291
  value={brand || settings.brandName}
292
292
  padding="4px 8px"
293
293
  width={{ xs: '49%' }}
@@ -296,7 +296,7 @@ function ItemResult(props: Props) {
296
296
 
297
297
  {dataItem[settings.field.manufacturerNumber] && (
298
298
  <ProductAttribute
299
- title={'Mfr. No.'}
299
+ title={t('Mfr. No.')}
300
300
  value={dataItem[settings.field.manufacturerNumber]}
301
301
  padding="4px 8px"
302
302
  width={{ xs: '49%' }}
@@ -10,7 +10,7 @@ function RfqBanner({
10
10
  selectedRegion,
11
11
  setIsRfqModalOpen,
12
12
  }: {
13
- rfqRef: any;
13
+ rfqRef?: any;
14
14
  rfqStatus: any;
15
15
  setIsRfqModalOpen: any;
16
16
  requestImage: any;
@@ -31,7 +31,7 @@ function RfqBanner({
31
31
  alignItems: 'center',
32
32
  }}
33
33
  className="rfq-box"
34
- ref={rfqRef}
34
+ // ref={rfqRef}
35
35
  >
36
36
  <Box
37
37
  style={{
@@ -32,19 +32,20 @@ function AppMD() {
32
32
 
33
33
  return (
34
34
  <Box className={`box-content-main ${isLoading ? 'loading' : ''}`}>
35
- <Box className="box-content_top">
35
+ <Box className="box-content_top" style={{ position: 'relative' }}>
36
36
  {settings.headerText && (
37
- <Box className="fw-700 text-f32 text-dark2">
38
- <h1>{settings.headerText}</h1>
39
- </Box>
37
+ <Box
38
+ className="fw-700 text-f32 text-dark2"
39
+ style={{ position: 'absolute', bottom: '49px' }}
40
+ >
41
+ <h1>{settings.headerText}</h1>
42
+ </Box>
40
43
  )}
41
- <div className="box-input">
42
- <div className="wrap-input-search">
43
- <div style={{ display: 'none' }}>
44
- <CustomInfiniteHits />
45
- </div>
46
- <CustomSearchBox />
44
+ <div className="wrap-input-search">
45
+ <div style={{ display: 'none' }}>
46
+ <CustomInfiniteHits />
47
47
  </div>
48
+ <CustomSearchBox />
48
49
  </div>
49
50
  </Box>
50
51
  <Box className="box-content_bottom">
@@ -217,88 +217,14 @@ button {
217
217
  position: absolute;
218
218
  width: 104px;
219
219
  height: 104px;
220
- top: calc(-104px / 2);
220
+
221
221
  // background: #fff;
222
222
  border-radius: 100%;
223
223
  z-index: 111;
224
224
  left: 0;
225
225
  right: 0;
226
226
  margin: auto;
227
- &::after {
228
- content: 'loading';
229
- position: absolute;
230
- top: 0;
231
- margin: auto;
232
- bottom: 0;
233
- width: 87%;
234
- height: 87%;
235
- display: flex;
236
- justify-content: center;
237
- align-items: center;
238
- z-index: 112;
239
- font-size: 14px !important;
240
- line-height: 38px;
241
- font-weight: 500;
242
- color: #fff;
243
- background: rgba(43, 44, 70, 1);
244
- margin: auto;
245
- left: 0;
246
- right: 0;
247
- bottom: 0;
248
- border-radius: 100%;
249
- }
250
- &::before {
251
- content: '';
252
- }
253
- .box-content-spin {
254
- width: 104px;
255
- height: 104px;
256
- position: absolute;
257
- border-radius: 100%;
258
- animation: spin 2s linear infinite;
259
- &:before {
260
- content: '';
261
- position: absolute;
262
- top: 0;
263
- right: 0;
264
- bottom: 0;
265
- left: 0;
266
- z-index: 0;
267
- border-radius: 100%;
268
- // background: linear-gradient(
269
- // 180deg,
270
- // #3e36dc 0%,
271
- // #e31b5d 44.27%,
272
- // rgba(255, 255, 255, 0) 100%
273
- // );
274
- background: conic-gradient(
275
- from 90deg at 50.46% 50.46%,
276
- #322bb0 -30.73deg,
277
- #3e36dc 111.58deg,
278
- #00ff94 212.7deg,
279
- #322bb0 329.27deg,
280
- #3e36dc 471.58deg
281
- );
282
- box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25);
283
- }
284
- @-webkit-keyframes spin {
285
- 0% {
286
- -webkit-transform: rotate(0deg);
287
- }
288
- 100% {
289
- -webkit-transform: rotate(360deg);
290
- }
291
- }
292
227
 
293
- @keyframes spin {
294
- 0% {
295
- transform: rotate(0deg);
296
- }
297
- 100% {
298
- transform: rotate(360deg);
299
- }
300
- }
301
- }
302
228
  }
303
229
 
304
230
  .box-modal-default {
@@ -786,7 +712,7 @@ button {
786
712
  }
787
713
  display: flex;
788
714
  flex-direction: column;
789
- justify-content: space-between;
715
+ justify-content: center;
790
716
  align-items: center;
791
717
  height: 100%;
792
718
  background: #FAFAFA;
@@ -794,7 +720,6 @@ button {
794
720
 
795
721
  width: 100%;
796
722
  // min-height: calc(100% - 341px);
797
- margin-top: 300px;
798
723
  display: flex;
799
724
  justify-content: center;
800
725
  align-items: center;
@@ -826,10 +751,8 @@ button {
826
751
  }
827
752
  .box-content_bottom {
828
753
  width: 100%;
829
- height: 256px;
830
754
  max-width: 512px;
831
755
  position: relative;
832
- margin-bottom: auto;
833
756
  @media screen and (min-width: 2047px) {
834
757
  position: initial;
835
758
  .loadingSpinCT {
@@ -852,6 +775,7 @@ button {
852
775
  padding-top: 16px;
853
776
  padding-bottom: 16px;
854
777
  color: #CACAD1;
778
+ border: 2px dashed transparent;
855
779
  &:hover {
856
780
  border-radius: 60px;
857
781
  border: 2px dashed #E0E0E0;
@@ -992,7 +916,7 @@ button {
992
916
  }
993
917
  }
994
918
  .box-result {
995
- height: calc(100svh - 148px);
919
+ height: calc(100vh - 148px);
996
920
  @media screen and (max-width: 776px) {
997
921
  height: 100%
998
922
  }
@@ -1556,7 +1480,7 @@ button {
1556
1480
 
1557
1481
  .wrap-main-support-page {
1558
1482
  background-color: #2b2c46;
1559
- min-height: calc(100svh - 32px);
1483
+ min-height: calc(100vh - 32px);
1560
1484
  // max-width: 1280px;
1561
1485
  padding: 40px;
1562
1486
  margin: auto;
@@ -382,7 +382,7 @@ function ResultComponent(props: Props) {
382
382
  settings.preview && 'ml-auto mr-auto'
383
383
  } ${isMobile && 'col-right-result-mobile'}`}
384
384
  style={{
385
- paddingTop: isMobile ? '16px' : '40px',
385
+ paddingTop: isMobile ? '8px' : '40px',
386
386
  overflow: !isMobile ? 'auto' : '',
387
387
  display: 'flex',
388
388
  flexDirection: 'column',