@nyris/nyris-webapp 0.3.57 → 0.3.59

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 (94) hide show
  1. package/build/asset-manifest.json +15 -16
  2. package/build/index.html +1 -1
  3. package/build/js/settings.example.js +1 -0
  4. package/build/static/css/main.cb6e2cfd.css +4 -0
  5. package/build/static/css/main.cb6e2cfd.css.map +1 -0
  6. package/build/static/js/main.a1e24447.js +3 -0
  7. package/build/static/js/{main.5143aa56.js.LICENSE.txt → main.a1e24447.js.LICENSE.txt} +55 -0
  8. package/build/static/js/main.a1e24447.js.map +1 -0
  9. package/build/static/media/camera_simple.bff4194954bbb5f4bc33bd99014a93e8.svg +3 -0
  10. package/build/static/media/collpase.50dae91fff891c46b10dfc281344d0ef.svg +6 -0
  11. package/build/static/media/crop.0676ebbbdc1375ed67e32bba890ce941.svg +3 -0
  12. package/build/static/media/{download.8007f7c72e2080a9ffa96fa63d480dcf.svg → download.a8452bc23334e9f8e53fe1225742d216.svg} +1 -1
  13. package/build/static/media/gallery.15d1f3308921480a8c9d96d9a77c9966.svg +3 -0
  14. package/build/static/media/{logout.b544fcd2969edf431a1e998333119834.svg → logout.bab56bd407f25eb34d6eff401a436ce1.svg} +1 -1
  15. package/build/static/media/next-arrow.b13263d05d107ceb5e99bc4fabb41279.svg +3 -0
  16. package/build/static/media/plus.329672cb2feb55345490589e91481b88.svg +3 -0
  17. package/package.json +8 -5
  18. package/public/index.html +0 -3
  19. package/public/js/settings.example.js +1 -0
  20. package/src/Router.tsx +2 -2
  21. package/src/Store/Store.ts +2 -0
  22. package/src/Store/requestStore.ts +70 -0
  23. package/src/Store/resultStore.ts +25 -0
  24. package/src/Store/search/Search.ts +2 -33
  25. package/src/Store/search/search.initialState.ts +1 -4
  26. package/src/Store/search/types.ts +0 -5
  27. package/src/common/assets/icons/arrow_enter.svg +3 -0
  28. package/src/common/assets/icons/camera_simple.svg +3 -0
  29. package/src/common/assets/icons/collpase.svg +6 -0
  30. package/src/common/assets/icons/crop.svg +3 -0
  31. package/src/common/assets/icons/download.svg +1 -1
  32. package/src/common/assets/icons/gallery.svg +3 -0
  33. package/src/common/assets/icons/logout.svg +1 -1
  34. package/src/common/assets/icons/next-arrow.svg +3 -0
  35. package/src/common/assets/icons/plus.svg +3 -0
  36. package/src/components/CadenasWebViewer.tsx +1 -1
  37. package/src/components/DragDropFile.tsx +17 -77
  38. package/src/components/Experience-visual-search/ExperienceVisualSearch.tsx +47 -71
  39. package/src/components/Feedback.tsx +23 -9
  40. package/src/components/GoBackButton.tsx +15 -18
  41. package/src/components/HeaderMobile.tsx +342 -246
  42. package/src/components/ImageCaptureHelpModal.tsx +63 -65
  43. package/src/components/ImagePreview.tsx +564 -0
  44. package/src/components/Inquiry/InquiryBanner.tsx +1 -1
  45. package/src/components/Inquiry/InquiryModal.tsx +4 -7
  46. package/src/components/Layout.tsx +9 -18
  47. package/src/components/MobileLayout.tsx +51 -0
  48. package/src/components/MobilePostFilter.tsx +9 -3
  49. package/src/components/PanelResult/PostFilterAlgolia.tsx +4 -32
  50. package/src/components/PanelResult/expandable-panel.tsx +3 -16
  51. package/src/components/PanelResult/virtual-state-results.ts +17 -22
  52. package/src/components/ProductDetailView.tsx +1 -1
  53. package/src/components/SidePanel.tsx +7 -97
  54. package/src/components/UploadDisclaimer.tsx +85 -0
  55. package/src/components/appMobile.scss +2 -2
  56. package/src/components/common.scss +57 -27
  57. package/src/components/drawer/cameraCustom.tsx +389 -231
  58. package/src/components/icon-label/icon-label.tsx +1 -1
  59. package/src/components/input/inputSearch.tsx +197 -338
  60. package/src/components/pre-filter/index.tsx +70 -72
  61. package/src/components/results/ItemResult.tsx +34 -17
  62. package/src/components/rfq/RfqBanner.tsx +1 -4
  63. package/src/components/rfq/RfqModal.tsx +10 -10
  64. package/src/hooks/useFilteredRegions.ts +1 -1
  65. package/src/hooks/useImageSearch.ts +189 -0
  66. package/src/hooks/useSearchOrRedirect.ts +84 -0
  67. package/src/index.css +4 -0
  68. package/src/page/landingPage/Home.tsx +49 -0
  69. package/src/page/landingPage/{AppMD.tsx → HomeDesktop.tsx} +7 -34
  70. package/src/page/landingPage/{AppMobile.tsx → HomeMobile.tsx} +8 -37
  71. package/src/page/landingPage/common.scss +9 -1
  72. package/src/page/result/index.tsx +118 -232
  73. package/src/services/Feedback.ts +4 -5
  74. package/src/services/image.ts +19 -0
  75. package/src/types.ts +9 -7
  76. package/src/utils.ts +44 -0
  77. package/tailwind.config.js +54 -0
  78. package/build/static/css/main.67965609.css +0 -2
  79. package/build/static/css/main.67965609.css.map +0 -1
  80. package/build/static/js/main.5143aa56.js +0 -3
  81. package/build/static/js/main.5143aa56.js.map +0 -1
  82. package/build/static/media/arrow_down.f417689ce292978a8292a7f00407fdd5.svg +0 -3
  83. package/build/static/media/arrow_left.73d03a534eaf9b99ab196e0fb67da602.svg +0 -3
  84. package/build/static/media/arrow_right.59a4594a3a1657037537dbae1eee0251.svg +0 -3
  85. package/build/static/media/arrow_up.85dbe70bc51ec32c8894a06499330f14.svg +0 -3
  86. package/build/static/media/home.9ffb65a9c0be8fc5a502ba05cf5f719c.svg +0 -3
  87. package/build/static/media/icon_camera_mobile.6772053c4dfef487255649d2a05cc9d4.svg +0 -3
  88. package/build/static/media/reverse_camera.cee0200b151941cc83c182167a85d667.svg +0 -5
  89. package/src/App.tsx +0 -18
  90. package/src/components/AppMobile.tsx +0 -117
  91. package/src/components/FooterMobile.tsx +0 -230
  92. package/src/components/ImagePreviewMobile.tsx +0 -237
  93. /package/build/static/media/{add.2b72cedb98c4c89c954266d2356c166c.svg → add-rounded.2b72cedb98c4c89c954266d2356c166c.svg} +0 -0
  94. /package/src/common/assets/icons/{add.svg → add-rounded.svg} +0 -0
@@ -0,0 +1,51 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ import { useHistory } from 'react-router-dom';
4
+
5
+ import HeaderMobile from './HeaderMobile';
6
+
7
+ function AppMobile({ children }: { children: ReactNode }) {
8
+ const history = useHistory();
9
+
10
+ return (
11
+ <>
12
+ <div className="wrap-mobile">
13
+ <div className="box-header-mobile-main">
14
+ <HeaderMobile />
15
+ </div>
16
+ <div
17
+ style={{
18
+ display: 'flex',
19
+ flexGrow: 1,
20
+ flexDirection: 'column',
21
+ overflowY: 'auto',
22
+ overflowX: 'hidden',
23
+ height: '100%',
24
+ backgroundColor: '#fff',
25
+ }}
26
+ >
27
+ {children}
28
+ </div>
29
+ {history.location?.pathname === '/' && (
30
+ <footer className="h-11 w-full flex justify-center items-center bg-white">
31
+ <a
32
+ href={'https://www.nyris.io'}
33
+ target="_blank"
34
+ rel="noreferrer"
35
+ className="text-[#AAABB5] md:text-[#2B2C46]"
36
+ >
37
+ <p className="text-xs font-normal text-[#AAABB5] inline">
38
+ Powered by
39
+ </p>
40
+ <p className="text-xs font-bold text-[#AAABB5] inline pl-0.5">
41
+ nyris®
42
+ </p>
43
+ </a>
44
+ </footer>
45
+ )}
46
+ </div>
47
+ </>
48
+ );
49
+ }
50
+
51
+ export default AppMobile;
@@ -9,19 +9,25 @@ import { useAppSelector } from 'Store/Store';
9
9
  interface Props {
10
10
  allSearchResults: any;
11
11
  onApply: any;
12
+ isOpenFilter: boolean;
12
13
  }
13
14
 
14
15
  function MobilePostFilter(props: Props) {
15
16
  const settings = useAppSelector(state => state.settings);
17
+ const { isOpenFilter, allSearchResults, onApply } = props;
18
+
16
19
  return (
17
20
  <>
18
21
  {settings.algolia.enabled && (
19
22
  <PostFilterPanelAlgolia
20
- disjunctiveFacets={props?.allSearchResults?.disjunctiveFacets}
21
- onApply={props.onApply}
23
+ disjunctiveFacets={allSearchResults?.disjunctiveFacets}
24
+ onApply={onApply}
22
25
  />
23
26
  )}
24
- {!settings.algolia.enabled && <PostFilterPanel onApply={props.onApply} />}
27
+
28
+ {!settings.algolia.enabled && isOpenFilter && (
29
+ <PostFilterPanel onApply={onApply} />
30
+ )}
25
31
  </>
26
32
  );
27
33
  }
@@ -3,10 +3,7 @@ import { DynamicWidgetsCT } from 'components/dynamic-widgets/dynamic-widgets';
3
3
  import IconLabel from 'components/icon-label/icon-label';
4
4
  import { atom, useAtom } from 'jotai';
5
5
  import React, { useCallback, useEffect, useMemo } from 'react';
6
- import type {
7
- CurrentRefinementsProvided,
8
- SearchResults,
9
- } from 'react-instantsearch-core';
6
+ import type { CurrentRefinementsProvided } from 'react-instantsearch-core';
10
7
  import { RefinementList } from 'react-instantsearch-dom';
11
8
  import { useMediaQuery } from 'react-responsive';
12
9
  import { useHistory } from 'react-router-dom';
@@ -30,33 +27,6 @@ export type Panels = {
30
27
  [key: string]: boolean;
31
28
  };
32
29
 
33
- export function useHasRefinements(
34
- searchResults: SearchResults,
35
- attributes: string[] = [],
36
- ) {
37
- const facets = useMemo(() => {
38
- const disjunctiveFacets = searchResults?.disjunctiveFacets || [];
39
- const hierarchicalFacets = searchResults?.hierarchicalFacets || [];
40
- return [...disjunctiveFacets, ...hierarchicalFacets];
41
- }, [searchResults]);
42
-
43
- const hasRefinements = useMemo(() => {
44
- let found = !attributes.length;
45
-
46
- facets.forEach(facet => {
47
- attributes?.forEach(attribute => {
48
- if (facet.name === attribute && facet.data) {
49
- found = true;
50
- }
51
- });
52
- });
53
-
54
- return found;
55
- }, [facets, attributes]);
56
-
57
- return hasRefinements;
58
- }
59
-
60
30
  function togglePanels(panels: Panels, val: boolean) {
61
31
  return Object.keys(panels).reduce(
62
32
  (acc, panelKey) => ({ ...acc, [panelKey]: val }),
@@ -229,7 +199,9 @@ export default function PostFilterPanelAlgolia({
229
199
  }}
230
200
  >
231
201
  <Button
232
- onClick={onApply}
202
+ onClick={() => {
203
+ onApply();
204
+ }}
233
205
  style={{
234
206
  width: '32px',
235
207
  height: '32px',
@@ -1,19 +1,13 @@
1
1
  import { Button } from '@material-ui/core';
2
2
  import { ReactComponent as RemoveIcon } from 'common/assets/icons/minus.svg';
3
- import { ReactComponent as AddIcon } from 'common/assets/icons/add.svg';
3
+ import { ReactComponent as AddIcon } from 'common/assets/icons/add-rounded.svg';
4
4
  import classNames from 'classnames';
5
5
  import { Collapse } from 'components/collapse/collapse';
6
- import { useAtomValue } from 'jotai/utils';
7
6
  import type { MouseEventHandler } from 'react';
8
7
  import React, { memo } from 'react';
9
- import type {
10
- CurrentRefinementsProvided,
11
- SearchResults,
12
- } from 'react-instantsearch-core';
8
+ import type { CurrentRefinementsProvided } from 'react-instantsearch-core';
13
9
  import { connectCurrentRefinements } from 'react-instantsearch-dom';
14
10
  import { useMediaQuery } from 'react-responsive';
15
- import { useHasRefinements } from './PostFilterAlgolia';
16
- import { searchResultsAtom } from './virtual-state-results';
17
11
 
18
12
  export type ExpandablePanelProps = CurrentRefinementsProvided & {
19
13
  children: React.ReactNode;
@@ -34,19 +28,12 @@ function ExpandablePanelComponent({
34
28
  items,
35
29
  onToggle,
36
30
  }: ExpandablePanelProps) {
37
- const searchResults = useAtomValue(searchResultsAtom) as SearchResults;
38
- const hasRefinements = useHasRefinements(searchResults, attributes);
39
31
  const isMobile = useMediaQuery({ query: '(max-width: 776px)' });
40
32
 
41
33
  return (
42
34
  <div>
43
35
  <div
44
- className={classNames(
45
- {
46
- hidden: !hasRefinements,
47
- },
48
- className,
49
- )}
36
+ className={classNames(className)}
50
37
  style={{
51
38
  borderTop: !isMobile ? '1px solid #d3d4d8' : '',
52
39
  }}
@@ -1,44 +1,39 @@
1
- import { atom } from 'jotai'
2
- import { selectAtom, useUpdateAtom } from 'jotai/utils'
3
- import { memo, useEffect } from 'react'
4
- import isEqual from 'react-fast-compare'
5
- import type { StateResultsProvided } from 'react-instantsearch-core'
6
- import { connectStateResults } from 'react-instantsearch-dom'
1
+ import { atom } from 'jotai';
2
+ import { selectAtom, useUpdateAtom } from 'jotai/utils';
3
+ import { memo, useEffect } from 'react';
4
+ import isEqual from 'react-fast-compare';
5
+ import type { StateResultsProvided } from 'react-instantsearch-core';
6
+ import { connectStateResults } from 'react-instantsearch-dom';
7
7
 
8
- export type VirtualStateResultsProps = StateResultsProvided
8
+ export type VirtualStateResultsProps = StateResultsProvided;
9
9
 
10
10
  export type VirtualStateResultsAtomValue = Partial<
11
11
  Pick<VirtualStateResultsProps, 'isSearchStalled' | 'searchResults'>
12
- >
12
+ >;
13
13
 
14
14
  export const stateResultsAtom = atom<VirtualStateResultsAtomValue>({
15
15
  searchResults: undefined,
16
16
  isSearchStalled: undefined,
17
- })
17
+ });
18
18
 
19
- export const searchResultsAtom = selectAtom(
20
- stateResultsAtom,
21
- ({ searchResults }) => searchResults,
22
- isEqual
23
- )
24
19
  export const isSearchStalledAtom = selectAtom(
25
20
  stateResultsAtom,
26
- ({ isSearchStalled }) => isSearchStalled
27
- )
21
+ ({ isSearchStalled }) => isSearchStalled,
22
+ );
28
23
 
29
24
  function VirtualStateResultsComponent({
30
25
  searchResults,
31
26
  isSearchStalled,
32
27
  }: VirtualStateResultsProps) {
33
- const setStateResults = useUpdateAtom(stateResultsAtom)
28
+ const setStateResults = useUpdateAtom(stateResultsAtom);
34
29
 
35
30
  useEffect(() => {
36
- setStateResults({ searchResults, isSearchStalled })
37
- }, [setStateResults, searchResults, isSearchStalled])
31
+ setStateResults({ searchResults, isSearchStalled });
32
+ }, [setStateResults, searchResults, isSearchStalled]);
38
33
 
39
- return null
34
+ return null;
40
35
  }
41
36
 
42
37
  export const VirtualStateResults = connectStateResults(
43
- memo(VirtualStateResultsComponent, isEqual)
44
- )
38
+ memo(VirtualStateResultsComponent, isEqual),
39
+ );
@@ -188,7 +188,7 @@ function ProductDetailView(props: Props) {
188
188
  }}
189
189
  />
190
190
  )}
191
- {dataImageCarousel.length > 0 && (
191
+ {dataImageCarousel.length > 0 && !settings.noSimilarSearch && (
192
192
  <Button
193
193
  className={classes.buttonStyleImageSearch}
194
194
  style={{
@@ -1,40 +1,20 @@
1
- import { Button, Typography } from '@material-ui/core';
2
- import { RectCoords } from '@nyris/nyris-api';
3
- import { Preview } from '@nyris/nyris-react-components';
4
- import React, { useState } from 'react';
5
1
  import PostFilterPanel from './PanelResult/PostFilter';
6
2
  import PostFilterPanelAlgolia from './PanelResult/PostFilterAlgolia';
7
3
 
8
- import { useTranslation } from 'react-i18next';
9
4
  import { useAppSelector } from 'Store/Store';
10
- import { ReactComponent as KeyboardArrowRightOutlinedIcon } from 'common/assets/icons/arrow_right.svg';
11
- import { ReactComponent as KeyboardArrowLeftOutlinedIcon } from 'common/assets/icons/arrow_left.svg';
12
5
 
13
- import { DEFAULT_REGION } from '../constants';
14
- import { ReactComponent as IconInfo } from 'common/assets/icons/info-tooltip.svg';
6
+ import ImagePreview from './ImagePreview';
15
7
 
16
8
  function SidePanel({
17
- setImageSelection,
18
- imageSelection,
19
- debouncedOnImageSelectionChange,
20
- filteredRegions,
21
- showAdjustInfoBasedOnConfidence,
22
9
  showAdjustInfo,
23
10
  showPostFilter,
24
11
  disjunctiveFacets,
25
12
  }: {
26
- setImageSelection: any;
27
- imageSelection: any;
28
- debouncedOnImageSelectionChange: any;
29
- filteredRegions: any;
30
- showAdjustInfoBasedOnConfidence: any;
31
13
  showAdjustInfo: any;
32
14
  showPostFilter: any;
33
15
  allSearchResults: any;
34
16
  disjunctiveFacets: any;
35
17
  }) {
36
- const { t } = useTranslation();
37
- const [toggleColLeft, setToggleColLeft] = useState<boolean>(false);
38
18
  const stateGlobal = useAppSelector(state => state);
39
19
  const { search, settings } = stateGlobal;
40
20
 
@@ -42,35 +22,13 @@ function SidePanel({
42
22
 
43
23
  return (
44
24
  <div
45
- className={`wrap-main-col-left ${toggleColLeft ? 'toggle' : ''}`}
25
+ className={`wrap-main-col-left`}
46
26
  style={{
47
27
  display: 'flex',
48
28
  flexDirection: 'column',
49
29
  justifyContent: 'space-between',
50
30
  }}
51
31
  >
52
- <div
53
- className="box-toggle-coloumn"
54
- style={{
55
- right: '0px',
56
- }}
57
- >
58
- <Button
59
- style={{
60
- color: '#55566b',
61
- height: '32px',
62
- }}
63
- onClick={() => {
64
- setToggleColLeft(!toggleColLeft);
65
- }}
66
- >
67
- {toggleColLeft ? (
68
- <KeyboardArrowRightOutlinedIcon />
69
- ) : (
70
- <KeyboardArrowLeftOutlinedIcon />
71
- )}
72
- </Button>
73
- </div>
74
32
  <div>
75
33
  {settings.preview && requestImage && (
76
34
  <div className="col-left">
@@ -79,70 +37,22 @@ function SidePanel({
79
37
  className="preview-item"
80
38
  style={{
81
39
  backgroundColor: 'white',
82
- paddingTop: '32px',
83
40
  width: '100%',
84
41
  }}
85
42
  >
86
43
  <div
87
44
  style={{
88
- display: 'flex',
89
- justifyContent: 'center',
90
- backgroundColor: '#F3F3F5',
91
45
  width: '100%',
92
- paddingTop: '16px',
93
- paddingBottom: '16px',
94
46
  }}
95
47
  >
96
- <div
97
- style={{
98
- width: '288px',
99
- height: 'fit-content',
100
- }}
101
- >
102
- <Preview
103
- key={requestImage?.id}
104
- onSelectionChange={(r: RectCoords) => {
105
- debouncedOnImageSelectionChange(r);
106
- }}
107
- image={requestImage?.canvas}
108
- selection={imageSelection || DEFAULT_REGION}
109
- regions={filteredRegions}
110
- dotColor={'#FBD914'}
111
- minCropWidth={30}
112
- minCropHeight={30}
113
- rounded={true}
114
- />
115
- </div>
48
+ <ImagePreview
49
+ showAdjustInfo={showAdjustInfo}
50
+ isExpanded={true}
51
+ isCameraUploadEnabled={false}
52
+ />
116
53
  </div>
117
54
  </div>
118
55
  </div>
119
- {(showAdjustInfoBasedOnConfidence || showAdjustInfo) && (
120
- <div
121
- style={{
122
- alignItems: 'center',
123
- backgroundColor: '#3E36DC',
124
- display: 'flex',
125
- columnGap: '6px',
126
- padding: '5px',
127
- marginTop: 'auto',
128
- position: 'absolute',
129
- bottom: 0,
130
- borderRadius: '16px',
131
- }}
132
- >
133
- <IconInfo color="white" />
134
- <Typography
135
- style={{
136
- fontSize: 10,
137
- color: '#fff',
138
- }}
139
- >
140
- {showAdjustInfo
141
- ? t('Crop the image for better results')
142
- : 'Crop the image for better results'}
143
- </Typography>
144
- </div>
145
- )}
146
56
  </div>
147
57
  )}
148
58
 
@@ -0,0 +1,85 @@
1
+ import React, { useState } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+
4
+ import { ReactComponent as CloseIcon } from 'common/assets/icons/close.svg';
5
+ import { makeFileHandler } from '@nyris/nyris-react-components';
6
+
7
+ function UploadDisclaimer({
8
+ onClose,
9
+ onContinue,
10
+ isMobile,
11
+ }: {
12
+ onClose: any;
13
+ onContinue: any;
14
+ isMobile: boolean;
15
+ }) {
16
+ const [dontShowAgain, setDontShowAgain] = useState(false);
17
+
18
+ return (
19
+ <>
20
+ {createPortal(
21
+ <div className="fixed top-0 left-0 right-0 bottom-0 flex items-center justify-center bg-black/50 w-screen h-screen z-[9999]">
22
+ <div className="bg-white w-80">
23
+ <div className="p-4">
24
+ <div className="flex justify-between items-center">
25
+ <div className="font-bold text-xl">Replace Current Data?</div>
26
+ <CloseIcon
27
+ className="cursor-pointer"
28
+ width={12}
29
+ height={12}
30
+ onClick={onClose}
31
+ />
32
+ </div>
33
+ <p className="text-sm mt-4">
34
+ Uploading a new image will overwrite your current search
35
+ parameters, text, and results. Are you sure you want to proceed?
36
+ </p>
37
+ <div className="mt-4 gap-x-2 flex">
38
+ <input
39
+ type="checkbox"
40
+ className="w-4"
41
+ onChange={e => {
42
+ setDontShowAgain(e.target.checked);
43
+ }}
44
+ />
45
+ Don't show this again
46
+ </div>
47
+ </div>
48
+ <div className="flex">
49
+ <button
50
+ className="w-1/2 h-16 p-4 text-start text-sm text-white bg-[#2B2C46]"
51
+ onClick={() => onClose()}
52
+ >
53
+ Cancel
54
+ </button>
55
+ <label
56
+ className="w-1/2 h-16 p-4 text-start text-sm text-white bg-[#E31B5D] cursor-pointer"
57
+ htmlFor={!isMobile ? 'nyris__upload-photo' : ''}
58
+ onClick={() => {
59
+ if (isMobile) {
60
+ onContinue({ dontShowAgain });
61
+ }
62
+ }}
63
+ >
64
+ Continue
65
+ </label>
66
+ <input
67
+ type="file"
68
+ name="take-picture"
69
+ id="nyris__upload-photo"
70
+ accept="image/jpeg,image/png,image/webp"
71
+ onChange={makeFileHandler(file =>
72
+ onContinue({ file, dontShowAgain }),
73
+ )}
74
+ style={{ display: 'none' }}
75
+ />
76
+ </div>
77
+ </div>
78
+ </div>,
79
+ document.body,
80
+ )}
81
+ </>
82
+ );
83
+ }
84
+
85
+ export default UploadDisclaimer;
@@ -479,8 +479,8 @@
479
479
  .modal-togggle-cam {
480
480
  .wrap-camera {
481
481
  position: relative;
482
- height: 100vh;
483
- height: calc(var(--vh, 1vh) * 100);
482
+ // height: 100vh;
483
+ // height: calc(var(--vh, 1vh) * 100);
484
484
  display: flex;
485
485
  justify-content: center;
486
486
  align-items: center;
@@ -142,42 +142,49 @@
142
142
  }
143
143
 
144
144
  .feedback-floating {
145
+ position: fixed;
145
146
  height: fit-content;
146
147
  right: 18px;
147
- position: absolute;
148
148
  z-index: 201;
149
149
  display: flex;
150
150
  justify-content: flex-end;
151
+ bottom: 40px;
151
152
 
152
153
  .feedback-section {
153
- position: fixed;
154
- bottom: 40px;
154
+ backdrop-filter: blur(2px);
155
+ border-radius: 24px;
156
+ min-width: 332px;
157
+ min-height: 48px;
158
+
155
159
  @media screen and (max-width: 776px) {
156
- margin-left: 0px;
157
- // height: fit-content !important;
158
- bottom: 125px;
159
-
160
+ min-width: 300px;
161
+ min-height: 40px;
160
162
  }
163
+
161
164
  }
162
165
 
163
166
  @media screen and (max-width: 776px) {
167
+ display: flex;
168
+ width: 100%;
169
+ justify-content: center;
164
170
  margin-left: 0px;
165
171
  height: fit-content !important;
166
- right: 40px;
167
-
172
+ bottom: 80px;
173
+ right: auto;
174
+
168
175
  }
169
176
  }
170
177
 
171
178
 
172
179
  .feedback-wrapper {
173
- background-color: #e4e3fff7;
180
+ // background-color: #e4e3ffed;
174
181
  mix-blend-mode: multiply;
175
182
  border-radius: 24px;
176
183
  display: flex;
177
184
  justify-content: center;
178
185
  align-items: center;
179
- padding-left: 30px;
180
- padding-right: 30px;
186
+ padding-left: 24px;
187
+ padding-right: 8px;
181
188
  padding-top: 8px;
182
189
  padding-bottom: 8px;
183
190
  width: fit-content;
@@ -188,14 +195,11 @@
188
195
  flex-shrink: 0;
189
196
  color: #2B2C46;
190
197
 
191
- &:hover{
192
- background-color: rgb(211, 209, 255, 0.97);
193
-
194
- }
195
-
196
198
  @media screen and (max-width: 776px) {
197
- padding-left: 20px;
198
- padding-right: 20px;
199
+ padding-left: 16px;
200
+ padding-right: 4px;
201
+ padding-right: 6px;
202
+ padding-top: 6px;
199
203
  }
200
204
 
201
205
  p{
@@ -207,13 +211,39 @@
207
211
  }
208
212
 
209
213
  .feedback-icon-wrapper {
210
- width: 34px;
211
- height: 34px;
214
+ min-width: 32px;
215
+ min-height: 32px;
212
216
  border-radius: 100%;
213
217
  display: flex;
214
218
  justify-content: center;
215
219
  align-items: center;
216
220
 
221
+ @media screen and (max-width: 776px) {
222
+ min-width: 28px;
223
+ min-height: 28px;
224
+ }
225
+
226
+ &-close {
227
+ min-width: 32px;
228
+ min-height: 32px;
229
+ border-radius: 100%;
230
+ display: flex;
231
+ justify-content: center;
232
+ align-items: center;
233
+
234
+ @media screen and (max-width: 776px) {
235
+ min-width: 28px;
236
+ min-height: 28px;
237
+ }
238
+
239
+ &:hover {
240
+ background-color: #D3D1FF;
241
+ cursor: pointer;
242
+ }
243
+ }
244
+
245
+
246
+
217
247
  &:hover {
218
248
  background-color: #FFF;
219
249
  box-shadow: 0px 0px 7.04px 0px rgba(0, 0, 0, 0.10);
@@ -244,17 +274,17 @@
244
274
  font-weight: 600;
245
275
  color: #fff;
246
276
  background-color: #2B2C46;
247
- width: 282px;
248
- padding-top: 16px;
249
- padding-bottom: 16px;
277
+ width: 100%;
278
+ height: 100%;
250
279
  text-align: center;
251
280
  border-radius: 26px;
281
+ display: flex;
282
+ justify-content: center;
283
+ align-items: center;
252
284
 
253
285
  @media screen and (max-width: 776px) {
254
286
  font-size: 12px;
255
- padding-top: 8px;
256
- padding-bottom: 8px;
257
- width: 264px;
287
+
258
288
  }
259
289
  }
260
290