@nyris/nyris-webapp 0.3.42 → 0.3.43
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.
- package/build/asset-manifest.json +16 -12
- package/build/index.html +1 -1
- package/build/{precache-manifest.009e864ff0764cf3cf8a9b290c334099.js → precache-manifest.fdacc61375beca4170228eb2951d87b0.js} +26 -10
- package/build/service-worker.js +1 -1
- package/build/static/css/main.1b40c5ff.chunk.css +2 -0
- package/build/static/css/main.1b40c5ff.chunk.css.map +1 -0
- package/build/static/js/2.82ef1cd4.chunk.js +3 -0
- package/build/static/js/2.82ef1cd4.chunk.js.map +1 -0
- package/build/static/js/main.7cdac2fb.chunk.js +3 -0
- package/build/static/js/main.7cdac2fb.chunk.js.map +1 -0
- package/build/static/media/avatar.4c5346ed.svg +3 -0
- package/build/static/media/logout.07b9ef7f.svg +3 -0
- package/build/static/media/powered_by_nyris.e6766baf.svg +3 -0
- package/build/static/media/powered_by_nyris_colored.08d00bae.svg +9 -0
- package/package.json +3 -3
- package/src/Router.tsx +1 -0
- package/src/Store/Store.ts +2 -4
- package/src/Store/constants.ts +6 -0
- package/src/Store/search/Search.ts +10 -3
- package/src/Store/search/types.ts +1 -0
- package/src/common/assets/icons/avatar.svg +3 -0
- package/src/common/assets/icons/logout.svg +3 -0
- package/src/common/assets/images/powered_by_nyris.svg +3 -0
- package/src/common/assets/images/powered_by_nyris_colored.svg +9 -0
- package/src/components/AppMobile.tsx +1 -0
- package/src/components/AuthenticatedRoute.tsx +4 -1
- package/src/components/DragDropFile.tsx +3 -4
- package/src/components/FooterMobile.tsx +137 -24
- package/src/components/Header.tsx +120 -1
- package/src/components/HeaderMobile.tsx +230 -163
- package/src/components/ImagePreviewMobile.tsx +57 -8
- package/src/components/Layout.tsx +10 -53
- package/src/components/NoAccess.tsx +66 -0
- package/src/components/PoweredByNyris.tsx +49 -0
- package/src/components/ProductDetailView.tsx +16 -10
- package/src/components/ProductList/index.tsx +16 -93
- package/src/components/ProductList/useProductList.ts +114 -0
- package/src/components/Provider/InstantSearchProvider.tsx +66 -0
- package/src/components/appMobile.scss +2 -2
- package/src/components/common.scss +8 -1
- package/src/components/drawer/cameraCustom.tsx +3 -3
- package/src/components/input/inputSearch.tsx +86 -17
- package/src/components/pre-filter/index.tsx +58 -7
- package/src/components/results/ItemResult.tsx +6 -1
- package/src/index.tsx +1 -1
- package/src/page/landingPage/common.scss +4 -1
- package/src/page/result/index.tsx +154 -131
- package/src/services/Feedback.ts +1 -1
- package/src/services/image.ts +8 -5
- package/src/types.ts +13 -12
- package/build/static/css/main.86d40309.chunk.css +0 -2
- package/build/static/css/main.86d40309.chunk.css.map +0 -1
- package/build/static/js/2.1757789c.chunk.js +0 -3
- package/build/static/js/2.1757789c.chunk.js.map +0 -1
- package/build/static/js/main.1d184393.chunk.js +0 -3
- package/build/static/js/main.1d184393.chunk.js.map +0 -1
- package/src/Store/auth/Auth.ts +0 -33
- package/src/Store/auth/types.ts +0 -11
- package/src/Store/nyris/Nyris.ts +0 -67
- package/src/Store/nyris/types.ts +0 -11
- package/src/components/Feedback.tsx +0 -91
- /package/build/static/js/{2.1757789c.chunk.js.LICENSE.txt → 2.82ef1cd4.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{main.1d184393.chunk.js.LICENSE.txt → main.7cdac2fb.chunk.js.LICENSE.txt} +0 -0
- /package/src/components/{AuthProvider.tsx → Provider/AuthProvider.tsx} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["common/assets/icons/Union.svg","common/assets/images/no-image.svg","../nyris-react-components/webpack/bootstrap","../webpack:/nyris-react-components/external \"react\"","../webpack:/nyris-react-components/external \"@nyris/nyris-api\"","../nyris-react-components/src/index.tsx","../nyris-react-components/src/components/Preview/Preview.tsx","../webpack:/nyris-react-components/external \"react-konva\"","../webpack:/nyris-react-components/external \"konva\"","../webpack:/nyris-react-components/external \"react-move\"","../nyris-react-components/src/components/Capture/Capture.tsx","../nyris-react-components/src/components/Capture/Capture.css?1149","../nyris-react-components/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","../nyris-react-components/src/components/Capture/Capture.css","../nyris-react-components/node_modules/css-loader/dist/runtime/api.js","../nyris-react-components/src/components/Capture/images/capture.svg","../nyris-react-components/src/components/Capture/images/arrow_back.svg","../nyris-react-components/src/utils.ts","../../utils.ts","common/assets/images/imageCaptureHelp/img-1-1.png","common/assets/images/imageCaptureHelp/img-1-2.png","common/assets/images/imageCaptureHelp/img2-1.png","common/assets/images/imageCaptureHelp/img2-2.png","common/assets/images/imageCaptureHelp/img3-1.png","common/assets/images/imageCaptureHelp/img3-2.png","common/assets/images/imageCaptureHelp/img4-1.png","common/assets/images/imageCaptureHelp/img4-2.png","common/assets/images/imageCaptureHelp/img5-1.png","common/assets/images/imageCaptureHelp/img5-2.png","common/assets/images/imageCaptureHelp/img6-1.png","common/assets/images/imageCaptureHelp/img6-2.png","common/assets/icons/reverse_camera.svg","common/assets/icons/icon_search.svg","common/assets/icons/camera.svg","common/assets/icons/email_share.svg","../../index.ts","serviceWorker.ts","constants.ts","Store/search/search.initialState.ts","Store/search/Search.ts","Store/auth/Auth.ts","utils.ts","Store/nyris/Nyris.ts","Store/Store.ts","Store/constants.ts","common/assets/icons/icon_camera_mobile.svg","services/image.ts","components/drawer/cameraCustom.tsx","common/assets/icons/home.svg","common/assets/icons/info-tooltip.svg","components/FooterMobile.tsx","common/assets/icons/filter_settings.svg","webpack:///./src/common/assets/icons/icon_search.svg?1356","common/assets/icons/filter.svg","hooks/useQuery.ts","components/HeaderMobile.tsx","components/Header.tsx","services/session.ts","components/ImageCaptureHelpModal.tsx","components/dynamic-widgets/dynamic-widgets.tsx","components/icon-label/icon-label.tsx","components/collapse/collapse.tsx","components/PanelResult/virtual-state-results.ts","components/PanelResult/expandable-panel.tsx","components/PanelResult/index.tsx","components/PanelResult/refinements.ts","components/MobilePostFilter.tsx","services/filter.ts","helpers/truncateString.ts","components/pre-filter/index.tsx","components/AppMobile.tsx","components/Loading.tsx","components/Layout.tsx","translations.ts","common/assets/icons/IconUploadDownward.svg","components/DragDropFile.tsx","components/modal/DefaultModal.tsx","components/input/inputSearch.tsx","page/landingPage/AppMD.tsx","common/assets/icons/take_photo.svg","page/landingPage/AppMobile.tsx","App.tsx","components/clear-refinements/clear-refinements.tsx","components/chip/chip.tsx","components/current-refinements/current-refinements.tsx","components/current-refinements/getCurrentRefinement.ts","components/FooterResult.tsx","common/assets/icons/Fill.svg","common/assets/icons/icon_dislike.svg","common/assets/icons/icon_like.svg","common/assets/icons/icon_search_image2.svg","common/assets/icons/3d.svg","components/ShareModal.tsx","helpers/ToastHelper.ts","services/Feedback.ts","common/assets/icons/close.svg","components/carousel/ImagePreviewCarousel.tsx","components/ProductAttribute.tsx","common/assets/icons/download.svg","components/CadenasLoading.tsx","components/CadenasWebViewer.tsx","components/ProductDetailView.tsx","helpers/CommonHelper.ts","components/results/ItemResult.tsx","components/ProductList/index.tsx","common/assets/icons/error.svg","helpers/getCroppedCanvas.ts","components/rfq/RfqModal.tsx","components/SidePanel.tsx","common/assets/icons/arrow_up.svg","hooks/useFilteredRegions.ts","common/assets/icons/arrow_down.svg","common/assets/icons/trash.svg","components/ImagePreviewMobile.tsx","components/rfq/RfqBanner.tsx","components/Inquiry/InquiryModal.tsx","components/Inquiry/InquiryBanner.tsx","page/result/index.tsx","components/AuthenticatedRoute.tsx","page/Login.tsx","page/Logout.tsx","Router.tsx","components/Toaster.tsx","components/AuthProvider.tsx","index.tsx"],"names":["module","exports","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","default","getCursor","state","dotHover","tlHover","trHover","blHover","brHover","rectHover","dotColor","image","maxHeight","maxWidth","minCropHeight","minCropWidth","onSelectionChange","regions","rounded","selection","expandAnimation","w","h","width","height","minWidth","minHeight","x1","x2","y1","y2","cover","Math","max","min","minX","minY","selectionRef","useRef","replaceState","setState","assign","handleDragMove","elem","evt","target","Stage","x","y","newRect","newX","newY","elemWidth","elemHeight","gripPadding","newState","notifySelection","useEffect","current","a","Animation","frame","angleDiff","time","dashOffset","getLayer","start","stop","handleDragMoveRect","handleDragMoveTl","handleDragMoveTr","handleDragMoveBl","handleDragMoveBr","dots","map","region","show","gripSize","cornerRadius","clipFunc","ctx","beginPath","topLeft","topRight","bottomLeft","bottomRight","moveTo","lineTo","arc","PI","closePath","loaded","setLoaded","setTimeout","style","cursor","margin","Layer","Image","ref","to","duration","fill","Rect","stroke","opacity","strokeWidth","draggable","onDragMove","dragBoundFunc","onMouseOver","onMouseOut","dash","Path","data","lineCap","shadowColor","shadowBlur","shadowOffset","shadowOpacity","offsetX","offsetY","NodeGroup","keyAccessor","enter","timing","delay","ds","Circle","onClick","normalizedRect","onTap","radius","position","onCaptureComplete","onCaptureCanceled","useAppText","video","u","stream","setStream","navigator","mediaDevices","getUserMedia","facingMode","then","vid","srcObject","catch","reason","alert","getVideoTracks","getAudioTracks","className","autoPlay","playsInline","type","id","accept","capture","onChange","e","fileInput","files","urlOrBlobToCanvas","file","htmlFor","src","alt","elementToCanvas","api","content","locals","memo","getTarget","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","stylesInDom","getIndexByIdentifier","identifier","result","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","index","obj","css","media","sourceMap","references","updater","push","addStyle","insertStyleElement","createElement","attributes","nonce","keys","forEach","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","join","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","btoa","unescape","encodeURIComponent","JSON","stringify","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","newObj","all","atob","lastIdentifiers","newList","toString","newLastIdentifiers","_i","_index","splice","___CSS_LOADER_API_IMPORT___","useSourceMap","this","base64","cssMapping","sourceMapping","sourceURLs","sources","source","sourceRoot","mediaQuery","dedupe","alreadyImportedModules","_extends","arguments","apply","_ref","_ref2","xlinkHref","transform","_ref3","fillOpacity","SvgCapture","props","SvgArrowBack","makeFileHandler","fh","changeEvent","dragEvent","dataTransfer","location","hostname","match","DEFAULT_REGION","showHits","label","visualSearchHelp","title","description","imageLeft","img1","imageRight","img2","img3","img4","img5","img6","img7","img8","img9","img10","img11","img12","initialState","categoryPredictions","codes","configureFilter","errorMessage","fetchingRegions","fetchingResults","filterOptions","filters","imageThumbSearchInput","isShowModalDetailItemMobile","preFilter","loadingSearchAlgolia","preFilterDropdown","imageCaptureHelpModal","requestImage","undefined","results","resultSearchText","selectedRegion","textSearchInputMobile","valueTextSearch","configure","page","refinementList","searchSlice","createSlice","reducers","setSearchResults","payload","requestId","sessionId","setRegions","setSelectedRegion","setRequestImage","canvas","random","selectionChanged","loadFileSelectRegion","loadingActionResults","loadingActionRegions","searchFileImageNonRegion","changeValueTextSearch","updateResults","reset","onResetRequestImage","setUpdateSession","updateResultChangePosition","setError","setImageSearchInput","updateStatusLoading","updateValueTextSearchMobile","onToggleModalItemDetail","setPreFilter","setPreFilterDropdown","setImageCaptureHelpModal","setFilter","actions","authSlice","accessToken","role","login","logout","jscookie","getUrlParam","RegExp","exec","href","decodeURIComponent","nyrisSlice","showPart","feedbackState","showStart","showCamera","showResults","showFeedback","hideFeedback","feedbackSubmitPositive","feedbackNegative","normalizedSettings","auth0","xOptions","apiKey","preview","jpegQuality","baseUrl","instantRedirectPatterns","theme","templateId","field","ctaLinkField","productName","productDetails","manufacturerNumber","productTag","warehouseNumber","warehouseNumberValue","warehouseShelfNumber","warehouseShelfNumberValue","warehouseStock","warehouseStockValue","settings","_path","combineReducers","auth","Auth","search","Search","nyris","Nyris","store","configureStore","reducer","devTools","process","useAppDispatch","useDispatch","useAppSelector","useSelector","_excluded","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","svgRef","viewBox","fillRule","clipRule","ForwardRef","forwardRef","createImage","fileOrUrl","HTMLCanvasElement","getRegionByMaxConfidence","reduce","prev","confidence","findRegions","nyrisApi","NyrisAPI","isEqual","findByImage","cropRect","CameraCustom","isToggle","onToggleModal","webcamRef","useState","setFacingMode","scaleCamera","setScaleCamera","stateGlobal","history","useHistory","dispatch","handleClick","useCallback","prevState","handlerFindImage","pathname","imageConvert","handlerCloseModal","res","preFilterValues","visualSearchFilterKey","values","isEmpty","sku","score","console","log","getInputProps","useDropzone","onDrop","fs","URL","createObjectURL","Box","Drawer","anchor","open","onClose","backgroundColor","fontSize","color","display","justifyContent","alignItems","overflow","audio","imageSmoothing","screenshotFormat","forceScreenshotSourceSize","videoConstraints","aspectRatio","objectFit","screenshotQuality","getScreenshot","imageSrc","xmlns","cx","cy","ReverseCamera","secondaryColor","stopPropagation","IconButton","aria-label","component","borderRadius","padding","enableBackground","FooterMobile","isOpenModalCamera","setOpenModalCamera","paddingLeft","paddingRight","activeClassName","Button","useQuery","useLocation","useMemo","URLSearchParams","HeaderMobile","connectSearchBox","connectStateResults","onToggleFilterMobile","refine","query","searchQuery","containerRefInputMobile","isShowFilter","setShowFilter","searchOrRedirect","debounce","isPostFilterApplied","isApplied","disablePostFilter","postFilterOption","allSearchResults","hits","background","borderBottom","headerColor","lineHeight","appBarLogoUrl","logoWidth","logoHeight","columnGap","preFilterOption","primaryColor","top","left","event","currentTarget","marginRight","border","flexShrink","boxShadow","Input","element","getElementById","inputEventFn","keyboardEvent","blur","addEventListener","removeEventListener","useTranslation","flexGrow","outline","placeholder","Header","httpClient","axios","createSessionByApi","headers","request","method","url","response","session","ImageCaptureHelpModal","handleClose","paddingBottom","paddingTop","fontWeight","flexDirection","rowGap","marginTop","marginBottom","DynamicWidgetsCT","children","enabled","isOpen","setOpen","IconLabel","icon","labelPosition","classNameLabel","tagIcon","setTagIcon","Typography","textTransform","variants","collapsed","shouldReduceMotion","pointerEvents","transitionEnd","expanded","transition","ease","Collapse","isCollapsed","useReducedMotion","motion","div","initial","animate","classNames","custom","stateResultsAtom","atom","searchResults","isSearchStalled","searchResultsAtom","selectAtom","setStateResults","useUpdateAtom","ExpandablePanelCustom","connectCurrentRefinements","header","isOpened","onToggle","items","hasRefinements","facets","disjunctiveFacets","hierarchicalFacets","found","facet","attribute","useHasRefinements","useAtomValue","isMobile","useMediaQuery","hidden","aria-expanded","fontFamily","getRefinementPanelId","refinement","getPanelId","widgets","panelId","refinementWidget","getRefinementPanelAttribute","refinementsPanelsExpandedAtom","refinementsPanelsAtom","find","v","set","panels","val","acc","panelKey","WidgetPanel","onToggleMemoized","ExpandablePanelComponent","dynamicWidgets","onApply","refinements","useAtom","setPanels","refinementsPanelsExpanded","setRefinementsPanelsExpanded","prevPanels","isExpanded","RefinementList","translations","noResults","sortBy","widgetsPanels","widget","panelAttributes","getPanelAttributes","onTogglePanelsClick","zIndex","bottom","getFilters","number","searchFilters","settingsNyris","newValue","truncateString","str","num","slice","PreFilterComponent","keyFilterState","resultFilter","setResultFilter","keyFilter","setKeyFilter","isLoading","setLoading","columns","setColumns","selectedFilter","getDataFilterDesktop","dataResultFilter","newResult","sort","k","toLocaleUpperCase","finally","filterSearchHandler","onHandlerSubmitData","pickBy","preFilterTitle","justifyItems","IconSearch","flexWrap","gap","marginLeft","columnCount","entries","Tooltip","placement","arrow","disableHoverListener","textOverflow","whiteSpace","Array","_","mb","Skeleton","animation","AppMobile","isOpenFilter","setOpenFilter","isUndefined","overflowY","overflowX","LoadingSvg","gradientUnits","stopColor","offset","Loading","jQuery","ready","psol","core","setUserInfo","server_type","firstname","lastname","userfirm","street","zip","city","country","phone","fax","email","setServiceBaseUrl","i18n","use","initReactI18next","init","resources","en","translation","Brand","loading","de","pt","fallbackLng","interpolation","escapeValue","returnNull","HeaderApp","FooterApp","algolia","appId","indexName","isShowHeaderMobile","language","isAuthenticated","useAuth0","showApp","changeLanguage","createSession","appTitle","classNameBoxVersion","conditionalQuery","searchClient","algoliasearch","initIndex","requests","every","params","endsWith","Promise","resolve","nbHits","nbPages","processingTimeMS","vh","innerHeight","documentElement","setProperty","handleResize","InstantSearch","searchState","onSearchStateChange","onChangeLoading","getRootProps","isDragActive","DefaultModal","openModal","classNameModal","classNameComponentChild","Modal","CustomSearchBox","focusInp","valueInput","setValueInput","isOpenModalFilterDesktop","setToggleModalFilterDesktop","focus","noValidate","action","order","IconCamera","AppMD","acceptTypes","cadSearch","cadExtensions","CustomInfiniteHits","connectInfiniteHits","headerText","mixBlendMode","App","SelectedApp","ClearRefinements","handleButtonClick","disabled","ChipComponent","selected","closeIcon","CurrentRefinements","statusSwitchButton","newItems","setListItems","config","refinementConfig","refinementOptions","getRefinementConfig","category","getCurrentRefinement","li","FooterResult","connectPagination","Grid","container","ShareModal","dataItem","setModalState","main_image_link","Paper","clipboard","writeText","IconEmail","ToastHelper","msg","toast","success","error","feedbackSuccessEpic","sendFeedbackByApi","dismiss","feedbackClickEpic","positions","product_ids","feedbackConversionEpic","feedbackRegionEpic","rect","sendFeedback","ImagePreviewCarousel","imgItem","setSelectedImage","mainRef","thumbsRef","contentWidth","modalWidth","mainOptions","perPage","perMove","pagination","arrows","thumbsOptions","rewind","fixedWidth","fixedHeight","isNavigation","renderSlides","thumbs","slide","React","splide","sync","onActive","root","ProductAttribute","LoadingSpinner","CadenasLoading","favoriteActions3d","CadenasWebViewer","is3dView","setStatus3dView","status3dView","mident","setMident","webViewer3DSettings","$container","$","viewerBackendType","components","WebViewer3D","ViewerBackends","WebGL","devicePixelRatio","radialMenuActions","favoriteActions","showProgressDialog","webglViewerSettings","ColorTL","ColorTR","ColorML","ColorMR","ColorBL","ColorBR","showLogo","logoTexture","logoScaleFactor","logoMixFactor","material","preset","edit","measureGrid","colors","dimensions","grid","unit","helperOptions","gridOn","axisOn","shadeMode","ShadeModes","ShadeAndLines","enableEditableDimensions","showPartNameTooltip","webviewer3d","setApiKey","cadenasAPIKey","ajaxGetOrPost","getServiceBaseUrl","catalog","part","exact","reverseMapResult","loadByVarset","err","showWebViewer","right","DownloadDialog","useStyles","makeStyles","buttonStyle3D","breakpoints","up","buttonStyleImageSearch","ProductDetailView","handlerFeedback","onHandlerModalShare","show3dView","onSearchImage","brand","ctaLink","collapDescription","setCollapDescription","feedback","setFeedback","setIs3dView","dataImageCarousel","setDataImageCarouSel","urlImage","setUrlImage","classes","checkDataItemResult","handlerCheckUrlImage","timeout","img","onerror","onabort","clearTimeout","timer","onload","valueKey","newObject","includes","prepareImageList","cadenas3dWebView","NoImage","warehouseVariant","gridGap","itemIdLabel","xs","md","brandName","align","letterSpacing","IconOpenLink","htmlColor","in","showFeedbackAndShare","shareOption","isHover","handlerGroupItem","isGroupItem","handlerCloseGroup","indexItem","openDetailedView","setOpenDetailedView","isOpenModalShare","setOpenModalShare","collap","preventDefault","wordBreak","ProductList","getUrlToCanvasFile","sendFeedBackAction","moreInfoText","hitGroups","setHitGroups","itemShowDefault","setItemShowDefault","algoliaRequest","setAlgoliaRequest","listHistDefaultGroups","showGroup","setListHitDefault","newArrayShowGroup","newArrayShowItem","groupHits","hit","group_id","uniqueId","groups","groupBy","isGroup","renderItem","hitItem","newItemList","firstArr","secondArr","otherItemsInGroup","shift","textAlign","getCroppedCanvas","crop","originalSize","getElementSize","getRectAspectRatio","scaledSize","getThumbSizeArea","emailRegex","getErrorMessage","status","RfqModal","setIsRfqModalOpen","isRfqModalOpen","setRfqStatus","setEmail","emailValid","setEmailValid","information","setInformation","setFormattedContent","text","emailjs","test","handleRfq","croppedImage","send","email_id","trim","information_text","request_image","toDataURL","alignSelf","TextareaAutosize","SidePanel","setImageSelection","imageSelection","debouncedOnImageSelectionChange","filteredRegions","showAdjustInfoBasedOnConfidence","showAdjustInfo","showPostFilter","toggleColLeft","setToggleColLeft","useFilteredRegions","ImagePreviewMobile","rest","editActive","setEditActive","showShrinkAnimation","setShrinkAnimation","handleArrowClick","onImageRemove","Hidden","sx","mdUp","bgcolor","RfqBanner","rfqStatus","rfqRef","InquiryModal","setIsInquiryModalOpen","isInquiryModalOpen","setInquiryStatus","handleInquiry","prefilter_values","InquiryBanner","inquiryStatus","refBoxResult","productCtaText","executeScroll","scrollIntoView","filterString","setFilterString","setAdjustInfo","setShowAdjustInfoBasedOnConfidence","imageUploadRef","isScrolled","setIsScrolled","findImageByApiNyris","findItemsInSelection","searchRegion","nonEmptyFilter","filterSkus","reverse","f","filterSkusString","alogoliaFilterField","preFilterString","showSidePanel","handleScroll","Configure","showFirst","previous","next","rfq","inquiry","HitsPerPage","defaultRefinement","AuthenticatedRoute","user","loginWithRedirect","Component","render","Login","Logout","logoutParams","returnTo","origin","path","strict","ResultComponent","Toaster","containerStyle","resolveValue","message","AuthProvider","domain","clientId","authorizationParams","redirect_uri","host","createTheme","overrides","MuiTooltip","tooltip","ReactDOM","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.1d184393.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/Union.2545c072.svg\";","module.exports = __webpack_public_path__ + \"static/media/no-image.04b676b3.svg\";"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","module.exports = require(\"react\");","module.exports = require(\"@nyris/nyris-api\");","export {default as Preview} from \"./components/Preview/Preview\";\nexport {default as Capture} from \"./components/Capture/Capture\";\n\nexport * from './utils';\n\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Layer, Stage, Image, Circle, Rect, Path } from \"react-konva\";\nimport { RectCoords, Region, getThumbSizeLongestEdge } from \"@nyris/nyris-api\";\nimport Konva from \"konva\";\nimport { NodeGroup } from \"react-move\";\n\ntype PreviewElem = \"tl\" | \"tr\" | \"bl\" | \"br\" | \"rect\";\ninterface IRegion extends Region {\n show?: boolean;\n}\n\n/** Properties of the Preview Component. */\ninterface PreviewProps {\n /** A canvas to render as the image. */\n image: HTMLCanvasElement;\n /** Initial selection on the image, setting this, won't send a selection change event. */\n selection: RectCoords;\n /** List of regions to display on the image */\n regions: IRegion[];\n /** Handler for changed selection. */\n onSelectionChange?: (r: RectCoords) => void;\n /** Maximal width of the image to display in pixels. */\n maxWidth: number;\n /** Maximal height of the image to display in pixels. */\n maxHeight: number;\n /** Color of the dot, which is rendered center of not selected regions. */\n dotColor: string;\n /** Minimum width of the cropper to display in pixels. */\n minCropWidth: number;\n /** Minimum height of the cropper to display in pixels. */\n minCropHeight: number;\n /** handles if the image corner should be rounded */\n rounded?: boolean;\n /** enables image expand animation*/\n expandAnimation?: boolean;\n}\n\n/** @internal State of the Preview component */\ninterface PreviewState {\n tlHover: boolean;\n trHover: boolean;\n blHover: boolean;\n brHover: boolean;\n dotHover: boolean;\n rectHover: boolean;\n}\n\nconst getCursor = (state: PreviewState) => {\n if (state.dotHover) {\n return \"pointer\";\n }\n if (state.tlHover) {\n return \"nw-resize\";\n }\n if (state.trHover) {\n return \"ne-resize\";\n }\n if (state.blHover) {\n return \"sw-resize\";\n }\n if (state.brHover) {\n return \"se-resize\";\n }\n if (state.rectHover) {\n return \"move\";\n }\n return \"default\";\n};\n\nconst calcNewRect = (\n { x1, x2, y1, y2 }: RectCoords,\n elem: PreviewElem,\n newX: number,\n newY: number,\n elemWidth: number,\n elemHeight: number\n) => {\n switch (elem) {\n case \"rect\":\n return {\n x1: newX,\n y1: newY,\n x2: newX + elemWidth,\n y2: newY + elemHeight,\n };\n case \"tl\":\n return {\n x1: newX,\n y1: newY,\n x2,\n y2,\n };\n case \"tr\":\n return {\n x2: newX,\n y1: newY,\n x1,\n y2,\n };\n case \"bl\":\n return {\n x1: newX,\n y2: newY,\n x2,\n y1,\n };\n case \"br\":\n return {\n x2: newX,\n y2: newY,\n x1,\n y1,\n };\n }\n};\n\nfunction scaleToPreviewPixels(\n width: number,\n height: number,\n { x1, x2, y1, y2 }: RectCoords,\n minWidth?: number,\n minHeight?: number\n) {\n const cover = {\n x1: Math.max(x1 * width, 5),\n x2: Math.min(x2 * width, width - 5),\n y1: Math.max(y1 * height, 5),\n y2: Math.min(y2 * height, height - 5),\n };\n\n if (\n minWidth &&\n minHeight &&\n cover.x2 - cover.x1 < minWidth &&\n cover.y2 - cover.y1 < minHeight\n ) {\n return {\n x1: Math.max(x1 * width - minWidth / 2, 5),\n x2: Math.min(x2 * width + minWidth / 2, width - 5),\n y1: Math.max(y1 * height - minHeight / 2, 5),\n y2: Math.min(y2 * height + minHeight / 2, height - 5),\n };\n }\n\n return cover;\n}\n\n/** The Preview component. */\nconst Preview = ({\n dotColor,\n image,\n maxHeight,\n maxWidth,\n minCropHeight,\n minCropWidth,\n onSelectionChange,\n regions,\n rounded,\n selection,\n expandAnimation,\n}: PreviewProps) => {\n let { w: width, h: height } = getThumbSizeLongestEdge(\n maxWidth,\n maxHeight,\n image.width,\n image.height\n );\n const { x1, y1, x2, y2 } = scaleToPreviewPixels(\n width,\n height,\n selection,\n minCropWidth,\n minCropHeight\n );\n let [minX, minY] = [100, 100];\n\n const handleDragBoundTl = ({ x, y }: { x: number; y: number }) => {\n return {\n x: Math.max(Math.min(x, x2 - minX), 0),\n y: Math.max(Math.min(y, y2 - minY), 0),\n };\n };\n\n const handleDragBoundTr = ({ x, y }: { x: number; y: number }) => {\n return {\n x: Math.min(Math.max(x, x1 + minX), width),\n y: Math.max(Math.min(y, y2 - minY), 0),\n };\n };\n\n const handleDragBoundBl = ({ x, y }: { x: number; y: number }) => {\n return {\n x: Math.max(Math.min(x, x2 - minX), 0),\n y: Math.min(Math.max(y, y1 + minY), height),\n };\n };\n\n const handleDragBoundBr = ({ x, y }: { x: number; y: number }) => {\n return {\n x: Math.min(Math.max(x, x1 + minX), width),\n y: Math.min(Math.max(y, y1 + minY), height),\n };\n };\n\n const handleDragBoundRect = ({ x, y }: { x: number; y: number }) => {\n let elemWidth = x2 - x1 + 5;\n let elemHeight = y2 - y1 + 5;\n return {\n x: Math.max(Math.min(x, width - elemWidth), 5),\n y: Math.max(Math.min(y, height - elemHeight), 5),\n };\n };\n\n const selectionRef = useRef<Konva.Rect>(null);\n const [state, replaceState] = useState<PreviewState>({\n tlHover: false,\n trHover: false,\n blHover: false,\n brHover: false,\n dotHover: false,\n rectHover: false,\n });\n\n const setState = (s: any) => {\n let o = {};\n Object.assign(o, state, s);\n replaceState(o as PreviewState);\n };\n\n const handleDragMove = (\n elem: PreviewElem,\n evt: Konva.KonvaEventObject<DragEvent>\n ) => {\n if (evt.target instanceof Konva.Stage) {\n return;\n }\n\n let { x: newX, y: newY } = evt.target.getAbsolutePosition();\n let { width: elemWidth, height: elemHeight } = evt.target.getSize();\n const modifiedX = newX + (elem !== \"rect\" ? gripPadding : 0);\n const modifiedY = newY + (elem !== \"rect\" ? gripPadding : 0);\n\n const newRect = calcNewRect(\n { x1, x2, y1, y2 },\n elem,\n modifiedX,\n modifiedY,\n elemWidth,\n elemHeight\n );\n let newState = {\n x1: newRect.x1 / width,\n x2: newRect.x2 / width,\n y1: newRect.y1 / height,\n y2: newRect.y2 / height,\n };\n\n notifySelection(newState);\n };\n\n // animate selection\n useEffect(() => {\n let speed = 40;\n if (!selectionRef.current) {\n return;\n }\n let a = new Konva.Animation((frame) => {\n if (!frame) {\n return;\n }\n if (!selectionRef.current) {\n return;\n }\n let angleDiff = (frame.time * speed) / 1000;\n selectionRef.current.dashOffset(-angleDiff);\n }, selectionRef.current.getLayer());\n a.start();\n\n return () => {\n a && a.stop();\n };\n }, [selectionRef]);\n\n const handleDragMoveRect = handleDragMove.bind(null, \"rect\");\n const handleDragMoveTl = handleDragMove.bind(null, \"tl\");\n const handleDragMoveTr = handleDragMove.bind(null, \"tr\");\n const handleDragMoveBl = handleDragMove.bind(null, \"bl\");\n const handleDragMoveBr = handleDragMove.bind(null, \"br\");\n\n const notifySelection = (r: RectCoords) => {\n if (onSelectionChange) {\n onSelectionChange(r);\n }\n };\n\n if (!image) {\n return null;\n }\n\n const dots = regions.map((region, i) => {\n let { x1, x2, y1, y2 } = region.normalizedRect;\n let x = width * ((x2 - x1) / 2 + x1);\n let y = height * ((y2 - y1) / 2 + y1);\n return {\n // get middle of box and map to pixels\n region,\n key: `${x}-${y}-${i}`,\n x,\n y,\n show: region.show,\n };\n });\n\n let gripSize = 20;\n let gripPadding = gripSize / 2;\n let darkOpacity = 0.3;\n const cornerRadius = [4, 4, 4, 4];\n const clipFunc = (ctx: any) => {\n ctx.beginPath();\n let topLeft = 0;\n let topRight = 0;\n let bottomLeft = 0;\n let bottomRight = 0;\n if (typeof cornerRadius === \"number\" && rounded) {\n topLeft =\n topRight =\n bottomLeft =\n bottomRight =\n Math.min(cornerRadius, width / 2, height / 2);\n } else if (rounded) {\n topLeft = Math.min(cornerRadius[0] || 0, maxWidth / 2, maxHeight / 2);\n topRight = Math.min(cornerRadius[1] || 0, maxWidth / 2, maxHeight / 2);\n bottomRight = Math.min(cornerRadius[2] || 0, maxWidth / 2, maxHeight / 2);\n bottomLeft = Math.min(cornerRadius[3] || 0, maxWidth / 2, maxHeight / 2);\n }\n ctx.moveTo(topLeft, 0);\n ctx.lineTo(maxWidth - topRight, 0);\n ctx.arc(\n maxWidth - topRight,\n topRight,\n topRight,\n (Math.PI * 3) / 2,\n 0,\n false\n );\n ctx.lineTo(maxWidth, maxHeight - bottomRight);\n ctx.arc(\n maxWidth - bottomRight,\n maxHeight - bottomRight,\n bottomRight,\n 0,\n Math.PI / 2,\n false\n );\n ctx.lineTo(bottomLeft, maxHeight);\n ctx.arc(\n bottomLeft,\n maxHeight - bottomLeft,\n bottomLeft,\n Math.PI / 2,\n Math.PI,\n false\n );\n ctx.lineTo(0, topLeft);\n ctx.arc(topLeft, topLeft, topLeft, Math.PI, (Math.PI * 3) / 2, false);\n ctx.closePath();\n };\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n setTimeout(() => {\n setLoaded(true);\n }, 300);\n }, []);\n\n return (\n <Stage\n width={width}\n height={height}\n style={{\n cursor: getCursor(state),\n width: width,\n height: height,\n margin: \"auto\",\n }}\n >\n <Layer key=\"img\" clipFunc={clipFunc}>\n <Image\n image={image}\n width={expandAnimation ? 80 : width}\n height={expandAnimation ? 80 : height}\n ref={(ref) => {\n ref?.to({\n width: width,\n height: height,\n duration: 0.3,\n });\n }}\n fill=\"white\"\n />\n </Layer>\n {loaded && (\n <>\n <Layer key=\"selection\" clipFunc={clipFunc}>\n {/* Selection box */}\n <Rect\n stroke=\"white\"\n opacity={0}\n strokeWidth={0}\n x={x1}\n y={y1}\n width={x2 - x1}\n height={y2 - y1}\n />\n <Rect\n stroke=\"black\"\n draggable={true}\n onDragMove={handleDragMoveRect}\n dragBoundFunc={handleDragBoundRect}\n onMouseOver={() => setState({ rectHover: true })}\n onMouseOut={() => setState({ rectHover: false })}\n opacity={0}\n strokeWidth={2}\n x={x1}\n y={y1}\n width={x2 - x1}\n height={y2 - y1}\n dash={[0, 0]}\n ref={selectionRef}\n />\n\n {/* Dark areas */}\n\n <Rect\n fill=\"black\"\n opacity={darkOpacity}\n x={0}\n y={0}\n width={width}\n height={y1}\n />\n <Rect\n fill=\"black\"\n opacity={darkOpacity}\n x={0}\n y={y2}\n width={width}\n height={height - y2}\n />\n <Rect\n fill=\"black\"\n opacity={darkOpacity}\n x={0}\n y={y1}\n width={x1}\n height={y2 - y1}\n />\n <Rect\n fill=\"black\"\n opacity={darkOpacity}\n x={x2}\n y={y1}\n width={width - x2}\n height={y2 - y1}\n />\n </Layer>\n {/* grips */}\n <Layer>\n {/* top left */}\n <Path\n data=\"M2 18V10C2 5.58172 5.58172 2 10 2H18\"\n stroke={\"white\"}\n strokeWidth={5}\n lineCap=\"round\"\n opacity={1}\n x={x1 - 3}\n y={y1 - 3}\n shadowColor={\"#000000\"}\n shadowBlur={4}\n shadowOffset={{ x: 0, y: 0 }}\n shadowOpacity={0.25}\n />\n <Rect\n draggable={true}\n onDragMove={handleDragMoveTl}\n dragBoundFunc={handleDragBoundTl}\n onMouseOver={() => setState({ tlHover: true })}\n onMouseOut={() => setState({ tlHover: false })}\n opacity={1}\n width={gripSize + gripPadding}\n height={gripSize + gripPadding}\n x={x1 - gripPadding}\n y={y1 - gripPadding}\n />\n {/* top right */}\n <Path\n data=\"M2 2L10 2C14.4183 2 18 5.58172 18 10L18 18\"\n stroke={\"white\"}\n strokeWidth={5}\n lineCap=\"round\"\n opacity={1}\n x={x2 + 3}\n y={y1 - 3}\n offsetX={gripSize}\n shadowColor={\"#000000\"}\n shadowBlur={4}\n shadowOffset={{ x: 0, y: 0 }}\n shadowOpacity={0.25}\n />\n <Rect\n draggable={true}\n onDragMove={handleDragMoveTr}\n dragBoundFunc={handleDragBoundTr}\n onMouseOver={() => setState({ trHover: true })}\n onMouseOut={() => setState({ trHover: false })}\n opacity={1}\n width={gripSize + gripPadding}\n height={gripSize + gripPadding}\n x={x2 - gripPadding}\n y={y1 - gripPadding}\n offsetX={gripSize - gripPadding}\n />\n {/* bottom left */}\n <Path\n data=\"M18 18L10 18C5.58172 18 2 14.4183 2 10L2 2\"\n stroke={\"white\"}\n strokeWidth={5}\n lineCap=\"round\"\n opacity={1}\n x={x1 - 3}\n y={y2 + 3}\n offsetY={gripSize}\n shadowColor={\"#000000\"}\n shadowBlur={4}\n shadowOffset={{ x: 0, y: 0 }}\n shadowOpacity={0.25}\n />\n <Rect\n draggable={true}\n onDragMove={handleDragMoveBl}\n dragBoundFunc={handleDragBoundBl}\n onMouseOver={() => setState({ blHover: true })}\n onMouseOut={() => setState({ blHover: false })}\n opacity={1}\n width={gripSize + gripPadding}\n height={gripSize + gripPadding}\n x={x1 - gripPadding}\n y={y2 - gripPadding}\n offsetY={gripSize - gripPadding}\n />\n {/* bottom right */}\n <Path\n data=\"M18 2L18 10C18 14.4183 14.4183 18 10 18L2 18\"\n stroke={\"white\"}\n strokeWidth={5}\n lineCap=\"round\"\n x={x2 + 3}\n y={y2 + 3}\n opacity={1}\n offsetY={gripSize}\n offsetX={gripSize}\n shadowColor={\"#000000\"}\n shadowBlur={4}\n shadowOffset={{ x: 0, y: 0 }}\n shadowOpacity={0.25}\n />\n <Rect\n opacity={1}\n draggable={true}\n onDragMove={handleDragMoveBr}\n dragBoundFunc={handleDragBoundBr}\n onMouseOver={() => setState({ brHover: true })}\n onMouseOut={() => setState({ brHover: false })}\n x={x2 - gripPadding}\n y={y2 - gripPadding}\n width={gripSize + gripPadding}\n height={gripSize + gripPadding}\n offsetY={gripSize - gripPadding}\n offsetX={gripSize - gripPadding}\n />\n </Layer>\n\n <NodeGroup\n data={dots}\n keyAccessor={(r) => r.key}\n start={(d, i) => ({ opacity: 0, x: -100, y: d.y })}\n enter={(d, i) => ({\n opacity: [1],\n x: [d.x],\n y: d.y,\n timing: { delay: i * 100, duration: 300 },\n })}\n >\n {(ds) => (\n <Layer key=\"dots\">\n {ds.map(({ key, data, state: position }) => (\n <Circle\n onClick={() => {\n notifySelection(data.region.normalizedRect);\n setState({ dotHover: false });\n }}\n onTap={() => {\n notifySelection(data.region.normalizedRect);\n setState({ dotHover: false });\n }}\n onMouseOver={() => setState({ dotHover: true })}\n onMouseOut={() => setState({ dotHover: false })}\n key={key}\n radius={7}\n {...position}\n stroke={dotColor}\n fill=\"white\"\n strokeWidth={5}\n opacity={data.region.show}\n />\n ))}\n </Layer>\n )}\n </NodeGroup>\n </>\n )}\n </Stage>\n );\n};\n\nexport default Preview;\n","module.exports = require(\"react-konva\");","module.exports = require(\"konva\");","module.exports = require(\"react-move\");","import React, {ChangeEvent, useEffect, useRef, useState} from 'react';\nimport './Capture.css';\nimport {urlOrBlobToCanvas, elementToCanvas} from \"@nyris/nyris-api\";\nimport captureSvg from './images/capture.svg';\nimport arrowBackSvg from './images/arrow_back.svg';\n\nexport interface CaptureProps {\n onCaptureComplete: (image: HTMLCanvasElement) => void\n onCaptureCanceled: () => void\n useAppText: string\n}\n\n\nconst Capture = ({onCaptureComplete, onCaptureCanceled, useAppText} : CaptureProps) => {\n const video = useRef<HTMLVideoElement>(null);\n const [stream, setStream] = useState<MediaStream>();\n\n const grabFrame = () => {\n if (video.current) {\n let frame = elementToCanvas(video.current);\n onCaptureComplete(frame);\n }\n };\n\n const onFileSelected = async (e: ChangeEvent) => {\n let fileInput = e.target as HTMLInputElement;\n if (fileInput && fileInput.files) {\n let file = await urlOrBlobToCanvas(fileInput.files[0]);\n onCaptureComplete(file);\n }\n };\n\n useEffect(() => {\n navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: 'environment', // prefers wrong entry on old android: facingMode: ['environment', 'user'],\n width: 640//this.settings.maxWidth,// unsupported on ios {ideal: settings.maxWidth},\n //height: this.settings.maxHeight\n }\n }).then(stream => {\n let vid = video.current;\n if (vid) {\n vid.srcObject = stream;\n setStream(stream);\n }\n }).catch(reason => {\n switch (reason.name) {\n case 'NotFoundError':\n alert('Camera not found. Try with a file instead.');\n break;\n case 'NotAllowedError':\n alert('You have to allow using the camera in order to take pictures. If you are not asked again for permissions, go to site settings and reset permissions there.');\n break;\n default:\n alert(`Sorry, something has gone wrong while enabeling the camera. (${reason})`);\n break;\n }\n });\n }, [video]);\n\n useEffect(() => () => {\n if (!stream) {\n return;\n }\n if (stream.getVideoTracks && stream.getAudioTracks) {\n stream.getVideoTracks().map(track => track.stop());\n stream.getAudioTracks().map(track => track.stop());\n } else {\n ((stream as unknown) as MediaStreamTrack).stop();\n }\n }, [stream]);\n\n return (\n <div className=\"nyris-capture-captureUi\">\n <video autoPlay playsInline ref={video} className=\"nyris-capture-video\"/>\n <input type=\"file\" name=\"file\" id=\"capture_file\" className='nyris-capture-inputFile' accept=\"image/*\"\n capture=\"environment\" onChange={onFileSelected}/>\n <label className=\"nyris-capture-app-button\" htmlFor=\"capture_file\">{useAppText}</label>\n <button className=\"nyris-capture-backBtn\" onClick={onCaptureCanceled}><img src={arrowBackSvg}\n alt=\"back\"\n width=\"72\"/></button>\n <button className=\"nyris-capture-searchBtn\" onClick={grabFrame}><img src={captureSvg}\n alt=\"capture\"/>\n </button>\n </div>\n );\n};\n\n\nexport default Capture;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--6-1!../../../node_modules/postcss-loader/src/index.js!./Capture.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".nyris-capture-app-button {\\n position: fixed;\\n top: 0;\\n right: 0;\\n color: white;\\n margin: 10px;\\n padding: 10px;\\n background-color: rgba(255,255,255,0.3);\\n border-radius: 2px;\\n text-shadow: 1px 1px 3px #000;\\n line-height: 1em;\\n box-shadow: 1px 1px 3px rgba(0, 0, 0,0.5);\\n}\\n\\n.nyris-capture-inputFile {\\n visibility: hidden;\\n}\\n\\n.nyris-capture-captureUi {\\n position: fixed;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n height: 100%;\\n width: 100%;\\n background-color: black;\\n z-index: 10000;\\n}\\n\\n.nyris-capture-video {\\n position: fixed;\\n min-height: 100%;\\n min-width: 100%;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%);\\n width: auto;\\n height: auto;\\n}\\n\\n.nyris-capture-searchBtn {\\n position: fixed;\\n bottom: 0;\\n right: 0;\\n z-index: 10001;\\n left: 50%;\\n transform: translateX(-50%);\\n\\n color: black;\\n background-color: transparent;\\n text-transform: uppercase;\\n border: 0;\\n margin: auto;\\n display: block;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n\\n}\\n\\n.nyris-capture-backBtn {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n z-index: 10001;\\n color: white;\\n background-color: transparent;\\n border: 0;\\n\\n text-transform: uppercase;\\n border-radius: 50%;\\n display: block;\\n padding: 0;\\n font-size: 16px;\\n margin-bottom: 5px;\\n margin-left: 5px;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__a\",\n d: \"M150 540a30 30 0 1160 0 30 30 0 01-60 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__b\",\n d: \"M144 540a36 36 0 1172 0 36 36 0 01-72 0zm36 33.95a33.94 33.94 0 100-67.89 33.94 33.94 0 000 67.89z\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n xlinkHref: \"#capture_svg__a\",\n transform: \"translate(-144 -504)\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n fillOpacity: 0.9,\n xlinkHref: \"#capture_svg__b\",\n opacity: 0.7,\n transform: \"translate(-144 -504)\"\n});\n\nfunction SvgCapture(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 72,\n height: 72\n }, props), _ref, _ref2, _ref3);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA3MiA3MiI+PGRlZnM+PHBhdGggaWQ9IjFoN3JhIiBkPSJNMTUwIDU0MGEzMCAzMCAwIDEgMSA2MCAwIDMwIDMwIDAgMCAxLTYwIDB6Ii8+PHBhdGggaWQ9IjFoN3JiIiBkPSJNMTQ0IDU0MGEzNiAzNiAwIDEgMSA3MiAwIDM2IDM2IDAgMCAxLTcyIDB6bTM2IDMzLjk1YTMzLjk0IDMzLjk0IDAgMSAwIDAtNjcuODkgMzMuOTQgMzMuOTQgMCAwIDAgMCA2Ny44OXoiLz48L2RlZnM+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE0NCAtNTA0KSI+PHVzZSBmaWxsPSIjYzAwIiB4bGluazpocmVmPSIjMWg3cmEiLz48L2c+PGcgb3BhY2l0eT0iLjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNDQgLTUwNCkiPjx1c2UgZmlsbD0iI2MwMCIgZmlsbC1vcGFjaXR5PSIuOSIgeGxpbms6aHJlZj0iIzFoN3JiIi8+PC9nPjwvZz48L3N2Zz4=\";\nexport { SvgCapture as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\",\n fill: \"#fff\"\n});\n\nfunction SvgArrowBack(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KICAgIDxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\";\nexport { SvgArrowBack as ReactComponent };","import {ChangeEvent} from \"react\";\n\nexport type FileHandler = (f: File) => void;\n\nexport const makeFileHandler = (fh: FileHandler) => (e: ChangeEvent | DragEvent) => {\n let file = null;\n\n const changeEvent = e as ChangeEvent;\n if (changeEvent && changeEvent.target) {\n const fileInput = changeEvent.target as HTMLInputElement;\n if (fileInput.files && fileInput.files[0]) {\n file = fileInput.files[0];\n }\n\n // reset input\n if (fileInput.value) {\n fileInput.value = \"\";\n }\n if (file) {\n return fh(file);\n }\n }\n\n const dragEvent = e as DragEvent;\n if (dragEvent) {\n file = (dragEvent.dataTransfer && dragEvent.dataTransfer.files[0]);\n }\n\n if (file) {\n return fh(file);\n }\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blueimp_load_image_1 = __importDefault(require(\"blueimp-load-image\"));\n/**\n * Calculates the center of a [[RectCoords]].\n * @param rect The [[RectCoords]] to calculate the center coordinate from.\n */\nfunction rectCenter(_a) {\n var x1 = _a.x1, x2 = _a.x2, y1 = _a.y1, y2 = _a.y2;\n return [\n ((x2 - x1) / 2 + x1),\n ((y2 - y1) / 2 + y1)\n ];\n}\n/**\n * Calculate distance between two points\n * @param x1 The x coordinate of the first point.\n * @param y1 The y coordinate of the first point.\n * @param x2 The x coordinate of the second point.\n * @param y2 The y coordinate of the second point.\n */\nvar dist2d = function (_a, _b) {\n var x1 = _a[0], y1 = _a[1];\n var x2 = _b[0], y2 = _b[1];\n return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));\n};\n/**\n * Return first `Rect` from list `regions` with center-point which has a maximal distance of `maxDistance` from\n * the center. Otherwise return `defaultRect`\n * @param regions\n * @param maxDistance\n * @param defaultRect\n */\nfunction selectFirstCenteredRegion(regions, maxDistance, defaultRect) {\n var centeredRegion = regions.filter(function (r) {\n var dist = dist2d([0.5, 0.5], rectCenter(r.normalizedRect));\n return dist < maxDistance;\n });\n if (centeredRegion.length === 0) {\n return defaultRect;\n }\n return centeredRegion[0].normalizedRect;\n}\nexports.selectFirstCenteredRegion = selectFirstCenteredRegion;\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nfunction getUrlParam(name) {\n var results = new RegExp(\"[?&]\" + name + \"(=([^&#]*))?(&|$|#)\", 'i')\n .exec(window.location.href);\n if (results && results[2]) { // has value\n console.log('has value', name, results[2]);\n return decodeURIComponent(results[2]);\n }\n return (results && true) // present but without value\n || undefined; // not present\n}\nexports.getUrlParam = getUrlParam;\n/**\n * Calculate the size of a thumbnail image while keeping proportions, based on pixel area.\n * This leads to better results in cases, where the aspect ratio is extreme.\n * @param targetWidth The desired width of the image.\n * @param targetHeight The desired height of the image.\n * @param aspectRatio Aspect ratio of the image.\n */\nfunction getThumbSizeArea(targetWidth, targetHeight, aspectRatio) {\n var targetArea = targetWidth * targetHeight;\n var width = Math.sqrt(targetArea * aspectRatio);\n return {\n w: width,\n h: width / aspectRatio\n };\n}\nexports.getThumbSizeArea = getThumbSizeArea;\n/**\n * Calculate the size of a thumbnail image to fit in `maxWith` and `maxHeight` while preserving the aspect ratio.\n * @param maxWidth\n * @param maxHeight\n * @param originalWidth\n * @param originalHeight\n */\nfunction getThumbSizeLongestEdge(maxWidth, maxHeight, originalWidth, originalHeight) {\n var iR = originalWidth / originalHeight;\n var dR = maxWidth / maxHeight;\n if (dR > iR) {\n return {\n w: originalWidth * maxHeight / originalHeight,\n h: maxHeight\n };\n }\n return {\n w: maxWidth,\n h: originalHeight * maxWidth / originalWidth\n };\n}\nexports.getThumbSizeLongestEdge = getThumbSizeLongestEdge;\nfunction scaleRect(r, size) {\n return {\n x1: r.x1 * size.w,\n x2: r.x2 * size.w,\n y1: r.y1 * size.h,\n y2: r.y2 * size.h\n };\n}\nexports.scaleRect = scaleRect;\n/**\n * Calculates the size of a rect.\n * @param r The [[RectCoords]].\n */\nfunction getRectSize(r) {\n return {\n w: r.x2 - r.x1,\n h: r.y2 - r.y1\n };\n}\nexports.getRectSize = getRectSize;\n/**\n * Get aspect ratio of a rect\n * @param rect The normalized rect.\n * @param size The original image size.\n */\nfunction getRectAspectRatio(rect, size) {\n var scaledRect = scaleRect(rect, size);\n var _a = getRectSize(scaledRect), w = _a.w, h = _a.h;\n return w / h;\n}\nexports.getRectAspectRatio = getRectAspectRatio;\nfunction getElementSize(elem) {\n var img = elem;\n var video = elem;\n return {\n w: img.naturalWidth || video.videoWidth || elem.width,\n h: img.naturalHeight || video.videoHeight || elem.height\n };\n}\nexports.getElementSize = getElementSize;\nfunction elementToCanvas(elem, newSize, normalizedRect) {\n var _a = getElementSize(elem), ow = _a.w, oh = _a.h;\n var _b = normalizedRect ? normalizedRect : {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1\n }, x1 = _b.x1, x2 = _b.x2, y1 = _b.y1, y2 = _b.y2;\n var w = x2 - x1;\n var h = y2 - y1;\n // scale to absolute pixels\n var sx = ow * x1;\n var sw = ow * w;\n var sy = oh * y1;\n var sh = oh * h;\n var dw = (newSize && newSize.w) || ow;\n var dh = (newSize && newSize.h) || oh;\n var canvas = document.createElement('canvas');\n canvas.width = dw;\n canvas.height = dh;\n var context = canvas.getContext('2d');\n if (!context) {\n throw Error(\"Error converting element to canvas: Can not get 2d context\");\n }\n // fill with white first to\n context.fillStyle = \"rgb(255, 255,255)\";\n context.fillRect(0, 0, dw, dh);\n context.drawImage(elem, sx, sy, sw, sh, 0, 0, // dx dy\n dw, dh);\n return canvas;\n}\nexports.elementToCanvas = elementToCanvas;\nfunction urlOrBlobToCanvas(file) {\n return new Promise(function (resolve, reject) {\n // File can also be an image element\n blueimp_load_image_1.default(file, (function (data) {\n var c = data;\n if (c) {\n resolve(c);\n }\n else {\n reject();\n }\n }), {\n canvas: true,\n orientation: true,\n crossOrigin: 'anonymous'\n });\n });\n}\nexports.urlOrBlobToCanvas = urlOrBlobToCanvas;\nfunction canvasToJpgBlob(canvas, quality) {\n return new Promise(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n }\n else {\n reject();\n }\n }, 'image/jpeg', quality);\n });\n}\nexports.canvasToJpgBlob = canvasToJpgBlob;\nexports.cadExtensions = ['.stp', '.step', '.stl', '.obj', '.glb', '.gltf'];\nfunction isCadFile(file) {\n return exports.cadExtensions.some(function (ex) { return file.name.endsWith(ex); });\n}\nexports.isCadFile = isCadFile;\nfunction isImageFile(file) {\n return file.type.startsWith('image/');\n}\nexports.isImageFile = isImageFile;\n/**\n * Measures time remaining for a promise to resolve.\n * @param promise The promise\n */\nfunction timePromise(promise) {\n return __awaiter(this, void 0, void 0, function () {\n var t1, res, t2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n t1 = Date.now();\n return [4 /*yield*/, promise];\n case 1:\n res = _a.sent();\n t2 = Date.now();\n return [2 /*return*/, { res: res, durationSeconds: (t2 - t1) / 1000 }];\n }\n });\n });\n}\nexports.timePromise = timePromise;\n//# sourceMappingURL=utils.js.map","module.exports = __webpack_public_path__ + \"static/media/img-1-1.6144e5f9.png\";","module.exports = __webpack_public_path__ + \"static/media/img-1-2.ad943f0f.png\";","module.exports = __webpack_public_path__ + \"static/media/img2-1.a87c79c7.png\";","module.exports = __webpack_public_path__ + \"static/media/img2-2.39c5b73f.png\";","module.exports = __webpack_public_path__ + \"static/media/img3-1.443b0c3a.png\";","module.exports = __webpack_public_path__ + \"static/media/img3-2.37db7999.png\";","module.exports = __webpack_public_path__ + \"static/media/img4-1.9c34c158.png\";","module.exports = __webpack_public_path__ + \"static/media/img4-2.9d280a04.png\";","module.exports = __webpack_public_path__ + \"static/media/img5-1.b61dbd4d.png\";","module.exports = __webpack_public_path__ + \"static/media/img5-2.1c77c093.png\";","module.exports = __webpack_public_path__ + \"static/media/img6-1.8b03dd21.png\";","module.exports = __webpack_public_path__ + \"static/media/img6-2.1e3e7fed.png\";","module.exports = __webpack_public_path__ + \"static/media/reverse_camera.28c80509.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon_search.373c3cc4.svg\";","module.exports = __webpack_public_path__ + \"static/media/camera.ae3f4f51.svg\";","module.exports = __webpack_public_path__ + \"static/media/email_share.92bbfb8b.svg\";","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"blueimp-canvas-to-blob\");\nvar utils_1 = require(\"./utils\");\nvar axios_1 = __importDefault(require(\"axios\"));\n// re-export utils\n__export(require(\"./utils\"));\nvar NyrisAPI = /** @class */ (function () {\n function NyrisAPI(settings) {\n this.httpClient = axios_1.default.create();\n if (!settings.apiKey) {\n throw new Error(\"The api-key is not set.\");\n }\n this.apiKey = settings.apiKey;\n var baseUrl = settings.baseUrl || \"https://api.nyris.io\";\n this.imageMatchingUrl = baseUrl + \"/find/v1.1\";\n this.cadMatchingUrl = baseUrl + \"/cad/find/v0.1\";\n this.imageMatchingUrlBySku = baseUrl + \"/recommend/v1/\";\n this.imageMatchingSubmitManualUrl = baseUrl + \"/find/v1/manual/\";\n this.feedbackUrl = baseUrl + \"/feedback/v1/\";\n this.regionProposalUrl = baseUrl + \"/find/v2/regions/\";\n this.findFilters = baseUrl + \"/find/v1/filters\";\n this.responseFormat =\n settings.responseFormat || \"application/offers.complete+json\";\n this.maxHeight = settings.maxHeight || 500;\n this.maxWidth = settings.maxWidth || 500;\n this.jpegQuality = settings.jpegQuality || 0.92;\n this.customSearchRequest = settings.customSearchRequest;\n this.responseHook = settings.responseHook;\n this.xOptions = settings.xOptions;\n }\n NyrisAPI.prototype.prepareImage = function (canvas, cropRect) {\n return __awaiter(this, void 0, void 0, function () {\n var crop, originalSize, aspectRatio, scaledSize, resizedCroppedCanvas;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n crop = cropRect || {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1,\n };\n originalSize = utils_1.getElementSize(canvas);\n aspectRatio = utils_1.getRectAspectRatio(crop, originalSize);\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, aspectRatio);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize, crop);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n NyrisAPI.prototype.getSearchRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n \"X-Api-Key\": this.apiKey,\n \"Accept-Language\": \"de,*;q=0.5\",\n Accept: this.responseFormat,\n \"Content-Type\": contentType || \"application/octet-stream\",\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers[\"X-Options\"] = xOptions.join(\" \");\n return headers;\n };\n NyrisAPI.prototype.getRegionRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n \"X-Api-Key\": this.apiKey,\n \"Content-Type\": contentType || \"application/octet-stream\",\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers[\"X-Options\"] = xOptions.join(\" \");\n return headers;\n };\n NyrisAPI.prototype.getParams = function (options) {\n var params = options.geoLocation\n ? {\n lat: options.geoLocation.lat.toString(),\n lon: options.geoLocation.lon.toString(),\n dist: options.geoLocation.dist.toString(),\n }\n : {};\n return params;\n };\n NyrisAPI.prototype.parseCategoryPredictions = function (categoryPredictionResponse) {\n return Object.entries(categoryPredictionResponse || {})\n .map(function (_a) {\n var name = _a[0], score = _a[1];\n return ({\n name: name,\n score: score,\n });\n })\n .sort(function (a, b) { return b.score - a.score; });\n };\n NyrisAPI.prototype.parseSearchResult = function (res, durationSeconds) {\n var categoryPredictions = this.parseCategoryPredictions(res.data.predicted_category);\n var codes = res.data.barcodes || [];\n var responseData = this\n .responseHook\n ? this.responseHook(res.data)\n : res.data;\n var results = \"offerInfos\" in responseData\n ? responseData.offerInfos.map(function (r, i) { return (__assign(__assign({}, r), { position: i })); })\n : responseData.results.map(function (r, i) { return ({\n position: i,\n sku: r.sku,\n title: r.title,\n img: r.images && r.images[0] ? { url: r.images[0] } : undefined,\n l: r.links ? r.links.main : undefined,\n p: r.price\n ? { vi: parseFloat(r.price) * 100, c: r.price.split(\" \")[1] }\n : undefined,\n score: r.score,\n }); });\n var requestId = res.headers[\"x-matching-request\"];\n var duration = \"durationSeconds\" in res.data\n ? res.data.durationSeconds\n : durationSeconds;\n return { results: results, requestId: requestId, duration: duration, categoryPredictions: categoryPredictions, codes: codes };\n };\n /**\n * Search using the experimental CAD API\n * @param file - A CAD file\n * @param options - Image search options\n * @deprecated This is a prototype API and might be removed/changed at any time.\n */\n NyrisAPI.prototype.findByCad = function (file, options) {\n return __awaiter(this, void 0, void 0, function () {\n var fileType, headers, params, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n fileType = file.type;\n headers = this.getSearchRequestHeaders(fileType);\n params = this.getParams(options);\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: \"POST\",\n url: this.cadMatchingUrl,\n data: file,\n params: params,\n headers: headers,\n responseType: \"json\",\n }))];\n case 1:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search for an image.\n * @param canvas Image, Video (frame) or Canvas to use use for image search.\n * @param filters key values of filters\n * @param options See [[ImageSearchOptions]].\n */\n NyrisAPI.prototype.findByImage = function (canvas, options, filters) {\n return __awaiter(this, void 0, void 0, function () {\n var imageBytes, headers, params, requestBody, i, j, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.prepareImage(canvas, options.cropRect)];\n case 1:\n imageBytes = _b.sent();\n if (this.customSearchRequest)\n return [2 /*return*/, this.customSearchRequest(imageBytes, this.httpClient)];\n headers = this.getSearchRequestHeaders(\"image/jpeg\");\n params = this.getParams(options);\n requestBody = new FormData();\n requestBody.append(\"image\", imageBytes);\n if (filters && filters.length > 0) {\n for (i = 0; i < filters.length; i++) {\n requestBody.append(\"filters[\" + i + \"].filterType\", filters[i].key);\n for (j = 0; j < filters[i].values.length; j++) {\n requestBody.append(\"filters[\" + i + \"].filterValues[\" + j + \"]\", filters[i].values[j]);\n }\n }\n }\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: \"POST\",\n url: this.imageMatchingUrl,\n data: requestBody,\n params: params,\n headers: headers,\n responseType: \"json\",\n }))];\n case 2:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search by SKU (itemID)\n * @param sku The SKU or ID of the item.\n * @param mid The index ID.\n */\n NyrisAPI.prototype.findBySku = function (sku, mid) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, r;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = \"\" + this.imageMatchingUrlBySku + encodeURIComponent(sku) + \"/\" + encodeURIComponent(mid);\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n r = _a.sent();\n if (this.responseHook) {\n r = this.responseHook;\n }\n return [2 /*return*/, r];\n }\n });\n });\n };\n /**\n * Find significant sections in the image.\n * @param canvas Canvas, video or image to search with.\n * @returns A list of regions, see [[Region]].\n */\n NyrisAPI.prototype.findRegions = function (canvas) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, origW, origH, scaledSize, resizedCroppedCanvas, blob, headers, response, regions;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = utils_1.getElementSize(canvas), origW = _a.w, origH = _a.h;\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, origW / origH);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1:\n blob = _b.sent();\n headers = this.getRegionRequestHeaders(\"image/jpeg\");\n return [4 /*yield*/, this.httpClient.request({\n method: \"POST\",\n url: this.regionProposalUrl,\n data: blob,\n headers: headers,\n })];\n case 2:\n response = _b.sent();\n regions = response.data.regions;\n return [2 /*return*/, regions.map(function (r) { return ({\n classId: r.classId,\n confidence: r.confidence,\n normalizedRect: {\n x1: r.region.left / scaledSize.w,\n x2: r.region.right / scaledSize.w,\n y1: r.region.top / scaledSize.h,\n y2: r.region.bottom / scaledSize.h,\n },\n }); })];\n }\n });\n });\n };\n /**\n * Send feedback event.\n * @param sessionId ID of the session. Usually the first request ID returned.\n * @param requestId The request ID to submit the feedback event to.\n * @param payload See [[FeedbackEventPayload]].\n */\n NyrisAPI.prototype.sendFeedback = function (sessionId, requestId, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = {\n \"X-Api-Key\": this.apiKey,\n \"Content-Type\": \"application/json\",\n };\n data = __assign({ request_id: requestId, timestamp: new Date(), session_id: sessionId }, payload);\n return [4 /*yield*/, this.httpClient.request({\n method: \"POST\",\n url: this.feedbackUrl,\n headers: headers,\n data: data,\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n NyrisAPI.prototype.getFilters = function (limit) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = this.findFilters + \"?limit=\" + limit;\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n response = _a.sent();\n return [2 /*return*/, response.data];\n }\n });\n });\n };\n NyrisAPI.prototype.searchFilters = function (key, value, limit) {\n if (limit === void 0) { limit = 100; }\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = this.findFilters + \"/\" + key + \"/\" + value + \"?limit=\" + limit;\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n response = _a.sent();\n return [2 /*return*/, response.data];\n }\n });\n });\n };\n return NyrisAPI;\n}());\nexports.default = NyrisAPI;\n//# sourceMappingURL=index.js.map","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import img1 from 'common/assets/images/imageCaptureHelp/img-1-1.png';\nimport img2 from 'common/assets/images/imageCaptureHelp/img-1-2.png';\nimport img3 from 'common/assets/images/imageCaptureHelp/img2-1.png';\nimport img4 from 'common/assets/images/imageCaptureHelp/img2-2.png';\nimport img5 from 'common/assets/images/imageCaptureHelp/img3-1.png';\nimport img6 from 'common/assets/images/imageCaptureHelp/img3-2.png';\nimport img7 from 'common/assets/images/imageCaptureHelp/img4-1.png';\nimport img8 from 'common/assets/images/imageCaptureHelp/img4-2.png';\nimport img9 from 'common/assets/images/imageCaptureHelp/img5-1.png';\nimport img10 from 'common/assets/images/imageCaptureHelp/img5-2.png';\nimport img11 from 'common/assets/images/imageCaptureHelp/img6-1.png';\nimport img12 from 'common/assets/images/imageCaptureHelp/img6-2.png';\n\nexport const DEFAULT_REGION = { x1: 0, x2: 1, y1: 0, y2: 1 };\nexport const showHits = [\n { value: 10, label: '10' },\n { value: 20, label: '20' },\n { value: 30, label: '30' },\n { value: 40, label: '40' },\n { value: 50, label: '50' },\n { value: 60, label: '60' },\n { value: 70, label: '70' },\n { value: 80, label: '80' },\n { value: 90, label: '90' },\n { value: 100, label: '100' },\n];\nexport const visualSearchHelp = [\n {\n title: 'SELECT THE RIGHT IMAGE AREA',\n description:\n 'The main object should occupy the major part of the image. Use the cropping tool available to crop the image and remove excess background.',\n imageLeft: img1,\n imageRight: img2,\n },\n {\n title: 'PICTURE CLARITY',\n description: 'The image should not be blurred or out of focus.',\n imageLeft: img3,\n imageRight: img4,\n },\n {\n title: 'OPTIMAL LIGHTING',\n description:\n 'The images should be taken in a bright area or use your camera’s flash to take a well-lit picture.',\n imageLeft: img5,\n imageRight: img6,\n },\n {\n title: 'MONOCHROME BACKGROUND',\n description:\n 'The object should be placed on a plain and light background and patterned background should be avoided.',\n imageLeft: img7,\n imageRight: img8,\n },\n {\n title: 'VISIBILITY OF THE OBJECT',\n description:\n 'Click an image encapsulating most of the object’s key components.',\n imageLeft: img9,\n imageRight: img10,\n },\n {\n title: 'OCR CAPTURE',\n description:\n 'It is recommended to take a clear picture of the text on the typeplate etc, to ensure that the model can detect the text and give accurate results.',\n imageLeft: img11,\n imageRight: img12,\n },\n];\n","import { SearchState } from './types';\n\nexport const initialState: SearchState = {\n categoryPredictions: [],\n codes: [],\n configureFilter: {},\n errorMessage: '',\n fetchingRegions: false,\n fetchingResults: false,\n filterOptions: [],\n filters: [],\n imageThumbSearchInput: '',\n isShowModalDetailItemMobile: false,\n preFilter: {},\n loadingSearchAlgolia: false,\n preFilterDropdown: false,\n imageCaptureHelpModal: false,\n regions: [],\n requestImage: undefined,\n results: [],\n resultSearchText: [],\n selectedRegion: undefined,\n textSearchInputMobile: '',\n valueTextSearch: {\n configure: { filters: '' },\n page: 1,\n refinementList: '',\n },\n};\n","import { RectCoords, Region } from '@nyris/nyris-api';\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { DEFAULT_REGION } from '../../constants';\nimport { initialState } from './search.initialState';\n\nexport const searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n setSearchResults: (state, data) => {\n const { payload } = data;\n const {\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n filters,\n } = payload;\n\n return {\n ...state,\n filters,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingResults: false,\n };\n },\n\n setRegions: (state, data: PayloadAction<Region[]>) => ({\n ...state,\n regions: data.payload,\n }),\n\n setSelectedRegion: (state, data: PayloadAction<RectCoords | undefined>) => {\n return {\n ...state,\n selectedRegion: data.payload,\n };\n },\n\n setRequestImage: (state, data: PayloadAction<any>) => ({\n ...state,\n requestImage: {\n canvas: data.payload,\n id: Math.random().toString(),\n },\n regions: [],\n }),\n\n selectionChanged: (state, data: PayloadAction<RectCoords>) => {\n const { payload } = data;\n return {\n ...state,\n selectedRegion: payload,\n };\n },\n\n loadFileSelectRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n\n const { results, requestId, categoryPredictions, codes, duration } =\n payload;\n return {\n ...state,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingRegions: false,\n };\n },\n\n loadingActionResults: state => {\n return {\n ...state,\n fetchingResults: true,\n };\n },\n\n loadingActionRegions: state => {\n return {\n ...state,\n fetchingRegions: true,\n };\n },\n\n searchFileImageNonRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const { results, requestId, duration, categoryPredictions, codes } =\n payload;\n return {\n ...state,\n results,\n requestId,\n duration,\n categoryPredictions,\n codes,\n fetchingResults: false,\n };\n },\n\n changeValueTextSearch: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n valueTextSearch: payload,\n };\n },\n\n resultSearchText: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n resultSearchText: payload,\n };\n },\n\n updateResults: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n results: payload,\n };\n },\n\n reset: (state, data: PayloadAction<any>) => {\n return {\n results: [],\n regions: [],\n selectedRegion: DEFAULT_REGION,\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: '',\n valueTextSearch: {},\n resultSearchText: [],\n filters: [],\n loadingSearchAlgolia: false,\n imageThumbSearchInput: '',\n textSearchInputMobile: '',\n isShowModalDetailItemMobile: false,\n preFilter: state.preFilter || {},\n preFilterDropdown: false,\n imageCaptureHelpModal: false,\n };\n },\n\n onResetRequestImage: (state, data: PayloadAction<any>) => {\n return {\n ...state,\n requestImage: undefined,\n imageThumbSearchInput: '',\n results: [],\n regions: [],\n };\n },\n\n configureFilter: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n configureFilter: payload,\n };\n },\n\n setUpdateSession: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n sessionId: payload,\n };\n },\n\n updateResultChangePosition: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const { results } = payload;\n return {\n ...state,\n fetchingResults: false,\n results,\n };\n },\n\n setError: (state, data: PayloadAction<string>) => {\n return {\n ...state,\n fetchingRegions: false,\n fetchingResults: false,\n errorMessage: data.payload,\n };\n },\n\n setImageSearchInput: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n imageThumbSearchInput: payload,\n };\n },\n updateStatusLoading: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n loadingSearchAlgolia: payload,\n };\n },\n updateValueTextSearchMobile: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n textSearchInputMobile: payload,\n };\n },\n onToggleModalItemDetail: (state, data: PayloadAction<boolean>) => {\n const { payload } = data;\n\n return {\n ...state,\n isShowModalDetailItemMobile: payload,\n };\n },\n setPreFilter: (state, data: PayloadAction<Record<string, boolean>>) => {\n const { payload } = data;\n return {\n ...state,\n preFilter: payload,\n };\n },\n setPreFilterDropdown: (state, data: PayloadAction<boolean>) => {\n return {\n ...state,\n preFilterDropdown: data.payload,\n };\n },\n setImageCaptureHelpModal: (state, data: PayloadAction<boolean>) => {\n return {\n ...state,\n imageCaptureHelpModal: data.payload,\n };\n },\n setFilter: (state, data: PayloadAction<any>) => {\n return {\n ...state,\n filter: data.payload,\n };\n },\n },\n});\n\nexport const {\n changeValueTextSearch,\n configureFilter,\n loadFileSelectRegion,\n loadingActionRegions,\n loadingActionResults,\n onResetRequestImage,\n onToggleModalItemDetail,\n reset,\n resultSearchText,\n searchFileImageNonRegion,\n selectionChanged,\n setError,\n setImageCaptureHelpModal,\n setImageSearchInput,\n setPreFilterDropdown,\n setRegions,\n setRequestImage,\n setSearchResults,\n setSelectedRegion,\n setPreFilter,\n setUpdateSession,\n updateResultChangePosition,\n updateResults,\n updateStatusLoading,\n updateValueTextSearchMobile,\n setFilter,\n} = searchSlice.actions;\nexport default searchSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport jscookie from 'js-cookie';\nimport { InitialStateTypes, LoginResponse } from './types';\n\nconst initialState: InitialStateTypes = {\n accessToken: null,\n name: null,\n role: null,\n};\n\nexport const authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n login: (state, data: PayloadAction<LoginResponse>) => {\n // state.accessToken = payload.access_token;\n // state.name = payload.name;\n // state.role = payload.role;\n // if (payload.access_token) {\n // jscookie.set(\"token\", payload?.access_token);\n // }\n },\n logout: state => {\n state.accessToken = null;\n state.name = null;\n state.role = null;\n jscookie.remove('token');\n },\n },\n});\n\nexport const { login, logout } = authSlice.actions;\nexport default authSlice.reducer;\n","import { WH } from '@nyris/nyris-api';\n\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nexport function getUrlParam(name: string): string | boolean | undefined {\n let results = new RegExp(`[?&]${name}(=([^&#]*))?(&|$|#)`, 'i').exec(\n window.location.href,\n );\n if (results && results[2]) {\n // has value\n return decodeURIComponent(results[2]);\n }\n return (\n (results && true) || // present but without value\n undefined\n ); // not present\n}\n\nexport function getThumbSizeLongestEdge(\n maxW: number,\n maxH: number,\n iW: number,\n iH: number,\n): WH {\n let iR = iW / iH;\n let dR = maxW / maxH;\n if (dR > iR) {\n return {\n w: (iW * maxH) / iH,\n h: maxH,\n };\n }\n return {\n w: maxW,\n h: (iH * maxW) / iW,\n };\n}\n","import { createSlice } from '@reduxjs/toolkit';\nimport { NyrisAppState, NyrisFeedbackState } from './types';\n\nconst initialState: NyrisAppState | NyrisFeedbackState = {\n showPart: 'start',\n feedbackState: 'hidden',\n};\n\nexport const nyrisSlice = createSlice({\n name: 'nyris',\n initialState,\n reducers: {\n showStart: state => {\n return {\n ...state,\n showPart: 'start',\n };\n },\n showCamera: state => {\n return {\n ...state,\n showPart: 'camera',\n };\n },\n showResults: state => {\n return {\n ...state,\n showPart: 'results',\n };\n },\n showFeedback: state => {\n return {\n ...state,\n feedbackState: 'question',\n };\n },\n hideFeedback: state => {\n return {\n ...state,\n feedbackState: 'hidden',\n };\n },\n feedbackSubmitPositive: state => {\n return {\n ...state,\n feedbackState: 'positive',\n };\n },\n feedbackNegative: state => {\n return {\n ...state,\n feedbackState: 'negative',\n };\n },\n },\n});\n\nexport const {\n showStart,\n showCamera,\n showResults,\n showFeedback,\n hideFeedback,\n feedbackSubmitPositive,\n feedbackNegative,\n} = nyrisSlice.actions;\nexport default nyrisSlice.reducer;\n","import { configureStore } from '@reduxjs/toolkit';\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport { combineReducers } from 'redux';\nimport Auth from 'Store/auth/Auth';\nimport { AppSettings } from 'types';\nimport { getUrlParam } from 'utils';\nimport Search from 'Store/search/Search';\nimport Nyris from 'Store/nyris/Nyris';\nimport { defaultSettings } from './constants';\n\ndeclare var settings: AppSettings;\n\nlet normalizedSettings: AppSettings = {\n ...defaultSettings,\n ...settings,\n};\n\nnormalizedSettings = {\n ...normalizedSettings,\n apiKey: (getUrlParam('apiKey') as string) || normalizedSettings.apiKey,\n xOptions: (getUrlParam('xOptions') as string) || normalizedSettings.xOptions,\n regions:\n (getUrlParam('use.regions') as boolean) || normalizedSettings.regions,\n preview:\n (getUrlParam('use.preview') as boolean) || normalizedSettings.preview,\n};\n\nconst reducers = combineReducers({\n auth: Auth,\n settings: () => normalizedSettings,\n search: Search,\n nyris: Nyris,\n});\n\nexport const store = configureStore({\n reducer: reducers,\n devTools: process.env.NODE_ENV !== 'production',\n});\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>();\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\n","import { AppSettings } from '../types';\n\nexport const defaultSettings: AppSettings = {\n auth0: {},\n xOptions: false,\n apiKey: 'UNSET',\n preview: true,\n regions: false,\n maxWidth: 500,\n maxHeight: 500,\n jpegQuality: 0.92,\n baseUrl: 'https://api.nyris.io',\n instantRedirectPatterns: [\n '^https?://(www.)?youtube.com/',\n '^https?://(www.)?youtu.be/',\n '^https?://(www.)?vimeo.com/',\n '^https?://(www.)?dailymotion.com/',\n '^https?://(www.)?dai.ly/',\n ],\n theme: {},\n templateId: '',\n field: {\n ctaLinkField: '',\n productName: '',\n productDetails: '',\n manufacturerNumber: '',\n productTag: '',\n warehouseNumber: '',\n warehouseNumberValue: '',\n warehouseShelfNumber: '',\n warehouseShelfNumberValue: '',\n warehouseStock: '',\n warehouseStockValue: '',\n },\n};\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconCameraMobile = function SvgIconCameraMobile(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 28,\n height: 28,\n viewBox: \"0 0 28 28\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M28 24C28 24.5523 27.5523 25 27 25H1C0.447715 25 0 24.5523 0 24V7C0 6.44772 0.447715 6 1 6H7.46L9.17 3.45C9.35398 3.17061 9.66548 3.00173 10 3H18C18.3345 3.00173 18.646 3.17061 18.83 3.45L20.54 6H27C27.5523 6 28 6.44772 28 7V24ZM2 23H26V8H20C19.6655 7.99827 19.354 7.82939 19.17 7.55L17.46 5H10.54L8.83 7.55C8.64602 7.82939 8.33452 7.99827 8 8H2V23ZM14 21C10.6863 21 8 18.3137 8 15C8 11.6863 10.6863 9 14 9C17.3137 9 20 11.6863 20 15C20 18.3137 17.3137 21 14 21ZM14 11C11.7909 11 10 12.7909 10 15C10 17.2091 11.7909 19 14 19C16.2091 19 18 17.2091 18 15C18 12.7909 16.2091 11 14 11Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconCameraMobile, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_camera_mobile.4d7a272f.svg\";\nexport { ForwardRef as ReactComponent };","import NyrisAPI, {\n NyrisAPISettings,\n RectCoords,\n Region,\n urlOrBlobToCanvas,\n} from '@nyris/nyris-api';\nimport { isEqual } from 'lodash';\nimport { DEFAULT_REGION } from '../constants';\nexport interface Filter {\n key?: string;\n values: string[];\n}\n\nexport const createImage = async (\n fileOrUrl: File | string | HTMLCanvasElement,\n) => {\n const image =\n fileOrUrl instanceof HTMLCanvasElement\n ? fileOrUrl\n : await urlOrBlobToCanvas(fileOrUrl);\n return image;\n};\n\nconst getRegionByMaxConfidence = (regions: Region[]) => {\n if (regions.length === 0) {\n return DEFAULT_REGION;\n }\n const regionWithMaxConfidence = regions.reduce((prev, current) => {\n prev.confidence = prev.confidence || 0;\n current.confidence = current.confidence || 0;\n return prev.confidence >= current.confidence ? prev : current;\n });\n return regionWithMaxConfidence.normalizedRect;\n};\n\nexport const findRegions = async (\n image: HTMLCanvasElement,\n settings: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settings);\n let regions = await nyrisApi.findRegions(image);\n const selectedRegion = getRegionByMaxConfidence(regions);\n return {\n selectedRegion: isEqual(selectedRegion, DEFAULT_REGION)\n ? DEFAULT_REGION\n : selectedRegion,\n regions,\n };\n};\n\nexport const findByImage = ({\n image,\n settings,\n region,\n filters,\n}: {\n image: HTMLCanvasElement;\n settings: NyrisAPISettings;\n region?: RectCoords;\n filters?: Filter[];\n}) => {\n const nyrisApi = new NyrisAPI(settings);\n let options = {};\n\n if (region) {\n options = { cropRect: region };\n }\n return nyrisApi.findByImage(image, options, filters);\n};\n\nexport const findByCadFile = (file: File, settings: NyrisAPISettings) => {\n const nyrisApi = new NyrisAPI(settings);\n return nyrisApi.findByCad(file, {});\n};\n","import { Box, Drawer } from '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport PhotoLibraryIcon from '@material-ui/icons/PhotoLibrary';\nimport { RectCoords } from '@nyris/nyris-api';\nimport ReverseCamera from 'common/assets/icons/reverse_camera.svg';\nimport { isEmpty } from 'lodash';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { useHistory } from 'react-router-dom';\nimport Webcam from 'react-webcam';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport {\n onToggleModalItemDetail,\n setImageSearchInput,\n setRequestImage,\n setSearchResults,\n updateStatusLoading,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\n\ninterface Props {\n isToggle: boolean;\n onToggleModal?: any;\n}\n\nconst FACING_MODE_USER = 'environment';\nconst FACING_MODE_ENVIRONMENT = 'user';\n\nfunction CameraCustom(props: Props) {\n const { isToggle, onToggleModal } = props;\n const webcamRef: any = useRef(null);\n const [facingMode, setFacingMode] = useState(FACING_MODE_USER);\n const [scaleCamera, setScaleCamera] = useState<number>(1);\n const stateGlobal = useAppSelector(state => state);\n const { search, settings } = stateGlobal;\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { preFilter } = search;\n\n const videoConstraints = {\n width: 1080,\n height: 1080,\n aspectRatio: 1.33333333333,\n };\n const handleClick = useCallback(() => {\n setFacingMode(prevState =>\n prevState === FACING_MODE_USER\n ? FACING_MODE_ENVIRONMENT\n : FACING_MODE_USER,\n );\n }, []);\n\n const handlerFindImage = async (image: any) => {\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n let region: RectCoords | undefined;\n let imageConvert = await createImage(image);\n dispatch(setRequestImage(imageConvert));\n dispatch(setImageSearchInput(image));\n dispatch(onToggleModalItemDetail(false));\n handlerCloseModal();\n\n if (settings.regions) {\n let res = await findRegions(imageConvert, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n let filters: any[] = [];\n\n findByImage({\n image: imageConvert,\n settings,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n region,\n })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n const payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n dispatch(updateStatusLoading(false));\n })\n .catch((e: any) => {\n console.log('error input search', e);\n dispatch(updateStatusLoading(false));\n });\n };\n\n const handlerCloseModal = () => {\n setFacingMode('environment');\n setScaleCamera(1);\n onToggleModal();\n };\n\n const { getInputProps } = useDropzone({\n onDrop: async (fs: File[]) => {\n let payload: any;\n let filters: any[] = [];\n let region: RectCoords | undefined;\n dispatch(updateStatusLoading(true));\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n return findByImage({\n image,\n settings,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n region,\n })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n setTimeout(() => {\n dispatch(updateStatusLoading(false));\n handlerCloseModal();\n history.push('/result');\n }, 500);\n })\n .catch((e: any) => {\n console.log('err camera_custom', e);\n dispatch(updateStatusLoading(false));\n handlerCloseModal();\n });\n },\n });\n\n return (\n <Box className=\"box-camera-custom\">\n <Drawer\n anchor={'bottom'}\n open={isToggle}\n onClose={handlerCloseModal}\n className=\"modal-togggle-cam\"\n >\n <Box className=\"wrap-camera\">\n <button\n className=\"btn-close-modal right\"\n style={{\n backgroundColor: '#666666',\n }}\n onClick={handlerCloseModal}\n >\n <CloseIcon style={{ fontSize: 20, color: '#fff' }} />\n </button>\n\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n overflow: 'hidden',\n width: '100%',\n }}\n className=\"full-height\"\n >\n <Webcam\n audio={false}\n width={'100%'}\n className=\"full-height\"\n imageSmoothing={true}\n screenshotFormat=\"image/jpeg\"\n forceScreenshotSourceSize={true}\n videoConstraints={{\n ...videoConstraints,\n facingMode,\n }}\n ref={webcamRef}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'cover',\n transform: `scale(${scaleCamera})`,\n }}\n screenshotQuality={1}\n >\n {({ getScreenshot }: any) => (\n <button\n onClick={() => {\n const imageSrc = getScreenshot();\n handlerFindImage(imageSrc);\n }}\n className=\"btn-capture-camera\"\n >\n <svg\n width=\"63\"\n height=\"63\"\n viewBox=\"0 0 63 63\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"31.5\" cy=\"31.5\" r=\"31.5\" fill=\"white\" />\n </svg>\n </button>\n )}\n </Webcam>\n </div>\n\n <button className=\"btn-switch-camera\" onClick={handleClick}>\n <img src={ReverseCamera} alt=\"\" width={52} height={52} />\n </button>\n\n <div\n className=\"box-scale-camera\"\n style={{\n backgroundColor: settings.theme?.secondaryColor,\n }}\n >\n <button\n className={`${scaleCamera === 1 && 'active'}`}\n style={{\n backgroundColor: scaleCamera === 1 && 'active' ? 'white' : '',\n color: scaleCamera === 1 && 'active' ? 'black' : 'white',\n }}\n onClick={() => setScaleCamera(1)}\n >\n 1\n </button>\n <button\n className={`${scaleCamera === 1.5 && 'active'}`}\n style={{\n backgroundColor: scaleCamera === 1.5 && 'active' ? 'white' : '',\n color: scaleCamera === 1.5 && 'active' ? 'black' : 'white',\n }}\n onClick={() => setScaleCamera(1.5)}\n >\n 1.5\n </button>\n <button\n className={`${scaleCamera === 2 && 'active'}`}\n style={{\n backgroundColor: scaleCamera === 2 && 'active' ? 'white' : '',\n color: scaleCamera === 2 && 'active' ? 'black' : 'white',\n }}\n onClick={() => setScaleCamera(2)}\n >\n 2\n </button>\n </div>\n <div className=\"wrap-box-input-mobile custom-library\">\n <input\n id=\"icon-button-file\"\n type=\"file\"\n style={{ display: 'none' }}\n {...getInputProps({\n accept: 'image/png,image/jpeg',\n onClick: e => {\n e.stopPropagation();\n },\n })}\n />\n <label htmlFor=\"icon-button-file\">\n <IconButton\n color=\"primary\"\n aria-label=\"upload picture\"\n component=\"span\"\n style={{\n width: 32,\n height: 32,\n borderRadius: '100%',\n padding: 7,\n backgroundColor: '#F3F3F5',\n }}\n >\n <PhotoLibraryIcon style={{ fontSize: 20, color: 'red' }} />\n </IconButton>\n </label>\n </div>\n </Box>\n </Drawer>\n </Box>\n );\n}\n\nexport default CameraCustom;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgHome = function SvgHome(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 22,\n viewBox: \"0 0 22 21\",\n style: {\n enableBackground: \"new 0 0 22 20.28\"\n },\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st3\",\n d: \"M 10.959 1.845 C 11.109 1.845 11.266 1.886 11.408 1.96 L 19.66 6.661 C 19.935 6.825 20.101 7.112 20.101 7.424 L 20.101 15.776 C 20.101 16.111 19.91 16.415 19.61 16.562 L 15.912 18.384 C 15.787 18.449 15.646 18.474 15.513 18.474 C 15.347 18.474 15.189 18.433 15.048 18.343 C 14.782 18.178 14.624 17.9 14.624 17.596 L 14.624 10.041 L 10.959 7.957 L 7.294 10.041 L 7.294 17.605 C 7.294 17.908 7.136 18.196 6.87 18.351 C 6.728 18.441 6.562 18.483 6.405 18.483 C 6.272 18.483 6.13 18.449 6.006 18.392 L 2.307 16.57 C 2.008 16.415 1.817 16.111 1.817 15.776 L 1.817 7.424 C 1.817 7.112 1.983 6.817 2.265 6.661 L 10.519 1.96 C 10.651 1.886 10.801 1.845 10.959 1.845 M 10.959 0.205 C 10.51 0.205 10.069 0.32 9.679 0.541 L 1.426 5.242 C 0.645 5.693 0.155 6.529 0.155 7.424 L 0.155 15.776 C 0.155 16.735 0.695 17.596 1.568 18.031 L 5.266 19.852 C 5.615 20.025 6.014 20.115 6.405 20.115 C 6.878 20.115 7.343 19.984 7.742 19.738 C 8.499 19.278 8.956 18.474 8.956 17.596 L 8.956 10.984 L 10.959 9.844 L 12.962 10.984 L 12.962 17.596 C 12.962 18.474 13.41 19.278 14.175 19.738 C 14.583 19.984 15.039 20.115 15.522 20.115 C 15.912 20.115 16.311 20.025 16.66 19.852 L 20.359 18.031 C 21.231 17.605 21.771 16.735 21.771 15.776 L 21.771 7.424 C 21.771 6.529 21.281 5.693 20.492 5.242 L 12.239 0.541 C 11.848 0.32 11.408 0.205 10.959 0.205 Z\",\n fill: \"currentColor\",\n transform: \"matrix(0.999999, 0.00121, -0.00121, 0.999999, 0.012302, -0.013258)\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgHome, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/home.defd14bf.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgInfoTooltip = function SvgInfoTooltip(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 12,\n viewBox: \"0 0 12 12\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.66658 10.9888C3.65328 11.6481 4.81331 12 6 12C7.5913 12 9.11742 11.3679 10.2426 10.2426C11.3679 9.11742 12 7.5913 12 6C12 4.81331 11.6481 3.65328 10.9888 2.66658C10.3295 1.67989 9.39246 0.910851 8.2961 0.456725C7.19975 0.0025997 5.99335 -0.11622 4.82946 0.115291C3.66557 0.346802 2.59648 0.918247 1.75736 1.75736C0.918247 2.59648 0.346802 3.66557 0.115291 4.82946C-0.11622 5.99335 0.0025997 7.19975 0.456725 8.2961C0.910851 9.39246 1.67989 10.3295 2.66658 10.9888ZM3.14278 1.72387C3.98852 1.15877 4.98284 0.857145 6 0.857145C7.36397 0.857145 8.67208 1.39898 9.63655 2.36345C10.601 3.32793 11.1429 4.63603 11.1429 6C11.1429 7.01716 10.8412 8.01148 10.2761 8.85722C9.71103 9.70296 8.90782 10.3621 7.96809 10.7514C7.02835 11.1406 5.9943 11.2425 4.99668 11.044C3.99906 10.8456 3.08269 10.3558 2.36345 9.63655C1.64421 8.91731 1.1544 8.00094 0.955964 7.00332C0.757526 6.00571 0.859372 4.97165 1.24862 4.03192C1.63787 3.09218 2.29705 2.28898 3.14278 1.72387ZM6 2.57143C5.87285 2.57143 5.74857 2.60913 5.64285 2.67977C5.53713 2.75041 5.45473 2.85081 5.40608 2.96827C5.35742 3.08574 5.34469 3.215 5.36949 3.3397C5.3943 3.4644 5.45553 3.57895 5.54543 3.66885C5.63534 3.75876 5.74988 3.81999 5.87458 3.84479C5.99929 3.8696 6.12854 3.85686 6.24601 3.80821C6.36348 3.75955 6.46388 3.67715 6.53452 3.57144C6.60515 3.46572 6.64286 3.34143 6.64286 3.21429C6.64286 3.04379 6.57513 2.88028 6.45457 2.75972C6.33401 2.63916 6.1705 2.57143 6 2.57143ZM6.42857 8.57143V5.14286H4.71428V6H5.57143V8.57143H4.28571V9.42857H7.71428V8.57143H6.42857Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgInfoTooltip, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/info-tooltip.b98e8a9c.svg\";\nexport { ForwardRef as ReactComponent };","import { Box, Button } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport { ReactComponent as IconCameraMobile } from 'common/assets/icons/icon_camera_mobile.svg';\nimport CameraCustom from './drawer/cameraCustom';\nimport { ReactComponent as Home } from 'common/assets/icons/home.svg';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { ReactComponent as IconInfo } from 'common/assets/icons/info-tooltip.svg';\nimport {\n reset,\n setImageCaptureHelpModal,\n setPreFilter,\n} from 'Store/search/Search';\n\ninterface Props {\n onLoadingMobile?: any;\n}\n\nfunction FooterMobile(props: Props): JSX.Element {\n const [isOpenModalCamera, setOpenModalCamera] = useState<boolean>(false);\n const history = useHistory();\n const {\n search: { imageCaptureHelpModal },\n } = useAppSelector(state => state);\n const dispatch = useAppDispatch();\n\n return (\n <>\n <Box\n className=\"box-footer-mobile\"\n display={'flex'}\n position={'relative'}\n alignItems={'center'}\n height={'100%'}\n justifyContent={'space-between'}\n style={{ paddingLeft: '40px', paddingRight: '40px', height: '64px' }}\n >\n <NavLink\n style={{\n width: '48px',\n height: '48px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '100%',\n backgroundColor:\n history.location.pathname === '/' && !imageCaptureHelpModal\n ? `#E0E0E0`\n : '',\n }}\n activeClassName=\"active\"\n to={'/'}\n className=\"nav-link p-0 menu-children rounded-0\"\n onClick={() => {\n dispatch(reset(''));\n dispatch(setPreFilter({}));\n dispatch(setImageCaptureHelpModal(false));\n }}\n >\n <Home\n color={\n history.location.pathname === '/' && !imageCaptureHelpModal\n ? '#2B2C46'\n : '#AAABB5'\n }\n />\n </NavLink>\n {history.location?.pathname !== '/' && !imageCaptureHelpModal && (\n <Box className=\"box-icon-camera-mobile\">\n <Button\n onClick={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n >\n <IconCameraMobile color=\"#55566B\" />\n </Button>\n </Box>\n )}\n {history.location?.pathname !== '/' && (\n <div\n style={{\n width: '48px',\n height: '48px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '100%',\n backgroundColor: imageCaptureHelpModal ? `#E0E0E0` : '',\n }}\n onClick={() => {\n dispatch(setImageCaptureHelpModal(!imageCaptureHelpModal));\n }}\n >\n <IconInfo\n fontSize={24}\n width={24}\n height={24}\n color={imageCaptureHelpModal ? '#2B2C46' : '#AAABB5'}\n />\n </div>\n )}\n </Box>\n <Box className=\"box-screenshot-camera\">\n <CameraCustom\n isToggle={isOpenModalCamera}\n onToggleModal={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n />\n </Box>\n </>\n );\n}\n\nexport default FooterMobile;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFilterSettings = function SvgFilterSettings(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15 4H12.95C12.7 2.85 11.7 2 10.5 2C9.3 2 8.3 2.85 8.05 4H1V5H8.05C8.3 6.15 9.3 7 10.5 7C11.7 7 12.7 6.15 12.95 5H15V4ZM10.5 6C9.65 6 9 5.35 9 4.5C9 3.65 9.65 3 10.5 3C11.35 3 12 3.65 12 4.5C12 5.35 11.35 6 10.5 6ZM1 12H3.05C3.3 13.15 4.3 14 5.5 14C6.7 14 7.7 13.15 7.95 12H15V11H7.95C7.7 9.85 6.7 9 5.5 9C4.3 9 3.3 9.85 3.05 11H1V12ZM5.5 10C6.35 10 7 10.65 7 11.5C7 12.35 6.35 13 5.5 13C4.65 13 4 12.35 4 11.5C4 10.65 4.65 10 5.5 10Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFilterSettings, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/filter_settings.fa0682a5.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconSearch = function SvgIconSearch(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23.3723 22.117C23.719 22.4637 23.719 23.0257 23.3723 23.3723C23.0257 23.719 22.4637 23.719 22.117 23.3723L16.8475 18.1028C16.3904 17.6457 15.6641 17.6208 15.123 17.9745C11.1608 20.5639 5.82363 19.9525 2.55769 16.3754C-0.967972 12.5138 -0.832726 6.56215 2.86471 2.86471C6.56215 -0.832726 12.5138 -0.967972 16.3754 2.55769C19.9525 5.82363 20.5639 11.1608 17.9745 15.123C17.6208 15.6641 17.6457 16.3904 18.1028 16.8475L23.3723 22.117ZM9.79677 1.80687C5.38428 1.80687 1.80725 5.3839 1.80725 9.79639C1.81214 14.2069 5.38631 17.781 9.79677 17.7859C14.2093 17.7859 17.7863 14.2089 17.7863 9.79639C17.7863 5.3839 14.2093 1.80687 9.79677 1.80687Z\",\n fill: \"#000\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconSearch, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_search.373c3cc4.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFilter = function SvgFilter(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.33333 16H6.66667C6.31305 16 5.97391 15.8595 5.72386 15.6095C5.47381 15.3594 5.33333 15.0203 5.33333 14.6667V9.60667L0.393333 4.66667C0.142942 4.41777 0.00148853 4.07972 0 3.72667V1.33333C0 0.979711 0.140476 0.640573 0.390524 0.390524C0.640573 0.140476 0.979711 0 1.33333 0H14.6667C15.0203 0 15.3594 0.140476 15.6095 0.390524C15.8595 0.640573 16 0.979711 16 1.33333V3.72667C15.9985 4.07972 15.8571 4.41777 15.6067 4.66667L10.6667 9.60667V14.6667C10.6667 15.0203 10.5262 15.3594 10.2761 15.6095C10.0261 15.8595 9.68696 16 9.33333 16ZM1.33333 1.33333V3.72667L6.66667 9.06V14.6667H9.33333V9.06L14.6667 3.72667V1.33333H1.33333Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFilter, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/filter.bc412f08.svg\";\nexport { ForwardRef as ReactComponent };","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQuery = () => {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n}","import { Box, Button } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ReactComponent as IconFilter } from 'common/assets/icons/filter_settings.svg';\n\nimport React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { connectSearchBox, connectStateResults } from 'react-instantsearch-dom';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport {\n reset,\n updateValueTextSearchMobile,\n setPreFilterDropdown,\n setPreFilter,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\nimport { ReactComponent as IconSearch } from 'common/assets/icons/icon_search.svg';\nimport { ReactComponent as FilterIcon } from 'common/assets/icons/filter.svg';\n\nimport { debounce, isEmpty } from 'lodash';\nimport { useQuery } from 'hooks/useQuery';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n onToggleFilterMobile?: any;\n refine?: any;\n allSearchResults?: any;\n}\n\nfunction HeaderMobileComponent(props: Props): JSX.Element {\n const { onToggleFilterMobile, refine } = props;\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector(state => state);\n const { search } = stateGlobal;\n const {\n imageThumbSearchInput,\n textSearchInputMobile,\n preFilter,\n preFilterDropdown,\n valueTextSearch,\n } = search;\n\n const query = useQuery();\n const searchQuery = query.get('query') || '';\n const containerRefInputMobile = useRef<HTMLDivElement>(null);\n const [isShowFilter, setShowFilter] = useState<boolean>(false);\n const history = useHistory();\n const { settings } = useAppSelector<AppState>((state: any) => state);\n\n useEffect(() => {\n if (\n history.location?.pathname === '/result' &&\n (imageThumbSearchInput || textSearchInputMobile)\n ) {\n setShowFilter(true);\n } else {\n setShowFilter(false);\n }\n }, [imageThumbSearchInput, history.location, textSearchInputMobile]);\n\n useEffect(() => {\n if (imageThumbSearchInput !== '') {\n history.push('/result');\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n }\n }, [imageThumbSearchInput, dispatch, refine, history]);\n\n useEffect(() => {\n if (!isEmpty(searchQuery)) {\n dispatch(updateValueTextSearchMobile(searchQuery));\n refine(searchQuery);\n // not an ideal solution: fixes text search not working from landing page\n setTimeout(() => {\n refine(searchQuery);\n }, 100);\n }\n }, [query, refine, dispatch, searchQuery]);\n\n const searchOrRedirect = useCallback(\n debounce((value: any) => {\n if (value) {\n history.push({\n pathname: '/result',\n search: `?query=${value}`,\n });\n } else {\n history.push('/result');\n }\n }, 500),\n [],\n );\n const isPostFilterApplied = useMemo(() => {\n let isApplied = false;\n if (!valueTextSearch?.refinementList) return false;\n Object.keys(valueTextSearch?.refinementList).forEach(key => {\n if (typeof valueTextSearch.refinementList[key] === 'object') {\n isApplied = true;\n return;\n }\n });\n return isApplied;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueTextSearch?.refinementList]);\n\n const onChangeText = (event: any) => {\n // debounceSearch(event.currentTarget.value);\n searchOrRedirect(event.currentTarget.value);\n if (event.currentTarget.value === '') {\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n } else {\n dispatch(updateValueTextSearchMobile(event.currentTarget.value));\n }\n };\n const disablePostFilter = useMemo(() => {\n return settings.postFilterOption && props.allSearchResults?.hits.length > 0\n ? false\n : true;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [settings.postFilterOption, props.allSearchResults?.hits]);\n\n return (\n <div style={{ width: '100%', background: '#fafafa' }}>\n {history.location?.pathname !== '/result' && (\n <Box\n className=\"box-content\"\n style={{\n display: 'flex',\n alignItems: 'center',\n height: '48px',\n borderBottom: '1px solid #e9e9ec',\n background: settings.theme?.headerColor,\n }}\n >\n <NavLink\n to=\"/\"\n style={{ lineHeight: 0, paddingLeft: '10px' }}\n onClick={() => {\n dispatch(reset(''));\n dispatch(setPreFilter({}));\n }}\n >\n <img\n src={settings.theme?.appBarLogoUrl}\n alt=\"logo\"\n style={{\n aspectRatio: 1,\n width: settings.theme?.logoWidth,\n height: settings.theme?.logoHeight,\n }}\n />\n </NavLink>\n </Box>\n )}\n <div\n style={{\n margin: '16px 8px',\n display: 'flex',\n columnGap: '8px',\n alignItems: 'center',\n }}\n >\n <div className=\"wrap-header-mobile\" style={{ height: '56px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n }}\n >\n <div\n ref={containerRefInputMobile}\n id=\"box-input-search\"\n className=\"d-flex w-100\"\n style={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n <Box\n className=\"pre-filter-icon\"\n onClick={() => {\n if (settings.preFilterOption) {\n onToggleFilterMobile(false);\n dispatch(setPreFilterDropdown(!preFilterDropdown));\n }\n }}\n style={{ cursor: settings.preFilterOption ? 'pointer' : '' }}\n >\n {settings.preFilterOption && (\n <div\n className=\"icon-hover\"\n style={{\n ...(!isEmpty(preFilter)\n ? {\n backgroundColor: `${settings.theme?.primaryColor}`,\n }\n : {\n backgroundColor: `#2B2C46`,\n }),\n }}\n >\n <IconFilter color=\"white\" />\n </div>\n )}\n {!settings.preFilterOption && (\n <IconSearch width={16} height={16} />\n )}\n {!isEmpty(preFilter) && (\n <div\n style={{\n position: 'absolute',\n top: '7px',\n left: '35px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n width: '10px',\n height: '10px',\n borderRadius: '100%',\n }}\n >\n <div\n style={{\n width: '8px',\n height: '8px',\n background: settings.theme?.primaryColor,\n borderRadius: '100%',\n }}\n ></div>\n </div>\n )}\n </Box>\n\n <Input\n value={textSearchInputMobile || searchQuery}\n onChange={onChangeText}\n />\n\n {history.location?.pathname !== '/' && textSearchInputMobile && (\n <Button\n onClick={() => {\n if (imageThumbSearchInput) {\n history.push('/result');\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n return;\n }\n dispatch(updateValueTextSearchMobile(''));\n dispatch(reset(''));\n refine('');\n history.push('/');\n }}\n style={{\n // background: '#fff',\n marginRight: '8px',\n border: 0,\n width: '40px',\n height: '40px',\n }}\n >\n <CloseIcon\n style={{\n fontSize: 16,\n color: settings.theme?.secondaryColor,\n }}\n />\n </Button>\n )}\n </div>\n </div>\n </div>\n {isShowFilter && settings.postFilterOption && (\n <div\n style={{\n position: 'relative',\n width: '56px',\n height: '56px',\n padding: ' 8px',\n flexShrink: 0,\n borderRadius: '32px',\n background: '#FAFAFA',\n boxShadow: ' 0px 0px 8px 0px rgba(0, 0, 0, 0.15)',\n }}\n onClick={() => {\n if (disablePostFilter) return;\n onToggleFilterMobile();\n dispatch(setPreFilterDropdown(false));\n }}\n >\n <div\n style={{\n display: 'flex',\n background: `${\n disablePostFilter ? '#F3F3F5' : settings.theme?.primaryColor\n }`,\n borderRadius: '40px',\n width: '40px',\n height: '40px',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <FilterIcon\n color={`${disablePostFilter ? '#E0E0E0' : 'white'}`}\n />\n </div>\n\n {isPostFilterApplied && !disablePostFilter && (\n <div\n style={{\n position: 'absolute',\n top: '8px',\n left: '37px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n width: '10px',\n height: '10px',\n borderRadius: '100%',\n }}\n >\n <div\n style={{\n width: '8px',\n height: '8px',\n background: settings.theme?.primaryColor,\n borderRadius: '100%',\n }}\n ></div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst HeaderMobile = connectSearchBox<any>(\n memo(connectStateResults<Props>(HeaderMobileComponent)),\n);\nexport default HeaderMobile;\n\nconst INPUT_ID = 'mobile-input-search';\n\nconst Input = ({ value, onChange }: any) => {\n useEffect(() => {\n const element = document.getElementById(INPUT_ID);\n const inputEventFn = (keyboardEvent: any) => {\n if (keyboardEvent.key === 'Enter') {\n element?.blur();\n }\n };\n\n element?.addEventListener('keyup', inputEventFn, false);\n\n return () => {\n element?.removeEventListener('scroll', inputEventFn, false);\n };\n }, []);\n const { t } = useTranslation();\n\n return (\n <input\n style={{\n border: '0px',\n width: '100%',\n display: 'flex',\n flexGrow: 1,\n fontSize: 14,\n paddingLeft: '12px',\n paddingRight: '4px',\n color: '#2B2C46',\n outline: 'none',\n borderRadius: '32px',\n }}\n className=\"input-search\"\n placeholder={t('Search')}\n value={value}\n onChange={onChange}\n id={INPUT_ID}\n />\n );\n};\n","import { Box } from '@material-ui/core';\nimport React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport './common.scss';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { reset, setPreFilter } from 'Store/search/Search';\n\nfunction Header(): JSX.Element {\n const dispatch = useAppDispatch();\n const { settings } = useAppSelector(state => state);\n return (\n <Box className=\"box-content\" display={'flex'}>\n <NavLink\n to=\"/\"\n style={{ lineHeight: 0, paddingLeft: '10px' }}\n onClick={() => {\n dispatch(reset(''));\n dispatch(setPreFilter({}));\n }}\n >\n <img\n src={settings.theme?.appBarLogoUrl}\n alt=\"logo\"\n style={{\n aspectRatio: 1,\n width: settings.theme?.logoWidth,\n height: settings.theme?.logoHeight,\n }}\n />\n </NavLink>\n </Box>\n );\n}\n\nexport default Header;\n","import axios from \"axios\";\nimport {NyrisAPISettings} from \"@nyris/nyris-api\";\n\nconst httpClient = axios.create();\n\nexport const createSessionByApi = async (settings: NyrisAPISettings) => {\n const { apiKey, baseUrl} = settings;\n let headers = {\n \"X-Api-Key\": apiKey,\n };\n let response = await httpClient.request({\n method: \"POST\",\n url: `${baseUrl}/find/v1/session`,\n headers,\n });\n return response.data.session;\n};\n","import { Box, Button } from '@material-ui/core';\nimport React from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { visualSearchHelp } from '../constants';\n\ninterface Props {\n handleClose: any;\n}\n\nfunction ImageCaptureHelpModal({ handleClose }: Props) {\n return (\n <Box\n style={{\n paddingBottom: '24px',\n }}\n >\n <Box\n display={'flex'}\n justifyContent={'end'}\n position={'sticky'}\n top={0}\n style={{ background: 'white', width: '100%' }}\n >\n <Button\n onClick={handleClose}\n style={{ paddingTop: '8px', paddingRight: '8px' }}\n >\n <CloseIcon fontSize={'small'} />\n </Button>\n </Box>\n <p\n style={{\n fontSize: '40px',\n lineHeight: '40px',\n fontWeight: 700,\n color: '#2B2C46',\n paddingLeft: '24px',\n paddingRight: '24px',\n }}\n >\n Six ways to optimize visual search\n </p>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n rowGap: '16px',\n marginTop: '16px',\n paddingLeft: '24px',\n paddingRight: '24px',\n }}\n >\n {visualSearchHelp.map((data, index) => {\n return (\n <div\n key={index}\n style={{\n display: 'flex',\n flexDirection: 'column',\n rowGap: '8px',\n }}\n >\n <p\n style={{\n fontSize: '16px',\n lineHeight: '24px',\n fontWeight: 700,\n color: '#2B2C46',\n marginBottom: '0px',\n }}\n >\n {`${index + 1}- ${data.title}`}\n </p>\n <p\n style={{\n fontSize: '14px',\n lineHeight: '20px',\n fontWeight: 400,\n color: '#2B2C46',\n marginBottom: '0px',\n }}\n >\n {data.description}\n </p>\n <div style={{ display: 'flex', columnGap: '16px' }}>\n <div>\n <img src={data.imageLeft} alt=\"\" />\n </div>\n <div>\n <img src={data.imageRight} alt=\"\" />\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </Box>\n );\n}\n\nexport default ImageCaptureHelpModal;\n","import React, { useEffect, useState } from \"react\";\nexport type DynamicWidgetsProps = {\n children: React.ReactNode;\n enabled?: boolean;\n [index: string]: any;\n};\n\nexport function DynamicWidgetsCT({\n children,\n enabled = true,\n ...props\n}: DynamicWidgetsProps): JSX.Element {\n const [isOpen, setOpen] = useState<boolean>();\n useEffect(() => {\n setOpen(enabled);\n }, [enabled]);\n\n return isOpen ? <div {...props}>{children}</div> : <></>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport RemoveIcon from \"@material-ui/icons/Remove\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport { Typography } from \"@material-ui/core\";\n\nexport type LabelPosition = \"bottom\" | \"left\" | \"right\" | \"top\";\n\nexport type IconLabelProps = {\n icon?: any;\n label?: string;\n labelPosition?: LabelPosition;\n className?: string;\n classNameLabel?: string;\n};\n\nexport default function IconLabel({\n icon,\n label,\n labelPosition = \"bottom\",\n className = \"gap-1\",\n classNameLabel = \"\",\n}: IconLabelProps) {\n const [tagIcon, setTagIcon] = useState<string>(\"\");\n // let classNamePosition: string;\n // switch (labelPosition) {\n // case \"top\":\n // classNamePosition = \"flex-col-reverse\";\n // break;\n // case \"left\":\n // classNamePosition = \"flex-row-reverse\";\n // break;\n // case \"right\":\n // classNamePosition = \"flex-row\";\n // break;\n // case \"bottom\":\n // default:\n // classNamePosition = \"flex-col\";\n // break;\n // }\n useEffect(() => {\n setTagIcon(icon);\n }, [icon]);\n\n return (\n <div style={{ display: \"flex\", alignItems: 'center' }}>\n {label && (\n <div className={classNameLabel}>\n <Typography\n style={{\n textTransform: \"none\",\n fontSize: 12,\n color: \"#55566B\",\n fontWeight: 600,\n }}\n >\n {label}\n </Typography>\n </div>\n )}\n {tagIcon === \"remove\" ? (\n <RemoveIcon style={{ color: \"#55566B\" }} />\n ) : (\n <AddIcon style={{ color: \"#55566B\" }} />\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { Variants } from \"framer-motion\";\nimport { useReducedMotion, motion } from \"framer-motion\";\n\nexport type CollapseProps = {\n isCollapsed: boolean;\n className?: string;\n children: React.ReactNode;\n};\n\nconst variants: Variants = {\n collapsed: (shouldReduceMotion: boolean) => {\n return {\n height: shouldReduceMotion ? \"auto\" : 0,\n opacity: 0,\n pointerEvents: \"none\",\n transitionEnd: { display: \"none\" },\n };\n },\n expanded: (shouldReduceMotion: boolean) => {\n return {\n height: shouldReduceMotion ? \"auto\" : \"auto\",\n opacity: 1,\n pointerEvents: \"auto\",\n display: \"block\",\n };\n },\n};\n\nconst transition = {\n ease: [0.16, 1, 0.3, 1],\n duration: 0.6,\n};\n\nexport function Collapse({\n isCollapsed,\n className,\n children,\n}: CollapseProps): JSX.Element {\n const shouldReduceMotion = useReducedMotion();\n\n return (\n <>\n <motion.div\n key=\"collapse\"\n initial=\"collapsed\"\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n variants={variants}\n className={classNames(\"overflow-hidden\", className)}\n transition={transition}\n custom={shouldReduceMotion}\n >\n {children}\n </motion.div>\n </>\n );\n}\n","import { atom } from 'jotai'\nimport { selectAtom, useUpdateAtom } from 'jotai/utils'\nimport { memo, useEffect } from 'react'\nimport isEqual from 'react-fast-compare'\nimport type { StateResultsProvided } from 'react-instantsearch-core'\nimport { connectStateResults } from 'react-instantsearch-dom'\n\nexport type VirtualStateResultsProps = StateResultsProvided\n\nexport type VirtualStateResultsAtomValue = Partial<\n Pick<VirtualStateResultsProps, 'isSearchStalled' | 'searchResults'>\n>\n\nexport const stateResultsAtom = atom<VirtualStateResultsAtomValue>({\n searchResults: undefined,\n isSearchStalled: undefined,\n})\n\nexport const searchResultsAtom = selectAtom(\n stateResultsAtom,\n ({ searchResults }) => searchResults,\n isEqual\n)\nexport const isSearchStalledAtom = selectAtom(\n stateResultsAtom,\n ({ isSearchStalled }) => isSearchStalled\n)\n\nfunction VirtualStateResultsComponent({\n searchResults,\n isSearchStalled,\n}: VirtualStateResultsProps) {\n const setStateResults = useUpdateAtom(stateResultsAtom)\n\n useEffect(() => {\n setStateResults({ searchResults, isSearchStalled })\n }, [setStateResults, searchResults, isSearchStalled])\n\n return null\n}\n\nexport const VirtualStateResults = connectStateResults(\n memo(VirtualStateResultsComponent, isEqual)\n)\n","import { Box, Button, Typography } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport classNames from 'classnames';\nimport { Collapse } from 'components/collapse/collapse';\nimport { useAtomValue } from 'jotai/utils';\nimport type { MouseEventHandler } from 'react';\nimport React, { memo } from 'react';\nimport type {\n CurrentRefinementsProvided,\n SearchResults,\n} from 'react-instantsearch-core';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHasRefinements } from '.';\nimport { searchResultsAtom } from './virtual-state-results';\n\nexport type ExpandablePanelProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n className?: string;\n header?: React.ReactNode | string;\n footer?: string;\n attributes?: string[];\n isOpened?: boolean;\n onToggle?: MouseEventHandler;\n};\n\nfunction ExpandablePanelComponent({\n children,\n className,\n header,\n attributes = [],\n isOpened = false,\n items,\n onToggle,\n}: ExpandablePanelProps) {\n const searchResults = useAtomValue(searchResultsAtom) as SearchResults;\n const hasRefinements = useHasRefinements(searchResults, attributes);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n return (\n <Box>\n <div\n className={classNames(\n 'border-neutral-light',\n {\n hidden: !hasRefinements,\n },\n className,\n )}\n >\n <Button\n className=\"w-full flex items-center justify-between group\"\n aria-expanded={isOpened}\n style={{ paddingLeft: 0 }}\n onClick={e => {\n if (typeof onToggle === 'function') {\n onToggle(e);\n }\n }}\n >\n <div className=\"flex items-center w-full subhead\">\n <Typography\n className=\"fw-700\"\n style={{\n textTransform: 'none',\n fontFamily: 'Source Sans 3 !important',\n fontSize: 14,\n }}\n >\n {header || attributes[0]}\n </Typography>\n </div>\n {!isMobile && (\n <div className=\"text-neutral-dark can-hover:transition-colors can-hover:group-hover:text-neutral-light\">\n {isOpened ? <RemoveIcon /> : <AddIcon />}\n </div>\n )}\n </Button>\n\n <Collapse isCollapsed={!isOpened}>\n <div className=\"mt-4\">{children}</div>\n </Collapse>\n </div>\n </Box>\n );\n}\n\nexport const ExpandablePanelCustom = connectCurrentRefinements<any>(\n memo(ExpandablePanelComponent),\n);\n","import { Box, Button } from '@material-ui/core';\nimport { DynamicWidgetsCT } from 'components/dynamic-widgets/dynamic-widgets';\nimport IconLabel from 'components/icon-label/icon-label';\nimport { atom, useAtom } from 'jotai';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport type {\n CurrentRefinementsProvided,\n SearchResults,\n} from 'react-instantsearch-core';\nimport { RefinementList } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { ExpandablePanelCustom } from './expandable-panel';\nimport { getPanelAttributes, getPanelId } from './refinements';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\n\nexport type ExpandablePanelProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n className?: string;\n header?: React.ReactNode | string;\n attributes?: string[];\n isOpened?: boolean;\n onToggle?: any;\n};\n\nexport type Panels = {\n [key: string]: boolean;\n};\n\nexport function useHasRefinements(\n searchResults: SearchResults,\n attributes: string[] = [],\n) {\n const facets = useMemo(() => {\n const disjunctiveFacets = searchResults?.disjunctiveFacets || [];\n const hierarchicalFacets = searchResults?.hierarchicalFacets || [];\n return [...disjunctiveFacets, ...hierarchicalFacets];\n }, [searchResults]);\n\n const hasRefinements = useMemo(() => {\n let found = !attributes.length;\n\n facets.forEach(facet => {\n attributes?.forEach(attribute => {\n if (facet.name === attribute && facet.data) {\n found = true;\n }\n });\n });\n\n return found;\n }, [facets, attributes]);\n\n return hasRefinements;\n}\n\nfunction togglePanels(panels: Panels, val: boolean) {\n return Object.keys(panels).reduce(\n (acc, panelKey) => ({ ...acc, [panelKey]: val }),\n {},\n );\n}\n\nexport const refinementsPanelsExpandedAtom = atom(\n get =>\n Boolean(Object.values(get(refinementsPanelsAtom)).find(v => v === true)),\n (get, set, update: (prev: boolean) => boolean) => {\n const expanded = update(get(refinementsPanelsExpandedAtom));\n set(\n refinementsPanelsAtom,\n togglePanels(get(refinementsPanelsAtom), expanded),\n );\n },\n);\n\nexport const refinementsPanelsAtom = atom<Panels>({});\n\nfunction WidgetPanel({ children, onToggle, panelId, ...props }: any) {\n const onToggleMemoized = useCallback(\n () => onToggle(panelId),\n [onToggle, panelId],\n );\n\n return (\n <ExpandablePanelCustom onToggle={onToggleMemoized} {...props}>\n {children}\n </ExpandablePanelCustom>\n );\n}\n\nexport default function ExpandablePanelComponent({\n dynamicWidgets = true,\n onApply,\n disjunctiveFacets,\n}: any) {\n const stateGlobal = useAppSelector(state => state);\n const { settings } = stateGlobal;\n const { refinements } = settings;\n const [panels, setPanels] = useAtom(refinementsPanelsAtom);\n const [refinementsPanelsExpanded, setRefinementsPanelsExpanded] = useAtom(\n refinementsPanelsExpandedAtom,\n );\n const history = useHistory();\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { t } = useTranslation();\n\n // Set initial panels value\n useEffect(() => {\n setPanels(prevPanels => ({\n ...prevPanels,\n ...refinements.reduce(\n (acc: any, current: any) => ({\n ...acc,\n [getPanelId(current)]: Boolean(current.isExpanded),\n }),\n {},\n ),\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onToggle = useCallback(\n (panelId: string) => {\n setPanels(prevPanels => {\n return {\n ...prevPanels,\n [panelId]: !prevPanels[panelId],\n };\n });\n },\n [setPanels],\n );\n\n const widgets = useMemo(\n () =>\n refinements.map((refinement: any) => {\n return (\n <RefinementList\n className=\"box-refinement-list\"\n attribute={refinement.attribute}\n {...refinement.options}\n translations={{\n noResults: 'No results',\n placeholder: '',\n }}\n sortBy={['isRefined:desc', 'name:asc']}\n />\n );\n }),\n [refinements],\n );\n\n const widgetsPanels = useMemo(\n () =>\n widgets.map((widget: any, i: any) => {\n const refinement = refinements[i];\n const panelId = getPanelId(refinement);\n const panelAttributes = getPanelAttributes(refinement);\n\n return widget ? (\n <WidgetPanel\n key={panelId}\n panelId={panelId}\n attributes={panelAttributes}\n header={refinement.header}\n isOpened={isMobile ? !panels[panelId] : panels[panelId]}\n onToggle={onToggle}\n >\n {widget}\n </WidgetPanel>\n ) : (\n <></>\n );\n }),\n [widgets, refinements, onToggle, panels, isMobile],\n );\n\n const onTogglePanelsClick = useCallback(() => {\n setRefinementsPanelsExpanded((expanded: boolean) => !expanded);\n }, [setRefinementsPanelsExpanded]);\n\n const handlerApplyfillter = () => {\n onApply();\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n };\n\n return (\n <>\n {!isMobile && (\n <div className=\"wrap-main-header-panel\">\n <Box style={{ borderBottom: '1px solid #E0E0E0' }}>\n <Button\n className=\"text-neutral-darkest\"\n onClick={onTogglePanelsClick}\n style={{ justifyContent: 'flex-end' }}\n >\n <IconLabel\n icon={refinementsPanelsExpanded ? 'remove' : 'add'}\n label={`${\n refinementsPanelsExpanded\n ? t('Collapse all')\n : t('Expand all')\n } `}\n />\n </Button>\n </Box>\n </div>\n )}\n <Box>\n {isMobile && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n position: 'sticky',\n top: '0px',\n zIndex: 100,\n background: 'white',\n alignItems: 'center',\n paddingTop: '10px',\n paddingRight: '10px',\n }}\n >\n <Button onClick={onApply}>\n <CloseIcon />\n </Button>\n </div>\n )}\n <Box\n className=\"box-center-filter\"\n style={{\n ...(isMobile\n ? {\n paddingLeft: '24px',\n paddingRight: '24px',\n overflow: 'auto',\n }\n : {}),\n }}\n >\n <DynamicWidgetsCT enabled={dynamicWidgets}>\n {widgetsPanels}\n </DynamicWidgetsCT>\n </Box>\n </Box>\n {isMobile && (\n <Box\n style={{\n position: 'sticky',\n bottom: 0,\n width: '100%',\n }}\n >\n <Button\n className=\"text-white\"\n style={{\n width: '100%',\n backgroundColor: settings.theme?.primaryColor,\n fontWeight: 700,\n fontSize: 14,\n borderRadius: 0,\n }}\n onClick={handlerApplyfillter}\n >\n APPLY\n </Button>\n </Box>\n )}\n </>\n );\n}\n","import type { Refinement, RefinementWidget } from \"./refinements-type\";\n\nexport function getRefinementPanelId(\n refinement: Refinement | RefinementWidget\n) {\n return refinement?.attributes\n ? refinement.options?.attributes.join(\":\")\n : refinement?.attribute;\n}\n\nexport function getPanelId(refinement: Refinement | RefinementWidget) {\n const widgets = (refinement as Refinement).widgets;\n\n const panelId = [];\n if (widgets?.length) {\n widgets.forEach((refinementWidget: RefinementWidget) =>\n panelId.push(getRefinementPanelId(refinementWidget))\n );\n } else {\n panelId.push(getRefinementPanelId(refinement));\n }\n\n return panelId.join(\":\");\n}\n\nexport function getRefinementPanelAttribute(\n refinement: Refinement | RefinementWidget\n) {\n return refinement?.attribute;\n}\n\nexport function getPanelAttributes(refinement: Refinement | RefinementWidget) {\n const widgets = (refinement as Refinement)?.widgets;\n\n const panelAttributes = [];\n if (widgets?.length) {\n widgets.forEach((refinementWidget: RefinementWidget) =>\n panelAttributes.push(getRefinementPanelAttribute(refinementWidget))\n );\n } else {\n panelAttributes.push(getRefinementPanelAttribute(refinement));\n }\n return panelAttributes;\n}\n","import React, { memo } from 'react';\nimport ExpandablePanelComponent from 'components/PanelResult';\n\nimport { connectStateResults } from 'react-instantsearch-dom';\n\ninterface Props {\n allSearchResults: any;\n onApply: any;\n}\n\nfunction MobilePostFilter(props: Props) {\n return (\n <ExpandablePanelComponent\n disjunctiveFacets={props?.allSearchResults?.disjunctiveFacets}\n onApply={props.onApply}\n />\n );\n}\n\nexport default connectStateResults<Props>(memo(MobilePostFilter));\n","import NyrisAPI, { NyrisAPISettings } from '@nyris/nyris-api';\n\nexport interface Filter {\n key?: string;\n values: string[];\n}\n\nexport const getFilters = async (\n number: number = 10,\n settings: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settings);\n return nyrisApi.getFilters(number);\n};\n\nexport const searchFilters = async (\n key: any = '',\n value: string,\n settingsNyris: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settingsNyris);\n const newValue = value ? value : '';\n return nyrisApi.searchFilters(key, newValue);\n};\n","export function truncateString(str: string, num: number): string {\n if (str?.length > num) {\n return str?.slice(0, num) + '...';\n } else {\n return str;\n }\n}\n","import { Box, Button, Tooltip, Typography } from '@material-ui/core';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport IconSearch from 'common/assets/icons/icon_search.svg';\nimport { getFilters, searchFilters } from 'services/filter';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { setPreFilter } from 'Store/search/Search';\nimport { useMediaQuery } from 'react-responsive';\nimport { isEmpty, pickBy } from 'lodash';\nimport { Skeleton } from '@material-ui/lab';\nimport { truncateString } from 'helpers/truncateString';\n\ninterface Props {\n handleClose?: any;\n // onChangeKeyFilter?: any;\n}\nconst maxFilter = 10;\nfunction PreFilterComponent(props: Props) {\n const { handleClose } = props;\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector(state => state);\n const {\n settings,\n search: { preFilter: keyFilterState },\n } = stateGlobal;\n const [resultFilter, setResultFilter] = useState<any>([]);\n const [keyFilter, setKeyFilter] = useState<Record<string, boolean>>(\n keyFilterState || {},\n );\n\n const [isLoading, setLoading] = useState<boolean>(false);\n const [columns, setColumns] = useState<number>(0);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n const selectedFilter = useMemo(\n () =>\n Object.keys(keyFilter).reduce((count, key) => {\n if (keyFilter[key] === true) {\n return count + 1;\n }\n return count;\n }, 0),\n [keyFilter],\n );\n\n const getDataFilterDesktop = async () => {\n setLoading(true);\n const dataResultFilter = getFilters(1000, settings)\n .then(res => {\n const arrResult =\n res.find(value => value.key === settings.visualSearchFilterKey)\n ?.values || [];\n\n const newResult = arrResult.sort().reduce((a: any, c: any) => {\n if (!c[0]) return a;\n let k = c[0]?.toLocaleUpperCase();\n if (a[k]) a[k].push(c);\n else a[k] = [c];\n return a;\n }, {});\n setResultFilter(newResult);\n setColumns(Object.keys(newResult).length);\n })\n .catch((e: any) => {\n console.log('err getDataFilterDesktop', e);\n })\n .finally(() => {\n setLoading(false);\n });\n\n return dataResultFilter;\n };\n\n useEffect(() => {\n getDataFilterDesktop();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const filterSearchHandler = async (value: any) => {\n if (!value) {\n getDataFilterDesktop();\n return;\n }\n const data = await searchFilters(\n settings.visualSearchFilterKey,\n encodeURIComponent(value),\n settings,\n )\n .then(res => {\n if (res.length > 0) {\n setResultFilter({ [res[0][0].toLocaleUpperCase()]: res });\n if (res.length <= 20) setColumns(1);\n else if (res.length <= 40) setColumns(2);\n else setColumns(4);\n } else {\n setResultFilter({});\n setColumns(4);\n }\n return;\n })\n .catch((e: any) => {\n console.log('err filterSearchHandler', e);\n });\n return data;\n };\n\n const onHandlerSubmitData = () => {\n dispatch(setPreFilter(pickBy(keyFilter, value => !!value)));\n handleClose();\n };\n\n return (\n <Box\n className=\"box-child-component-filter-desktop\"\n display={'flex'}\n flexDirection={'column'}\n style={{ position: 'relative' }}\n >\n <div\n style={{\n background: 'white',\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n position: 'sticky',\n top: 0,\n zIndex: 100,\n }}\n >\n <Typography\n style={{\n color: '#000',\n fontSize: '24px',\n fontWeight: 700,\n paddingLeft: '14px',\n marginBottom: isMobile ? '0px' : '-8px',\n marginTop: isMobile ? '0px' : '24px',\n }}\n >\n {settings.preFilterTitle}\n </Typography>\n\n <Button onClick={handleClose}>\n <CloseIcon />\n </Button>\n </div>\n <Box\n className=\"box-top\"\n display={'flex'}\n justifyContent={'space-between'}\n alignItems={'center'}\n >\n <Box\n className=\"box-input-search-filter\"\n display={'flex'}\n justifyItems={'center'}\n style={isMobile ? { width: '100%' } : undefined}\n >\n <Box\n className=\"icon-search\"\n style={{ marginRight: 11 }}\n display={'flex'}\n justifyContent={'center'}\n alignItems={'center'}\n >\n <img\n style={{ maxWidth: 'fit-content' }}\n src={IconSearch}\n alt=\"\"\n width={18}\n height={18}\n />\n </Box>\n\n <input\n className=\"input-search-filter\"\n placeholder=\"Search\"\n onChange={(e: any) => {\n filterSearchHandler(e.target.value);\n }}\n />\n </Box>\n </Box>\n\n {!isEmpty(keyFilter) && selectedFilter > 0 && (\n <Box\n style={{\n padding: '10px 16px 10px 16px',\n display: 'flex',\n justifyContent: 'space-between',\n backgroundColor: '#FAFAFA',\n }}\n >\n <Box\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n rowGap: '8px',\n columnGap: '8px',\n alignItems: 'baseline',\n fontSize: '12px',\n marginBottom: '4px',\n }}\n >\n {Object.keys(keyFilter).map((key, index) => {\n if (!keyFilter[key]) return <></>;\n return (\n <Box\n key={index}\n className=\"box-keyFilter\"\n style={{ display: 'flex', height: 'fit-content', gap: '8px' }}\n >\n <Typography className=\"keyFilter\">{key}</Typography>\n <Button\n style={{ padding: 0 }}\n onClick={() => setKeyFilter({ ...keyFilter, [key]: false })}\n >\n <CloseIcon style={{ fontSize: 12, color: '#2B2C46' }} />\n </Button>\n </Box>\n );\n })}\n <p\n style={{ fontWeight: 'bold', color: '#000' }}\n >{`${selectedFilter}/${maxFilter}`}</p>\n <Box\n style={{\n color: '#E31B5D',\n fontSize: '12px',\n cursor: 'pointer',\n marginLeft: '12px',\n }}\n onClick={() => {\n setKeyFilter({});\n }}\n >\n Clear all\n </Box>\n </Box>\n </Box>\n )}\n <Box\n className=\"box-bottom\"\n height={'100%'}\n style={\n isMobile\n ? {\n columnCount: 1,\n marginBottom: keyFilter ? '50px' : '0px',\n }\n : columns <= 4\n ? {\n columnCount: columns,\n height: '100%',\n padding: '24px 24px 40px 24px',\n backgroundColor: '#FAFAFA',\n }\n : {\n columnCount: 4,\n padding: '24px 24px 40px 24px',\n backgroundColor: '#FAFAFA',\n }\n }\n >\n {Object.entries(resultFilter).map(([key, value]: any, i: any) => {\n return (\n <Box className=\"box-group-items\" key={key}>\n <Box\n style={{\n display: 'flex',\n flexDirection: 'column',\n rowGap: '12px',\n width: '100%',\n }}\n >\n <Typography\n style={{\n fontWeight: 'bold',\n color: '#000',\n fontSize: '12px',\n }}\n >\n {key}\n </Typography>\n\n {value.map((item: any, index: any) => {\n return (\n <Tooltip\n key={item}\n title={item}\n placement=\"top\"\n arrow={true}\n disableHoverListener={item.length < 35}\n >\n <Box\n aria-label={item}\n style={{\n cursor: 'pointer',\n fontSize: '12px',\n minHeight: '20px',\n color: '#2B2C46',\n width: '100%',\n maxWidth: 'fit-content',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n backgroundColor: keyFilter[item] ? '#E9E9EC' : '',\n borderRadius: 8,\n paddingLeft: '8px',\n paddingRight: '8px',\n }}\n onClick={() => {\n if (selectedFilter < maxFilter) {\n setKeyFilter({\n ...keyFilter,\n [item]: !keyFilter[item],\n });\n }\n }}\n >\n {truncateString(item, !isMobile ? 35 : 35)}\n </Box>\n </Tooltip>\n );\n })}\n </Box>\n </Box>\n );\n })}\n {isLoading && (\n <Box style={{ columnCount: isMobile ? 1 : 4 }}>\n {Array(12)\n .fill('')\n .map((_, index) => {\n return (\n <Box key={index} mb={5}>\n <Skeleton animation={'pulse'} height={30} width={60} />\n {Array(6)\n .fill('')\n .map((_, index) => (\n <Skeleton animation={'pulse'} height={30} />\n ))}\n </Box>\n );\n })}\n </Box>\n )}\n {isEmpty(resultFilter) && !isLoading && (\n <Typography>No result found</Typography>\n )}\n </Box>\n {!isMobile && (\n <Box\n className=\"footer\"\n style={{ height: 64, marginTop: 'auto' }}\n display={'flex'}\n >\n <Button\n className=\"button-left\"\n style={{\n width: '50%',\n height: '64px',\n backgroundColor: '#2B2C46',\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n textTransform: 'none',\n paddingLeft: '16px',\n }}\n onClick={() => handleClose()}\n >\n Cancel\n </Button>\n <Button\n className=\"button-right\"\n style={{\n width: '50%',\n backgroundColor: settings.theme?.primaryColor,\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n textTransform: 'none',\n paddingLeft: '16px',\n }}\n onClick={() => onHandlerSubmitData()}\n >\n Apply\n </Button>\n </Box>\n )}\n {isMobile && (\n <Box\n className=\"footer\"\n style={{\n height: 64,\n marginTop: 'auto',\n position: 'fixed',\n bottom: '0px',\n left: '0px',\n width: '100vw',\n }}\n display={'flex'}\n >\n <Button\n className=\"button-left\"\n style={{\n width: '50%',\n backgroundColor: '#000000',\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => handleClose()}\n >\n Cancel\n </Button>\n <Button\n className=\"button-right\"\n style={{\n width: '50%',\n backgroundColor: settings.theme?.primaryColor,\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => onHandlerSubmitData()}\n >\n Apply\n </Button>\n </Box>\n )}\n </Box>\n );\n}\n\nexport default PreFilterComponent;\n","import React, { ReactNode, useState } from 'react';\nimport HeaderMobile from './HeaderMobile';\nimport { Box } from '@material-ui/core';\nimport {\n setPreFilterDropdown,\n setImageCaptureHelpModal,\n} from 'Store/search/Search';\nimport { isUndefined } from 'lodash';\nimport ImageCaptureHelpModal from './ImageCaptureHelpModal';\nimport MobilePostFilter from './MobilePostFilter';\nimport PreFilterComponent from './pre-filter';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\nimport FooterMobile from './FooterMobile';\n\nfunction AppMobile({ children }: { children: ReactNode }) {\n const dispatch = useAppDispatch();\n const { search } = useAppSelector<AppState>((state: any) => state);\n const { preFilterDropdown, imageCaptureHelpModal } = search;\n const [isOpenFilter, setOpenFilter] = useState<boolean>(false);\n\n return (\n <>\n <div className=\"wrap-mobile\">\n <div className=\"box-header-mobile-main\">\n <HeaderMobile\n onToggleFilterMobile={(show: boolean) => {\n setOpenFilter(isUndefined(show) ? !isOpenFilter : show);\n }}\n />\n </div>\n <div\n style={{\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n overflowY: 'auto',\n overflowX: 'hidden',\n height: '100%',\n }}\n >\n {children}\n </div>\n <div\n className=\"footer-wrap-main\"\n style={{\n zIndex: 999,\n }}\n >\n <FooterMobile />\n </div>\n </div>\n <Box\n className={`box-filter ${isOpenFilter ? 'open' : 'close'} `}\n position={'absolute'}\n style={{\n top: '0px',\n height: '100%',\n width: '100%',\n }}\n >\n <MobilePostFilter\n onApply={() => {\n setOpenFilter(!isOpenFilter);\n }}\n />\n </Box>\n\n {preFilterDropdown && (\n <Box\n className={`box-filter open`}\n position={'absolute'}\n style={{ top: '0px', height: '100%', width: '100%', zIndex: 999 }}\n >\n <div style={{ width: '100%' }} className={'wrap-filter-desktop'}>\n <div className={'bg-white box-filter-desktop isMobile'}>\n <PreFilterComponent\n handleClose={() =>\n dispatch(setPreFilterDropdown(!preFilterDropdown))\n }\n />\n </div>\n </div>\n </Box>\n )}\n\n {imageCaptureHelpModal && (\n <Box\n className={`box-filter open`}\n position={'absolute'}\n style={{\n top: '0px',\n width: '100%',\n zIndex: 100,\n }}\n >\n <div style={{ width: '100%' }} className={'wrap-filter-desktop'}>\n <div className={'bg-white box-filter-desktop isMobile'}>\n <ImageCaptureHelpModal\n handleClose={() =>\n dispatch(setImageCaptureHelpModal(!imageCaptureHelpModal))\n }\n />\n </div>\n </div>\n </Box>\n )}\n </>\n );\n}\n\nexport default AppMobile;\n","import { Box } from '@material-ui/core';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst LoadingSvg = () => {\n return (\n <svg\n width={150}\n height={150}\n viewBox=\"0 0 150 150\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"loading-spinner\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n 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\"\n fill=\"url(#paint0_linear_2236_26778)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_2236_26778\"\n x1={75}\n y1={0}\n x2={75}\n y2={150}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#3E36DC\" />\n <stop offset={0.916667} stopColor=\"#1E1F31\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nconst Loading = () => {\n const { t } = useTranslation();\n return (\n <Box\n className=\"loadingSpinCT\"\n style={{\n top: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <p\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n fontSize: 16,\n color: '#fff',\n fontWeight: 300,\n }}\n >\n {t('loading')}\n </p>\n <LoadingSvg />\n </Box>\n );\n};\n\nexport default Loading;\n","import { Box } from '@material-ui/core';\nimport { MultipleQueriesQuery } from '@algolia/client-search';\nimport algoliasearch from 'algoliasearch/lite';\nimport { ReactNode } from 'components/common';\nimport React, { memo, useEffect, useMemo, useState } from 'react';\nimport { InstantSearch } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport {\n changeValueTextSearch,\n onResetRequestImage,\n setUpdateSession,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { AlgoliaSettings, AppState } from '../types';\nimport './appMobile.scss';\nimport './common.scss';\nimport FooterMobile from './FooterMobile';\nimport HeaderMobile from './HeaderMobile';\nimport Header from './Header';\nimport { createSessionByApi } from 'services/session';\nimport { isUndefined } from 'lodash';\nimport AppMobile from './AppMobile';\nimport jQuery from 'jquery';\nimport Loading from './Loading';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { translations } from 'translations';\nimport { useAuth0 } from '@auth0/auth0-react';\n\ndeclare var psol: any;\n\njQuery(document).ready(function () {\n psol.core.setUserInfo({\n server_type: 'oem_apps_cadenas_webcomponentsdemo',\n title: 'Herr',\n firstname: 'Max',\n lastname: 'Mustermann',\n userfirm: 'CADENAS GmbH',\n street: 'Berliner Allee 28 b+c',\n zip: '86153',\n city: 'Augsburg',\n country: 'de',\n phone: '+49 (0) 821 2 58 58 0-0',\n fax: '+49 (0) 821 2 58 58 0-999',\n email: 'info@cadenas.de',\n });\n psol.core.setServiceBaseUrl('https://webapi.partcommunity.com');\n});\n\ni18n.use(initReactI18next).init({\n resources: translations,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n returnNull: false,\n});\n\nfunction Layout({ children }: ReactNode): JSX.Element {\n const dispatch = useAppDispatch();\n const { settings, search } = useAppSelector<AppState>((state: any) => state);\n const { valueTextSearch, loadingSearchAlgolia } = search;\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const [isOpenFilter, setOpenFilter] = useState<boolean>(false);\n const history = useHistory();\n let isShowHeaderMobile =\n (isMobile && history.location?.pathname === '/result') ||\n history.location?.pathname === '/';\n const language = useAppSelector(state => state.settings.language);\n const { isAuthenticated } = useAuth0();\n const { auth0 } = settings;\n const showApp = !auth0.enabled || (auth0.enabled && isAuthenticated);\n i18n.changeLanguage(language);\n\n useEffect(() => {\n const createSession = async () => {\n let payload = await createSessionByApi(settings);\n dispatch(setUpdateSession(payload));\n };\n\n createSession().catch(console.log);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (history.location?.pathname === '/') {\n document.title = settings.appTitle || '';\n dispatch(onResetRequestImage(''));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [history.location]);\n\n let HeaderApp: any;\n let FooterApp: any;\n let classNameBoxVersion: string = 'newVersion';\n if (isMobile) {\n classNameBoxVersion = 'mobile';\n FooterApp = FooterMobile;\n HeaderApp = HeaderMobile;\n } else {\n HeaderApp = Header;\n }\n\n const conditionalQuery = useMemo(() => {\n const searchClient = algoliasearch(appId, apiKey);\n searchClient.initIndex(indexName);\n return {\n ...searchClient,\n search(requests: MultipleQueriesQuery[]) {\n if (\n requests.every(\n (request: MultipleQueriesQuery) =>\n !request.params?.query &&\n (!request.params?.filters ||\n request.params?.filters.endsWith('<score=1>')),\n )\n ) {\n // Here we have to do something else\n return Promise.resolve({\n results: requests.map(() => ({\n hits: [],\n nbHits: 0,\n nbPages: 0,\n processingTimeMS: 0,\n })),\n });\n }\n return searchClient.search(requests);\n },\n };\n }, [apiKey, appId, indexName]);\n\n // First we get the viewport height and we multiple it by 1% to get a value for a vh unit\n let vh = window.innerHeight * 0.01;\n // Then we set the value in the --vh custom property to the root of the document\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n useEffect(() => {\n const handleResize = () => {\n let vh = window.innerHeight * 0.01;\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return (\n <div style={{ position: 'relative' }}>\n {loadingSearchAlgolia && (\n <Box className=\"box-wrap-loading\" style={{ zIndex: 99999999 }}>\n <Loading />\n </Box>\n )}\n <InstantSearch\n indexName={indexName}\n searchClient={conditionalQuery}\n searchState={valueTextSearch}\n onSearchStateChange={state => {\n if (state.page && state.query !== undefined) {\n dispatch(changeValueTextSearch(state));\n }\n }}\n >\n {isMobile && showApp && <AppMobile>{children}</AppMobile>}\n {!isMobile && showApp && (\n <div className={`layout-main-${classNameBoxVersion}`}>\n <div\n className={\n !isMobile\n ? `box-header-${classNameBoxVersion}-main`\n : isShowHeaderMobile\n ? `box-header-${classNameBoxVersion}-main`\n : ''\n }\n style={{\n ...(classNameBoxVersion === 'newVersion'\n ? { background: settings.theme?.headerColor }\n : {}),\n }}\n >\n <HeaderApp\n onToggleFilterMobile={(show: boolean) => {\n setOpenFilter(isUndefined(show) ? !isOpenFilter : show);\n }}\n />\n </div>\n\n <div className={`box-body-${classNameBoxVersion}-wrap-main`}>\n {children}\n </div>\n {isMobile && (\n <div className=\"footer-wrap-main\">\n <FooterApp />\n </div>\n )}\n </div>\n )}\n {!showApp && <> {children}</>}\n </InstantSearch>\n </div>\n );\n}\n\nexport default memo(Layout);\n","export const translations = {\n en: {\n translation: {\n Search: 'Search',\n 'Drag and drop': 'Drag and drop',\n 'an image here': 'an image here',\n 'Manufacturer Number': 'Manufacturer No.',\n 'Mfr. No.': 'Mfr. No.',\n 'Close group': 'Close group',\n 'Show group': 'Show group',\n 'Adjust the search frame around your object for improved results':\n 'Adjust the search frame around your object for improved results',\n 'Crop the image for better results': 'Crop the image for better results',\n 'Items per page': 'Items per page',\n 'Search with an image': 'Search with an image',\n 'Clear text search': 'Clear text search',\n 'View details': 'View details',\n 'Clear image search': 'Clear image search ',\n 'Add or change pre-filter': 'Add or change pre-filter',\n 'Expand all': 'Expand all',\n 'Collapse all': 'Collapse all',\n Brand: 'Brand',\n loading: 'loading',\n 'No products were found matching your search criteria.':\n 'No products were found matching your search criteria.',\n 'Please upload an image or enter a keyword to search.':\n 'Please upload an image or enter a keyword to search.',\n },\n },\n de: {\n translation: {\n Search: 'Suche',\n 'Drag and drop': 'Bild hierher ziehen',\n 'an image here': '',\n 'Mfr. No.': 'Herst. Teile-Nr.',\n 'Manufacturer Number': 'Herstellerteilenummer',\n 'Close group': 'Schließe Gruppe',\n 'Show group': 'Zeige Gruppe',\n 'Adjust the search frame around your object for improved results':\n 'Anpassen des Rahmens für bessere Ergebnisse',\n 'Crop the image for better results': 'Zuschneiden für bessere Ergebnisse',\n 'Items per page': 'Artikel pro Seite',\n 'Search with an image': 'Bildsuche',\n 'Clear text search': 'Suchtext löschen',\n 'View details': 'Details anzeigen',\n 'Clear image search': 'Bildsuche zurück setzen',\n 'Add or change pre-filter': 'Vorfilter hinzufügen oder ändern',\n 'Expand all': 'Alles anzeigen',\n 'Collapse all': 'Alles einklappen',\n Brand: 'Marke',\n loading: 'Lädt',\n 'No products were found matching your search criteria.':\n 'Keine Produkte entsprechen Ihren Suchkriterien.',\n 'Please upload an image or enter a keyword to search.':\n 'Für die Suche bitte Bild hochladen oder Stichwort eingeben.',\n },\n },\n pt: {\n translation: {\n Search: 'Busca',\n 'Drag and drop': 'Escolha uma imagem',\n 'an image here': '',\n 'Manufacturer Number': 'Número do fabricante',\n 'Mfr. No.': 'Nr. do Fab',\n 'Close group': 'Fechar grupo',\n 'Show group': 'Mostrar grupo',\n 'Adjust the search frame around your object for improved results':\n 'Ajuste a caixa de busca para melhores resultados',\n 'Crop the image for better results':\n 'Ajuste o campo de imagem para melhores resultados',\n 'Items per page': 'Itens por página',\n 'Search with an image': 'Busque com uma imagem',\n 'Clear text search': 'Limpar busca',\n 'View details': 'Ver detalhes',\n 'Clear image search': 'Limpar imagem',\n 'Add or change pre-filter': 'Adicionar ou selecionar pre-filtro',\n 'Expand all': 'Expandir',\n 'Collapse all': 'esconder tudo',\n Brand: 'Marca',\n loading: 'Carregando',\n 'No products were found matching your search criteria.':\n 'Nenhum produto foi encontrado com estes critérios ',\n 'Please upload an image or enter a keyword to search.':\n 'Faça o upload de uma imagem ou busque via texto',\n },\n },\n};\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconUploadDownward = function SvgIconUploadDownward(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 48,\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M22.7016 39.816L22.6416 39.7584H22.6392L11.1192 28.2384C10.3704 27.4896 10.3704 26.2728 11.1192 25.524C11.4816 25.1616 11.964 24.9624 12.4776 24.9624C12.9912 24.9624 13.4736 25.1616 13.836 25.524L22.0776 33.7656V1.92C22.0776 0.8616 22.9392 0 23.9976 0C25.056 0 25.9176 0.8616 25.9176 1.92V33.7656L34.1592 25.524C34.5216 25.1616 35.004 24.9624 35.5176 24.9624C36.0312 24.9624 36.5136 25.1616 36.876 25.524C37.6248 26.2728 37.6248 27.4896 36.876 28.2384L25.356 39.7584C25.2672 39.8472 25.1688 39.9288 25.0632 39.9984C25.0176 40.0296 24.9648 40.0584 24.912 40.0848L24.9081 40.0869C24.8472 40.1197 24.7907 40.1501 24.732 40.1736C24.672 40.1976 24.6072 40.2192 24.5448 40.236C24.4872 40.2552 24.432 40.2696 24.3744 40.2816C24.2496 40.308 24.1224 40.32 23.9976 40.32C23.8728 40.32 23.7456 40.3056 23.6208 40.2816C23.5632 40.2696 23.508 40.2552 23.4528 40.236C23.388 40.2192 23.3256 40.2 23.2632 40.1736C23.2032 40.1496 23.148 40.1208 23.0928 40.0896C23.0328 40.0608 22.9824 40.032 22.932 39.9984C22.8504 39.9432 22.7736 39.8808 22.7016 39.816ZM44.16 34.56C44.16 33.5016 45.0216 32.64 46.08 32.64C47.1384 32.64 48 33.5016 48 34.56V46.08C48 47.1384 47.1384 48 46.08 48H1.92C0.8616 48 0 47.1384 0 46.08V34.56C0 33.5016 0.8616 32.64 1.92 32.64C2.9784 32.64 3.84 33.5016 3.84 34.56V44.16H44.16V34.56Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconUploadDownward, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/IconUploadDownward.6b47ab39.svg\";\nexport { ForwardRef as ReactComponent };","import { Box } from '@material-ui/core';\nimport React, { memo } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport {\n setSearchResults,\n setRequestImage,\n setImageSearchInput,\n updateStatusLoading,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { showFeedback } from 'Store/nyris/Nyris';\nimport { useHistory } from 'react-router-dom';\nimport { ReactComponent as IconDownload } from 'common/assets/icons/IconUploadDownward.svg';\n\nimport { RectCoords } from '@nyris/nyris-api';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty } from 'lodash';\nimport Loading from './Loading';\n\ninterface Props {\n acceptTypes: any;\n onChangeLoading?: any;\n isLoading?: boolean;\n}\n\nfunction DragDropFile(props: Props) {\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { onChangeLoading, isLoading } = props;\n const searchState = useAppSelector(state => state);\n const {\n settings,\n search: { preFilter },\n } = searchState;\n const { t } = useTranslation();\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: async (fs: File[]) => {\n history.push('/result');\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n onChangeLoading(true);\n let payload: any;\n let filters: any[] = [];\n console.log('fs', fs);\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n let region: RectCoords | undefined;\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n return findByImage({\n image,\n settings,\n region,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n }).then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n onChangeLoading(false);\n dispatch(updateStatusLoading(false));\n return dispatch(showFeedback());\n });\n },\n });\n\n return (\n <Box\n className={`box-content-main`}\n style={{ marginTop: 32, paddingTop: 0 }}\n >\n {isLoading && <Loading />}\n\n <div\n className={`box-border-none`}\n style={{ position: 'relative' }}\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n <>\n <Box\n className={`box-content-drop ${isDragActive ? 'drag-active' : ''}`}\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n <Box style={{ marginBottom: 16 }}>\n <IconDownload width={48} height={48} />\n </Box>\n <label htmlFor=\"select_file\" className=\"\" style={{ fontSize: 14 }}>\n <span className=\"fw-700 text-f14\" style={{ paddingRight: '4px' }}>\n {t('Drag and drop')}\n </span>\n {t('an image here')}\n </label>\n <input\n {...getInputProps()}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n className=\"inputFile\"\n placeholder=\"Choose photo\"\n style={{ display: 'block', cursor: 'pointer' }}\n />\n </Box>\n </>\n </div>\n </Box>\n );\n}\n\nexport default memo(DragDropFile);\n","import React from 'react';\nimport Modal from '@material-ui/core/Modal';\n\ninterface Props {\n children: JSX.Element;\n openModal: boolean;\n handleClose: (e: any) => void;\n classNameModal?: string;\n classNameComponentChild?: string;\n rounded?: boolean;\n}\n\nfunction DefaultModal(props: Props): JSX.Element {\n const {\n children,\n openModal = false,\n handleClose,\n classNameModal,\n classNameComponentChild,\n rounded = true,\n } = props;\n\n return (\n <Modal\n open={openModal}\n onClose={handleClose}\n className={`modal-container ${classNameModal || ''}`}\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n // BackdropProps={{\n // style: {\n // backgroundColor: '#2B2C46',\n // opacity: 0.85,\n // },\n // }}\n >\n <div\n className={classNameComponentChild}\n style={{\n overflowY: 'auto',\n maxHeight: '95vh',\n borderRadius: rounded ? 8 : 0,\n }}\n >\n {children}\n </div>\n </Modal>\n );\n}\n\nexport default DefaultModal;\n","import { Box, Button, Tooltip } from '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearOutlinedIcon from '@material-ui/icons/ClearOutlined';\nimport CloseIcon from '@material-ui/icons/Close';\nimport IconCamera from 'common/assets/icons/camera.svg';\nimport { useQuery } from 'hooks/useQuery';\nimport { debounce, isEmpty } from 'lodash';\nimport React, { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { connectSearchBox } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport { ReactComponent as IconFilter } from 'common/assets/icons/filter_settings.svg';\nimport { ReactComponent as IconSearch } from 'common/assets/icons/icon_search.svg';\n\nimport {\n reset,\n setImageSearchInput,\n setRequestImage,\n setSearchResults,\n updateStatusLoading,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport DefaultModal from 'components/modal/DefaultModal';\nimport PreFilterComponent from 'components/pre-filter';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { useTranslation } from 'react-i18next';\n\nconst SearchBox = (props: any) => {\n const { refine, onToggleFilterMobile }: any = props;\n // const containerRefInputMobile = useRef<HTMLDivElement>(null);\n const stateGlobal = useAppSelector(state => state);\n const { search, settings } = stateGlobal;\n const { imageThumbSearchInput, preFilter } = search;\n const focusInp: any = useRef<HTMLDivElement | null>(null);\n const history = useHistory();\n const [valueInput, setValueInput] = useState<string>('');\n const dispatch = useAppDispatch();\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const query = useQuery();\n const [isOpenModalFilterDesktop, setToggleModalFilterDesktop] =\n useState<boolean>(false);\n const { t } = useTranslation();\n useEffect(() => {\n if (focusInp?.current) {\n focusInp?.current.focus();\n }\n }, [focusInp]);\n\n useEffect(() => {\n const searchQuery = query.get('query') || '';\n if (!isEmpty(searchQuery)) {\n setValueInput(searchQuery);\n refine(searchQuery);\n // not an ideal solution: fixes text search not working from landing page\n setTimeout(() => {\n refine(searchQuery);\n }, 100);\n }\n }, [query, refine]);\n\n useEffect(() => {\n if (imageThumbSearchInput) {\n setValueInput('');\n refine('');\n history.push('/result');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [imageThumbSearchInput]);\n\n const searchOrRedirect = useCallback(\n debounce((value: any) => {\n if (value) {\n history.push({\n pathname: '/result',\n search: `?query=${value}`,\n });\n } else {\n history.push('/result');\n }\n }, 500),\n [],\n );\n\n const { getInputProps } = useDropzone({\n onDrop: async (fs: File[]) => {\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n let payload: any;\n let filters: any[] = [];\n let region: RectCoords | undefined;\n\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n return findByImage({\n image,\n settings,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n region,\n })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n dispatch(updateStatusLoading(false));\n })\n .catch((e: any) => {\n console.log('error input search', e);\n dispatch(updateStatusLoading(false));\n });\n },\n });\n\n const onChangeText = (event: any) => {\n setValueInput(event.currentTarget.value);\n // debounceSearch(event.currentTarget.value);\n searchOrRedirect(event.currentTarget.value);\n if (event.currentTarget.value === '') {\n setValueInput('');\n refine('');\n }\n };\n\n return (\n <div className=\"wrap-input-search-field\">\n <div className=\"box-input-search d-flex\">\n <form noValidate action=\"\" role=\"search\">\n <Box className=\"box-inp\">\n <Tooltip\n title={\n !isEmpty(preFilter)\n ? Object.keys(preFilter).join(', ')\n : t('Add or change pre-filter')\n }\n placement=\"top\"\n arrow={true}\n disableHoverListener={!settings.preFilterOption}\n >\n <Box\n className=\"pre-filter-icon\"\n style={{\n cursor: settings.preFilterOption ? 'pointer' : 'default',\n }}\n onClick={() =>\n settings.preFilterOption\n ? setToggleModalFilterDesktop(true)\n : false\n }\n >\n {settings.preFilterOption && (\n <div\n className=\"icon-hover\"\n style={{\n ...(!isEmpty(preFilter)\n ? {\n backgroundColor: `${settings.theme?.primaryColor}`,\n }\n : {\n backgroundColor: '#2B2C46',\n }),\n }}\n >\n <IconFilter color=\"white\" />\n </div>\n )}\n {!settings.preFilterOption && (\n <IconSearch width={16} height={16} />\n )}\n {!isEmpty(preFilter) && (\n <div\n style={{\n position: 'absolute',\n top: '5px',\n left: '35px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n width: '12px',\n height: '12px',\n borderRadius: '100%',\n }}\n >\n <div\n style={{\n width: '8px',\n height: '8px',\n background: settings.theme?.primaryColor,\n borderRadius: '100%',\n strokeWidth: '2px',\n }}\n ></div>\n </div>\n )}\n </Box>\n </Tooltip>\n <Box\n style={{\n height: '75%',\n order: 1,\n }}\n >\n {imageThumbSearchInput && (\n <Box\n style={{\n border: `2px solid ${settings.theme?.primaryColor}`,\n backgroundColor: `${settings.theme?.primaryColor}26`,\n marginRight: '5px',\n }}\n className=\"box-image-search-thumb\"\n display={'flex'}\n >\n <img\n src={imageThumbSearchInput}\n style={{ objectFit: 'contain' }}\n alt=\"img_search\"\n />\n <Tooltip\n title={t('Clear image search')}\n placement=\"top\"\n arrow={true}\n >\n <button\n type=\"button\"\n onClick={() => {\n if (!valueInput) {\n dispatch(reset(''));\n history.push('/');\n }\n dispatch(reset(''));\n refine(valueInput);\n }}\n >\n <CloseIcon\n style={{\n fontSize: 20,\n color: settings.theme?.primaryColor,\n }}\n />\n </button>\n </Tooltip>\n </Box>\n )}\n </Box>\n\n <input\n style={{\n border: '0px',\n width: '100%',\n fontSize: 14,\n color: '#2B2C46',\n }}\n className=\"input-search\"\n placeholder={t('Search')}\n value={valueInput}\n onChange={onChangeText}\n ref={focusInp}\n />\n </Box>\n\n {history.location.pathname === '/result' && valueInput && (\n <Button\n className=\"btn-clear-text\"\n onClick={() => {\n if (imageThumbSearchInput) {\n setValueInput('');\n refine('');\n return;\n }\n setValueInput('');\n refine('');\n dispatch(reset(''));\n history.push('/');\n }}\n >\n <Tooltip\n title={t('Clear text search')}\n placement=\"top\"\n arrow={true}\n >\n <ClearOutlinedIcon style={{ fontSize: 16, color: '#2B2C46' }} />\n </Tooltip>\n </Button>\n )}\n {!isMobile ? (\n <div className=\"wrap-box-input-mobile d-flex\">\n <input\n accept=\"image/*\"\n id=\"icon-button-file\"\n type=\"file\"\n style={{ display: 'none' }}\n {...getInputProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n />\n <Tooltip\n title={t('Search with an image')}\n placement=\"top\"\n arrow={true}\n >\n <label htmlFor=\"icon-button-file\">\n <IconButton\n color=\"primary\"\n aria-label=\"upload picture\"\n component=\"span\"\n style={{\n width: 32,\n height: 32,\n borderRadius: '100%',\n padding: 7,\n }}\n >\n <img src={IconCamera} alt=\"\" width={18} height={18} />\n </IconButton>\n </label>\n </Tooltip>\n </div>\n ) : (\n <Box>\n <Button\n className=\"btn-mobile-filter\"\n onClick={onToggleFilterMobile}\n >\n <IconFilter width={18} height={18} />\n </Button>\n </Box>\n )}\n </form>\n </div>\n {settings.preFilterOption && (\n <DefaultModal\n openModal={isOpenModalFilterDesktop}\n handleClose={() => setToggleModalFilterDesktop(false)}\n classNameModal=\"wrap-filter-desktop\"\n classNameComponentChild=\"bg-white box-filter-desktop\"\n >\n <PreFilterComponent\n handleClose={() => setToggleModalFilterDesktop(false)}\n />\n </DefaultModal>\n )}\n </div>\n );\n};\n\nconst CustomSearchBox = connectSearchBox<any>(memo(SearchBox));\nexport default CustomSearchBox;\n","import { Box } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport './common.scss';\nimport { cadExtensions } from '@nyris/nyris-api';\nimport algoliasearch from 'algoliasearch/lite';\nimport DragDropFile from 'components/DragDropFile';\nimport CustomSearchBox from 'components/input/inputSearch';\nimport { connectInfiniteHits } from 'react-instantsearch-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { AlgoliaSettings } from '../../types';\n\nfunction AppMD() {\n const { settings } = useAppSelector(state => state);\n const [isLoading, setLoading] = useState<boolean>(false);\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const searchClient = algoliasearch(appId, apiKey);\n searchClient.initIndex(indexName);\n\n const acceptTypes = ['image/*']\n .concat(settings.cadSearch ? cadExtensions : [])\n .join(',');\n\n const InfiniteHits = ({ hits }: any) => {\n return <div></div>;\n };\n\n const onChangeLoading = (value: boolean) => {\n setLoading(value);\n };\n\n const CustomInfiniteHits = connectInfiniteHits(InfiniteHits);\n\n return (\n <Box className={`box-content-main ${isLoading ? 'loading' : ''}`}>\n <Box className=\"box-content_top\" style={{ position: 'relative' }}>\n {settings.headerText && (\n <Box\n className=\"fw-700 text-f32 text-dark2\"\n style={{ position: 'absolute', bottom: '49px' }}\n >\n <h1>{settings.headerText}</h1>\n </Box>\n )}\n <div className=\"wrap-input-search\">\n <div style={{ display: 'none' }}>\n <CustomInfiniteHits />\n </div>\n <CustomSearchBox />\n </div>\n </Box>\n <Box className=\"box-content_bottom\">\n <DragDropFile\n acceptTypes={acceptTypes}\n isLoading={isLoading}\n onChangeLoading={onChangeLoading}\n />\n </Box>\n </Box>\n );\n}\n\nexport default AppMD;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgTakePhoto = function SvgTakePhoto(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 121,\n height: 96,\n viewBox: \"0 0 121 96\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"g\", {\n style: {\n mixBlendMode: \"multiply\"\n }\n }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M81.7314 54.5169C81.7314 66.4489 71.985 76.1561 60.0049 76.1561C48.0248 76.1561 38.2785 66.4489 38.2785 54.5169C38.2785 42.5849 48.0248 32.8777 60.0049 32.8777C71.985 32.8777 81.7314 42.5849 81.7314 54.5169ZM120.005 24.1972V84.8366C120.005 90.4872 115.363 95.1111 109.689 95.1111H10.3215C4.64805 95.1111 0.00549316 90.4878 0.00549316 84.8366V24.1972C0.00549316 18.5466 4.64748 13.9227 10.3215 13.9227H34.2641L37.8838 5.57484C39.3502 2.1909 42.6961 0 46.3964 0H73.6134C77.3137 0 80.6602 2.1909 82.1272 5.57484L85.7469 13.9227H109.69C115.363 13.9227 120.005 18.546 120.005 24.1972H120.005ZM21.6286 26.4758C21.6286 25.1029 20.5011 23.98 19.1227 23.98H12.2151C10.8366 23.98 9.7092 25.1029 9.7092 26.4758V29.8484C9.7092 31.2214 10.8366 32.3443 12.2151 32.3443H19.1227C20.5011 32.3443 21.6286 31.2214 21.6286 29.8484V26.4758ZM92.258 54.5169C92.258 50.1826 91.4044 45.975 89.7215 42.0118C88.0965 38.1861 85.7719 34.7512 82.8116 31.8029C79.8514 28.8545 76.4027 26.5392 72.5615 24.9207C68.5818 23.2441 64.3578 22.3944 60.0061 22.3944C55.6543 22.3944 51.4298 23.2446 47.4506 24.9207C43.6094 26.5392 40.1607 28.8545 37.2005 31.8029C34.2403 34.7512 31.9156 38.1861 30.2906 42.0118C28.6072 45.9756 27.7541 50.1826 27.7541 54.5169C27.7541 58.8512 28.6077 63.0588 30.2906 67.022C31.9156 70.8477 34.2403 74.2825 37.2005 77.2309C40.1607 80.1793 43.6094 82.4946 47.4506 84.113C51.4303 85.7897 55.6543 86.6394 60.0061 86.6394C64.3578 86.6394 68.5824 85.7892 72.5615 84.113C76.4027 82.4946 79.8514 80.1793 82.8116 77.2309C85.7719 74.2825 88.0965 70.8477 89.7215 67.022C91.405 63.0582 92.258 58.8512 92.258 54.5169Z\",\n fill: \"currentColor\"\n }))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTakePhoto, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/take_photo.76423216.svg\";\nexport { ForwardRef as ReactComponent };","import { Box } from '@material-ui/core';\nimport CameraCustom from 'components/drawer/cameraCustom';\nimport React, { useEffect, useState } from 'react';\nimport { reset } from 'Store/search/Search';\nimport { useAppDispatch } from 'Store/Store';\nimport { ReactComponent as CameraIcon } from 'common/assets/icons/take_photo.svg';\n\nfunction AppMobile(): JSX.Element {\n const dispatch = useAppDispatch();\n const [isOpenModalCamera, setOpenModalCamera] = useState<boolean>(false);\n\n useEffect(() => {\n dispatch(reset(''));\n }, [dispatch]);\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n }}\n >\n <div className=\"take-photo\">\n <div\n className=\"take-photo-wrapper\"\n style={{\n background: 'linear-gradient(90deg, #55566B 0%, #2B2C46 100%)',\n }}\n >\n <div\n className=\"outer\"\n onClick={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n >\n <div className=\"inner\">\n <CameraIcon color={'#2B2C46'} />\n </div>\n </div>\n </div>\n </div>\n <Box className=\"box-screenshot-camera\">\n <CameraCustom\n isToggle={isOpenModalCamera}\n onToggleModal={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n />\n </Box>\n </div>\n );\n}\n\nexport default AppMobile;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport 'typeface-roboto';\nimport 'index.css';\n\nimport { useMediaQuery } from 'react-responsive';\nimport AppMD from 'page/landingPage/AppMD';\nimport AppMobile from 'page/landingPage/AppMobile';\n\nfunction App(): JSX.Element {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n let SelectedApp: any = isMobile ? AppMobile : AppMD;\n\n return <SelectedApp />;\n}\n\nexport default App;\n","import React from 'react';\nimport { Button } from '@material-ui/core';\nimport { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport type { CurrentRefinementsProvided } from 'react-instantsearch-core';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\n\nexport type ClearRefinementsProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n type?: any;\n className?: string;\n};\n\nfunction ClearRefinementsComponent({\n children,\n type = 'native',\n className,\n items,\n refine,\n}: ClearRefinementsProps) {\n const handleButtonClick = useCallback(() => refine(items), [refine, items]);\n const { settings } = useAppSelector<AppState>((state: any) => state);\n\n return (\n <Button\n type={type}\n disabled={!items.length}\n className={className}\n onClick={handleButtonClick}\n style={{\n color: settings.theme.secondaryColor,\n fontWeight: 'bold',\n textTransform: 'capitalize',\n padding: 0,\n }}\n >\n {children}\n </Button>\n );\n}\n\nexport const ClearRefinements = connectCurrentRefinements<any>(\n memo(ClearRefinementsComponent, isEqual),\n);\n","import React from 'react';\nimport { Button } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\n\nexport default function ChipComponent({\n children,\n className,\n selected,\n closeIcon = false,\n ...props\n}: any) {\n return (\n <Button type=\"native\" className={className} {...props}>\n {children}\n {closeIcon && (\n <CloseOutlinedIcon style={{ fontSize: '16px', fontWeight: 'bold' }} />\n )}\n </Button>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { m } from 'framer-motion';\nimport { atom } from 'jotai';\nimport { useMemo } from 'react';\nimport type {\n CurrentRefinementsProvided,\n RefinementValue,\n} from 'react-instantsearch-core';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { getCurrentRefinement } from './getCurrentRefinement';\nimport { ClearRefinements } from 'components/clear-refinements/clear-refinements';\nimport ChipComponent from 'components/chip/chip';\nimport { useAppSelector } from 'Store/Store';\n\nexport type CurrentRefinementsProps = CurrentRefinementsProvided & {\n header?: string;\n className?: string;\n statusSwitchButton?: boolean;\n};\n\nexport type CurrentRefinement = {\n category?: string;\n label: string;\n value: RefinementValue;\n};\n\nexport const refinementCountAtom = atom(0);\n\nfunction CurrentRefinementsComponent({\n items,\n refine,\n className,\n statusSwitchButton,\n}: CurrentRefinementsProps) {\n const stateGlobal = useAppSelector(state => state);\n const { settings } = stateGlobal;\n const [newItems, setListItems] = useState<any[]>([]);\n\n useEffect(() => {\n if (!statusSwitchButton) return;\n setListItems(items);\n }, [items, statusSwitchButton]);\n\n const refinements = useMemo(\n () =>\n newItems.reduce((acc: CurrentRefinement[], current) => {\n return [\n ...acc,\n ...getCurrentRefinement(current, settings?.refinements),\n ];\n }, []),\n [settings, newItems],\n );\n\n if (!refinements.length) {\n return null;\n }\n\n return (\n <div\n className={className}\n style={{\n marginBottom: refinements.length > 0 ? '10px' : '0px',\n marginTop: refinements.length > 0 ? '16px' : '0px',\n }}\n >\n <ul className=\"flex flex-wrap gap-3\">\n {refinements.map(refinement => {\n return (\n <m.li key={[refinement.category, refinement.label].join(':')}>\n <ChipComponent\n closeIcon={true}\n onClick={() => refine(refinement.value)}\n >\n {refinement.category && (\n <div className=\"text-f12\">{refinement.category}:</div>\n )}\n <div\n className=\"capitalize fw-700\"\n style={{\n marginLeft: 5,\n textTransform: 'capitalize',\n marginRight: 10,\n }}\n >\n {refinement.label}\n </div>\n </ChipComponent>\n </m.li>\n );\n })}\n <li\n key=\"clear\"\n className={classNames('flex items-center', {\n hidden: refinements.length < 2,\n })}\n >\n <ClearRefinements className=\"text-f12 fw-600\">\n Clear all\n </ClearRefinements>\n </li>\n </ul>\n </div>\n );\n}\n\nexport const CurrentRefinements = connectCurrentRefinements<any>(\n CurrentRefinementsComponent,\n);\n","import type { CurrentRefinement } from \"./current-refinements\";\n\nfunction getRefinementConfig(r: any, refinement: any) {\n const refinementOptions = r.attribute;\n\n return refinementOptions?.attributes\n ? refinementOptions?.attributes[0] === refinement.attribute\n : refinementOptions === refinement.attribute;\n}\n\nexport function getCurrentRefinement(\n refinement: any,\n config: any\n): CurrentRefinement[] {\n let refinementConfig: any;\n config.forEach((r: any) => {\n if (getRefinementConfig(r, refinement)) {\n refinementConfig = r;\n }\n });\n \n switch (refinementConfig?.type) {\n case \"size\":\n case \"list\": {\n return (\n refinement?.items?.map((item: any) => ({\n category: refinementConfig?.header,\n label: item.label,\n value: item.value,\n })) || []\n );\n }\n default: {\n return [];\n }\n }\n}\n","import { Grid } from '@material-ui/core';\nimport React from 'react';\nimport { connectPagination } from 'react-instantsearch-dom';\n\nfunction Pagination({ children }: any) {\n return (\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n style={{ height: '100%' }}\n >\n {children}\n\n {/* <Grid item className=\"item-notify\">\n <Typography className=\"text-f12 text-center\">\n <span className=\"fw-600\" style={{ color: '#2B2C46' }}>\n Didn’t find what you were looking for?\n </span>\n <span style={{ color: '#2B2C46' }}>Share your search with our</span>\n <Link\n to={'/support'}\n style={{ color: settings.theme?.secondaryColor }}\n >\n product experts\n </Link>\n </Typography>\n </Grid> */}\n <Grid item className=\"item-notify-right\" style={{ minWidth: 32 }}></Grid>\n </Grid>\n );\n}\nconst FooterResult = connectPagination(Pagination);\n\nexport default FooterResult;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFill = function SvgFill(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 10,\n height: 11,\n viewBox: \"0 0 10 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.56905 7.91401C6.92789 7.46225 7.47234 7.19773 8.04926 7.19483C9.10003 7.19483 9.95185 8.04665 9.95185 9.09742C9.95185 10.1482 9.10003 11 8.04926 11C6.99849 11 6.14667 10.1482 6.14667 9.09742C6.14847 8.92726 6.17408 8.75819 6.22277 8.59513L3.44118 6.85616C2.93785 7.48979 2.0888 7.73571 1.32474 7.46917C0.560687 7.20264 0.0488281 6.48196 0.0488281 5.67275C0.0488281 4.86354 0.560687 4.14287 1.32474 3.87633C2.0888 3.60979 2.93785 3.85571 3.44118 4.48934L6.22277 2.75037C6.17408 2.58732 6.14847 2.41825 6.14667 2.24809C6.14083 1.32028 6.80508 0.523574 7.7188 0.36244C8.63252 0.201306 9.52922 0.722744 9.84111 1.59657C10.153 2.4704 9.78909 3.44177 8.97983 3.89559C8.17057 4.34941 7.15198 4.15332 6.56905 3.4315L3.78746 5.17047C3.88883 5.49765 3.88883 5.84785 3.78746 6.17504L6.56905 7.91401ZM9.19066 2.24808C9.19066 1.61762 8.67957 1.10653 8.04911 1.10653C7.41864 1.10653 6.90755 1.61762 6.90755 2.24808C6.90755 2.87855 7.41864 3.38964 8.04911 3.38964C8.67957 3.38964 9.19066 2.87855 9.19066 2.24808ZM1.96089 6.81431C1.33043 6.81431 0.819336 6.30322 0.819336 5.67275C0.819336 5.04229 1.33043 4.5312 1.96089 4.5312C2.59136 4.5312 3.10245 5.04229 3.10245 5.67275C3.10245 6.30322 2.59136 6.81431 1.96089 6.81431ZM6.90755 9.09742C6.90755 9.72788 7.41864 10.239 8.04911 10.239C8.67957 10.239 9.19066 9.72788 9.19066 9.09742C9.19066 8.46695 8.67957 7.95586 8.04911 7.95586C7.41864 7.95586 6.90755 8.46695 6.90755 9.09742Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFill, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Fill.619a9d98.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconDislike = function SvgIconDislike(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 11,\n height: 11,\n viewBox: \"0 0 11 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.53059 7.14308H3.81466V9.11675C3.7348 9.90592 4.28699 10.6128 5.04806 10.6957C5.14416 10.7075 5.24128 10.7075 5.33738 10.6957H5.93504C6.19675 10.6882 6.42056 10.4984 6.47941 10.2338V10.1865L6.86009 7.68387L8.20769 5.56415H10.6669V0.0378923H3.43399C0.601741 0.0378923 0.00788307 1.75498 0.00788307 3.19576V5.56415C-0.0719852 6.35332 0.480213 7.06022 1.24128 7.14308C1.33738 7.15493 1.43449 7.15493 1.53059 7.14308ZM8.38276 0.827361H9.90548V4.77469H8.38276V0.827361ZM3.43384 0.827355C1.6142 0.827355 0.769092 1.5813 0.769092 3.19575V5.56415C0.769092 6.13256 0.982271 6.35361 1.53045 6.35361H4.57587V9.11674C4.57587 9.68516 4.78905 9.90621 5.33723 9.90621H5.76739L5.82069 9.51148L6.09858 7.39176L7.6213 5.051V0.827355H3.43384Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconDislike, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_dislike.0533c64a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconLike = function SvgIconLike(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 11,\n viewBox: \"0 0 12 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.80278 3.59938H7.51871V1.62572C7.59858 0.836545 7.04638 0.129649 6.28531 0.0467847C6.18921 0.0349422 6.0921 0.0349422 5.996 0.0467847H5.39833C5.13662 0.0542197 4.91282 0.244093 4.85396 0.508622V0.55599L4.47329 3.0586L3.12568 5.17831H0.666504V10.7046H7.89939C10.7316 10.7046 11.3255 8.98748 11.3255 7.54671V5.17831C11.4054 4.38914 10.8532 3.68224 10.0921 3.59938C9.99599 3.58754 9.89888 3.58754 9.80278 3.59938ZM2.95061 9.9151H1.4279V5.96777H2.95061V9.9151ZM7.89954 9.9151C9.71918 9.9151 10.5643 9.16116 10.5643 7.5467V5.1783C10.5643 4.60989 10.3511 4.38884 9.80293 4.38884H6.7575V1.62571C6.7575 1.05729 6.54432 0.836243 5.99615 0.836243H5.56598L5.51268 1.23098L5.23479 3.35069L3.71208 5.69146V9.9151H7.89954Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconLike, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_like.80c66e3a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconSearchImage2 = function SvgIconSearchImage2(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.42028 4.82804C1.42028 5.22014 1.10221 5.53825 0.710142 5.53825C0.318078 5.53825 0 5.22014 0 4.82804V2.69216C0 1.20767 1.20757 0 2.69193 0H4.87323C5.26529 0 5.58337 0.318104 5.58337 0.710201C5.58337 1.1023 5.26529 1.4204 4.87323 1.4204H2.69193C1.99071 1.4204 1.42028 1.99087 1.42028 2.69216V4.82804ZM13.3081 0H11.1268C10.7347 0 10.4167 0.318104 10.4167 0.710201C10.4167 1.1023 10.7347 1.4204 11.1268 1.4204H13.3081C14.0093 1.4204 14.5798 1.99087 14.5798 2.69216V4.82804C14.5798 5.22014 14.8978 5.53825 15.2899 5.53825C15.682 5.53825 16 5.22014 16 4.82804V2.69216C16 1.20767 14.7925 0 13.3081 0ZM15.2899 10.4614C14.8978 10.4614 14.5798 10.7795 14.5798 11.1716V13.3078C14.5798 14.0091 14.0093 14.5796 13.3081 14.5796H11.1268C10.7347 14.5796 10.4167 14.8977 10.4167 15.2898C10.4167 15.6819 10.7347 16 11.1268 16H13.3081C14.7925 16 16 14.7923 16 13.3078V11.1716C16 10.7795 15.682 10.4614 15.2899 10.4614ZM4.87323 14.5796H2.69193C1.99071 14.5796 1.42028 14.0091 1.42028 13.3078V11.1716C1.42028 10.7795 1.10221 10.4614 0.710142 10.4614C0.318078 10.4614 0 10.7792 0 11.1716V13.3078C0 14.7923 1.20757 16 2.69193 16H4.87323C5.26529 16 5.58337 15.6819 5.58337 15.2898C5.58337 14.8977 5.26529 14.5796 4.87323 14.5796ZM12.6019 12.6029C12.4476 12.7572 12.2425 12.8421 12.0242 12.8421L12.0245 12.8418C11.8062 12.8418 11.6011 12.7569 11.4468 12.6026L10.2604 11.4161C9.59218 11.8613 8.81663 12.0952 8.00047 12.0952C6.90685 12.0952 5.87863 11.6694 5.1054 10.8961C4.33217 10.1228 3.90641 9.09453 3.90641 8.00082C3.90641 6.90711 4.33217 5.87881 5.1054 5.10552C5.87863 4.33222 6.90685 3.90643 8.00047 3.90643C9.09408 3.90643 10.1223 4.33222 10.8955 5.10552C11.6688 5.87881 12.0945 6.90711 12.0945 8.00082C12.0945 8.81706 11.8607 9.59266 11.4154 10.2612L12.6019 11.4478C12.9203 11.7662 12.9203 12.2845 12.6019 12.6029ZM9.73685 9.73702C9.75171 9.72248 9.76723 9.70795 9.78342 9.69407C10.2201 9.23426 10.4605 8.63373 10.4605 8.00082C10.4605 6.64418 9.35667 5.54023 8.00014 5.54023C6.6436 5.54023 5.53974 6.64418 5.53974 8.00082C5.53974 9.35747 6.64327 10.4614 8.00014 10.4614C8.63299 10.4614 9.23347 10.2213 9.69325 9.78425C9.70745 9.76774 9.72198 9.75188 9.73685 9.73702Z\",\n fill: \"#2B2C46\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconSearchImage2, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_search_image2.4c4af888.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar Svg3D = function Svg3D(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 17,\n viewBox: \"0 0 16 17\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.643 4.65152L8.343 1.24366C8.12642 1.12191 7.85958 1.12191 7.643 1.24366L1.34303 4.65152C1.12828 4.77548 0.997588 5.00142 1.00003 5.24448V12.0602C1.00047 12.3061 1.13689 12.5327 1.35703 12.6532L7.657 16.061C7.87358 16.1828 8.14042 16.1828 8.357 16.061L14.657 12.6532C14.8717 12.5292 15.0024 12.3033 15 12.0602V5.24448C14.9995 4.9986 14.8631 4.772 14.643 4.65152ZM7.99982 2.61361L12.8578 5.24447L7.99982 7.87534L3.14185 5.24447L7.99982 2.61361ZM2.40015 6.40315L7.30012 9.05447V14.3094L2.40015 11.6581V6.40315ZM8.69983 14.3094V9.05447L13.5998 6.40315V11.6581L8.69983 14.3094Z\",\n fill: \"#2B2C46\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(Svg3D, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/3d.24adb2c2.svg\";\nexport { ForwardRef as ReactComponent };","import { Box, Button, IconButton, Paper, Typography } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined';\nimport IconEmail from '../common/assets/icons/email_share.svg';\nimport DefaultModal from './modal/DefaultModal';\nimport React, { Dispatch } from 'react';\n\ntype PropsType = {\n dataItem: any;\n isOpen: boolean;\n setModalState: Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport const ShareModal = (props: PropsType) => {\n const { dataItem, isOpen, setModalState } = props;\n const main_image_link =\n dataItem['image(main_similarity)'] || dataItem['main_image_link'];\n return (\n <DefaultModal openModal={isOpen} handleClose={() => setModalState(false)}>\n <Box\n className=\"box-modal-default box-modal-share\"\n style={{ padding: '4px' }}\n >\n <Box\n className=\"ml-auto\"\n style={{ width: 'fit-content', marginRight: 5 }}\n >\n <Button style={{ padding: 0 }} onClick={() => setModalState(false)}>\n <CloseOutlinedIcon style={{ fontSize: 16, color: '#55566B' }} />\n </Button>\n </Box>\n <Box className=\"box-content-box-share\">\n <Typography\n className=\"text-f12 text-gray text-bold\"\n style={{ marginBottom: '5px' }}\n >\n Share\n </Typography>\n {main_image_link && (\n <Paper component=\"form\" className=\"box-input\">\n <Box\n className=\"text-f9 text-gray\"\n style={{\n width: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingRight: '10px',\n }}\n >\n {main_image_link}\n </Box>\n <IconButton\n color=\"secondary\"\n aria-label=\"directions\"\n style={{ padding: '4px' }}\n onClick={() => {\n navigator.clipboard.writeText(main_image_link);\n }}\n >\n <FileCopyOutlinedIcon style={{ fontSize: 14 }} />\n </IconButton>\n </Paper>\n )}\n\n <Paper\n component=\"form\"\n className=\"box-input\"\n style={{ marginTop: '12px', marginBottom: '8px' }}\n >\n <Box\n className=\"text-f9 text-gray\"\n style={{\n width: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingRight: '10px',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 'bold', paddingRight: '4px' }}>\n SKU:\n </span>{' '}\n {dataItem.sku}\n </Box>\n <IconButton\n color=\"secondary\"\n aria-label=\"directions\"\n style={{ padding: '4px' }}\n onClick={() => {\n navigator.clipboard.writeText(dataItem.sku);\n }}\n >\n <FileCopyOutlinedIcon style={{ fontSize: 14 }} />\n </IconButton>\n </Paper>\n <Box\n className=\"box-media-share\"\n display={'flex'}\n style={{ marginTop: '18px' }}\n >\n <a\n style={{ padding: 0 }}\n href={`mailto:support@nyris.io?subject=GF-Sparepart-Search&body= ${encodeURIComponent(\n 'SKU: ' +\n dataItem.sku +\n '\\r\\n' +\n (main_image_link ? `Image Link: ${main_image_link}` : ''),\n )} `}\n >\n <Box display={'flex'} alignItems={'center'}>\n <img width={40} height={40} src={IconEmail} alt=\"icon_email\" />\n </Box>\n </a>\n {/* <Button style={{ padding: 0, margin: '0 20px' }}>\n <Box display={'flex'} alignItems={'center'}>\n <img\n src={IconWeChat}\n width={40}\n height={40}\n alt=\"icon_email\"\n />\n </Box>\n </Button>\n <Button style={{ padding: 0 }}>\n <Box display={'flex'} alignItems={'center'}>\n <img\n src={IconWhatsApp}\n width={40}\n height={40}\n alt=\"icon_email\"\n />\n </Box>\n </Button> */}\n </Box>\n </Box>\n </Box>\n </DefaultModal>\n );\n};\n","import toast from 'react-hot-toast';\n\nexport class ToastHelper {\n static success(msg: string) {\n toast.success(msg, {\n duration: 3000,\n style: {\n background: '#1E1F31',\n color: '#fff',\n },\n });\n }\n\n static error(msg: string) {\n toast.error(msg, {\n duration: 3000,\n style: {\n background: '#1E1F31',\n color: '#fff',\n },\n });\n }\n}\n","import NyrisAPI, {\n FeedbackEventPayload,\n NyrisAPISettings,\n RectCoords,\n} from '@nyris/nyris-api';\nimport { RootState } from '../Store/Store';\nimport { ToastHelper } from '../helpers/ToastHelper';\nimport { toast } from 'react-hot-toast';\n\nexport const feedbackSuccessEpic = async (\n state: RootState,\n success: boolean,\n) => {\n const { search, settings } = state;\n const sessionId = search.sessionId;\n const requestId = search.requestId || search.sessionId;\n\n try {\n const res = await sendFeedbackByApi(settings, sessionId, requestId, {\n event: 'feedback',\n data: { success },\n });\n toast.dismiss();\n ToastHelper.success('Thank you for your feedback.');\n return res;\n } catch (err: any) {\n console.log(err);\n }\n};\n\nexport const feedbackClickEpic = async (\n state: RootState,\n position: number,\n id?: string,\n) => {\n const { search, settings } = state;\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, {\n event: 'click',\n data: { positions: [position], ...(id ? { product_ids: [id] } : {}) },\n });\n};\n\nexport const feedbackConversionEpic = async (\n state: RootState,\n position: number,\n id?: string,\n) => {\n const { search, settings } = state;\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, {\n event: 'conversion',\n data: { positions: [position], ...(id ? { product_ids: [id] } : {}) },\n });\n};\n\nexport const feedbackRegionEpic = async (\n state: RootState,\n region: RectCoords,\n) => {\n const { settings, search } = state;\n const { sessionId, requestId } = search;\n const { x1, x2, y1, y2 } = region;\n const payload: FeedbackEventPayload = {\n event: 'region',\n data: { rect: { x: x1, y: y1, w: x2 - x1, h: y2 - y1 } },\n };\n return await sendFeedbackByApi(settings, sessionId, requestId, payload);\n};\n\nexport const sendFeedbackByApi = async (\n settings: NyrisAPISettings,\n sessionId: string | undefined,\n requestId: string | undefined,\n payload: FeedbackEventPayload,\n) => {\n const api = new NyrisAPI(settings);\n if (sessionId && requestId) {\n try {\n await api.sendFeedback(sessionId, requestId, payload).then(res => {});\n } catch (error) {\n console.log('error sendFeedbackByApi321', error);\n }\n }\n};\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgClose = function SvgClose(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.475 3.575C13.7649 3.28505 13.7649 2.81495 13.475 2.525C13.1851 2.23505 12.715 2.23505 12.425 2.525L8.70711 6.24289C8.31658 6.63342 7.68342 6.63342 7.29289 6.24289L3.575 2.525C3.28505 2.23505 2.81495 2.23505 2.525 2.525C2.23505 2.81495 2.23505 3.28505 2.525 3.575L6.24289 7.29289C6.63342 7.68342 6.63342 8.31658 6.24289 8.70711L2.525 12.425C2.23505 12.7149 2.23505 13.1851 2.525 13.475C2.81495 13.7649 3.28505 13.7649 3.575 13.475L7.29289 9.75711C7.68342 9.36658 8.31658 9.36658 8.70711 9.75711L12.425 13.475C12.7149 13.7649 13.1851 13.7649 13.475 13.475C13.7649 13.1851 13.7649 12.715 13.475 12.425L9.75711 8.70711C9.36658 8.31658 9.36658 7.68342 9.75711 7.29289L13.475 3.575Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgClose, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/close.07dcb75c.svg\";\nexport { ForwardRef as ReactComponent };","import { Options, Splide, SplideSlide } from '@splidejs/react-splide';\nimport React, { useMemo, useRef } from 'react';\nimport '@splidejs/react-splide/dist/css/splide-core.min.css';\nimport '@splidejs/react-splide/dist/css/splide.min.css';\nimport './ImagePreviewCarousel.scss';\nimport { useMediaQuery } from 'react-responsive';\n\ninterface Props {\n imgItem: any[];\n onSearchImage?: any;\n handlerCloseModal?: any;\n setSelectedImage: (url: string) => void;\n}\n\nexport const ImagePreviewCarousel = (props: Props) => {\n let { imgItem, setSelectedImage } = props;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const mainRef: any = useRef(null);\n const thumbsRef: any = useRef(null);\n\n const maxWidth = useMemo(() => {\n const contentWidth = 75 + 58 * imgItem.length;\n const modalWidth = isMobile ? 240 : 460;\n return contentWidth < modalWidth ? contentWidth : modalWidth;\n }, [imgItem.length, isMobile]);\n\n const mainOptions: Options = useMemo(\n () => ({\n type: 'slide',\n perPage: 1,\n perMove: 1,\n gap: '1rem',\n pagination: false,\n arrows: false,\n // width: isMobile ? 340 : 370,\n }),\n [],\n );\n\n const thumbsOptions: Options = useMemo(\n () => ({\n type: 'slide',\n rewind: true,\n gap: '1rem',\n pagination: false,\n fixedWidth: 40,\n fixedHeight: 40,\n cover: true,\n focus: 'center',\n isNavigation: true,\n arrows: imgItem.length > 1,\n width: maxWidth,\n }),\n [imgItem.length, maxWidth],\n );\n\n const renderSlides = (thumbs = false) => {\n return imgItem.map(slide => (\n <SplideSlide key={slide.url} className={thumbs ? '' : 'img-container'}>\n <img\n style={{ objectFit: 'contain', height: '100%' }}\n alt=\"preview\"\n src={slide.url}\n />\n </SplideSlide>\n ));\n };\n\n React.useEffect(() => {\n if (mainRef.current && thumbsRef.current && thumbsRef.current?.splide) {\n mainRef.current.sync(thumbsRef.current.splide);\n }\n }, []);\n\n return (\n <>\n <Splide\n onActive={(e: any) => {\n setSelectedImage(e?.root?.querySelector('li.is-active')?.querySelector('img')?.src)\n }}\n options={mainOptions}\n ref={mainRef}\n style={{ maxWidth: '100%', height: isMobile ? '80%' : '' }}\n >\n {renderSlides()}\n </Splide>\n\n <div className={`thumbs-list`}>\n <Splide options={thumbsOptions} ref={thumbsRef}>\n {renderSlides(true)}\n </Splide>\n </div>\n </>\n );\n};\n","import { Box, Typography } from '@material-ui/core';\nimport React from 'react';\n\ninterface Props {\n title: any;\n value: any;\n padding?: string;\n width?: any;\n}\n\nfunction ProductAttribute(props: Props) {\n const {\n title,\n value,\n padding = props.padding || '4px 16px',\n width = props.width || 'fit-content',\n } = props;\n\n return (\n <Box\n display=\"flex\"\n flexDirection={'column'}\n borderRadius={2}\n width={width}\n style={{\n backgroundColor: '#E0E0E0',\n padding: padding,\n flexGrow: 1,\n }}\n >\n <Typography\n style={{\n color: '#2B2C46',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n className=\"text-f12 fw-700\"\n >\n {title}\n </Typography>\n <Typography\n style={{\n color: '#2B2C46',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n className=\"text-f12 fw-400\"\n >\n {value}\n </Typography>\n </Box>\n );\n}\n\nexport default ProductAttribute;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgDownload = function SvgDownload(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.5055 6.45389C12.7282 6.23157 13.0888 6.23169 13.3113 6.45415C13.5338 6.67672 13.5338 7.03757 13.3113 7.26013L8.70707 11.8643C8.31655 12.2548 7.68338 12.2548 7.29286 11.8643L2.68867 7.26013C2.4661 7.03757 2.4661 6.67672 2.68867 6.45415C2.91113 6.23169 3.27178 6.23157 3.49438 6.45389L5.7219 8.67847C6.35205 9.30779 7.42854 8.86148 7.42854 7.97089V0.571428C7.42854 0.255837 7.68437 0 7.99996 0C8.31556 0 8.57139 0.255838 8.57139 0.571429V7.97089C8.57139 8.86148 9.64788 9.30779 10.278 8.67847L12.5055 6.45389ZM12.7143 14.8571C13.2665 14.8571 13.7143 14.4094 13.7143 13.8571V13.1429C13.7143 12.8273 13.9701 12.5714 14.2857 12.5714C14.6013 12.5714 14.8571 12.8273 14.8571 13.1429V14.8571C14.8571 15.4883 14.3454 16 13.7143 16H2.28568C1.6545 16 1.14282 15.4883 1.14282 14.8571V13.1429C1.14282 12.8273 1.39866 12.5714 1.71425 12.5714C2.02984 12.5714 2.28568 12.8273 2.28568 13.1429V13.8571C2.28568 14.4094 2.7334 14.8571 3.28568 14.8571H12.7143Z\",\n fill: \"#2B2C46\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDownload, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/download.d6432d26.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useMediaQuery } from 'react-responsive';\n\nconst LoadingSpinner = () => (\n <svg\n width={150}\n height={150}\n viewBox=\"0 0 150 150\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"loading-spinner\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M75 150C116.421 150 150 116.421 150 75C150 33.5787 116.421 1.31134e-05 75 1.31134e-05C33.5787 1.31134e-05 1.31134e-05 33.5787 1.31134e-05 75C1.31134e-05 116.421 33.5787 150 75 150ZM75 145C113.66 145 145 113.66 145 75C145 36.3401 113.66 5.00001 75 5.00001C36.3401 5.00001 5.00001 36.3401 5.00001 75C5.00001 113.66 36.3401 145 75 145Z\"\n fill=\"url(#paint0_linear_3392_14489)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_3392_14489\"\n x1={75}\n y1={0}\n x2={75}\n y2={150}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#D3D1FF\" />\n <stop offset={1} stopColor=\"white\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nfunction CadenasLoading() {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { t } = useTranslation();\n return (\n <div\n style={{\n borderRadius: '2px',\n background: 'linear-gradient(180deg, #FAFAFA 0%, #E4E3FF 100%)',\n width: '100%',\n height: isMobile ? '368px' : '456px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n }}\n >\n <p\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n }}\n >\n {t('loading')}\n </p>\n <LoadingSpinner />\n </div>\n );\n}\n\nexport default CadenasLoading;\n","import { Box } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport { ReactComponent as DownloadIcon } from 'common/assets/icons/download.svg';\nimport CadenasLoading from './CadenasLoading';\nimport { useAppSelector } from '../Store/Store';\n\ndeclare const psol: any;\n\nconst favoriteActions3d = [\n 'actMeasureGrid',\n 'actCut',\n 'actAnimate',\n 'actIsometric',\n 'actExternalAR',\n];\n\nfunction CadenasWebViewer({\n is3dView,\n sku,\n setStatus3dView,\n status3dView,\n}: {\n status3dView: string | undefined;\n sku: string;\n is3dView: boolean;\n setStatus3dView: any;\n}) {\n const [mident, setMident] = useState('');\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { settings } = useAppSelector(state => state);\n\n useEffect(() => {\n // prepare 3d viewer settings.\n let webViewer3DSettings = {\n $container: $('#cnsWebViewer3d'),\n viewerBackendType: psol.components.WebViewer3D.ViewerBackends.WebGL,\n devicePixelRatio: window.devicePixelRatio,\n radialMenuActions: [],\n favoriteActions: favoriteActions3d,\n showProgressDialog: false,\n webglViewerSettings: {\n ColorTL: '#fff',\n ColorTR: '#fff',\n ColorML: '#fff',\n ColorMR: '#fff',\n ColorBL: '#fff',\n ColorBR: '#fff',\n showLogo: false,\n logoTexture: './img/logo.png',\n logoScaleFactor: 1.0,\n logoMixFactor: 0.5,\n material: {\n preset: 'pcloud',\n edit: false,\n },\n measureGrid: {\n colors: {\n dimensions: '#000000',\n outline: '#0000ff',\n grid: '#757575',\n unit: 'mm',\n },\n },\n helperOptions: {\n gridOn: false,\n axisOn: false,\n },\n shadeMode: psol.components.WebViewer3D.ShadeModes.ShadeAndLines,\n enableEditableDimensions: true,\n showPartNameTooltip: false,\n },\n };\n\n // initialize 3d viewer\n let webviewer3d = new psol.components.WebViewer3D(webViewer3DSettings);\n psol.core.setApiKey(settings.cadenasAPIKey);\n setStatus3dView('loading');\n // run search and display result in 3D viewer.\n psol.core\n .ajaxGetOrPost({\n url: psol.core.getServiceBaseUrl() + '/service/reversemap',\n data: {\n catalog: settings.catalog,\n part: sku,\n exact: '0',\n },\n })\n .then(function (reverseMapResult: { mident: string }) {\n let mident = reverseMapResult.mident || '';\n setMident(mident);\n // load geometry in 3d viewer.\n webviewer3d.show().then(function () {\n webviewer3d\n .loadByVarset(null, null, mident)\n .then(() => {\n setStatus3dView('loaded');\n })\n .catch((err: any) => {\n setStatus3dView('not-found');\n });\n });\n });\n }, [sku, setStatus3dView, settings]);\n\n const showWebViewer = !is3dView || status3dView !== 'loaded';\n\n return (\n <>\n {status3dView !== 'not-found' && (\n <div\n id=\"cnsWebViewer3d\"\n style={{\n height: showWebViewer ? '0px' : isMobile ? '368px' : '456px',\n width: '100%',\n opacity: showWebViewer ? 0 : 1,\n transition:\n is3dView && status3dView !== 'loaded' ? 'opacity 2s ease' : '',\n }}\n ></div>\n )}\n\n <div\n style={{\n position: 'absolute',\n bottom: '19px',\n right: '26px',\n }}\n >\n {is3dView && status3dView === 'loaded' && (\n <Box\n style={{\n background: '#E9E9EC',\n width: '32px',\n height: '32px',\n borderRadius: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n onClick={() => {\n new psol.components.DownloadDialog({\n mident: mident,\n }).show();\n }}\n >\n <DownloadIcon width={14} height={14} color={'#FFF'} />\n </Box>\n )}\n </div>\n\n {status3dView === 'loading' && is3dView && <CadenasLoading />}\n\n {status3dView === 'not-found' && is3dView && (\n <div\n style={{\n height: isMobile ? '368px' : '456px',\n width: '100%',\n color: '#AAABB5',\n background: 'linear-gradient(180deg, #fff 0%, #E9E9EC 100%)',\n fontSize: '16px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n No 3D View available for this item\n </div>\n )}\n </>\n );\n}\n\nexport default CadenasWebViewer;\n","import React, { useEffect, useState } from 'react';\nimport { Box, Button, Collapse, Grid, Typography } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport IconOpenLink from 'common/assets/icons/Union.svg';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport { useMediaQuery } from 'react-responsive';\nimport { ImagePreviewCarousel } from './carousel/ImagePreviewCarousel';\nimport { ReactComponent as IconSearchImage } from 'common/assets/icons/icon_search_image2.svg';\nimport { ReactComponent as IconShare } from 'common/assets/icons/Fill.svg';\nimport { ReactComponent as IconDisLike } from 'common/assets/icons/icon_dislike.svg';\nimport { ReactComponent as IconLike } from 'common/assets/icons/icon_like.svg';\nimport { AppState } from 'types';\nimport { useAppSelector } from 'Store/Store';\nimport { prepareImageList } from '../helpers/CommonHelper';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport NoImage from '../common/assets/images/no-image.svg';\nimport { ReactComponent as Box3dIcon } from 'common/assets/icons/3d.svg';\nimport { ReactComponent as CloseIcon } from 'common/assets/icons/close.svg';\nimport { useTranslation } from 'react-i18next';\nimport ProductAttribute from './ProductAttribute';\nimport CadenasWebViewer from './CadenasWebViewer';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(theme => ({\n buttonStyle3D: {\n bottom: is3dView => (is3dView ? '20px' : '68px'), // assuming 8px is one spacing,\n [theme.breakpoints.up('md')]: {\n bottom: is3dView => (is3dView ? '20px' : '10px'), // assuming 68px is 8.5 spacing\n },\n },\n buttonStyleImageSearch: {\n bottom: is3dView => (is3dView ? '20px' : '78px'),\n [theme.breakpoints.up('md')]: {\n bottom: is3dView => (is3dView ? '20px' : '4px'), // assuming 68px is 8.5 spacing\n },\n },\n}));\n\ninterface Props {\n dataItem?: any;\n handleClose?: any;\n handlerFeedback?: any;\n onHandlerModalShare?: any;\n show3dView?: boolean;\n onSearchImage?: any;\n}\n\nfunction ProductDetailView(props: Props) {\n const {\n dataItem,\n handleClose,\n handlerFeedback,\n onHandlerModalShare,\n show3dView = false,\n onSearchImage,\n } = props;\n const { sku } = dataItem;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { settings } = useAppSelector<AppState>((state: any) => state);\n const brand = dataItem[settings.field.productTag];\n const ctaLink = dataItem[settings.field?.ctaLinkField];\n const [collapDescription, setCollapDescription] = useState(false);\n const [feedback, setFeedback] = useState('none');\n const [is3dView, setIs3dView] = useState(show3dView);\n const [dataImageCarousel, setDataImageCarouSel] = useState<any[]>([]);\n const [urlImage, setUrlImage] = useState<string>('');\n const [status3dView, setStatus3dView] = useState<\n 'loading' | 'loaded' | 'not-found' | undefined\n >();\n const { t } = useTranslation();\n const classes = useStyles(props?.show3dView);\n\n useEffect(() => {\n if (dataItem) {\n checkDataItemResult(dataItem);\n handlerCheckUrlImage(\n dataItem['image(main_similarity)'] || dataItem['main_image_link'],\n );\n }\n }, [dataItem]);\n\n const handlerCheckUrlImage = (url: any, timeout?: number) => {\n timeout = timeout || 5000;\n let timedOut = false,\n timer: any;\n let img = new Image();\n img.onerror = img.onabort = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage('');\n }\n };\n img.onload = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage(url);\n return;\n }\n };\n img.src = url;\n };\n\n const checkDataItemResult = (dataItem: any) => {\n const valueKey = prepareImageList(dataItem);\n\n setDataImageCarouSel(valueKey);\n };\n\n return (\n <Box\n className=\"box-modal-default\"\n borderRadius={12}\n style={{\n margin: isMobile ? 0 : '',\n width: '600px',\n backgroundColor: '#fff',\n }}\n >\n <Box\n className=\"ml-auto\"\n style={{\n width: 'fit-content',\n marginRight: 4,\n position: 'absolute',\n top: '28px',\n right: '28px',\n zIndex: 100,\n }}\n >\n <Button style={{ padding: 0 }} onClick={() => handleClose?.()}>\n <CloseOutlinedIcon style={{ fontSize: 24, color: '#55566B' }} />\n </Button>\n </Box>\n\n <div\n style={{\n position: 'relative',\n }}\n >\n {settings.cadenas3dWebView && (\n <CadenasWebViewer\n is3dView={is3dView}\n sku={sku}\n status3dView={status3dView}\n setStatus3dView={setStatus3dView}\n />\n )}\n <Box\n className=\"box-carosel\"\n style={{\n ...(dataImageCarousel.length === 0\n ? { display: 'flex', justifyContent: 'center' }\n : {}),\n width: is3dView ? '0px' : '100%',\n height: is3dView ? '0px' : !isMobile ? '60%' : '368px',\n opacity: is3dView ? 0 : 1,\n transition: !is3dView ? 'opacity 3s ease' : '',\n paddingTop: '16px',\n }}\n >\n {dataImageCarousel.length > 0 && (\n <ImagePreviewCarousel imgItem={dataImageCarousel} setSelectedImage={(url) => {\n setUrlImage(url ? url : urlImage);\n }} />\n )}\n {dataImageCarousel.length > 0 && (\n <Button\n className={classes.buttonStyleImageSearch}\n style={{\n position: 'absolute',\n right: '16px',\n background: '#E9E9EC',\n width: '32px',\n height: '32px',\n borderRadius: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n bottom: isMobile ? '25px' : '4px',\n }}\n onClick={() => {\n if (urlImage.length > 1) {\n onSearchImage(urlImage);\n handleClose?.();\n return;\n }\n }}\n >\n <IconSearchImage color={'#AAABB5'} />\n </Button>\n )}\n {dataImageCarousel.length === 0 && (\n <div\n style={{\n width: '400px',\n height: '400px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <img\n src={NoImage}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '150px', height: '150px', padding: '8px' }}\n />\n </div>\n )}\n </Box>\n\n <div\n className={classes.buttonStyle3D}\n style={{\n position: 'absolute',\n left: '16px',\n bottom: isMobile ? '25px' : '10px'\n }}\n >\n {!is3dView &&\n status3dView !== 'not-found' &&\n settings.cadenas3dWebView && (\n <Box\n style={{\n background: '#E9E9EC',\n width: '32px',\n height: '32px',\n borderRadius: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n onClick={() => {\n setIs3dView(true);\n }}\n >\n <Box3dIcon width={16} height={16} color={'#AAABB5'} />\n </Box>\n )}\n {is3dView && (\n <Box\n style={{\n background: '#2B2C46',\n width: '32px',\n height: '32px',\n borderRadius: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n onClick={() => {\n setIs3dView(false);\n }}\n >\n <CloseIcon width={16} height={16} color={'#FFF'} />\n </Box>\n )}\n </div>\n </div>\n\n <Box\n style={{\n overflowY: 'auto',\n maxHeight: '90svh',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingBottom: '16px',\n backgroundColor: '#F3F3F5',\n marginTop: '6px',\n }}\n >\n <Box\n className=\"box-content\"\n display={'flex'}\n style={{\n marginTop: '16px',\n flexDirection: 'column',\n backgroundColor: '#F3F3F5',\n }}\n >\n <Box className=\"box-top\">\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n flexDirection={'row'}\n style={{\n color: '#2B2C46',\n marginBottom: 10,\n paddingLeft: 16,\n paddingRight: 16,\n }}\n gridGap={8}\n >\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n }}\n >\n {sku}\n </Typography>\n\n {settings.warehouseVariant && (\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n }}\n >\n <span\n style={{\n color: dataItem[settings.field.warehouseStockValue]\n ? '#00C070'\n : '#c54545',\n fontWeight: 600,\n }}\n >\n {dataItem[settings.field.warehouseStockValue] || 0}\n </span>\n </Typography>\n )}\n </Box>\n )}\n\n <Grid\n container\n justifyContent=\"space-between\"\n style={{ backgroundColor: '#F3F3F5' }}\n >\n <Box\n display=\"flex\"\n flexDirection=\"row\"\n flexWrap=\"wrap\"\n style={{ gap: 6 }}\n width={'100%'}\n >\n {!settings.warehouseVariant && (\n <ProductAttribute\n title={settings.itemIdLabel || 'SKU'}\n value={sku}\n width={\n settings.warehouseVariant\n ? { xs: '49%', md: 'fit-content' }\n : { xs: '100%', md: 'fit-content' }\n }\n />\n )}\n {(brand || settings.brandName) && (\n <ProductAttribute\n title={t('Brand')}\n value={brand || settings.brandName}\n width={\n dataItem[settings.field.manufacturerNumber]\n ? { xs: '49%', md: 'fit-content' }\n : { xs: '100%', md: 'fit-content' }\n }\n />\n )}\n {dataItem[settings.field.manufacturerNumber] && (\n <ProductAttribute\n title={t('Manufacturer Number')}\n value={dataItem[settings.field.manufacturerNumber]}\n width={\n brand || settings.brandName\n ? { xs: '49%', md: 'fit-content' }\n : { xs: '100%', md: 'fit-content' }\n }\n />\n )}\n {settings.warehouseVariant && (\n <>\n {settings.field.warehouseNumber && (\n <ProductAttribute\n title={dataItem[settings.field.warehouseNumber]}\n value={\n dataItem[settings.field.warehouseNumberValue] || 'N/A'\n }\n width={{ xs: '49%', md: 'fit-content' }}\n />\n )}\n {settings.field.warehouseShelfNumber && (\n <ProductAttribute\n title={dataItem[settings.field.warehouseShelfNumber]}\n value={\n dataItem[settings.field.warehouseShelfNumberValue] ||\n 'N/A'\n }\n width={{ xs: '49%', md: 'fit-content' }}\n />\n )}\n </>\n )}\n </Box>\n\n <Grid\n item\n xs={12}\n style={{\n backgroundColor: '#F3F3F5',\n }}\n >\n <Box\n style={{\n background: settings.theme?.primaryColor,\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)',\n borderRadius: 4,\n marginTop: 8,\n }}\n display={'flex'}\n justifyContent={'space-between'}\n alignItems={'center'}\n className=\"btn-detail-item\"\n >\n <Box\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n padding: '0px 12px',\n minHeight: 64,\n cursor: ctaLink ? 'pointer' : 'normal',\n }}\n onClick={() => {\n if (ctaLink) {\n window.open(\n `${dataItem[settings.field.ctaLinkField]}`,\n '_blank',\n );\n }\n }}\n >\n <Typography\n className=\"text-f18 fw-700 text-white max-line-2\"\n align=\"left\"\n style={{\n letterSpacing: '0.55px',\n maxWidth: '500px',\n paddingRight: '4px',\n }}\n >\n {dataItem[settings.field.productName]}\n </Typography>\n {ctaLink && (\n <img\n src={IconOpenLink}\n alt=\"\"\n style={{ minWidth: 16, marginLeft: 5 }}\n />\n )}\n </Box>\n </Box>\n {dataItem[settings.field.productDetails] && (\n <Box className=\"w-100\">\n <Button\n className=\"w-100 button-hover\"\n style={{\n backgroundColor: '#F3F3F5',\n color: '#2b2c46',\n display: 'flex',\n fontSize: 14,\n justifyContent: 'space-between',\n marginTop: 12,\n paddingLeft: '15px',\n paddingRight: '15px',\n textTransform: 'initial',\n }}\n onClick={() => setCollapDescription(e => !e)}\n >\n {t('View details')}\n {collapDescription ? (\n <KeyboardArrowUpIcon\n htmlColor={settings.theme?.secondaryColor}\n />\n ) : (\n <KeyboardArrowDownIcon\n htmlColor={settings.theme?.secondaryColor}\n />\n )}\n </Button>\n <Collapse in={collapDescription}>\n <Typography\n style={{\n fontSize: 14,\n padding: 5,\n paddingLeft: 15,\n paddingRight: 15,\n color: '#2b2c46',\n }}\n >\n {dataItem[settings.field.productDetails]}\n </Typography>\n </Collapse>\n </Box>\n )}\n </Grid>\n </Grid>\n </Box>\n\n {settings.showFeedbackAndShare && (\n <Box\n className=\"box-bottom\"\n style={{\n height: '48px',\n padding: '0px 16px 0px 16px',\n marginBottom: 10,\n marginTop: 10,\n }}\n display={'flex'}\n justifyContent={'center'}\n >\n <Grid\n container\n justifyContent={\n settings.shareOption ? 'space-between' : 'space-around'\n }\n alignItems=\"center\"\n >\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('like');\n setFeedback('like');\n }}\n >\n <IconLike\n width={24}\n height={24}\n color={feedback === 'like' ? '#3E36DC' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('dislike');\n setFeedback('dislike');\n }}\n >\n <IconDisLike\n width={24}\n height={24}\n color={feedback === 'dislike' ? '#CC1854' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n {settings.shareOption && (\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => onHandlerModalShare()}\n >\n <IconShare width={24} height={24} color=\"#000000\" />\n </Button>\n </Box>\n </Grid>\n )}\n {/* <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button className=\"btn-item\">\n <Box\n className=\"\"\n display={'flex'}\n justifyContent={'center'}\n alignItems={'center'}\n >\n <img\n src={IconSupport}\n alt=\"image_item\"\n className=\"icon_support\"\n style={{ width: '30px' }}\n />\n </Box>\n </Button>\n </Box>\n </Grid> */}\n </Grid>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default ProductDetailView;\n","import { isEmpty } from 'lodash';\n\nexport const prepareImageList = (dataItem: any) => {\n let valueKey = [];\n const newObject = dataItem;\n\n if (!dataItem) {\n return [];\n }\n\n for (let key in newObject) {\n if (\n key?.includes('image(recognition)') ||\n key?.includes('additional_image_link')\n ) {\n if (!isEmpty(newObject[key])) {\n if (newObject[key]) {\n valueKey.push({\n url: newObject[key],\n });\n }\n }\n } else {\n if (key === 'image(main_similarity)' || key === 'main_image_link') {\n if (newObject[key]) {\n valueKey.push({\n url: newObject[key],\n });\n }\n }\n }\n }\n return valueKey;\n};\n","import { Box, Button, Grid, Tooltip, Typography } from '@material-ui/core';\nimport ChevronRightOutlinedIcon from '@material-ui/icons/ChevronRightOutlined';\nimport IconOpenLink from 'common/assets/icons/Union.svg';\nimport { ReactComponent as IconShare } from 'common/assets/icons/Fill.svg';\nimport { ReactComponent as IconDisLike } from 'common/assets/icons/icon_dislike.svg';\nimport { ReactComponent as IconLike } from 'common/assets/icons/icon_like.svg';\nimport { ReactComponent as IconSearchImage } from 'common/assets/icons/icon_search_image2.svg';\nimport { ReactComponent as Box3dIcon } from 'common/assets/icons/3d.svg';\n\nimport React, { memo, useEffect, useState } from 'react';\nimport NoImage from 'common/assets/images/no-image.svg';\nimport { RootState, useAppDispatch, useAppSelector } from 'Store/Store';\nimport DefaultModal from 'components/modal/DefaultModal';\nimport {\n onToggleModalItemDetail,\n updateStatusLoading,\n} from 'Store/search/Search';\nimport { ShareModal } from '../ShareModal';\nimport { truncateString } from 'helpers/truncateString';\nimport { useTranslation } from 'react-i18next';\nimport { useMediaQuery } from 'react-responsive';\nimport { feedbackClickEpic, feedbackConversionEpic } from 'services/Feedback';\nimport ProductDetailView from 'components/ProductDetailView';\nimport ProductAttribute from '../ProductAttribute';\n\ninterface Props {\n dataItem: any;\n handlerToggleModal?: any;\n handleClose?: () => void;\n isHover?: boolean;\n indexItem: number;\n onSearchImage?: any;\n handlerFeedback?: any;\n handlerGroupItem?: any;\n isGroupItem?: boolean;\n moreInfoText?: string;\n handlerCloseGroup?: any;\n main_image_link?: any;\n}\n\nfunction ItemResult(props: Props) {\n const {\n dataItem,\n isHover = false,\n onSearchImage,\n handlerGroupItem,\n handlerFeedback,\n isGroupItem,\n handlerCloseGroup,\n main_image_link,\n indexItem,\n } = props;\n const dispatch = useAppDispatch();\n const [urlImage, setUrlImage] = useState<string>('');\n const state = useAppSelector<RootState>((state: any) => state);\n const { settings } = state;\n\n const [openDetailedView, setOpenDetailedView] = useState<\n '3d' | 'image' | undefined\n >();\n\n const [isOpenModalShare, setOpenModalShare] = useState<boolean>(false);\n const [feedback, setFeedback] = useState('none');\n const { t } = useTranslation();\n const { sku, collap } = dataItem;\n const brand = dataItem[settings.field.productTag];\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n useEffect(() => {\n if (main_image_link) {\n handlerCheckUrlImage(main_image_link);\n }\n }, [main_image_link]);\n\n const handlerShowGroup = () => {\n handlerGroupItem(dataItem, indexItem);\n };\n\n const handlerHideGroup = () => {\n handlerCloseGroup(dataItem, indexItem);\n };\n\n const handlerCheckUrlImage = (url: any, timeout?: number) => {\n timeout = timeout || 5000;\n var timedOut = false,\n timer: any;\n var img = new Image();\n img.onerror = img.onabort = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage('');\n }\n };\n img.onload = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage(url);\n return;\n }\n };\n img.src = url;\n };\n\n const handlerToggleModal = (item: any) => {\n feedbackClickEpic(state, indexItem, item.sku);\n setOpenDetailedView('image');\n\n dispatch(onToggleModalItemDetail(true));\n dispatch(updateStatusLoading(true));\n setTimeout(() => {\n dispatch(updateStatusLoading(false));\n }, 400);\n };\n const ctaLink = dataItem[settings.field?.ctaLinkField];\n return (\n <Box className=\"wrap-main-item-result\">\n <DefaultModal\n openModal={openDetailedView === '3d' || openDetailedView === 'image'}\n handleClose={(e: any) => {\n setOpenDetailedView(undefined);\n }}\n >\n <ProductDetailView\n dataItem={dataItem}\n handleClose={() => {\n setOpenDetailedView(undefined);\n }}\n handlerFeedback={handlerFeedback}\n show3dView={openDetailedView === '3d'}\n onHandlerModalShare={() => setOpenModalShare(true)}\n onSearchImage={(url: string) => {\n dispatch(updateStatusLoading(true));\n onSearchImage(url);\n }}\n />\n </DefaultModal>\n\n <ShareModal\n setModalState={setOpenModalShare}\n dataItem={dataItem}\n isOpen={isOpenModalShare}\n />\n <Box className=\"box-top\">\n {isGroupItem && collap && (\n <Box className=\"btn-show-result\">\n <Button onClick={handlerShowGroup}>\n {t('Show group')}\n <ChevronRightOutlinedIcon style={{ fontSize: '10px' }} />\n </Button>\n </Box>\n )}\n {isGroupItem && !collap && (\n <Box className=\"btn-show-result\">\n <Button onClick={handlerHideGroup}>\n {t('Close group')}\n <ChevronRightOutlinedIcon style={{ fontSize: '10px' }} />\n </Button>\n </Box>\n )}\n {!isHover && main_image_link && (\n <Box\n className=\"box-icon-modal\"\n onClick={() => {\n if (urlImage.length > 1) {\n onSearchImage(main_image_link);\n }\n }}\n >\n <IconSearchImage width={16} height={16} color={'#AAABB5'} />\n </Box>\n )}\n {settings.cadenas3dWebView && (\n <Box\n className=\"box-icon-modal-3d\"\n onClick={() => {\n setOpenDetailedView('3d');\n }}\n >\n <Box3dIcon width={16} height={16} color={'#AAABB5'} />\n </Box>\n )}\n\n <Box className=\"box-image\">\n <Box\n style={{\n width: '100%',\n height: '100%',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n onClick={(e: any) => {\n e.preventDefault();\n handlerToggleModal(dataItem);\n }}\n >\n {main_image_link ? (\n <img\n src={main_image_link}\n key={main_image_link}\n alt=\"image_item\"\n className=\"img-style product-image\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n ) : (\n <img\n src={NoImage}\n alt=\"image_item\"\n style={{ width: '70%', height: '50%' }}\n />\n )}\n </Box>\n </Box>\n </Box>\n\n <Box\n className=\"box-content\"\n display={'flex'}\n style={{\n flexDirection: 'column',\n backgroundColor: '#F3F3F5',\n flexGrow: 1,\n zIndex: 100,\n }}\n >\n <Box className=\"box-top\" style={{ color: '#FFFFFF' }}>\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n flexDirection={'column'}\n style={{ color: '#2B2C46' }}\n gridGap={8}\n >\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n flexDirection={'row'}\n style={{ color: '#2B2C46', marginTop: 12 }}\n gridGap={8}\n >\n <Tooltip\n title={sku}\n placement=\"top\"\n arrow={true}\n disableHoverListener={sku?.length < 19 || !sku}\n >\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n }}\n >\n {truncateString(\n sku,\n !settings.warehouseVariant ? 29 : isMobile ? 17 : 20,\n )}\n </Typography>\n </Tooltip>\n\n {settings.warehouseVariant && (\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n }}\n >\n <span\n style={{\n color: dataItem[settings.field.warehouseStockValue]\n ? '#00C070'\n : '#c54545',\n fontWeight: 600,\n }}\n >\n {dataItem[settings.field.warehouseStockValue] || 0}\n </span>\n </Typography>\n )}\n </Box>\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n flexDirection={'row'}\n style={{ color: '#2B2C46' }}\n gridGap={8}\n >\n {(brand || settings.brandName) && (\n <ProductAttribute\n title={t('Brand')}\n value={brand || settings.brandName}\n padding=\"4px 8px\"\n width={{ xs: '49%' }}\n />\n )}\n\n {dataItem[settings.field.manufacturerNumber] && (\n <ProductAttribute\n title={t('Mfr. No.')}\n value={dataItem[settings.field.manufacturerNumber]}\n padding=\"4px 8px\"\n width={{ xs: '49%' }}\n />\n )}\n </Box>\n </Box>\n </Box>\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n style={{ color: '#2B2C46', marginTop: '8px' }}\n gridGap={10}\n >\n {settings.field.warehouseNumber && (\n <ProductAttribute\n title={dataItem[settings.field.warehouseNumber]}\n value={dataItem[settings.field.warehouseNumberValue] || 'N/A'}\n padding=\"4px 8px\"\n width={{ xs: '49%' }}\n />\n )}\n\n {settings.field.warehouseShelfNumber && (\n <ProductAttribute\n title={dataItem[settings.field.warehouseShelfNumber]}\n value={\n dataItem[settings.field.warehouseShelfNumberValue] || 'N/A'\n }\n padding=\"4px 8px\"\n width={{ xs: '49%' }}\n />\n )}\n </Box>\n )}\n <div>\n <Tooltip\n title={dataItem[settings.field.productName]}\n placement=\"top\"\n arrow={true}\n disableHoverListener={\n dataItem[settings.field.productName]?.length < 45\n }\n >\n <Box\n style={{\n boxShadow: '-2px 2px 4px rgba(170, 171, 181, 0.5)',\n // marginBottom: 22,\n height: 40,\n background: settings.theme?.primaryColor,\n borderRadius: 4,\n padding: '0px 8px',\n marginTop: '8px',\n }}\n display={'flex'}\n justifyItems={'center'}\n alignItems={'center'}\n justifyContent={'space-between'}\n >\n <Box\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n padding: 0,\n cursor: ctaLink ? 'pointer' : 'normal',\n }}\n onClick={() => {\n if (ctaLink) {\n feedbackConversionEpic(state, indexItem, dataItem.sku);\n window.open(`${ctaLink}`, '_blank');\n }\n }}\n >\n <Typography\n className=\"text-white max-line-2\"\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontWeight: 500,\n fontSize: '12px',\n letterSpacing: '0.27px',\n wordBreak: 'break-all',\n maxWidth: !isMobile && ctaLink ? '136px' : '164x',\n paddingRight: '8px',\n }}\n align=\"left\"\n >\n {truncateString(dataItem[settings.field.productName], 45)}\n </Typography>\n {!isMobile && ctaLink && (\n <img src={IconOpenLink} alt=\"more-info\" width={16} />\n )}\n </Box>\n </Box>\n </Tooltip>\n\n {settings.showFeedbackAndShare && (\n <Box\n className=\"box-bottom\"\n style={{ marginBottom: 6, marginTop: 12 }}\n >\n <Grid\n container\n justifyContent={\n settings.shareOption ? 'space-between' : 'space-around'\n }\n alignItems=\"center\"\n >\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('like');\n setFeedback('like');\n }}\n >\n <IconLike\n width={16}\n height={16}\n color={feedback === 'like' ? '#3E36DC' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('dislike');\n setFeedback('dislike');\n }}\n >\n <IconDisLike\n width={16}\n height={16}\n color={feedback === 'dislike' ? '#CC1854' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n {settings.shareOption && (\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => setOpenModalShare(true)}\n >\n <IconShare width={16} height={16} color=\"#000000\" />\n </Button>\n </Box>\n </Grid>\n )}\n </Grid>\n </Box>\n )}\n </div>\n </Box>\n </Box>\n );\n}\n\nexport default memo(ItemResult);\n","import { Box } from '@material-ui/core';\nimport ItemResult from 'components/results/ItemResult';\nimport { groupBy, uniqueId } from 'lodash';\nimport React, { memo, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { connectStateResults } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\n\ninterface Props {\n allSearchResults: any;\n getUrlToCanvasFile: any;\n setLoading?: any;\n sendFeedBackAction: any;\n moreInfoText: any;\n requestImage?: any;\n searchQuery?: string;\n}\n\nfunction ProductListComponent({\n allSearchResults,\n getUrlToCanvasFile,\n sendFeedBackAction,\n moreInfoText,\n searchQuery,\n requestImage,\n isSearchStalled,\n}: any): JSX.Element {\n const { search, settings } = useAppSelector<AppState>((state: any) => state);\n const { loadingSearchAlgolia } = search;\n const [hitGroups, setHitGroups] = useState<any>({});\n const [itemShowDefault, setItemShowDefault] = useState<any[]>([]);\n const [algoliaRequest, setAlgoliaRequest] = useState(false);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { t } = useTranslation();\n\n useEffect(() => {\n if (isSearchStalled) {\n setAlgoliaRequest(true);\n }\n }, [isSearchStalled]);\n\n useEffect(() => {\n if (!allSearchResults?.hits?.length) {\n setItemShowDefault([]);\n return;\n }\n setAlgoliaRequest(false);\n const listHistDefaultGroups = settings.showGroup\n ? setListHitDefault(allSearchResults?.hits)\n : allSearchResults?.hits;\n setItemShowDefault(listHistDefaultGroups);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allSearchResults?.hits, search?.valueTextSearch]);\n\n const setListHitDefault = (hits: any) => {\n let newArrayShowGroup: any = [];\n let newArrayShowItem: any = [];\n\n const groupHits = hits.map((hit: { group_id: string }) => {\n if (!hit.group_id) {\n return { ...hit, group_id: uniqueId('random-group-id') };\n }\n return hit;\n });\n\n const groups = groupBy(groupHits, 'group_id');\n setHitGroups(groups);\n newArrayShowGroup = Object.values(groups);\n if (newArrayShowGroup.length === 0) {\n return hits;\n }\n newArrayShowGroup.forEach((item: any) => {\n let payload: any;\n if (item.length >= 2) {\n payload = {\n ...item[0],\n isGroup: true,\n collap: true,\n };\n newArrayShowItem.push(payload);\n } else {\n payload = {\n ...item[0],\n isGroup: false,\n collap: null,\n };\n newArrayShowItem.push(payload);\n }\n });\n\n return newArrayShowItem;\n };\n\n const handlerGroupItem = (hit: any, index: number) => {\n const group_id = hit.group_id;\n let newItemList = [...itemShowDefault];\n const firstArr = newItemList.slice(0, index + 1);\n firstArr.filter(item => item.group_id === group_id)[0].collap = false;\n let secondArr = newItemList.slice(index + 1, newItemList.length);\n let otherItemsInGroup = [...hitGroups[group_id]];\n otherItemsInGroup.shift();\n secondArr = otherItemsInGroup.concat(secondArr);\n setItemShowDefault(firstArr.concat(secondArr));\n };\n const handlerCloseGroup = (hit: any, index: number) => {\n const group_id = hit.group_id;\n let newItemList = [...itemShowDefault];\n const firstArr = newItemList.slice(0, index + 1);\n firstArr.filter(item => item.group_id === group_id)[0].collap = true;\n let secondArr = newItemList.slice(index + 1, newItemList.length);\n secondArr = secondArr.filter(item => {\n return item.group_id !== group_id;\n });\n setItemShowDefault(firstArr.concat(secondArr));\n };\n\n const renderItem = useMemo(() => {\n if (!requestImage && !search.valueTextSearch.query && !isSearchStalled) {\n return (\n <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>\n {t('Please upload an image or enter a keyword to search.')}\n </Box>\n );\n }\n if (\n itemShowDefault.length === 0 &&\n !loadingSearchAlgolia &&\n !isSearchStalled &&\n (algoliaRequest || requestImage)\n ) {\n return (\n <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>\n {t('No products were found matching your search criteria.')}\n </Box>\n );\n }\n return itemShowDefault.map((hit: any, i: number) => {\n return (\n <Box key={i} style={{ height: 'fit-content' }}>\n <ItemResult\n dataItem={hit}\n indexItem={i}\n isHover={false}\n onSearchImage={(url: string) => {\n getUrlToCanvasFile(url);\n }}\n handlerFeedback={(value: string) => {\n sendFeedBackAction(value);\n }}\n handlerGroupItem={(hitItem: any, index: number) =>\n handlerGroupItem(hitItem, index)\n }\n handlerCloseGroup={(hitItem: any, index: number) =>\n handlerCloseGroup(hitItem, index)\n }\n isGroupItem={settings.showGroup ? hit?.isGroup : false}\n moreInfoText={moreInfoText}\n main_image_link={\n hit['image(main_similarity)'] || hit['main_image_link']\n }\n />\n </Box>\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n itemShowDefault,\n searchQuery,\n requestImage,\n search.valueTextSearch,\n isSearchStalled,\n algoliaRequest,\n loadingSearchAlgolia,\n isMobile,\n ]);\n\n return <>{renderItem}</>;\n}\n\nconst ProductList = connectStateResults<Props>(memo(ProductListComponent));\nexport default ProductList;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgError = function SvgError(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 0.000191037C8.68453 -0.0079651 7.38053 0.245119 6.16361 0.744768C4.94669 1.24442 3.84108 1.98069 2.91088 2.91088C1.98069 3.84108 1.24442 4.94669 0.744768 6.16361C0.245119 7.38053 -0.0079651 8.68453 0.000191037 10C-0.0079651 11.3155 0.245119 12.6195 0.744768 13.8364C1.24442 15.0533 1.98069 16.1589 2.91088 17.0891C3.84108 18.0193 4.94669 18.7556 6.16361 19.2552C7.38053 19.7549 8.68453 20.008 10 19.9998C11.3155 20.008 12.6195 19.7549 13.8364 19.2552C15.0533 18.7556 16.1589 18.0193 17.0891 17.0891C18.0193 16.1589 18.7556 15.0533 19.2552 13.8364C19.7549 12.6195 20.008 11.3155 19.9998 10C20.008 8.68453 19.7549 7.38053 19.2552 6.16361C18.7556 4.94669 18.0193 3.84108 17.0891 2.91088C16.1589 1.98069 15.0533 1.24442 13.8364 0.744768C12.6195 0.245119 11.3155 -0.0079651 10 0.000191037ZM13.8891 14.9999L5.0001 6.11129L6.11129 5.0001L14.9999 13.8891L13.8891 14.9999Z\",\n fill: \"#E31B5D\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgError, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/error.48b946a9.svg\";\nexport { ForwardRef as ReactComponent };","import {\n RectCoords,\n getElementSize,\n getRectAspectRatio,\n getThumbSizeArea,\n elementToCanvas,\n} from '@nyris/nyris-api';\n\nexport const getCroppedCanvas = (\n canvas: HTMLCanvasElement | HTMLImageElement | HTMLVideoElement,\n cropRect?: RectCoords,\n) => {\n let crop = cropRect || {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1,\n };\n if (!canvas) return null;\n\n const originalSize = getElementSize(canvas);\n const aspectRatio = getRectAspectRatio(crop, originalSize);\n let scaledSize = getThumbSizeArea(600, 600, aspectRatio);\n let resizedCroppedCanvas = elementToCanvas(canvas, scaledSize, crop);\n return resizedCroppedCanvas;\n};\n","import DefaultModal from 'components/modal/DefaultModal';\nimport React, { useEffect, useState } from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { getCroppedCanvas } from 'helpers/getCroppedCanvas';\nimport emailjs from '@emailjs/browser';\nimport { ToastHelper } from 'helpers/ToastHelper';\nimport { isUndefined } from 'lodash';\nimport { TextareaAutosize } from '@material-ui/core';\nimport toast from 'react-hot-toast';\nimport { ReactComponent as ErrorIcon } from 'common/assets/icons/error.svg';\nimport { useMediaQuery } from 'react-responsive';\nimport { useAppSelector } from '../../Store/Store';\ninterface Props {\n requestImage: any;\n selectedRegion: any;\n setIsRfqModalOpen: any;\n isRfqModalOpen?: any;\n setRfqStatus: any;\n}\n// eslint-disable-next-line\nconst emailRegex = /.+\\@.+\\..+$/;\n\nconst getErrorMessage = (error: any) => {\n switch (error.status) {\n case 400:\n return 'Your email could not be sent, please try again or send an email to support@nyris.io';\n case 421:\n case 450:\n case 451:\n case 452:\n return \"Email delivery failed. Rest assured, we're continuously attempting to send it for you. Alternatively, you can forward the email to support@nyris.io\";\n default:\n return 'Your email could not be sent, please try again or send an email to support@nyris.io';\n }\n};\n\nexport default function RfqModal({\n requestImage,\n selectedRegion,\n setIsRfqModalOpen,\n isRfqModalOpen,\n setRfqStatus,\n}: Props) {\n const [email, setEmail] = useState('');\n const [emailValid, setEmailValid] = useState<boolean | undefined>(undefined);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { settings } = useAppSelector(state => state);\n\n const [information, setInformation] = useState('');\n const setFormattedContent = React.useCallback(\n text => {\n setInformation(text.slice(0, 150));\n },\n [setInformation],\n );\n useEffect(() => emailjs.init('SMGihPnuEGcYLm0V4'), []);\n useEffect(() => {\n if (email)\n emailRegex.test(email) ? setEmailValid(true) : setEmailValid(false);\n }, [email]);\n\n const handleRfq = async (e: { preventDefault: () => void }) => {\n e.preventDefault();\n const { canvas }: any = requestImage;\n const croppedImage = getCroppedCanvas(canvas, selectedRegion);\n const serviceId = 'service_zfsxshi';\n setIsRfqModalOpen(false);\n if (settings.templateId) {\n try {\n setRfqStatus('loading');\n await emailjs.send(serviceId, settings.templateId, {\n email_id: email.trim(),\n information_text: information,\n request_image: croppedImage?.toDataURL(),\n });\n setRfqStatus('sent');\n ToastHelper.success('Request sent successfully');\n } catch (error) {\n setRfqStatus('inactive');\n\n toast(\n t => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n fontSize: '14px',\n width: '294px',\n }}\n >\n <span style={{fontWeight: 'bold'}}>Email not sent</span>\n <span>{getErrorMessage(error)}</span>\n <a\n href={`mailto:support@nyris.io?subject=Request for quotation&body=${information}`}\n style={{\n padding: '8px 16px 8px 16px',\n border: '1px solid #000',\n marginTop: '16px',\n backgroundColor: 'transparent',\n color: '#000',\n cursor: 'pointer',\n width: 'fit-content',\n }}\n >\n support@nyris.io\n </a>\n </div>\n );\n },\n {\n duration: 5000,\n style: {\n background: '#FFE5EF',\n color: '#000000',\n maxWidth: '400px',\n },\n icon: (\n <div style={{minWidth: '20px', minHeight: '20px'}}>\n <ErrorIcon/>\n </div>\n ),\n },\n );\n }\n setIsRfqModalOpen(false);\n }\n };\n\n return (\n <DefaultModal\n openModal={isRfqModalOpen}\n handleClose={(e: any) => {\n setIsRfqModalOpen(false);\n }}\n >\n <div\n style={{\n display: 'flex',\n width: !isMobile ? '378px' : '360px',\n flexDirection: 'column',\n backgroundColor: '#fff',\n }}\n >\n <div\n style={{\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <CloseIcon\n style={{\n fontSize: 16,\n color: 'black',\n alignSelf: 'flex-end',\n cursor: 'pointer',\n }}\n onClick={() => setIsRfqModalOpen(false)}\n />\n <p\n style={{\n color: '#2B2C46',\n fontSize: '20px',\n fontWeight: 'bold',\n }}\n >\n Submit your image for quotation\n </p>\n </div>\n <div\n style={{\n padding: '16px',\n backgroundColor: '#F3F3F5',\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n <img\n src={getCroppedCanvas(\n requestImage?.canvas,\n selectedRegion,\n )?.toDataURL()}\n alt=\"request_image\"\n style={{ maxHeight: '200px' }}\n />\n </div>\n <div\n style={{\n padding: '0px 16px 16px 16px',\n backgroundColor: '#F3F3F5',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '16px',\n }}\n >\n <div>\n <p\n style={{\n fontSize: '12px',\n color: '#2B2C46',\n marginBottom: '8px',\n }}\n >\n Your email (required)\n </p>\n <input\n value={email}\n onChange={e => setEmail(e.currentTarget.value.trim())}\n style={{\n width: '100%',\n border: 'none',\n height: '32px',\n padding: '8px 16px 8px 16px',\n }}\n />\n {!emailValid && !isUndefined(emailValid) && (\n <p style={{ color: 'red', fontSize: '12px', paddingTop: '8px' }}>\n Please enter a valid email.\n </p>\n )}\n </div>\n <div>\n <div\n style={{\n marginBottom: '8px',\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: '#2B2C46',\n }}\n >\n <p>Additional information</p>\n <p>{`${information.length}/150`}</p>\n </div>\n <TextareaAutosize\n value={information}\n onChange={e => setFormattedContent(e.currentTarget.value)}\n style={{\n width: '100%',\n border: 'none',\n maxWidth: '346px',\n padding: '8px 16px 8px 16px',\n }}\n />\n </div>\n </div>\n <div style={{ display: 'flex' }}>\n <button\n style={{\n height: '66px',\n display: 'flex',\n alignItems: 'center',\n width: '50%',\n backgroundColor: '#4B4B4A',\n color: 'white',\n fontSize: '14px',\n paddingLeft: '16px',\n border: 'none',\n cursor: 'pointer',\n }}\n onClick={() => setIsRfqModalOpen(false)}\n >\n Cancel\n </button>\n <button\n style={{\n height: '66px',\n display: 'flex',\n alignItems: 'center',\n width: '50%',\n backgroundColor: emailValid ? '#4DBE51' : '#E9E9EC',\n color: emailValid ? '#fff' : '#AAABB5',\n fontSize: '14px',\n paddingLeft: '16px',\n border: 'none',\n cursor: emailValid ? 'pointer' : 'normal',\n }}\n disabled={!emailValid}\n onClick={handleRfq}\n >\n Send\n </button>\n </div>\n </div>\n </DefaultModal>\n );\n}\n","import { Box, Button, Typography } from '@material-ui/core';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { Preview } from '@nyris/nyris-react-components';\nimport React, { useState } from 'react';\nimport ExpandablePanelComponent from './PanelResult';\nimport { useTranslation } from 'react-i18next';\nimport { useAppSelector } from 'Store/Store';\nimport KeyboardArrowRightOutlinedIcon from '@material-ui/icons/KeyboardArrowRightOutlined';\nimport KeyboardArrowLeftOutlinedIcon from '@material-ui/icons/KeyboardArrowLeftOutlined';\nimport { DEFAULT_REGION } from '../constants';\nimport { ReactComponent as IconInfo } from 'common/assets/icons/info-tooltip.svg';\n\nfunction SidePanel({\n setImageSelection,\n imageSelection,\n debouncedOnImageSelectionChange,\n filteredRegions,\n showAdjustInfoBasedOnConfidence,\n showAdjustInfo,\n showPostFilter,\n disjunctiveFacets,\n}: {\n setImageSelection: any;\n imageSelection: any;\n debouncedOnImageSelectionChange: any;\n filteredRegions: any;\n showAdjustInfoBasedOnConfidence: any;\n showAdjustInfo: any;\n showPostFilter: any;\n allSearchResults: any;\n disjunctiveFacets: any;\n}) {\n const { t } = useTranslation();\n const [toggleColLeft, setToggleColLeft] = useState<boolean>(false);\n const stateGlobal = useAppSelector((state: any) => state);\n const { search, settings } = stateGlobal;\n\n const { requestImage } = search;\n\n return (\n <Box\n className={`wrap-main-col-left ${toggleColLeft ? 'toggle' : ''}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n }}\n >\n <Box\n className=\"box-toggle-coloumn\"\n style={{\n right: requestImage || toggleColLeft ? '0px' : '16px',\n }}\n >\n <Button\n style={{\n color: '#55566b',\n height: '32px',\n }}\n onClick={() => {\n setToggleColLeft(!toggleColLeft);\n }}\n >\n {toggleColLeft ? (\n <KeyboardArrowRightOutlinedIcon />\n ) : (\n <KeyboardArrowLeftOutlinedIcon />\n )}\n </Button>\n </Box>\n <Box>\n {settings.preview && requestImage && (\n <Box className=\"col-left\">\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item\"\n style={{\n backgroundColor: 'white',\n paddingTop: '32px',\n width: '100%',\n }}\n >\n <div\n style={{\n backgroundColor: '#F3F3F5',\n width: '100%',\n paddingTop: '16px',\n paddingBottom: '16px',\n }}\n >\n <Preview\n key={requestImage?.id}\n onSelectionChange={(r: RectCoords) => {\n setImageSelection(r);\n debouncedOnImageSelectionChange(r);\n }}\n image={requestImage?.canvas}\n selection={imageSelection || DEFAULT_REGION}\n regions={filteredRegions}\n maxWidth={288}\n maxHeight={288}\n dotColor={'#FBD914'}\n minCropWidth={60}\n minCropHeight={60}\n rounded={true}\n />\n </div>\n </Box>\n </Box>\n {(showAdjustInfoBasedOnConfidence || showAdjustInfo) && (\n <Box\n className=\"box-title_col-left\"\n alignItems=\"center\"\n style={{\n backgroundColor: '#3E36DC',\n display: 'flex',\n columnGap: '6px',\n padding: '5px',\n }}\n >\n <IconInfo color=\"white\" />\n <Typography\n style={{\n fontSize: 10,\n color: '#fff',\n }}\n >\n {showAdjustInfo\n ? t('Crop the image for better results')\n : 'Crop the image for better results'}\n </Typography>\n </Box>\n )}\n </Box>\n )}\n\n {showPostFilter && (\n <Box className=\"col-left__bottom\">\n <ExpandablePanelComponent disjunctiveFacets={disjunctiveFacets} />\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default SidePanel;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgArrowUp = function SvgArrowUp(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.65944 6.57845C8.28211 6.24747 7.71789 6.24747 7.34056 6.57845L3.3956 10.0389C3.18599 10.2228 3.18599 10.5491 3.3956 10.733C3.56978 10.8858 3.83022 10.8858 4.0044 10.733L7.34056 7.80652C7.71789 7.47554 8.28211 7.47554 8.65944 7.80652L11.9956 10.733C12.1698 10.8858 12.4302 10.8858 12.6044 10.733C12.814 10.5491 12.814 10.2228 12.6044 10.0389L8.65944 6.57845Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgArrowUp, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/arrow_up.fcd6b144.svg\";\nexport { ForwardRef as ReactComponent };","import { useMemo } from 'react';\n\nconst useFilteredRegions = (regions: any, imageSelection: any) => {\n const filteredRegions = useMemo(\n () =>\n regions.map(\n (region: {\n normalizedRect: { x1: any; x2: any; y1: any; y2: any };\n }) => {\n if (\n region.normalizedRect?.x1 === imageSelection?.x1 &&\n region.normalizedRect?.x2 === imageSelection?.x2 &&\n region.normalizedRect?.y1 === imageSelection?.y1 &&\n region.normalizedRect?.y2 === imageSelection?.y2\n ) {\n return { ...region, show: false };\n }\n if (\n imageSelection?.x1 === 0 &&\n imageSelection?.x2 === 1 &&\n imageSelection?.y1 === 0 &&\n imageSelection?.y2 === 1\n ) {\n return { ...region, show: false };\n }\n\n return { ...region, show: true };\n },\n ),\n\n [regions, imageSelection],\n );\n\n return filteredRegions;\n};\n\nexport default useFilteredRegions;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgArrowDown = function SvgArrowDown(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.65944 10.4215C8.28211 10.7525 7.71789 10.7525 7.34056 10.4215L3.3956 6.96105C3.18599 6.77719 3.18599 6.45088 3.3956 6.26702C3.56978 6.11423 3.83022 6.11423 4.0044 6.26702L7.34056 9.19348C7.71789 9.52446 8.28211 9.52446 8.65944 9.19348L11.9956 6.26702C12.1698 6.11423 12.4302 6.11423 12.6044 6.26702C12.814 6.45088 12.814 6.77719 12.6044 6.96105L8.65944 10.4215Z\",\n fill: \"#currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgArrowDown, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/arrow_down.c1b611db.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgTrash = function SvgTrash(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 14,\n height: 14,\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9 0.5C9 0.223858 8.77614 0 8.5 0H5.5C5.22386 0 5 0.223858 5 0.5C5 0.776142 5.22386 1 5.5 1H8.5C8.77614 1 9 0.776142 9 0.5ZM1.5 3C1.22386 3 1 2.77614 1 2.5C1 2.22386 1.22386 2 1.5 2H12.5C12.7761 2 13 2.22386 13 2.5C13 2.77614 12.7761 3 12.5 3C12.2239 3 12 3.22386 12 3.5V13C12 13.5523 11.5523 14 11 14H3C2.44772 14 2 13.5523 2 13V3.5C2 3.22386 1.77614 3 1.5 3ZM4 3C3.44772 3 3 3.44772 3 4V12C3 12.5523 3.44772 13 4 13H10C10.5523 13 11 12.5523 11 12V4C11 3.44772 10.5523 3 10 3H4ZM6 5.5C6 5.22386 5.77614 5 5.5 5C5.22386 5 5 5.22386 5 5.5V10.5C5 10.7761 5.22386 11 5.5 11C5.77614 11 6 10.7761 6 10.5V5.5ZM9 5.5C9 5.22386 8.77614 5 8.5 5C8.22386 5 8 5.22386 8 5.5V10.5C8 10.7761 8.22386 11 8.5 11C8.77614 11 9 10.7761 9 10.5V5.5Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTrash, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/trash.1624780d.svg\";\nexport { ForwardRef as ReactComponent };","import React, { memo, useState } from 'react';\nimport { Box, Typography, Hidden } from '@material-ui/core';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { Preview } from '@nyris/nyris-react-components';\nimport { DEFAULT_REGION } from '../constants';\nimport { ReactComponent as IconInfo } from 'common/assets/icons/info-tooltip.svg';\nimport { useTranslation } from 'react-i18next';\nimport { useAppDispatch } from 'Store/Store';\nimport { ReactComponent as ArrowUp } from 'common/assets/icons/arrow_up.svg';\nimport { ReactComponent as ArrowDown } from 'common/assets/icons/arrow_down.svg';\nimport { ReactComponent as Trash } from 'common/assets/icons/trash.svg';\nimport { useQuery } from 'hooks/useQuery';\nimport { reset } from 'Store/search/Search';\nimport { useHistory } from 'react-router-dom';\nimport { connectSearchBox } from 'react-instantsearch-dom';\n\nfunction ImagePreviewMobileComponent({\n requestImage,\n imageSelection,\n setImageSelection,\n debouncedOnImageSelectionChange,\n filteredRegions,\n showAdjustInfo,\n showAdjustInfoBasedOnConfidence,\n ...rest\n}: {\n requestImage: any;\n imageSelection: any;\n setImageSelection: any;\n debouncedOnImageSelectionChange: any;\n filteredRegions: any;\n showAdjustInfoBasedOnConfidence: any;\n showAdjustInfo: any;\n}) {\n const { t } = useTranslation();\n const { refine }: any = rest;\n const [editActive, setEditActive] = useState(false);\n const [showShrinkAnimation, setShrinkAnimation] = useState(false);\n const query = useQuery();\n const dispatch = useAppDispatch();\n const history = useHistory();\n\n const handleArrowClick = () => {\n setEditActive(s => !s);\n setShrinkAnimation(true);\n };\n\n const onImageRemove = () => {\n const searchQuery = query.get('query') || '';\n\n if (!searchQuery) {\n dispatch(reset(''));\n history.push('/');\n }\n dispatch(reset(''));\n\n // not an ideal solution: fixes text search not working after removing image\n setTimeout(() => {\n refine(searchQuery);\n }, 100);\n };\n\n return (\n <Box\n className=\"col-left\"\n style={{\n backgroundColor: '#5D5D63',\n marginBottom: '15px',\n }}\n >\n {editActive && (\n <div>\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item expand-animation\"\n style={{ backgroundColor: 'transparent' }}\n >\n <Preview\n key={requestImage?.id}\n onSelectionChange={(r: RectCoords) => {\n setImageSelection(r);\n debouncedOnImageSelectionChange(r);\n }}\n image={requestImage?.canvas}\n selection={imageSelection || DEFAULT_REGION}\n regions={filteredRegions}\n maxWidth={240}\n maxHeight={240}\n dotColor={'#FBD914'}\n minCropWidth={60}\n minCropHeight={60}\n rounded={false}\n expandAnimation={true}\n />\n </Box>\n {(showAdjustInfoBasedOnConfidence || showAdjustInfo) && (\n <Box\n className=\"box-title_col-left\"\n alignItems=\"center\"\n style={{\n backgroundColor: '#3E36DC',\n display: 'flex',\n columnGap: '6px',\n padding: '5px',\n width: 'fit-content',\n }}\n >\n <IconInfo color=\"white\" />\n <Typography\n style={{\n fontSize: 10,\n color: '#fff',\n }}\n >\n {showAdjustInfo\n ? t('Crop the image for better results')\n : 'Crop the image for better results'}\n </Typography>\n </Box>\n )}\n </Box>\n <Hidden>\n <Box\n sx={{\n position: 'absolute',\n left: '15px',\n top: '25px',\n padding: '4px',\n }}\n onClick={onImageRemove}\n >\n <Box\n sx={{\n width: '24px',\n height: '24px',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n borderRadius: '100%',\n }}\n >\n <Trash color=\"white\" fill=\"white\" />\n </Box>\n </Box>\n </Hidden>\n\n <Hidden mdUp>\n <Box\n className=\"slideDown\"\n sx={{\n position: 'absolute',\n bottom: '25px',\n right: '20px',\n }}\n onClick={handleArrowClick}\n >\n <Box\n bgcolor={'white'}\n sx={{\n width: '24px',\n height: '24px',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n borderRadius: '100%',\n }}\n >\n <ArrowUp color=\"black\" />\n </Box>\n </Box>\n </Hidden>\n </div>\n )}\n {!editActive && (\n <Box\n className={showShrinkAnimation ? 'shrink-animation' : ''}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 80,\n width: '100%',\n }}\n >\n <Hidden>\n <Box\n sx={{\n position: 'absolute',\n left: '15px',\n top: '25px',\n padding: '4px',\n }}\n onClick={onImageRemove}\n >\n <Box\n // className={showShrinkAnimation ? 'slideUp' : ''}\n sx={{\n width: '24px',\n height: '24px',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n borderRadius: '100%',\n }}\n >\n <Trash color=\"white\" fill=\"white\" />\n </Box>\n </Box>\n </Hidden>\n <Box\n sx={{\n display: 'flex',\n height: '100%',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n onClick={handleArrowClick}\n >\n {requestImage && requestImage?.canvas?.toDataURL && (\n <img\n src={requestImage?.canvas?.toDataURL()}\n style={{\n width: '80px',\n height: '80px',\n objectFit: 'contain',\n background: 'white',\n }}\n alt=\"preview\"\n />\n )}\n\n <div\n className={\n showShrinkAnimation\n ? 'shrink-animation circle-layer'\n : 'circle-layer'\n }\n ></div>\n </Box>\n <Hidden mdUp>\n <Box\n sx={{\n position: 'absolute',\n right: '25px',\n padding: '4px',\n }}\n onClick={handleArrowClick}\n >\n <Box\n bgcolor={'white'}\n className={showShrinkAnimation ? 'slideUp' : ''}\n sx={{\n width: '24px',\n height: '24px',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n borderRadius: '100%',\n }}\n >\n <ArrowDown color=\"black\" fill=\"black\" />\n </Box>\n </Box>\n </Hidden>\n </Box>\n )}\n </Box>\n );\n}\nconst ImagePreviewMobile = connectSearchBox<any>(\n memo(ImagePreviewMobileComponent),\n);\nexport default ImagePreviewMobile;\n","import { Box } from '@material-ui/core';\nimport { getCroppedCanvas } from 'helpers/getCroppedCanvas';\nimport React from 'react';\nimport { useMediaQuery } from 'react-responsive';\n\nfunction RfqBanner({\n requestImage,\n rfqRef,\n rfqStatus,\n selectedRegion,\n setIsRfqModalOpen,\n}: {\n rfqRef?: any;\n rfqStatus: any;\n setIsRfqModalOpen: any;\n requestImage: any;\n selectedRegion: any;\n}) {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n return (\n <Box\n style={{\n padding: '0px 16px 0px 16px',\n backgroundColor: '#F6F3F1',\n width: '100%',\n marginBottom: !isMobile ? '32px' : '0px',\n alignSelf: 'end',\n height: '248px',\n display: 'flex',\n alignItems: 'center',\n }}\n className=\"rfq-box\"\n >\n <Box\n style={{\n width: '100%',\n display: 'flex',\n columnGap: '16px',\n alignItems: 'center',\n justifyContent: 'space-around',\n }}\n >\n <div>\n <img\n src={getCroppedCanvas(\n requestImage?.canvas,\n selectedRegion,\n )?.toDataURL()}\n alt=\"request_image\"\n style={{\n mixBlendMode: rfqStatus !== 'inactive' ? 'overlay' : 'unset',\n maxHeight: '181px',\n maxWidth: '181px',\n borderRadius: '2px',\n }}\n />\n </div>\n <Box>\n <Box\n style={{\n paddingBottom: '12px',\n }}\n >\n <Box\n style={{\n fontSize: '14px',\n color: rfqStatus === 'inactive' ? '#4B4B4A' : '#CACAD1',\n fontWeight: 'bold',\n }}\n >\n {isMobile\n ? 'No matches found?'\n : 'No matches found for your request?'}\n </Box>\n <Box\n style={{\n fontSize: '12px',\n maxWidth: '320x',\n lineHeight: '14.1px',\n color: rfqStatus === 'inactive' ? '#4B4B4A' : '#CACAD1',\n fontWeight: 'normal',\n }}\n >\n Get personalised help from our team of product experts.\n </Box>\n </Box>\n <button\n style={{\n maxWidth: '200px',\n background: rfqStatus === 'inactive' ? '#4B4B4A' : '#E9E9EC',\n boxShadow:\n rfqStatus === 'inactive'\n ? '0px 0px 4px 0px rgba(0, 0, 0, 0.25)'\n : '',\n borderRadius: '2px',\n padding: '16px 16px 16px 16px',\n display: 'flex',\n alignItems: 'center',\n color: rfqStatus === 'inactive' ? '#fff' : '#CACAD1',\n fontSize: '14px',\n height: '48px',\n cursor: rfqStatus === 'inactive' ? 'pointer' : 'default',\n border: 'none',\n }}\n disabled={rfqStatus !== 'inactive'}\n onClick={() => {\n setIsRfqModalOpen(true);\n }}\n >\n Request a Quote\n </button>\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default RfqBanner;\n","import DefaultModal from 'components/modal/DefaultModal';\nimport React, { useEffect, useState } from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { getCroppedCanvas } from 'helpers/getCroppedCanvas';\nimport emailjs from '@emailjs/browser';\nimport { ToastHelper } from 'helpers/ToastHelper';\nimport { isUndefined } from 'lodash';\nimport { TextareaAutosize, Tooltip } from '@material-ui/core';\nimport toast from 'react-hot-toast';\nimport { ReactComponent as ErrorIcon } from 'common/assets/icons/error.svg';\nimport { ReactComponent as InfoTooltip } from 'common/assets/icons/info-tooltip.svg';\n\nimport { useAppSelector } from 'Store/Store';\nimport { useMediaQuery } from 'react-responsive';\ninterface Props {\n requestImage: any;\n selectedRegion: any;\n setIsInquiryModalOpen: any;\n isInquiryModalOpen?: any;\n setInquiryStatus: any;\n}\n// eslint-disable-next-line\nconst emailRegex = /.+\\@.+\\..+$/;\n\nconst getErrorMessage = (error: any) => {\n switch (error.status) {\n case 400:\n return 'Your email could not be sent, please try again or send an email to:';\n case 421:\n case 450:\n case 451:\n case 452:\n return \"Email delivery failed. Rest assured, we're continuously attempting to send it for you. Alternatively, you can forward the email to:\";\n default:\n return 'Your email could not be sent, please try again or send an email to:';\n }\n};\n\nexport default function InquiryModal({\n requestImage,\n selectedRegion,\n setIsInquiryModalOpen,\n isInquiryModalOpen,\n setInquiryStatus,\n}: Props) {\n const stateGlobal = useAppSelector(state => state);\n const {\n search: { preFilter },\n settings,\n } = stateGlobal;\n\n const preFilterValues = Object.keys(preFilter) as string[];\n\n const [email, setEmail] = useState('');\n const [emailValid, setEmailValid] = useState<boolean | undefined>(undefined);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n const [information, setInformation] = useState('');\n\n const setFormattedContent = React.useCallback(\n text => {\n setInformation(text.slice(0, 150));\n },\n [setInformation],\n );\n\n useEffect(() => emailjs.init('SMGihPnuEGcYLm0V4'), []);\n useEffect(() => {\n if (email)\n emailRegex.test(email) ? setEmailValid(true) : setEmailValid(false);\n }, [email]);\n\n const handleInquiry = async (e: { preventDefault: () => void }) => {\n e.preventDefault();\n const { canvas }: any = requestImage || {};\n const croppedImage = canvas\n ? getCroppedCanvas(canvas, selectedRegion)\n : null;\n const serviceId = 'service_zfsxshi';\n setIsInquiryModalOpen(false);\n if (settings.templateId) {\n try {\n setInquiryStatus('loading');\n await emailjs.send(serviceId, settings.templateId, {\n email_id: email.trim(),\n information_text: information,\n request_image: croppedImage?.toDataURL(),\n prefilter_values: preFilterValues.join(', '),\n });\n setInquiryStatus('sent');\n ToastHelper.success('Request sent successfully');\n } catch (error) {\n setInquiryStatus('inactive');\n\n toast(\n t => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n fontSize: '14px',\n width: '294px',\n }}\n >\n <span style={{ fontWeight: 'bold' }}>Email not sent</span>\n <span>{getErrorMessage(error)}</span>\n <a\n href={`mailto:support@nyris.io?subject=Request for quotation&body=${encodeURIComponent(`Hello,\n I filled out the support form on the Search Suite, but it failed. I inquired the following:\n email:\n Pre-filter:\n Additional Text: `)}`}\n style={{\n padding: '8px 16px 8px 16px',\n border: '1px solid #000',\n marginTop: '16px',\n backgroundColor: 'transparent',\n color: '#000',\n cursor: 'pointer',\n width: 'fit-content',\n }}\n >\n support@nyris.io\n </a>\n </div>\n );\n },\n {\n duration: 5000,\n style: {\n background: '#FFE5EF',\n color: '#000000',\n maxWidth: '400px',\n },\n icon: (\n <div style={{ minWidth: '20px', minHeight: '20px' }}>\n <ErrorIcon />\n </div>\n ),\n },\n );\n }\n setIsInquiryModalOpen(false);\n }\n };\n\n return (\n <DefaultModal\n openModal={isInquiryModalOpen}\n rounded={false}\n handleClose={(e: any) => {\n setIsInquiryModalOpen(false);\n }}\n >\n <div\n style={{\n display: 'flex',\n width: !isMobile ? '378px' : '360px',\n flexDirection: 'column',\n backgroundColor: '#F3F3F5',\n }}\n >\n <div\n style={{\n padding: '16px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <p\n style={{\n color: '#2B2C46',\n fontSize: !isMobile ? '20px' : '18px',\n fontWeight: 'bold',\n }}\n >\n {requestImage\n ? 'Submit your image for inquiry'\n : 'Submit your inquiry'}\n </p>\n <div\n onClick={() => setIsInquiryModalOpen(false)}\n style={{ display: 'flex', padding: '1px' }}\n >\n <CloseIcon\n style={{\n fontSize: 16,\n color: 'black',\n cursor: 'pointer',\n }}\n />\n </div>\n </div>\n {requestImage && (\n <div\n style={{\n padding: '16px',\n backgroundColor: '#F3F3F5',\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n <img\n src={getCroppedCanvas(\n requestImage?.canvas,\n selectedRegion,\n )?.toDataURL()}\n alt=\"request_image\"\n style={{ maxHeight: '200px' }}\n />\n </div>\n )}\n\n <div\n style={{\n padding: '16px 16px 16px 16px',\n backgroundColor: '#F3F3F5',\n display: 'flex',\n flexDirection: 'column',\n rowGap: '16px',\n }}\n >\n <div>\n <p\n style={{\n fontSize: '12px',\n color: '#2B2C46',\n marginBottom: '8px',\n }}\n >\n Your email (required)\n </p>\n <input\n value={email}\n onChange={e => setEmail(e.currentTarget.value.trim())}\n style={{\n width: '100%',\n border: 'none',\n height: '32px',\n padding: '8px 16px 8px 16px',\n fontSize: '13px',\n color: ' #2B2C46',\n }}\n />\n {!emailValid && !isUndefined(emailValid) && (\n <p style={{ color: 'red', fontSize: '12px', paddingTop: '8px' }}>\n Please enter a valid email.\n </p>\n )}\n </div>\n {settings.preFilterOption && (\n <div>\n <div\n style={{\n display: 'flex',\n columnGap: '4px',\n alignItems: 'center',\n marginBottom: '8px',\n }}\n >\n <p\n style={{\n fontSize: '12px',\n color: '#2B2C46',\n }}\n >\n Machine\n </p>\n <Tooltip\n title={\n 'Please select a pre-filter before search request to refine and yield accurate results.'\n }\n placement=\"top\"\n arrow={true}\n >\n <InfoTooltip style={{ cursor: 'pointer' }} />\n </Tooltip>\n </div>\n\n <div\n style={{\n width: '100%',\n border: 'none',\n padding: '8px 16px 8px 16px',\n fontSize: '13px',\n color: '#2B2C46',\n minHeight: '32px',\n backgroundColor: '#fff',\n }}\n >\n {preFilterValues.join(', ') || 'Pre-filter is not selected'}\n </div>\n </div>\n )}\n\n <div>\n <div\n style={{\n marginBottom: '8px',\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: '#2B2C46',\n }}\n >\n <p>Additional information</p>\n <p>{`${information.length}/150`}</p>\n </div>\n <TextareaAutosize\n value={information}\n onChange={e => setFormattedContent(e.currentTarget.value)}\n style={{\n width: '100%',\n border: 'none',\n maxWidth: '346px',\n minHeight: '40px',\n padding: '8px 16px 8px 16px',\n fontSize: '13px',\n color: ' #2B2C46',\n }}\n />\n </div>\n </div>\n <div style={{ display: 'flex' }}>\n <button\n style={{\n height: '66px',\n display: 'flex',\n alignItems: 'center',\n width: '50%',\n backgroundColor: '#2B2C46',\n color: 'white',\n fontSize: '14px',\n paddingLeft: '16px',\n border: 'none',\n cursor: 'pointer',\n }}\n onClick={() => setIsInquiryModalOpen(false)}\n >\n Cancel\n </button>\n <button\n style={{\n height: '66px',\n display: 'flex',\n alignItems: 'center',\n width: '50%',\n backgroundColor: emailValid\n ? settings.theme?.primaryColor\n : '#E9E9EC',\n color: emailValid ? '#fff' : '#AAABB5',\n fontSize: '14px',\n paddingLeft: '16px',\n border: 'none',\n cursor: emailValid ? 'pointer' : 'normal',\n }}\n disabled={!emailValid}\n onClick={handleInquiry}\n >\n Send\n </button>\n </div>\n </div>\n </DefaultModal>\n );\n}\n","import { Box } from '@material-ui/core';\nimport { getCroppedCanvas } from 'helpers/getCroppedCanvas';\nimport React, { useEffect, useState } from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport InquiryModal from './InquiryModal';\n\nfunction InquiryBanner({\n requestImage,\n selectedRegion,\n query,\n}: {\n requestImage: any;\n selectedRegion: any;\n query: any;\n}) {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const [isInquiryModalOpen, setIsInquiryModalOpen] = useState(false);\n const [inquiryStatus, setInquiryStatus] = useState<\n 'inactive' | 'loading' | 'sent'\n >('inactive');\n\n useEffect(() => {\n setInquiryStatus('inactive');\n }, [selectedRegion, query]);\n\n return (\n <>\n {isInquiryModalOpen && (\n <InquiryModal\n requestImage={requestImage}\n selectedRegion={selectedRegion}\n setIsInquiryModalOpen={setIsInquiryModalOpen}\n isInquiryModalOpen={isInquiryModalOpen}\n setInquiryStatus={setInquiryStatus}\n />\n )}\n <Box\n style={{\n padding: !isMobile ? '24px 40px 24px 40px' : '16px 16px 16px 16px',\n backgroundColor: '#F3F3F5',\n width: '100%',\n marginBottom: '32px',\n alignSelf: 'end',\n display: 'flex',\n alignItems: 'center',\n }}\n className=\"rfq-box\"\n >\n <Box\n style={{\n width: '100%',\n display: 'flex',\n columnGap: !isMobile ? '26px' : '8px',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n {requestImage && (\n <div>\n <img\n src={getCroppedCanvas(\n requestImage?.canvas,\n selectedRegion,\n )?.toDataURL()}\n alt=\"request_image\"\n style={{\n mixBlendMode:\n inquiryStatus !== 'inactive' ? 'overlay' : 'unset',\n maxHeight: !isMobile ? '181px' : '120px',\n maxWidth: !isMobile ? '181px' : '120px',\n borderRadius: '2px',\n }}\n />\n </div>\n )}\n\n <Box>\n <Box\n style={{\n paddingBottom: '12px',\n paddingLeft: '16px',\n }}\n >\n <Box\n style={{\n fontSize: '14px',\n color: inquiryStatus === 'inactive' ? '#4B4B4A' : '#2B2C46',\n fontWeight: 'bold',\n }}\n >\n {isMobile\n ? 'No matches found?'\n : 'No matches found for your request?'}\n </Box>\n <Box\n style={{\n fontSize: '12px',\n maxWidth: '320x',\n lineHeight: '14.1px',\n color: inquiryStatus === 'inactive' ? '#4B4B4A' : '#2B2C46',\n fontWeight: 'normal',\n }}\n >\n Get personalised help from our team of product experts.\n </Box>\n </Box>\n <button\n style={{\n width: '200px',\n background:\n inquiryStatus === 'inactive' ? '#2B2C46' : '#E9E9EC',\n boxShadow:\n inquiryStatus === 'inactive'\n ? '0px 0px 4px 0px rgba(0, 0, 0, 0.25)'\n : '',\n borderRadius: '2px',\n padding: '16px 16px 16px 16px',\n display: 'flex',\n alignItems: 'center',\n color: inquiryStatus === 'inactive' ? '#fff' : '#CACAD1',\n fontSize: '14px',\n height: '48px',\n cursor: inquiryStatus === 'inactive' ? 'pointer' : 'default',\n border: 'none',\n }}\n disabled={inquiryStatus !== 'inactive'}\n onClick={() => {\n setIsInquiryModalOpen(true);\n }}\n >\n Submit an Inquiry\n </button>\n </Box>\n </Box>\n </Box>\n </>\n );\n}\n\nexport default InquiryBanner;\n","import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Box } from '@material-ui/core';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\n\nimport { RectCoords } from '@nyris/nyris-api';\nimport { CurrentRefinements } from 'components/current-refinements/current-refinements';\nimport FooterResult from 'components/FooterResult';\nimport CustomSearchBox from 'components/input/inputSearch';\nimport ProductList from 'components/ProductList';\nimport { debounce, isEmpty } from 'lodash';\nimport {\n Configure,\n connectStateResults,\n HitsPerPage,\n Pagination,\n} from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { feedbackRegionEpic, feedbackSuccessEpic } from 'services/Feedback';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport { showFeedback, showResults } from 'Store/nyris/Nyris';\nimport {\n loadingActionResults,\n onToggleModalItemDetail,\n selectionChanged,\n setImageSearchInput,\n setRegions,\n setRequestImage,\n setSearchResults,\n setSelectedRegion,\n updateResultChangePosition,\n updateStatusLoading,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { showHits } from '../../constants';\nimport { DEFAULT_REGION } from '../../constants';\nimport { useTranslation } from 'react-i18next';\nimport RfqModal from 'components/rfq/RfqModal';\nimport SidePanel from 'components/SidePanel';\nimport useFilteredRegions from 'hooks/useFilteredRegions';\nimport ImagePreviewMobile from 'components/ImagePreviewMobile';\nimport RfqBanner from 'components/rfq/RfqBanner';\nimport InquiryBanner from 'components/Inquiry/InquiryBanner';\n\ninterface Props {\n allSearchResults: any;\n isSearchStalled?: boolean;\n}\n\nfunction ResultComponent(props: Props) {\n const dispatch = useAppDispatch();\n const refBoxResult: any = useRef(null);\n const stateGlobal = useAppSelector(state => state);\n const { search, settings } = stateGlobal;\n\n const {\n requestImage,\n regions,\n selectedRegion,\n preFilter,\n loadingSearchAlgolia,\n imageThumbSearchInput,\n } = search;\n\n const moreInfoText = settings?.productCtaText;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const [imageSelection, setImageSelection] = useState<any>(null);\n const executeScroll = () => refBoxResult.current.scrollIntoView('-100px');\n const [filterString, setFilterString] = useState<string>();\n const { t } = useTranslation();\n const [showAdjustInfo, setAdjustInfo] = useState(false);\n const [showAdjustInfoBasedOnConfidence, setShowAdjustInfoBasedOnConfidence] =\n useState(false);\n const [rfqStatus, setRfqStatus] = useState<'inactive' | 'loading' | 'sent'>(\n 'inactive',\n );\n const [isRfqModalOpen, setIsRfqModalOpen] = useState(false);\n const imageUploadRef = useRef(null);\n const rfqRef = useRef<any>(null);\n const [isScrolled, setIsScrolled] = useState<\n 'not-scrolled' | 'scrolled' | 'user-scrolled'\n >('not-scrolled');\n\n useEffect(() => {\n if (\n !loadingSearchAlgolia &&\n (imageThumbSearchInput.includes('blob:') ||\n imageThumbSearchInput.includes('data:')) &&\n imageUploadRef.current !== imageThumbSearchInput\n ) {\n setAdjustInfo(true);\n const timeout = setTimeout(() => {\n setAdjustInfo(false);\n }, 2000);\n imageUploadRef.current = imageThumbSearchInput;\n return () => {\n clearTimeout(timeout);\n setAdjustInfo(false);\n };\n }\n }, [imageThumbSearchInput, loadingSearchAlgolia]);\n\n useEffect(() => {\n if (selectedRegion) {\n setImageSelection(selectedRegion);\n setRfqStatus('inactive');\n setIsScrolled('not-scrolled');\n }\n }, [selectedRegion]);\n\n useEffect(() => {\n if (requestImage) {\n setIsScrolled('not-scrolled');\n executeScroll();\n setImageSelection(DEFAULT_REGION);\n }\n }, [requestImage]);\n\n const findImageByApiNyris = useCallback(\n async (canvas: any, r?: RectCoords) => {\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n dispatch(loadingActionResults());\n return findByImage({\n image: canvas,\n settings,\n region: r,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n })\n .then(res => {\n dispatch(updateStatusLoading(false));\n return {\n ...res,\n };\n })\n .catch((e: any) => {\n dispatch(updateStatusLoading(false));\n console.log('error call api change selection find image', e);\n });\n },\n [settings, dispatch, preFilter],\n );\n\n // TODO: Search offers for image:\n const findItemsInSelection = useCallback(\n debounce(async (r: RectCoords) => {\n if (!requestImage) {\n return;\n }\n dispatch(updateStatusLoading(true));\n const { canvas }: any = requestImage;\n findImageByApiNyris(canvas, r).then((res: any) => {\n dispatch(updateResultChangePosition(res));\n const highConfidence = res.results.find(\n (data: { score: number }) => data.score >= 0.65,\n );\n if (!highConfidence) {\n setShowAdjustInfoBasedOnConfidence(true);\n }\n setTimeout(() => {\n setShowAdjustInfoBasedOnConfidence(false);\n }, 2000);\n });\n return dispatch(showFeedback());\n }, 250),\n [requestImage, findImageByApiNyris],\n );\n\n // TODO: Handler like dislike\n const sendFeedBackAction = async (type: string) => {\n feedbackSuccessEpic(stateGlobal, type === 'like');\n };\n\n // TODO: Search image with url or file\n const getUrlToCanvasFile = async (url: string) => {\n dispatch(updateStatusLoading(true));\n if (isMobile) {\n executeScroll();\n // setOpenModalImage(false);\n dispatch(onToggleModalItemDetail(false));\n }\n dispatch(showResults());\n dispatch(loadingActionResults());\n dispatch(setImageSearchInput(url));\n let image = await createImage(url);\n dispatch(setRequestImage(image));\n\n let searchRegion: RectCoords | undefined = undefined;\n\n if (settings.regions) {\n let res = await findRegions(image, settings);\n searchRegion = res.selectedRegion;\n dispatch(setRegions(res.regions));\n dispatch(setSelectedRegion(searchRegion));\n }\n const preFilterValues = [\n {\n key: settings.visualSearchFilterKey,\n values: Object.keys(preFilter) as string[],\n },\n ];\n findByImage({\n image,\n settings,\n region: searchRegion,\n filters: !isEmpty(preFilter) ? preFilterValues : undefined,\n }).then(res => {\n dispatch(setSearchResults(res));\n dispatch(showFeedback());\n dispatch(updateStatusLoading(false));\n return;\n });\n };\n const nonEmptyFilter: any[] = !requestImage\n ? []\n : ['sku:DOES_NOT_EXIST<score=1> '];\n const filterSkus: any = search?.results\n ? search?.results\n .slice()\n .reverse()\n .map((f: any, i: number) => `sku:'${f.sku}'<score=${i}> `)\n : '';\n const filterSkusString = [...nonEmptyFilter, ...filterSkus].join('OR ');\n\n useEffect(() => {\n document.title = 'Search results';\n\n if (requestImage || isEmpty(search.valueTextSearch.query)) return;\n const preFilterValues = Object.keys(preFilter) as string[];\n const filter =\n preFilterValues.length > 0\n ? preFilterValues\n .map(item => `${settings.alogoliaFilterField}:'${item}'`)\n .join(' OR ')\n : '';\n\n setFilterString(filter);\n }, [\n preFilter,\n requestImage,\n search.valueTextSearch.query,\n settings.alogoliaFilterField,\n ]);\n\n useEffect(() => {\n if (!requestImage) {\n return;\n }\n dispatch(updateStatusLoading(true));\n const { canvas }: any = requestImage;\n findImageByApiNyris(canvas).then((res: any) => {\n // setPreFilter(keyFilter);\n dispatch(updateResultChangePosition(res));\n });\n dispatch(showFeedback());\n\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [preFilter]);\n\n useEffect(() => {\n if (!requestImage) return;\n\n const preFilterValues = Object.keys(preFilter) as string[];\n const preFilterString =\n preFilterValues.length > 0\n ? preFilterValues\n .map(item => `${settings.alogoliaFilterField}:'${item}'`)\n .join(' OR ')\n : '';\n\n const filter =\n preFilterValues.length > 0\n ? filterSkusString\n ? `(${filterSkusString}) AND ${preFilterString}`\n : preFilterString\n : filterSkusString;\n setFilterString(filter);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterSkusString, settings.alogoliaFilterField]);\n\n const debouncedOnImageSelectionChange = useCallback(\n debounce((r: RectCoords) => {\n feedbackRegionEpic(stateGlobal, r);\n dispatch(selectionChanged(r));\n findItemsInSelection(r);\n }, 500),\n [findItemsInSelection, stateGlobal.search],\n );\n\n const filteredRegions = useFilteredRegions(regions, imageSelection);\n\n const showPostFilter = useMemo(() => {\n return settings.postFilterOption && props.allSearchResults?.hits.length > 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [settings.postFilterOption, props.allSearchResults?.hits]);\n\n const showSidePanel = useMemo(() => {\n return requestImage || (settings.postFilterOption && showPostFilter);\n }, [showPostFilter, settings.postFilterOption, requestImage]);\n\n useEffect(() => {\n const handleScroll = () => {\n setTimeout(() => {\n setIsScrolled(s => (s === 'not-scrolled' ? 'scrolled' : s));\n setTimeout(() => {\n setIsScrolled(s => (s === 'scrolled' ? 'user-scrolled' : s));\n }, 5000);\n }, 1000);\n };\n if (requestImage)\n window.addEventListener('scroll', handleScroll, { capture: true });\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [requestImage]);\n\n return (\n <>\n <div\n className={`wrap-main-result loading`}\n id=\"wrap-main-result\"\n ref={refBoxResult}\n >\n <>\n {isRfqModalOpen && (\n <RfqModal\n requestImage={requestImage}\n selectedRegion={selectedRegion}\n setIsRfqModalOpen={setIsRfqModalOpen}\n isRfqModalOpen={isRfqModalOpen}\n setRfqStatus={setRfqStatus}\n />\n )}\n\n {filterString && (\n <Configure\n query={search.valueTextSearch.query}\n filters={filterString}\n ></Configure>\n )}\n <Box className=\"box-wrap-result-component\">\n {!isMobile && (\n <div className=\"box-search\">\n <CustomSearchBox />\n </div>\n )}\n <Box className=\"box-result\">\n <>\n {!isMobile && showSidePanel && (\n <SidePanel\n setImageSelection={setImageSelection}\n allSearchResults={props.allSearchResults}\n debouncedOnImageSelectionChange={\n debouncedOnImageSelectionChange\n }\n filteredRegions={filteredRegions}\n imageSelection={imageSelection}\n showAdjustInfo={showAdjustInfo}\n showAdjustInfoBasedOnConfidence={\n showAdjustInfoBasedOnConfidence\n }\n showPostFilter={showPostFilter}\n disjunctiveFacets={props.allSearchResults.disjunctiveFacets}\n />\n )}\n\n <Box\n className={`col-right ${\n settings.preview && 'ml-auto mr-auto'\n } ${isMobile && 'col-right-result-mobile'}`}\n style={{\n paddingTop: isMobile ? '8px' : '40px',\n overflow: !isMobile ? 'auto' : '',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {!isMobile && (\n <Box className=\"wrap-box-refinements\">\n <CurrentRefinements statusSwitchButton={true} />\n </Box>\n )}\n\n {isMobile && settings.preview && requestImage && (\n <ImagePreviewMobile\n requestImage={requestImage}\n imageSelection={imageSelection}\n setImageSelection={setImageSelection}\n debouncedOnImageSelectionChange={\n debouncedOnImageSelectionChange\n }\n filteredRegions={filteredRegions}\n showAdjustInfoBasedOnConfidence={\n showAdjustInfoBasedOnConfidence\n }\n showAdjustInfo={showAdjustInfo}\n />\n )}\n\n <Box\n style={{\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n backgroundColor: '#FAFAFA',\n }}\n >\n <Box\n className={'box-item-result ml-auto mr-auto'}\n style={{ height: '100%', paddingLeft: isMobile ? 0 : 16 }}\n >\n <ProductList\n getUrlToCanvasFile={getUrlToCanvasFile}\n setLoading={false}\n sendFeedBackAction={sendFeedBackAction}\n moreInfoText={moreInfoText}\n requestImage={requestImage}\n searchQuery={search.valueTextSearch.query}\n />\n <Box\n className=\"pagination-result\"\n style={{\n width: '100%',\n margin: !isMobile ? '20px auto' : '',\n marginBottom:\n isMobile && !requestImage ? '64px' : '20px',\n padding: '0 20%',\n alignSelf: 'end',\n }}\n >\n {props.allSearchResults?.hits.length > 0 &&\n (requestImage || search.valueTextSearch.query) && (\n <Pagination\n showFirst={false}\n translations={{\n previous: (\n <ArrowLeftIcon style={{ color: '#161616' }} />\n ),\n next: (\n <ArrowRightIcon\n style={{ color: '#161616' }}\n />\n ),\n }}\n />\n )}\n </Box>\n\n {requestImage &&\n !loadingSearchAlgolia &&\n !props.isSearchStalled &&\n settings.rfq && (\n <RfqBanner\n rfqRef={rfqRef}\n rfqStatus={rfqStatus}\n setIsRfqModalOpen={setIsRfqModalOpen}\n requestImage={requestImage}\n selectedRegion={selectedRegion}\n />\n )}\n {!loadingSearchAlgolia &&\n !props.isSearchStalled &&\n settings.inquiry &&\n (search.valueTextSearch.query || requestImage) && (\n <InquiryBanner\n requestImage={requestImage}\n selectedRegion={selectedRegion}\n query={search.valueTextSearch.query}\n />\n )}\n </Box>\n </Box>\n {!isMobile && props.allSearchResults?.hits?.length > 0 && (\n <Box>\n <Box className=\"box-notify\">\n <FooterResult search={search}>\n <Box\n display={'flex'}\n style={{ padding: '0 20px' }}\n className=\"box-change-hit-items\"\n >\n <span style={{ paddingRight: '10px' }}>\n {t('Items per page')}:\n </span>\n <HitsPerPage\n items={showHits}\n defaultRefinement={20}\n />\n </Box>\n </FooterResult>\n </Box>\n </Box>\n )}\n </Box>\n </>\n </Box>\n </Box>\n </>\n </div>\n {isScrolled === 'scrolled' &&\n requestImage &&\n isMobile &&\n props.allSearchResults.hits.length > 0 &&\n settings.rfq && (\n <div\n style={{\n fontSize: '14px',\n fontWeight: 'bold',\n letterSpacing: '1.16px',\n color: 'white',\n borderRadius: '16px',\n backgroundColor: '#4B4B4A',\n boxShadow: '0px 0px 16px 0px rgba(85, 86, 107, 0.70)',\n padding: '8px 16px',\n zIndex: 100,\n position: 'absolute',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '356px',\n bottom: '86px',\n }}\n >\n Scroll down for personalized support\n </div>\n )}\n </>\n );\n}\n\nexport default connectStateResults<Props>(memo(ResultComponent));\n","import React, { useEffect } from 'react';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Route } from 'react-router-dom';\nimport { useAppSelector } from 'Store/Store';\n\nconst AuthenticatedRoute = ({ component, ...rest }: any) => {\n const { auth0 } = useAppSelector(state => state.settings);\n\n const { user, isAuthenticated, isLoading, loginWithRedirect } = useAuth0();\n\n useEffect(() => {\n if (!isLoading && !user && !isAuthenticated && auth0.enabled) {\n loginWithRedirect();\n }\n }, [loginWithRedirect, isLoading, user, isAuthenticated, auth0]);\n\n const Component = component;\n\n return (\n <Route\n {...rest}\n render={props => {\n if (!auth0.enabled) {\n return <Component {...props} />;\n } else if (isAuthenticated) {\n return <Component {...props} />;\n } else {\n return <div></div>;\n }\n }}\n />\n );\n};\n\nexport default AuthenticatedRoute;\n","import React, { useEffect } from 'react';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useAppSelector } from 'Store/Store';\n\nconst Login = () => {\n const { user, isAuthenticated, isLoading, loginWithRedirect } = useAuth0();\n const { auth0 } = useAppSelector(state => state.settings);\n\n useEffect(() => {\n if (!isLoading && !user && !isAuthenticated && auth0.enabled) {\n loginWithRedirect();\n }\n if (isAuthenticated || !auth0.enabled) {\n window.location.href = '/';\n }\n }, [loginWithRedirect, isLoading, user, isAuthenticated, auth0]);\n\n return <div></div>;\n};\n\nexport default Login;\n","import React, { useEffect } from 'react';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useAppSelector } from 'Store/Store';\n\nconst Logout = () => {\n const { user, isAuthenticated, isLoading, loginWithRedirect, logout } =\n useAuth0();\n const { auth0 } = useAppSelector(state => state.settings);\n\n useEffect(() => {\n if (!isLoading && !user && !isAuthenticated && auth0.enabled) {\n loginWithRedirect();\n } else if (isAuthenticated) {\n logout({ logoutParams: { returnTo: window.location.origin } });\n } else if (!auth0.enabled) {\n window.location.href = '/';\n }\n }, [loginWithRedirect, isAuthenticated, isLoading, user, logout, auth0]);\n\n return <div></div>;\n};\n\nexport default Logout;\n","import React, { memo } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Layout from 'components/Layout';\nimport App from 'App';\nimport ResultComponent from 'page/result';\nimport AuthenticatedRoute from 'components/AuthenticatedRoute';\nimport Login from 'page/Login';\nimport Logout from 'page/Logout';\n\nfunction Router(): JSX.Element {\n return (\n <Switch>\n <Switch>\n <Route path={'/login'} exact component={Login} />\n <Route path={'/logout'} exact component={Logout} />\n <Layout>\n <AuthenticatedRoute exact strict path=\"/\" component={App} />\n <AuthenticatedRoute\n exact\n strict\n path=\"/result\"\n component={ResultComponent}\n />\n </Layout>\n </Switch>\n </Switch>\n );\n}\n\nexport default memo(Router);\n","import React from 'react';\nimport toast, {\n resolveValue,\n ToastBar,\n Toaster as ReactHotToaster,\n} from 'react-hot-toast';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport { useMediaQuery } from 'react-responsive';\n\nexport const Toaster = () => {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n return (\n <ReactHotToaster\n containerStyle={!isMobile ? { top: 60 } : { bottom: 80 }}\n position={isMobile ? 'bottom-center' : 'top-right'}\n >\n {t => (\n <ToastBar toast={t} style={{ padding: 0, borderRadius: 0 }}>\n {({ icon }) => (\n <>\n <span\n style={{\n width: 5,\n height: '100%',\n background: t.type === 'success' ? '#61d345' : 'transparent',\n marginRight: 7,\n }}\n />\n <span style={{ padding: 15, display: 'inline-flex' }}>\n {icon}\n <span\n style={{\n fontSize: 15,\n fontWeight: 300,\n margin: '0 10px',\n }}\n >\n {' '}\n {resolveValue(t.message, t)}\n </span>\n {t.type !== 'loading' && (\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <CloseOutlinedIcon\n fontSize=\"small\"\n style={{ cursor: 'pointer', marginLeft: 10 }}\n onClick={() => toast.dismiss(t.id)}\n />\n </span>\n )}\n </span>\n </>\n )}\n </ToastBar>\n )}\n </ReactHotToaster>\n );\n};\n","import React from 'react';\nimport { Auth0Provider } from '@auth0/auth0-react';\nimport { useAppSelector } from 'Store/Store';\n\nconst AuthProvider = ({ children }: any) => {\n const settings = useAppSelector(state => state.settings);\n\n if (!settings.auth0.enabled) {\n return <>{children}</>;\n }\n\n return (\n <Auth0Provider\n domain={settings.auth0.domain || ''}\n clientId={settings.auth0.clientId || ''}\n authorizationParams={{\n redirect_uri: window.location.origin,\n }}\n >\n {children}\n </Auth0Provider>\n );\n};\n\nexport default AuthProvider;\n","// Some people are still using internet explorer\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport { MuiThemeProvider } from '@material-ui/core';\nimport 'typeface-roboto';\nimport { BrowserRouter } from 'react-router-dom';\nimport Router from 'Router';\nimport { store } from 'Store/Store';\nimport 'react-responsive-carousel/lib/styles/carousel.min.css';\nimport { createTheme } from '@material-ui/core/styles';\nimport { Toaster } from 'components/Toaster';\nimport AuthProvider from 'components/AuthProvider';\n\ndocument.title = window.location.host;\n\nlet theme = createTheme({\n overrides: {\n MuiTooltip: {\n arrow: {\n color: 'black',\n },\n tooltip: {\n backgroundColor: 'black',\n },\n },\n },\n});\n\nReactDOM.render(\n <Fragment>\n <Toaster />\n <Provider store={store}>\n <AuthProvider>\n <MuiThemeProvider theme={theme}>\n <BrowserRouter>\n <Router />\n </BrowserRouter>\n </MuiThemeProvider>\n </AuthProvider>\n </Provider>\n </Fragment>,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}
|