@nyris/nyris-webapp 0.3.33 → 0.3.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/build/asset-manifest.json +28 -14
  2. package/build/index.html +1 -1
  3. package/build/js/settings.example.js +13 -25
  4. package/build/{precache-manifest.4cff5b8aafe3d00d59bc2c9725eb6ade.js → precache-manifest.375ac411683570ee1df5aea6de03409d.js} +70 -14
  5. package/build/service-worker.js +1 -1
  6. package/build/static/css/main.f5a1c730.chunk.css +2 -0
  7. package/build/static/css/main.f5a1c730.chunk.css.map +1 -0
  8. package/build/static/js/2.724f4cba.chunk.js +3 -0
  9. package/build/static/js/2.724f4cba.chunk.js.map +1 -0
  10. package/build/static/js/main.f579fa9f.chunk.js +3 -0
  11. package/build/static/js/main.f579fa9f.chunk.js.map +1 -0
  12. package/build/static/media/filter.bc412f08.svg +3 -0
  13. package/build/static/media/icon_search_image2.fab34be4.svg +3 -0
  14. package/build/static/media/img-1-1.6144e5f9.png +0 -0
  15. package/build/static/media/img-1-2.ad943f0f.png +0 -0
  16. package/build/static/media/img2-1.a87c79c7.png +0 -0
  17. package/build/static/media/img2-2.39c5b73f.png +0 -0
  18. package/build/static/media/img3-1.443b0c3a.png +0 -0
  19. package/build/static/media/img3-2.37db7999.png +0 -0
  20. package/build/static/media/img4-1.9c34c158.png +0 -0
  21. package/build/static/media/img4-2.9d280a04.png +0 -0
  22. package/build/static/media/img5-1.b61dbd4d.png +0 -0
  23. package/build/static/media/img5-2.1c77c093.png +0 -0
  24. package/build/static/media/img6-1.8b03dd21.png +0 -0
  25. package/build/static/media/img6-2.1e3e7fed.png +0 -0
  26. package/build/static/media/{info-tooltip.5feeef22.svg → info-tooltip.b98e8a9c.svg} +2 -2
  27. package/build/static/media/take_photo.76423216.svg +5 -0
  28. package/package.json +3 -3
  29. package/public/js/settings.example.js +13 -25
  30. package/src/Store/constants.ts +0 -1
  31. package/src/Store/search/Search.ts +32 -17
  32. package/src/Store/search/search.initialState.ts +17 -16
  33. package/src/Store/search/types.ts +15 -14
  34. package/src/common/assets/icons/expand.svg +3 -27
  35. package/src/common/assets/icons/filter.svg +3 -0
  36. package/src/common/assets/icons/icon_search_image2.svg +2 -25
  37. package/src/common/assets/icons/info-tooltip.svg +2 -2
  38. package/src/common/assets/icons/take_photo.svg +5 -0
  39. package/src/common/assets/images/imageCaptureHelp/img-1-1.png +0 -0
  40. package/src/common/assets/images/imageCaptureHelp/img-1-2.png +0 -0
  41. package/src/common/assets/images/imageCaptureHelp/img2-1.png +0 -0
  42. package/src/common/assets/images/imageCaptureHelp/img2-2.png +0 -0
  43. package/src/common/assets/images/imageCaptureHelp/img3-1.png +0 -0
  44. package/src/common/assets/images/imageCaptureHelp/img3-2.png +0 -0
  45. package/src/common/assets/images/imageCaptureHelp/img4-1.png +0 -0
  46. package/src/common/assets/images/imageCaptureHelp/img4-2.png +0 -0
  47. package/src/common/assets/images/imageCaptureHelp/img5-1.png +0 -0
  48. package/src/common/assets/images/imageCaptureHelp/img5-2.png +0 -0
  49. package/src/common/assets/images/imageCaptureHelp/img6-1.png +0 -0
  50. package/src/common/assets/images/imageCaptureHelp/img6-2.png +0 -0
  51. package/src/components/DetailItem.tsx +62 -78
  52. package/src/components/FooterMobile.tsx +80 -41
  53. package/src/components/HeaderMobile.tsx +225 -227
  54. package/src/components/ImageCaptureHelpModal.tsx +90 -0
  55. package/src/components/Layout.tsx +39 -9
  56. package/src/components/MobilePostFilter.tsx +20 -0
  57. package/src/components/PanelResult/expandable-panel.tsx +21 -21
  58. package/src/components/PanelResult/index.tsx +52 -19
  59. package/src/components/ProductList/index.tsx +5 -3
  60. package/src/components/appMobile.scss +64 -32
  61. package/src/components/carousel/ImagePreviewCarousel.tsx +2 -8
  62. package/src/components/drawer/cameraCustom.tsx +8 -33
  63. package/src/components/input/inputSearch.tsx +68 -80
  64. package/src/components/pre-filter/index.tsx +70 -57
  65. package/src/components/results/ItemResult.tsx +73 -89
  66. package/src/constants.ts +56 -0
  67. package/src/page/landingPage/AppMobile.tsx +34 -104
  68. package/src/page/landingPage/common.scss +167 -38
  69. package/src/page/result/index.tsx +70 -56
  70. package/src/services/Feedback.ts +20 -2
  71. package/src/services/types.ts +0 -1
  72. package/src/translations.ts +4 -0
  73. package/src/types.ts +3 -2
  74. package/build/static/css/main.d0b21fa5.chunk.css +0 -2
  75. package/build/static/css/main.d0b21fa5.chunk.css.map +0 -1
  76. package/build/static/js/2.69ce0823.chunk.js +0 -3
  77. package/build/static/js/2.69ce0823.chunk.js.map +0 -1
  78. package/build/static/js/main.6122377b.chunk.js +0 -3
  79. package/build/static/js/main.6122377b.chunk.js.map +0 -1
  80. package/build/static/media/icon_search_image2.e46fdfc5.svg +0 -26
  81. package/src/hooks/useVisualSearch.tsx +0 -77
  82. /package/build/static/js/{2.69ce0823.chunk.js.LICENSE.txt → 2.724f4cba.chunk.js.LICENSE.txt} +0 -0
  83. /package/build/static/js/{main.6122377b.chunk.js.LICENSE.txt → main.f579fa9f.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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","common/assets/icons/support3.svg","common/assets/icons/Union.svg","common/assets/images/unnamed.png","../../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/images/Icon_Upload.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/filter.ts","helpers/truncateString.ts","components/pre-filter/index.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","components/Layout.tsx","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","translations.ts","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","components/carousel/ImagePreviewCarousel.tsx","components/DetailItem.tsx","helpers/CommonHelper.ts","components/ShareModal.tsx","helpers/ToastHelper.ts","services/Feedback.ts","components/results/ItemResult.tsx","components/ProductList/index.tsx","page/result/index.tsx","Router.tsx","components/Toaster.tsx","index.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","selection","image","maxWidth","maxHeight","onSelectionChange","regions","dotColor","minCropWidth","minCropHeight","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","style","cursor","margin","Layer","Image","Rect","stroke","opacity","strokeWidth","draggable","onDragMove","dragBoundFunc","onMouseOver","onMouseOut","dash","ref","fill","Path","data","lineCap","shadowColor","shadowBlur","shadowOffset","shadowOpacity","offsetX","offsetY","NodeGroup","keyAccessor","enter","timing","delay","duration","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","keyFilter","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","setUpdateKeyFilterDesktop","setPreFilterDropdown","setImageCaptureHelpModal","setFilter","actions","authSlice","accessToken","role","login","logout","jscookie","getUrlParam","RegExp","exec","href","console","log","decodeURIComponent","nyrisSlice","showPart","feedbackState","showStart","showCamera","showResults","showFeedback","hideFeedback","feedbackSubmitPositive","feedbackNegative","normalizedSettings","xOptions","apiKey","preview","jpegQuality","baseUrl","instantRedirectPatterns","theme","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","preFilter","visualSearchFilterKey","values","sku","score","getInputProps","useDropzone","onDrop","fs","URL","createObjectURL","setTimeout","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","primaryColor","activeClassName","to","Button","useQuery","useLocation","useMemo","URLSearchParams","HeaderMobile","connectSearchBox","connectStateResults","onToggleFilterMobile","refine","query","containerRefInputMobile","isShowFilter","setShowFilter","searchQuery","isEmpty","searchOrRedirect","debounce","isPostFilterApplied","isApplied","disablePostFilter","postFilterOption","allSearchResults","hits","background","borderBottom","headerColor","lineHeight","appBarLogoUrl","logoWidth","logoHeight","columnGap","preFilterOption","top","left","event","currentTarget","marginRight","border","flexShrink","boxShadow","Input","element","getElementById","inputEventFn","keyboardEvent","blur","addEventListener","removeEventListener","flexGrow","outline","placeholder","Header","getFilters","number","searchFilters","settingsNyris","newValue","truncateString","str","num","slice","PreFilterComponent","handleClose","keyFilterState","resultFilter","setResultFilter","setKeyFilter","isLoading","setLoading","columns","setColumns","isMobile","useMediaQuery","getDataFilterDesktop","dataResultFilter","newResult","find","sort","k","toLocaleUpperCase","finally","filterSearchHandler","onHandlerSubmitData","flexDirection","zIndex","Typography","fontWeight","marginBottom","marginTop","preFilterTitle","justifyItems","IconSearch","columnCount","paddingBottom","entries","rowGap","Tooltip","placement","arrow","disableHoverListener","textOverflow","whiteSpace","Array","_","mb","Skeleton","animation","bottom","httpClient","axios","createSessionByApi","headers","request","method","url","response","session","ImageCaptureHelpModal","DynamicWidgetsCT","children","enabled","isOpen","setOpen","IconLabel","icon","labelPosition","classNameLabel","tagIcon","setTagIcon","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","hidden","aria-expanded","fontFamily","getRefinementPanelId","refinement","getPanelId","widgets","panelId","refinementWidget","getRefinementPanelAttribute","refinementsPanelsExpandedAtom","refinementsPanelsAtom","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","paddingTop","HeaderApp","FooterApp","algolia","appId","indexName","isOpenFilter","setOpenFilter","isShowHeaderMobile","createSession","appTitle","classNameBoxVersion","conditionalQuery","searchClient","algoliasearch","initIndex","requests","every","params","endsWith","Promise","resolve","nbHits","nbPages","processingTimeMS","InstantSearch","searchState","onSearchStateChange","isUndefined","acceptTypes","onChangeLoading","isLoadingLoadFile","setLoadingLoadFile","useTranslation","getRootProps","isDragActive","IconUpload","DefaultModal","openModal","classNameModal","classNameComponentChild","Modal","overflowY","CustomSearchBox","focusInp","valueInput","setValueInput","isOpenModalFilterDesktop","setToggleModalFilterDesktop","focus","noValidate","action","order","IconCamera","AppMD","cadSearch","cadExtensions","CustomInfiniteHits","connectInfiniteHits","IconSupport","headerText","mixBlendMode","AppMobile","i18n","use","initReactI18next","init","resources","en","translation","de","fallbackLng","interpolation","escapeValue","returnNull","App","language","changeLanguage","SelectedApp","ClearRefinements","handleButtonClick","disabled","ChipComponent","selected","closeIcon","CurrentRefinements","statusSwitchButton","newItems","setListItems","config","refinementConfig","refinementOptions","getRefinementConfig","category","getCurrentRefinement","li","marginLeft","FooterResult","connectPagination","Grid","container","ImagePreviewCarousel","imgItem","mainRef","thumbsRef","contentWidth","modalWidth","mainOptions","perPage","perMove","gap","pagination","arrows","thumbsOptions","rewind","fixedWidth","fixedHeight","isNavigation","renderSlides","thumbs","slide","React","splide","sync","DetailItem","dataItem","onSearchImage","onHandlerModalShare","handlerFeedback","collapDescription","setCollapDescription","dataImageCarousel","setDataImageCarouSel","feedback","setFeedback","urlImage","setUrlImage","brand","checkDataItemResult","handlerCheckUrlImage","timeout","img","onerror","onabort","clearTimeout","timer","onload","valueKey","newObject","includes","prepareImageList","ctaLink","NoImage","borderBottomLeftRadius","borderBottomRightRadius","xs","itemIdLabel","warehouseVariant","brandName","align","letterSpacing","IconOpenLink","htmlColor","in","gridGap","showFeedbackAndShare","shareOption","ShareModal","setModalState","main_image_link","Paper","clipboard","writeText","IconEmail","ToastHelper","msg","toast","success","feedbackSuccessEpic","sendFeedbackByApi","dismiss","feedbackClickEpic","positions","product_ids","feedbackConversionEpic","feedbackRegionEpic","rect","sendFeedback","isHover","handlerGroupItem","isGroupItem","handlerCloseGroup","indexItem","isOpenModalImage","setOpenModalImage","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","refBoxResult","productCtaText","toggleColLeft","setToggleColLeft","imageSelection","setImageSelection","executeScroll","scrollIntoView","filterString","setFilterString","showAdjustInfo","setAdjustInfo","showAdjustInfoBasedOnConfidence","setShowAdjustInfoBasedOnConfidence","imageUploadRef","findImageByApiNyris","findItemsInSelection","searchRegion","nonEmptyFilter","filterSkus","reverse","f","filterSkusString","alogoliaFilterField","debouncedOnImageSelectionChange","filteredRegions","showPostFilter","showSidePanel","Configure","showFirst","previous","next","HitsPerPage","defaultRefinement","PrivateRoute","Component","authed","rest","render","exact","strict","path","ResultComponent","Toaster","containerStyle","resolveValue","message","host","createTheme","overrides","MuiTooltip","tooltip","ReactDOM","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.f579fa9f.chunk.js","sourcesContent":[" \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}\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 selection,\n image,\n maxWidth,\n maxHeight,\n onSelectionChange,\n regions,\n dotColor,\n minCropWidth,\n minCropHeight,\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\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\">\n <Image image={image} width={width} height={height} />\n </Layer>\n <Layer key=\"selection\">\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 <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 </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","module.exports = __webpack_public_path__ + \"static/media/support3.4a17f96e.svg\";","module.exports = __webpack_public_path__ + \"static/media/Union.3c6afbb0.svg\";","module.exports = __webpack_public_path__ + \"static/media/unnamed.f7f1b5cb.png\";","\"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/Icon_Upload.ebf185b4.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 keyFilter: '',\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 keyFilter: state.keyFilter || '',\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 setUpdateKeyFilterDesktop: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n keyFilter: 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 setUpdateKeyFilterDesktop,\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 console.log('has value', name, results[2]);\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 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 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 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 { keyFilter } = 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 preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n let filters: any[] = [];\n\n findByImage({\n image: imageConvert,\n settings,\n filters: keyFilter ? preFilter : 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 return findByImage({ image, settings, region })\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 height: '100svh',\n width: '100%',\n }}\n >\n <Webcam\n audio={false}\n height={'100svh'}\n width={'100%'}\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 { setImageCaptureHelpModal } 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 settings,\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' }}\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 ? `${settings.theme?.primaryColor}21`\n : '',\n }}\n activeClassName=\"active\"\n to={'/'}\n className=\"nav-link p-0 menu-children rounded-0\"\n onClick={() => {\n dispatch(setImageCaptureHelpModal(false));\n }}\n >\n <Home\n color={\n history.location.pathname === '/' && !imageCaptureHelpModal\n ? settings.theme?.primaryColor\n : '#000'\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=\"#000\" />\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\n ? `${settings.theme?.primaryColor}21`\n : '',\n }}\n onClick={() => {\n dispatch(setImageCaptureHelpModal(!imageCaptureHelpModal));\n }}\n >\n <IconInfo\n fontSize={24}\n width={24}\n height={24}\n color={\n imageCaptureHelpModal ? settings.theme?.primaryColor : '#000'\n }\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} 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';\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 keyFilter,\n preFilterDropdown,\n valueTextSearch,\n } = search;\n const query = useQuery();\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 const searchQuery = query.get('query') || '';\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]);\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 }}\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 0px 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 ...(keyFilter\n ? {\n backgroundColor: `${settings.theme?.primaryColor}`,\n }\n : {\n backgroundColor: `${settings.theme?.secondaryColor}`,\n }),\n }}\n >\n <IconFilter color=\"white\" />\n </div>\n )}\n {!settings.preFilterOption && (\n <IconSearch width={16} height={16} />\n )}\n {keyFilter && (\n <div\n style={{\n position: 'absolute',\n top: '10px',\n left: '31px',\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 value={textSearchInputMobile} onChange={onChangeText} />\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\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=\"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 } 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 }}\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 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, 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 { setUpdateKeyFilterDesktop } from 'Store/search/Search';\nimport { useMediaQuery } from 'react-responsive';\nimport { isEmpty } from 'lodash';\nimport { Skeleton } from '@material-ui/lab';\nimport { truncateString } from 'helpers/truncateString';\n\ninterface Props {\n handleClose?: any;\n // onChangeKeyFilter?: any;\n}\n\nfunction PreFilterComponent(props: Props) {\n const { handleClose } = props;\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector(state => state);\n const {\n settings,\n search: { keyFilter: keyFilterState },\n } = stateGlobal;\n const [resultFilter, setResultFilter] = useState<any>([]);\n const [keyFilter, setKeyFilter] = useState<string>(keyFilterState || '');\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 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 // console.log(\"res\", 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(setUpdateKeyFilterDesktop(keyFilter));\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: isMobile ? '0px' : '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 style={isMobile ? { padding: 0, marginTop: '16px' } : undefined}\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 {(!keyFilter || isMobile) && (\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\n {keyFilter && !isMobile && (\n <Box display={'flex'} className=\"box-keyFilter\">\n <Typography className=\"keyFilter max-line-1\">\n {keyFilter}\n </Typography>\n <Button style={{ padding: 0 }} onClick={() => setKeyFilter('')}>\n <CloseIcon style={{ fontSize: 12, color: '#2B2C46' }} />\n </Button>\n </Box>\n )}\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 {keyFilter && isMobile && (\n <Box style={{ margin: '10px 16px' }}>\n <Box\n display={'flex'}\n className=\"box-keyFilter\"\n style={{ display: 'inline-flex' }}\n >\n <Typography className=\"keyFilter max-line-1\">\n {keyFilter}\n </Typography>\n <Button style={{ padding: 0 }} onClick={() => setKeyFilter('')}>\n <CloseIcon style={{ fontSize: 12, color: '#2B2C46' }} />\n </Button>\n </Box>\n </Box>\n )}\n <Box\n className=\"box-bottom\"\n height={'100%'}\n style={\n isMobile\n ? { columnCount: 1, marginBottom: keyFilter ? '50px' : '0px' }\n : columns <= 4\n ? { columnCount: columns, height: '100%', paddingBottom: 20 }\n : { columnCount: 4, paddingBottom: 20 }\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 overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n onClick={() => {\n setKeyFilter(item);\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 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 {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 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 style={{ paddingLeft: '24px', paddingRight: '24px' }}>\n <Box\n display={'flex'}\n justifyContent={'end'}\n position={'sticky'}\n top={0}\n style={{ background: 'white', width: '100%' }}\n >\n <Button onClick={handleClose}>\n <CloseIcon />\n </Button>\n </Box>\n <p\n style={{\n fontSize: '40px',\n lineHeight: '40px',\n fontWeight: 700,\n color: '#2B2C46',\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 }}\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: 'Montserrat !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';\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\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 ? 'Collapse' : 'Expand'\n } all`}\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 { 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 setImageCaptureHelpModal,\n setPreFilterDropdown,\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 PreFilterComponent from 'components/pre-filter';\nimport { createSessionByApi } from 'services/session';\nimport { isUndefined } from 'lodash';\nimport ImageCaptureHelpModal from './ImageCaptureHelpModal';\nimport MobilePostFilter from './MobilePostFilter';\n\nfunction Layout({ children }: ReactNode): JSX.Element {\n const dispatch = useAppDispatch();\n const { settings, search } = useAppSelector<AppState>((state: any) => state);\n const {\n valueTextSearch,\n loadingSearchAlgolia,\n preFilterDropdown,\n imageCaptureHelpModal,\n } = 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\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 return (\n <Box position={'relative'} className=\"wrap-mobile\">\n {loadingSearchAlgolia && (\n <Box className=\"box-wrap-loading\" style={{ zIndex: 99999999 }}>\n <Box className=\"loadingSpinCT\" style={{ top: 0, bottom: 0 }}>\n <Box className=\"box-content-spin\"></Box>\n </Box>\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 <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 {isMobile && (\n <Box\n className={`box-fillter ${isOpenFilter ? 'open' : 'close'} `}\n position={'absolute'}\n style={{ top: isOpenFilter ? '0px' : '', height: '100%' }}\n >\n <MobilePostFilter\n onApply={() => {\n setOpenFilter(!isOpenFilter);\n }}\n />\n </Box>\n )}\n {isMobile && preFilterDropdown && (\n <Box\n className={`box-fillter open`}\n position={'absolute'}\n style={{ top: '0px', height: '100%' }}\n >\n <div\n style={{ width: !isMobile ? '90%' : '100%' }}\n className={'wrap-filter-desktop'}\n >\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 {isMobile && imageCaptureHelpModal && (\n <Box\n className={`box-fillter open`}\n position={'absolute'}\n style={{ top: '0px', height: 'calc(100% - 64px)' }}\n >\n <div\n style={{ width: !isMobile ? '90%' : '100%' }}\n className={'wrap-filter-desktop'}\n >\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 </InstantSearch>\n </Box>\n );\n}\n\nexport default memo(Layout);\n","import { Box, Typography } from '@material-ui/core';\nimport React, { memo } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { makeFileHandler } from '@nyris/nyris-react-components';\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 { useState } from 'react';\nimport IconUpload from 'common/assets/images/Icon_Upload.svg';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { useTranslation } from 'react-i18next';\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 { acceptTypes, onChangeLoading, isLoading } = props;\n const searchState = useAppSelector(state => state);\n const {\n settings,\n search: { keyFilter },\n } = searchState;\n const [isLoadingLoadFile, setLoadingLoadFile] = useState<any>(false);\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 setLoadingLoadFile(true);\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 preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\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: keyFilter ? preFilter : 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 setLoadingLoadFile(false);\n onChangeLoading(false);\n dispatch(updateStatusLoading(false));\n return dispatch(showFeedback());\n });\n },\n });\n\n return (\n <Box\n className={\n !isDragActive && !isLoadingLoadFile\n ? `box-content-main`\n : `box-content-main-drop`\n }\n >\n {isLoading && (\n <Box className=\"loadingSpinCT\">\n <Box className=\"box-content-spin\"></Box>\n </Box>\n )}\n\n <div\n className={`box-border`}\n style={{ position: 'relative' }}\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n {isDragActive ? (\n <Box>\n <Typography className=\"text-drop-file\">\n DRAG <span className=\"tractor\">&</span> DROP\n </Typography>\n <input\n {...getInputProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n placeholder=\"Choose photo\"\n accept={acceptTypes}\n onChange={makeFileHandler(e => {})}\n />\n </Box>\n ) : (\n <>\n <Box\n className=\"box-content-drop\"\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n <Box style={{ marginBottom: 16 }}>\n <img src={IconUpload} alt=\"\" width={48} height={48} />\n </Box>\n <label\n htmlFor=\"select_file\"\n className=\"\"\n style={{ color: '#2B2C46', fontSize: 14 }}\n >\n <span className=\"fw-700\" style={{ paddingRight: '4px' }}>\n {t('Choose an image')}\n </span>\n {t('or drag it 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' }}\n />\n </Box>\n </>\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}\n\nfunction DefaultModal(props: Props): JSX.Element {\n const {\n children,\n openModal = false,\n handleClose,\n classNameModal,\n classNameComponentChild,\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={{ overflowY: 'hidden', maxHeight: '95vh', borderRadius: 12 }}\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, keyFilter } = 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 dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\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: keyFilter ? preFilter : 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={keyFilter ? keyFilter : 'Add pre-filter'}\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 ...(keyFilter\n ? {\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n }\n : {}),\n }}\n >\n <IconFilter color=\"black\" />\n </div>\n )}\n {!settings.preFilterOption && (\n <IconSearch width={16} height={16} />\n )}\n {keyFilter && (\n <div\n style={{\n position: 'absolute',\n top: '6px',\n left: '31px',\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?.secondaryColor,\n borderRadius: '100%',\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?.secondaryColor}c7`,\n backgroundColor: `${settings.theme?.secondaryColor}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=\"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?.secondaryColor,\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 IconSupport from 'common/assets/icons/support3.svg';\nimport DragDropFile from 'components/DragDropFile';\nimport CustomSearchBox from 'components/input/inputSearch';\nimport { connectInfiniteHits } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { Link } from 'react-router-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 const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\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 {isMobile && (\n <Box className=\"btn-open-support\">\n <Link to={'/support'} style={{ color: '#3E36DC' }}>\n <img src={IconSupport} alt=\"\" width={16} height={16} />\n </Link>\n </Box>\n )}\n <Box className=\"box-content_top\">\n <Box className=\"fw-700 text-f32 text-dark2\">\n <h1>{settings.headerText}</h1>\n </Box>\n <div className=\"box-input\">\n <div className=\"wrap-input-search\">\n <div style={{ display: 'none' }}>\n <CustomInfiniteHits />\n </div>\n <CustomSearchBox />\n </div>\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 }}\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';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { useAppSelector } from 'Store/Store';\nimport { translations } from 'translations';\n\ni18n.use(initReactI18next).init({\n resources: translations,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n returnNull: false,\n});\n\nfunction App(): JSX.Element {\n const language = useAppSelector(state => state.settings.language);\n\n i18n.changeLanguage(language);\n\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","export const translations = {\n en: {\n translation: {\n Search: 'Search',\n 'Choose an image': 'Choose an image',\n 'or drag it here': 'or drag it here',\n 'Manufacturer Number': 'Manufacturer Number',\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 },\n },\n de: {\n translation: {\n Search: 'Suche',\n 'Choose an image': 'Bild wählen',\n 'or drag it here': 'oder hierhin ziehen',\n 'Manufacturer Number': 'Herst. Teile-Nr.',\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':\n 'Bildausschnitt anpassen für bessere Ergebnisse',\n\n 'Items per page': 'Artikel pro Seite',\n 'Search with an image': 'Bildsuche',\n 'Clear text search': 'Suchtext löschen',\n },\n },\n};\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: \"#AAABB5\"\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.fab34be4.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}\n\nexport const ImagePreviewCarousel = (props: Props) => {\n let { imgItem } = 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 ? 340 : 400;\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 [isMobile],\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', minHeight: '400px' }}\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 options={mainOptions} ref={mainRef}>\n {renderSlides()}\n </Splide>\n\n <div className={`thumbs-list ${imgItem.length <= 1 ? 'd-none' : ''}`}>\n <Splide options={thumbsOptions} ref={thumbsRef}>\n {renderSlides(true)}\n </Splide>\n </div>\n </>\n );\n};\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/unnamed.png';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n numberResult?: number;\n handlerCloseModal?: () => void;\n dataItem?: any;\n onHandlerModalShare: () => void;\n onSearchImage?: any;\n moreInfoText?: string;\n handlerFeedback: any;\n}\n\nfunction DetailItem(props: Props) {\n const {\n handlerCloseModal,\n dataItem,\n onSearchImage,\n onHandlerModalShare,\n handlerFeedback,\n } = props;\n const [collapDescription, setCollapDescription] = useState(false);\n const { sku } = dataItem;\n const [dataImageCarousel, setDataImageCarouSel] = useState<any[]>([]);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { settings } = useAppSelector<AppState>((state: any) => state);\n const [feedback, setFeedback] = useState('none');\n const [urlImage, setUrlImage] = useState<string>('');\n const brand = dataItem[settings.field.productTag];\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 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 checkDataItemResult = (dataItem: any) => {\n const valueKey = prepareImageList(dataItem);\n\n setDataImageCarouSel(valueKey);\n };\n const { t } = useTranslation();\n const ctaLink = dataItem[settings.field?.ctaLinkField];\n\n return (\n <Box\n className=\"box-modal-default\"\n borderRadius={12}\n style={isMobile ? { margin: 0 } : {}}\n >\n <Box className=\"ml-auto\" style={{ width: 'fit-content', marginRight: 4 }}>\n <Button style={{ padding: 0 }} onClick={() => handlerCloseModal?.()}>\n <CloseOutlinedIcon style={{ fontSize: 20, color: '#55566B' }} />\n </Button>\n </Box>\n <Box style={{ overflowY: 'auto', maxHeight: '90svh' }}>\n <Box\n className=\"box-carosel\"\n style={\n dataImageCarousel.length === 0\n ? { display: 'flex', justifyContent: 'center' }\n : {}\n }\n >\n {dataImageCarousel.length > 0 ? (\n <ImagePreviewCarousel imgItem={dataImageCarousel} />\n ) : (\n <img\n src={NoImage}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '300px', height: '300px', padding: '8px' }}\n />\n )}\n {dataImageCarousel.length > 0 && (\n <Button\n className=\"icon-style\"\n onClick={() => {\n if (urlImage.length > 1) {\n onSearchImage(urlImage);\n handlerCloseModal?.();\n return;\n }\n }}\n >\n <IconSearchImage color={'#AAABB5'} />\n </Button>\n )}\n </Box>\n\n <Box\n className=\"box-content\"\n display={'flex'}\n style={{\n flexDirection: 'column',\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n paddingBottom: 19,\n backgroundColor: '#F3F3F5',\n }}\n >\n <Box className=\"box-top\">\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12}>\n <Typography className=\"text-f13 fw-500 max-line-1\">\n {settings.itemIdLabel || 'SKU'}: <span> {sku}</span>\n </Typography>\n {dataItem[settings.field.manufacturerNumber] && (\n <Typography\n className=\"text-f13 fw-500 max-line-1\"\n style={{ marginTop: '12px' }}\n >\n {t('Manufacturer Number')}:{' '}\n {dataItem[settings.field.manufacturerNumber]}\n </Typography>\n )}\n {settings.warehouseVariant && (\n <Typography\n className=\"text-f13 max-line-1 fw-500\"\n style={{\n marginTop: 12,\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {dataItem[settings.field.warehouseStock]}:\n </span>\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 {(brand || settings.brandName) && (\n <Box\n borderRadius={16}\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n width: 'fit-content',\n padding: '3px 5px',\n marginTop: 12,\n }}\n >\n <Typography\n style={{\n color: settings.theme?.secondaryColor,\n fontSize: 12,\n fontWeight: 700,\n }}\n >\n {brand || settings.brandName}\n </Typography>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <Box\n style={{\n background: `linear-gradient(270deg, ${settings.theme?.primaryColor}bb 0%, ${settings.theme?.primaryColor} 100%)`,\n // marginBottom: 25,\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)',\n borderRadius: 4,\n marginTop: 12,\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: '300px',\n paddingRight: '4px',\n }}\n >\n {dataItem[settings.field.productName]}\n </Typography>\n {ctaLink && (\n <img\n src={IconOpenLink}\n alt=\"\"\n style={{ minWidth: 23, marginLeft: 5 }}\n />\n )}\n </Box>\n </Box>\n {dataItem[settings.field.productDetails] && (\n <Box className=\"w-100\">\n <Button\n className=\"w-100\"\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n color: settings.theme?.secondaryColor,\n fontSize: 14,\n textTransform: 'initial',\n paddingLeft: 5,\n marginTop: 12,\n }}\n onClick={() => setCollapDescription(e => !e)}\n >\n 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 style={{ fontSize: 14, paddingTop: 5 }}>\n {dataItem[settings.field.productDetails]}\n </Typography>\n </Collapse>\n </Box>\n )}\n </Grid>\n </Grid>\n </Box>\n\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n style={{ color: '#2B2C46', marginTop: 12 }}\n gridGap={20}\n >\n {settings.field.warehouseNumber && (\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 15, fontWeight: 500 }}>\n {dataItem[settings.field.warehouseNumber]}\n </div>\n <div style={{ fontSize: 17, fontWeight: 700 }}>\n {dataItem[settings.field.warehouseNumberValue] || 'N/A'}\n </div>\n </Box>\n )}\n\n {settings.field.warehouseShelfNumber && (\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 15, fontWeight: 500 }}>\n {dataItem[settings.field.warehouseShelfNumber]}\n </div>\n <div style={{ fontSize: 17, fontWeight: 700 }}>\n {dataItem[settings.field.warehouseShelfNumberValue] ||\n 'N/A'}\n </div>\n </Box>\n )}\n </Box>\n )}\n\n {settings.showFeedbackAndShare && (\n <Box\n className=\"box-bottom\"\n style={{ marginBottom: 6, marginTop: 28 }}\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={30}\n height={30}\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={30}\n height={30}\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={30} height={30} 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 DetailItem;\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, 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","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","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 React, { memo, useEffect, useState } from 'react';\nimport NoImage from 'common/assets/images/unnamed.png';\nimport { RootState, useAppDispatch, useAppSelector } from 'Store/Store';\nimport DefaultModal from 'components/modal/DefaultModal';\nimport DetailItem from 'components/DetailItem';\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';\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 const [isOpenModalImage, setOpenModalImage] = useState<boolean>(false);\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 setOpenModalImage(true);\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={isOpenModalImage}\n handleClose={(e: any) => {\n setOpenModalImage(false);\n }}\n >\n <DetailItem\n handlerCloseModal={() => {\n setOpenModalImage(false);\n }}\n handlerFeedback={handlerFeedback}\n dataItem={dataItem}\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 <Box className=\"box-image\">\n <Button\n style={{ width: '100%', height: '100%' }}\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\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n ) : (\n <img\n src={NoImage}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n )}\n </Button>\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 }}\n >\n <Box className=\"box-top\">\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12}>\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 marginTop: 12,\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {settings.itemIdLabel || 'SKU'}:\n </span>\n {truncateString(sku, 20)}\n </Typography>\n </Tooltip>\n\n {settings.warehouseVariant && (\n <Box>\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {dataItem[settings.field.warehouseStock]}:\n </span>\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 </Box>\n )}\n\n {(!!brand || !!settings.brandName) && (\n <Tooltip\n title={brand}\n placement=\"top\"\n arrow={true}\n disableHoverListener={brand?.length < 22 || !brand}\n >\n <Box\n style={{\n background: `${settings.theme?.secondaryColor}26`,\n borderRadius: '6px',\n display: 'flex',\n width: 'fit-content',\n padding: '2px 5px',\n marginTop: 3,\n }}\n >\n <Typography\n className=\"fw-700\"\n style={{\n color: settings.theme?.secondaryColor,\n fontSize: 10,\n letterSpacing: '1px',\n maxWidth: '160px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {truncateString(brand, 22) || settings.brandName}\n </Typography>\n </Box>\n </Tooltip>\n )}\n </Grid>\n </Grid>\n </Box>\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: `linear-gradient(270deg, ${settings.theme?.primaryColor}bb 0%, ${settings.theme?.primaryColor} 100%)`,\n borderRadius: 4,\n padding: '0px 8px',\n marginTop: '12px',\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: '11px',\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={20} />\n )}\n </Box>\n </Box>\n </Tooltip>\n\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n style={{ color: '#2B2C46', marginTop: '12px' }}\n gridGap={10}\n >\n {settings.field.warehouseNumber && (\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 10, fontWeight: 500 }}>\n {dataItem[settings.field.warehouseNumber]}\n </div>\n <div\n style={{\n fontSize: 13,\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {dataItem[settings.field.warehouseNumberValue] || 'N/A'}\n </div>\n </Box>\n )}\n\n {settings.field.warehouseShelfNumber && (\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 10, fontWeight: 500 }}>\n {dataItem[settings.field.warehouseShelfNumber]}\n </div>\n <div\n style={{\n fontSize: 13,\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {dataItem[settings.field.warehouseShelfNumberValue] ||\n 'N/A'}\n </div>\n </Box>\n )}\n </Box>\n )}\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 style={{ padding: '6px' }}\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 style={{ padding: '6px' }}\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 style={{ padding: '6px' }}\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 { connectStateResults } from 'react-instantsearch-dom';\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\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 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 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}>\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 ]);\n\n return <>{renderItem}</>;\n}\n\nconst ProductList = connectStateResults<Props>(memo(ProductListComponent));\nexport default ProductList;\n","import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Box, Button, Typography } from '@material-ui/core';\nimport ArrowBackIosOutlinedIcon from '@material-ui/icons/ArrowBackIosOutlined';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport KeyboardArrowRightOutlinedIcon from '@material-ui/icons/KeyboardArrowRightOutlined';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { Preview } from '@nyris/nyris-react-components';\nimport IconSupport from 'common/assets/icons/support3.svg';\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 ExpandablePanelComponent from 'components/PanelResult';\nimport { debounce, isEmpty } from 'lodash';\nimport { ReactComponent as IconInfo } from 'common/assets/icons/info-tooltip.svg';\n\nimport {\n Configure,\n connectStateResults,\n HitsPerPage,\n Pagination,\n} from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { Link } from 'react-router-dom';\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';\n\ninterface Props {\n allSearchResults: any;\n}\n\nfunction ResultComponent(props: Props) {\n const dispatch = useAppDispatch();\n const refBoxResult: any = useRef(null);\n const stateGlobal = useAppSelector((state: any) => state);\n const { search, settings } = stateGlobal;\n\n const {\n requestImage,\n regions,\n selectedRegion,\n keyFilter,\n loadingSearchAlgolia,\n imageThumbSearchInput,\n } = search;\n\n const moreInfoText = settings?.productCtaText;\n const [toggleColLeft, setToggleColLeft] = useState<boolean>(false);\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\n const imageUploadRef = useRef(null);\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 }\n }, [selectedRegion]);\n\n useEffect(() => {\n if (requestImage) {\n executeScroll();\n setImageSelection(DEFAULT_REGION);\n }\n }, [requestImage]);\n\n const findImageByApiNyris = useCallback(\n async (canvas: any, r?: RectCoords) => {\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n dispatch(loadingActionResults());\n return findByImage({\n image: canvas,\n settings,\n region: r,\n filters: keyFilter ? preFilter : 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, keyFilter],\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 preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n findByImage({\n image,\n settings,\n region: searchRegion,\n filters: keyFilter ? preFilter : 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\n const filter = keyFilter\n ? `${settings.alogoliaFilterField}:'${keyFilter}'`\n : '';\n setFilterString(filter);\n }, [\n keyFilter,\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 }, [keyFilter]);\n\n useEffect(() => {\n if (!requestImage) return;\n const filter = keyFilter\n ? filterSkusString\n ? `(${filterSkusString}) AND ${settings.alogoliaFilterField}:'${keyFilter}'`\n : `${settings.alogoliaFilterField}:'${keyFilter}'`\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 = 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 [imageSelection, regions],\n );\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 return (\n <div\n className={`wrap-main-result loading`}\n id=\"wrap-main-result\"\n ref={refBoxResult}\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 <Box className=\"btn-open-support\">\n <Link to={'/support'} style={{ color: '#3E36DC' }}>\n <img src={IconSupport} alt=\"\" width={16} height={16} />\n </Link>\n </Box>\n {!isMobile && (\n <>\n {showSidePanel && (\n <Box\n className={`wrap-main-col-left ${\n toggleColLeft ? 'toggle' : ''\n }`}\n >\n <Box className=\"box-toggle-coloumn\">\n <Button\n style={{ color: '#55566b' }}\n onClick={() => {\n setToggleColLeft(!toggleColLeft);\n }}\n >\n {toggleColLeft ? (\n <KeyboardArrowRightOutlinedIcon\n style={{ fontSize: 30 }}\n />\n ) : (\n <ArrowBackIosOutlinedIcon\n style={{ fontSize: 20 }}\n />\n )}\n </Button>\n </Box>\n {settings.preview && requestImage && (\n <Box\n className=\"col-left\"\n // style={{\n // backgroundColor: settings?.theme?.primaryColor,\n // }}\n >\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item\"\n style={{\n backgroundColor: 'white',\n paddingTop: '40px',\n width: '100%',\n }}\n >\n <div\n style={{\n backgroundColor: '#AAABB5',\n width: '100%',\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={320}\n maxHeight={320}\n dotColor={'#FBD914'}\n minCropWidth={60}\n minCropHeight={60}\n />\n </div>\n </Box>\n </Box>\n {(showAdjustInfoBasedOnConfidence ||\n 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 {showPostFilter && (\n <Box className=\"col-left__bottom\">\n <ExpandablePanelComponent\n disjunctiveFacets={\n props.allSearchResults.disjunctiveFacets\n }\n />\n </Box>\n )}\n </Box>\n )}\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 ? '16px' : '40px',\n }}\n >\n {!isMobile && (\n <Box className=\"wrap-box-refinements\">\n <CurrentRefinements statusSwitchButton={true} />\n </Box>\n )}\n\n {isMobile && settings.preview && requestImage && (\n <Box\n className=\"col-left\"\n style={{\n backgroundColor: '#AAABB5',\n marginBottom: '15px',\n }}\n >\n {\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item\"\n style={{ backgroundColor: 'white' }}\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 />\n </Box>\n {(showAdjustInfoBasedOnConfidence ||\n 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 }\n </Box>\n )}\n\n <Box className={'box-item-result ml-auto mr-auto'}>\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: '20px auto',\n padding: '0 20%',\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 style={{ color: '#161616' }} />\n ),\n }}\n />\n )}\n </Box>\n </Box>\n </Box>\n </>\n </Box>\n {!isMobile && (\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 items={showHits} defaultRefinement={20} />\n </Box>\n </FooterResult>\n </Box>\n </Box>\n )}\n </Box>\n </>\n </div>\n );\n}\n\nexport default connectStateResults<Props>(memo(ResultComponent));\n","import React, { memo } from 'react';\nimport { Route, Switch, Redirect } from 'react-router-dom';\nimport Layout from 'components/Layout';\nimport { ReactNode } from 'components/common';\nimport App from 'App';\nimport ResultComponent from 'page/result';\n\ninterface PrivateRouteProps {\n component: ReactNode;\n authed: boolean;\n [key: string]: any;\n}\n\nconst PrivateRoute = ({\n component: Component,\n authed,\n ...rest\n}: PrivateRouteProps) => {\n return (\n <Route\n {...rest}\n render={() => (authed ? <Component /> : <Redirect to=\"/login\" />)}\n />\n );\n};\n\nfunction Router(): JSX.Element {\n const accessToken = true;\n\n return (\n <Switch>\n <Layout>\n <Switch>\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/\"\n component={App}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/result\"\n component={ResultComponent}\n />\n </Switch>\n </Layout>\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","// 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 { HashRouter } 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';\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 <MuiThemeProvider theme={theme}>\n <HashRouter>\n <Router />\n </HashRouter>\n </MuiThemeProvider>\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":""}