@wizishop/img-manager 0.2.99 → 0.2.102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/fr.json +1 -1
- package/bundles/wizishop-img-manager.umd.js +238 -195
- package/bundles/wizishop-img-manager.umd.js.map +1 -1
- package/bundles/wizishop-img-manager.umd.min.js +2 -2
- package/bundles/wizishop-img-manager.umd.min.js.map +1 -1
- package/esm2015/lib/components/canva-btn/canva-btn.component.js +7 -82
- package/esm2015/lib/components/images-view/images-view.component.js +2 -2
- package/esm2015/lib/components/img-editor/img-editor.component.js +2 -2
- package/esm2015/lib/components/img-upload/img-upload.component.js +23 -4
- package/esm2015/lib/components/pexels-lib/pexels-lib.component.js +5 -2
- package/esm2015/lib/components/upload-list/upload-list.component.js +2 -2
- package/esm2015/lib/services/canva.service.js +88 -5
- package/esm2015/lib/wz-img-manager.component.js +15 -1
- package/esm2015/wizishop-img-manager.js +4 -4
- package/esm5/lib/components/canva-btn/canva-btn.component.js +7 -88
- package/esm5/lib/components/images-view/images-view.component.js +2 -2
- package/esm5/lib/components/img-editor/img-editor.component.js +2 -2
- package/esm5/lib/components/img-upload/img-upload.component.js +23 -4
- package/esm5/lib/components/pexels-lib/pexels-lib.component.js +5 -2
- package/esm5/lib/components/upload-list/upload-list.component.js +2 -2
- package/esm5/lib/services/canva.service.js +94 -5
- package/esm5/lib/wz-img-manager.component.js +19 -1
- package/esm5/wizishop-img-manager.js +4 -4
- package/fesm2015/wizishop-img-manager.js +221 -182
- package/fesm2015/wizishop-img-manager.js.map +1 -1
- package/fesm5/wizishop-img-manager.js +236 -193
- package/fesm5/wizishop-img-manager.js.map +1 -1
- package/lib/components/canva-btn/canva-btn.component.d.ts +2 -19
- package/lib/components/img-upload/img-upload.component.d.ts +3 -0
- package/lib/services/canva.service.d.ts +20 -1
- package/lib/wz-img-manager.component.d.ts +2 -0
- package/package.json +1 -1
- package/wizishop-img-manager-0.2.102.tgz +0 -0
- package/wizishop-img-manager.d.ts +3 -3
- package/wizishop-img-manager.metadata.json +1 -1
- package/wz-img-manager.scss +2563 -2559
- package/wizishop-img-manager-0.2.99.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@wizishop/img-manager/lib/services/img-selection.service.ts","ng://@wizishop/img-manager/lib/dto/config/external/external-config.dto.ts","ng://@wizishop/img-manager/lib/services/img-manager.service.ts","ng://@wizishop/img-manager/lib/services/config/img-cdn.service.ts","ng://@wizishop/img-manager/lib/services/config/external-config.service.ts","ng://@wizishop/img-manager/lib/services/user-settings.service.ts","ng://@wizishop/img-manager/lib/services/canva.service.ts","ng://@wizishop/img-manager/lib/services/img-event.service.ts","ng://@wizishop/img-manager/lib/services/dom.service.ts","ng://@wizishop/img-manager/lib/wz-img-manager.component.ts","ng://@wizishop/img-manager/lib/animations/easeInOut/ease-in-out.animation.ts","ng://@wizishop/img-manager/lib/services/alert.service.ts","ng://@wizishop/img-manager/lib/components/img-upload/img-upload.component.ts","ng://@wizishop/img-manager/lib/services/rename-picture.service.ts","ng://@wizishop/img-manager/lib/components/upload-list/upload-list.component.ts","ng://@wizishop/img-manager/lib/components/img-tabs/img-tabs.component.ts","ng://@wizishop/img-manager/lib/directives/drag-drop.directive.ts","ng://@wizishop/img-manager/lib/services/pexels.service.ts","ng://@wizishop/img-manager/lib/animations/listAnnimation/list.animation.ts","ng://@wizishop/img-manager/lib/components/pexels-lib/pexels-lib.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-actions-handler.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/img-card/img-card.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/img-editor.component.ts","ng://@wizishop/img-manager/lib/components/canva-btn/canva-btn.component.ts","ng://@wizishop/img-manager/lib/components/img-selection/img-selection.component.ts","ng://@wizishop/img-manager/lib/directives/loading.directive.ts","ng://@wizishop/img-manager/lib/directives/auto-hide.directive.ts","ng://@wizishop/img-manager/lib/directives/copy-to-clipboard.directive.ts","ng://@wizishop/img-manager/lib/components/shared/dropdown/dropdown.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/info-section/info-section.component.ts","ng://@wizishop/img-manager/lib/animations/insertRemove/insert-remove.animation.ts","ng://@wizishop/img-manager/lib/components/img-editor/cropper/cropper.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/mosaic-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/table-view/table-view.component.ts","ng://@wizishop/img-manager/lib/services/table/filters-table.service.ts","ng://@wizishop/img-manager/lib/components/shared/table/table.component.ts","ng://@wizishop/img-manager/lib/components/shared/input-search/input-search.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/total-pages/is-last-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/pagination.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/array-total-pages/array-pages.pipe.ts","ng://@wizishop/img-manager/lib/pipes/pagination/text/custom-text.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/checkbox/checkbox.component.ts","ng://@wizishop/img-manager/lib/directives/table/checkBoxRow.directive.ts","ng://@wizishop/img-manager/lib/directives/table/column.directive.ts","ng://@wizishop/img-manager/lib/directives/table/columnHeader.directive.ts","ng://@wizishop/img-manager/lib/directives/table/raw.directive.ts","ng://@wizishop/img-manager/lib/pipes/images/img-src.pipe.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/abstract-debounce.directive.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/debounce-keyup.directive.ts","ng://@wizishop/img-manager/lib/components/loader/loader.component.ts","ng://@wizishop/img-manager/lib/components/shared/alert/alert.component.ts","ng://@wizishop/img-manager/lib/pipes/number-to-array.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/page-selector/page-selector.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/select/select.component.ts","ng://@wizishop/img-manager/lib/pipes/select/select-filters.pipe.ts","ng://@wizishop/img-manager/lib/directives/zindex-toggle.directive.ts","ng://@wizishop/img-manager/lib/wz-img-manager.module.ts","ng://@wizishop/img-manager/lib/dto/canva.dto.ts","ng://@wizishop/img-manager/lib/dto/config/apis/api.dto.ts","ng://@wizishop/img-manager/lib/dto/config/image-cdn/image-cdn-config.dto.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","ImgSelectionService","imgSelectedList","multipleImgMode","imgSelectionSubscriber","imgListLoading","ReplaySubject","getImgSelection","setImgSelection","_this","forEach","elem","emitImgSelectionChange","addImgSelected","picture","getImgSelectionChange","Observable","subscriber","map","obs","JSON","parse","stringify","removeImgSelectedByIndex","index","splice","removeImgSelectedById","id_file","_b","_c","removeImgSelectionByIds","id_file_list","indexOf","removeAllImgSelected","setMultipleImgMode","activated","initImgSelectedList","emitImgListLoading","loading","getImgListLoadingEventListner","asObservable","moveImgOrder","event","fromIndex","previousIndex","toIndex","currentIndex","Injectable","providedIn","ImgManagerService","http","params","HttpParams","set","pageFicheProductConfig","stateDisplayed","showImgManagerModule","showSelection","displayBtn","pageficheProduct","angularFicheProductConfig","wiziblockConfig","simpleWithButtonOpenerConfig","fullWindowConfig","setApiConfig","img_manager_route","shop_token","imgManagerRoute","shopToken","getOptionsHeaders","header","headers","HttpHeaders","Authorization","getParams","getShopImgList","get","getShopTotalImgList","getShopImg","idFile","param","uploadFile","formData","post","uploadFileByUrl","url","fileName","replaceImg","imageBase64","body","type","put","changeImgName","removeImg","delete","removeMultipleImg","id_array","getImgManagerDisplayConfig","displayName","getAllImgManagerDisplayConfig","HttpClient","ImgCDNService","imgCDNConfig","setImgCDNConfig","getUrlImg","size","urlProperty","keys","filter","RegExp","test","getAllSize","match","ImgManagerConfigService","imgManagerService","imgCDNService","setExternalConfig","externalConfig","api","image_manager_route","getCanvaApiURL","canva_url","getCanvaApiToken","canva_token","getRouteAssets","assets_route","getPexelsApiURL","pexels_route","getPexelsApiToken","pexels_token","getShopCategory","shop_category","UserSettingsService","userdisplayPreference","setUserDisplayPreference","localStorage","setItem","getUserDisplayPreference","getItem","CanvaService","externalConfigService","bindExpectedImgSizeEvent","BehaviorSubject","bindExpectedSizeDone","setCanvaApiConfig","canvaApiURL","canvaApiKey","getCanvaLogo","bindEventExepectedImgSizeChange","expectedImgSizesChange","mediaDTO","getCanvaApi","observer","loadCanva","subscribe","complete","canvaApi","Canva","DesignButton","initializeCanva","initialize","apiKey","then","loadCanvaScript","node","document","createElement","src","async","charset","onload","getElementsByTagName","appendChild","ImgEventService","imgToEditEvent","Subject","imgRemoved","imgAdded","listDisplayedChange","emitImgRemoved","getImgRemovedEventListner","emitImgToEdit","imgToEdit","getImgToEditEventListner","emitImgAdded","getImgAddedEventListner","emitlistDisplayedChange","getlistDisplayedChange","DomService","documentEventSource","documentEventDone","documentScrollSource","documentScrollDone","documentEvent","setDocumentEventListener","addEventListener","documentScroll","setScrollEventListener","window","onscroll","WzImgManagerComponent","imgSelectionService","userSettingsService","canvaService","imgEventService","domService","imgManagerClosed","EventEmitter","_multipleImgMode","_showImgManagerModule","close","listDisplayed","hideTab","activate","displaySmall","onKeydownHandler","onClose","ngOnInit","selectImgEvent","imgSlection","checkCloseImgManager","checkUserDisplayPreference","listDisplayedEvent","setCurrentTab","setTimeout","addBodyBottomPaddingForModule","openSmall","setBodyMainScroll","openFull","hideBodyMainScroll","removeBodyBottomPaddingForModule","emit","onImgManagerClosed","html","overflowHTML","style","overflowY","bodyPadding","parseInt","paddingBottom","changeDisplayTab","ngOnDestroy","unsubscribe","Input","ImgManagerConfigDto","Output","HostListener","KeyboardEvent","Component","selector","template","easeInOut","trigger","state","opacity","transition","animate","AlertService","nwbAlertService","translateService","actionMsg","alertConfig","message","duration","openAlert","msgKey","closePreviousAlert","trans","setAlertColor","alertRefComponent","open","afterClosed","openAlertWithBackendRespons","msgBackend","dismiss","isErrorMsg","color","NwbAlertService","TranslateService","ImgUploadComponent","imgManager","alertService","files","isLoading","imgUploaded","loadingText","errorUploadingImg","errorNotImg","assetsIcon","getAssets","filesChangeByClick","filesChangeByDragAndDrop","filesList","removeDragAndDropStyle","imgToUploadList","files_1","files_1_1","file","FormData","append","name","isFileImage","forkJoin","img","onImgUpload","fileType","split","dragAndDropBox","nativeElement","ViewChild","ElementRef","animations","RenamePictureService","picturesList","pictureNameChanged","errorRenameImg","msgSavingImgName","msgImgNameSaved","setEvents","setPicturesList","onRenamePicture","pictureRenamed","pipe","debounceTime","pictureNameUpdate","renamePicture","getPictureById","id","display_name","data","previousName","UploadListComponent","renamePictureService","switchDisplayWindow","onImgUploaded","onToggleSelectImg","selected","switchDisplayWindowCard","imgSelectionChange","imgSelection","idFileList","ImgTabsComponent","imgEventEditService","route","currentTab","tabs","hide","tabActive","editTab","imgUpload","snackBarNewVersionConfig","toggleTabs","item","imgUploadedComponent","onEditClosed","onShowImgUploaded","switchDisplayWindowImgView","switchRouterLink","Router","DragDropDirective","onFileDropped","background","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","HostBinding","Directive","PexelsService","languages","fr","en","it","es","setLang","currentLang","onLangChange","langData","lang","searchOnPexels","toSearch","perPage","page","apiBaseUrl","request","httpOptions","shopCategory","listAnnimation","query","transform","stagger","optional","PexelLibComponent","wzImgLibService","searchValue","disableSearch","showImgUploaded","searchUpdated","nbResult","currentPage","initComponent","photosColumns","nbColumuns","responsiveColumns","outerElement","uploadingImg","untitled","successUploadPhoto","errorUploadPhoto","errorRetrievePhotos","subs","control","ngAfterViewInit","oldSearchValue","setNbColumnsToDisplayPhoto","setPhotosColumns","search","width","offsetWidth","onSearchNameChanged","onSearchChange","onBottomReached","scrollHandler","resetSearch","searchSub","wzImgLibDto","total_results","photos","photo","bestColumnIndex","getBestColumn","height","lastPic","querySelector","medium","indexColumn","bestColumn","photosColumn","uploadPhoto","uploading","uploadSub","instant","uploaded","code","sub","ImagesActionHandler","imgEventCardService","externalService","picturesListChange","tableFilters","sort","undefined","order","totalItems","itemsPerPage","displayPexelsResults","disable","disableChange","filtersChange","pictureNameChange","errorRemoveImg","errorAlreadyUsedImg","fakeImgRoute","onToggleAllCheckBoxRow","delSelected","_pictureListeChange","onToggleDelSelection","onFiltersChange","onEdit","onRemoveImg","deleted","msg","status","onPictureNotLoading","onDownloadImg","file_name","getRAWImgRoute","responseType","val","URL","createObjectURL","downloadUrl","revokeObjectURL","onNameChange","a","href","download","click","ngDestroy","getDataAPISub","ImgCardComponent","_super","focusInput","toggleImgSelected","isUploadSection","activeConfirmDelete","tabDisplayed","displayLargeWindow","onToggleImgSelected","ImgEditorComponent","editClosed","isImgModified","isNameModified","currentCroppedImage","msgFailSave","msgFailLoad","msgSuccessEdit","onSave","obsReplaceImg","obsChangeImgName","ranameAndReplaceImg","onRestartEdit","onCancel","onImgCropped","imgBase64","res1","res2","CanvaBtnComponent","wzImgEventService","renderer","imgLoading","availableFormat","ImgManager.CanvaBtn.smallSquare","ImgManager.CanvaBtn.mediumSquare","ImgManager.CanvaBtn.bigSquare","openDropDownMenu","errorUploadCanvaImg","errorRenameCanvaImg","canvaLogoRouteAssets","listenCanvaExpectedSize","subExpectedImgSizesChange","expectedWidth","image_width","expectedHeight","image_height","onOpenCanva","subCanvaApi","addOverflowBody","createDesign","dimensions","units","publishLabel","design","onDesignPublish","_a","exportUrl","designTitle","designPublished","onDesignClose","removeOverflowBody","subUploadImg","addClass","removeClass","Renderer2","ImgSelectionComponent","removingAll","cancellingAll","importingAll","dragStart","trashPositionIndex","trashPositionLeft","getImgSelected","init","drop","removeImgFromSelection","LoadingDirective","el","currentLoading","interval","element","launchLoading","setInterval","Math","floor","random","clearInterval","AutoHideDirective","_elementRef","forceOn","clickOutside","targetElement","clickedInside","contains","classNameFromElement","getAttribute","includes","triggerElement","needToClose_1","v","CopyClipboardDirective","copied","onClick","payload","listener","clipboardData","setData","toString","execCommand","removeEventListener","MouseEvent","DropdownComponent","EditorInfoSectionComponent","_isNameModified","isNameModifiedChange","msgCopyToClipBoard","imgName","getFileSize","round","copyToClipBoard","insertRemove","CropperComponent","_isImgModified","isImgModifiedChange","currentCroppedImageChange","isCropperReady","isCropped","isImgCropped","isImgCroppedInitilized","imageChangedEvent","croppedImage","canvasRotation","rotation","scale","showCropper","containWithinAspectRatio","resolutionConfig","label","config","maintainAspectRatio","active","aspectRatio","rotationConfig","icon","method","zoomConfig","imgCropperConfig","restartEdit","imgRoute","imgType","getImgType","setDefautAspectRatio","pop","raw_height","raw_width","defaultAspectRatio","onRestart","resetConfCropper","onImgModified","fileChangeEvent","imageCropped","detectImgCropperChange","base64","imageLoaded","cropperReady","loadImageFailed","changeResolutionSize","setActiveItem","setCropperProperties","confirmCrop","array","indexItem","property","rotateLeft","flipAfterRotate","rotateRight","flipHorizontal","flipH","flipVertical","flipV","flippedH","flippedV","zoomOut","zoomIn","applyMethod","ImagesViewComponent","widthLargeCard","widthSmallCard","nbFakeImg","imgFullWidthConfig","max","largeImgWidthFactor","smallImgWidthFactor","imgWidthConfig","searchQueryChanged","filtersChanged","savePictureList","nbImgToDelSelected","isTotalRetieved","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","errorGetTotalImg","errorGetImg","msgNoImgFound","setNbImgToDisplay","_getImgList","getImgList","onSwitchFormatDisplayed","onImgSelected","setNbImgToDelSelected","searchText","searchedValue","console","log","removeListImg","idImgToRemove","selectImgChosen","picturesListSelected","displayConfirmImgSup","cancelSup","onPicturesListChange","containerWidth","imgLibContainer","scrollWidth","innerWidth","getImgWidthFactors","maxImgWidthFactor","minImgWidthFactor","minImgWidth","maxImgWidth","ceil","nbMaxImgPerLine","nbMinImgPerLine","getTotalImgPerPage","screenWidth","minWidth","imgSizesConfig","currentImgWidthConfig","fullSize","currentImgWidthConfig_1","currentImgWidthConfig_1_1","widthConfig","nbRowToShow","total","setParams","limit","maxLengthCardShow","initVariables","loadingSuccess","selectImgSelected","idImgSlectedList","displayPexelsLib","calculNbImgFake","nbImgDisplayed","nbImgPerLine","getImg","take","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","refreshTotalImgList","totalRecords","previousSearchValue","switchDisplayWindowMosaic","MosaicViewComponent","onCardRenamePicture","TableViewComponent","dataTableName","FiltersTableService","filterRoutingBuilder","filterGroups","Map","dataTableFilters","sortSubject","getTableFilterGroup","has","filterGroup","group","emitSortChange","sortName","getSortChangeListner","setPaginationFilters","setValues","setInitialPaginationFiltersIfNotExist","NwbFilterRoutingBuilder","TableComponent","filtersTableService","tableFiltersChange","placeholder","checkbox","toggleAllCheckBox","disablePagniation","headerCheckBoxId","uuid","tableRoutingName","_filterGroup","valuesChange$","setTablesFilters","filterGroupChangeSub","filters","onToggleAllCheckBox","checked","searchChange","pageChange","encapsulation","ViewEncapsulation","None","InputSearchComponent","smallPadding","innerValue","changeDebounced","onTouchedCallback","onChangeCallback","writeValue","registerOnChange","fn","registerOnTouched","handleDebouncedKeyUp","InputSearchComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","multi","PagniationIsLastPage","Error","Pipe","PaginationComponent","_pagination","pagination","decrementPage","incrementPage","onGotoPageChange","pageNumber","PagniationArrayTotalPages","arrayLength","Number","x","PagniationText","currentItemsLow","currentItemsHigh","low","high","CheckboxComponent","alone","disabled","_onChange","_onTouched","setDisabledState","isDisabled","obj","onChange","CheckboxComponent_1","CheckBoxRow","currentRow","appRef","resolver","injector","checkBoxValueChange","_value","checkboxComponentRef","setCheckBoxValue","createCheckBoxComponent","handleChecboxInputs","handleCheckboxOutputs","checkBoxContainer","className","insertBefore","firstChild","htmlContainer","HtmlContainer","attach","instance","checkBoxId","checkBoxName","checkBoxValue","_toggleCheckbox","dispose","ApplicationRef","Inject","args","DOCUMENT","ComponentFactoryResolver","Injector","hostElement","componentFactoryResolver","attached","component","componentRef","resolveComponentFactory","attachView","hostView","disposeFn","detachView","destroy","rootNodes","TableColumn","currentCell","centerCellValue","applyCustomStylesOnCell","flexGrow","columnSize","centerCell","TableColumnHeader","_headerName","filterRouting","onSortChange","subscriptions","setHeaderName","tableName","handleSortRouting","handleSortBasic","renderHeaderColumn","filterSort","resetSortIcon","sortChangeSub","contentHeader","replace","getCurrentSortIcon","createHeaderContent","handleSort","innerHTML","headerName","getInitialSortIcon","listen","newIcon","newSort","newOrder","currentIcon","emitEvents","initialSortIcon","exec","groups","subscription","TableRow","ImageSrcPipe","pictureName","AbstractDebounceDirective","onEventChange","emitEvent$","subscription$","takeUntil","distinctUntilChanged","tap","emitChange","DebounceKeyupDirective","onKeyUp","LoaderComponent","small","AlertComponent","warning","success","iconClass","NumberToArray","number","from","repeat","PageSelectorComponent","openAbsoluteSelect","largeNumberOfPage","numberOfPage","_totalItems","directValue","LargeNumberOfPagePipe","startAtPage","totalPage","arrayWithPageNumber","display","SelectComponent","maxWidth","selectValue","clickOnCallToAction","openCategories","indexItemSelected","onTouch","items","findIndex","customTB","onSelectItem","unselectAll","setIndexItemSelected","itemSelected","getItemSelected","onClickCallToAction","callToAction","showCategories","searchElement","focus","selectItem","SelectComponent_1","SelectFiltersPipe","filterName","ZindexToggleDirective","currentElement","isActived","switchToggle","parentElement","parentNode","components","directives","pipes","WzImgManagerModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","NgScrollbarModule","NgScrollbarReachedModule","NwbAllModule","ImageCropperModule","CdkTableModule","DragDropModule","TranslateModule","PerfectScrollbarModule","exports","url_raw_image","url_100_image","url_200_image","url_400_image","url_800_image"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { Subscriber, Observable, ReplaySubject } from 'rxjs';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgSelectionService {\n\n imgSelectedList: ImgPictureDTO[] = [];\n multipleImgMode: boolean = false;\n private imgSelectionSubscriber: Subscriber<any>[] = [];\n private imgListLoading: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n constructor() {}\n\n getImgSelection() {\n return this.imgSelectedList;\n }\n\n // Use in img manager webelement, when the product img selection is retrieved\n setImgSelection(imgSelectedList: ImgPictureDTO[]) {\n this.imgSelectedList.length = 0;// Remove all the elements from the array and keep the reference\n\n if (imgSelectedList && imgSelectedList.length) {\n imgSelectedList.forEach(elem => this.imgSelectedList.push(elem));\n }\n this.emitImgSelectionChange();\n }\n\n addImgSelected(picture : ImgPictureDTO) {\n if (this.multipleImgMode) {\n this.imgSelectedList.push(picture);\n } else {\n this.imgSelectedList = [picture];\n }\n this.emitImgSelectionChange();\n }\n\n getImgSelectionChange() {\n const obsImgSelection = new Observable<ImgPictureDTO[]>(subscriber => {\n this.imgSelectionSubscriber.push(subscriber);\n });\n return obsImgSelection;\n }\n\n emitImgSelectionChange() {\n this.imgSelectionSubscriber.map(obs =>\n obs.next(JSON.parse(JSON.stringify(this.imgSelectedList)))\n );\n }\n\n removeImgSelectedByIndex(index: number) {\n this.imgSelectedList.splice(index, 1);\n this.emitImgSelectionChange();\n }\n\n removeImgSelectedById(id_file: string) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n let index = 0;\n for (const img of this.imgSelectedList) {\n if(img.id_file === id_file) {\n this.removeImgSelectedByIndex(index);\n break;\n }\n index++;\n }\n }\n\n removeImgSelectionByIds(id_file_list: string[]) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n\n for (let index = this.imgSelectedList.length -1; index > -1 ; index--) {\n const id_file = this.imgSelectedList[index].id_file;\n if (id_file_list.indexOf(id_file) !== -1) {\n this.removeImgSelectedByIndex(index);\n }\n }\n }\n\n removeAllImgSelected() {\n this.imgSelectedList.length = 0;\n this.emitImgSelectionChange();\n // Remove all the elements from the array and keep the reference\n }\n\n setMultipleImgMode(activated: boolean) {\n this.multipleImgMode = activated;\n }\n\n initImgSelectedList(imgSelectedList: ImgPictureDTO[]) {\n // Retrieve the imgSelectedList from parameter\n if (imgSelectedList) {\n this.imgSelectedList = imgSelectedList;\n return;\n }\n // Remove all elements from imgSelectedList\n if (this.imgSelectedList && this.imgSelectedList.length) {\n this.imgSelectedList.splice(0, this.imgSelectedList.length);\n return;\n }\n this.imgSelectedList = [];\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n emitImgListLoading(loading: boolean){\n this.imgListLoading.next(loading);\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n getImgListLoadingEventListner(){\n return this.imgListLoading.asObservable();\n }\n\n /**\n * Use angular cdk function\n * Called by img selection component\n * @param event\n */\n moveImgOrder(event: CdkDragDrop<string[]>) {\n const fromIndex = event.previousIndex;\n const toIndex = event.currentIndex;\n this.imgSelectedList.splice(toIndex, 0, this.imgSelectedList.splice(fromIndex, 1)[0]);\n this.emitImgSelectionChange();\n }\n}\n","import { ImgApiDto } from '../apis/api.dto';\nimport { ImgCDNConfigDTO } from '../image-cdn/image-cdn-config.dto';\n\nexport class ImgManagerConfigDto {\n api: ImgApiDto;\n imgCDNConfig : ImgCDNConfigDTO;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from \"rxjs\";\nimport { ParamsImgManagerDTO } from '../dto/img-manager.dto';\nimport { ImgManagerDisplayConfig } from '../dto/export-dtos.api';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerService {\n\n imgManagerRoute: string;\n shopToken: string;\n\n params = new HttpParams().set(\"limit\",\"20\").set(\"page\",\"1\");\n\n // Display the img selection\n private pageFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: true,\n pageficheProduct: true\n }\n\n private angularFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: false,\n pageficheProduct: true\n }\n\n private wiziblockConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n private simpleWithButtonOpenerConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: true\n }\n\n private fullWindowConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'window',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n constructor(private http: HttpClient) { }\n\n setApiConfig(img_manager_route: string, shop_token: string) {\n this.imgManagerRoute = img_manager_route;\n this.shopToken = shop_token;\n }\n\n private getOptionsHeaders(params?: ParamsImgManagerDTO) {\n const header = { headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.shopToken\n })\n };\n if (params) {\n this.getParams(params);\n header['params'] = this.params\n }\n return header;\n }\n\n getShopImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images`, this.getOptionsHeaders(params));\n }\n\n getShopTotalImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/total/image`, this.getOptionsHeaders(params));\n }\n\n getShopImg(idFile: string): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images/${idFile}`, this.getOptionsHeaders());\n }\n\n getParams(params: ParamsImgManagerDTO){\n this.params = new HttpParams();\n this.params = this.params.set('id_file:sort', 'desc');\n for (const param in params) {\n this.params = this.params.set(param, params[param]);\n }\n }\n\n uploadFile(formData: FormData) {\n return this.http.post(`${this.imgManagerRoute}/images/template`, formData, this.getOptionsHeaders());\n }\n\n uploadFileByUrl(url: string, fileName?: string) {\n const body = {\n url,\n fileName\n };\n return this.http.post(`${this.imgManagerRoute}/images/template`, { url, fileName }, this.getOptionsHeaders());\n }\n\n replaceImg(imageBase64: string, id_file: string) {\n const body = {\n imageBase64,\n type : \"RAW\"\n }\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}/replace`, body, this.getOptionsHeaders());\n }\n\n changeImgName(fileName: string, id_file: string) {\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}?file_name=${fileName}`, null, this.getOptionsHeaders());\n }\n\n removeImg(id_file: string) {\n return this.http.delete(`${this.imgManagerRoute}/images/${id_file}`, this.getOptionsHeaders());\n }\n\n removeMultipleImg(id_array: string[]){\n return this.http.post(`${this.imgManagerRoute}/images-multiple-delete`, { id_array }, this.getOptionsHeaders());\n }\n\n getImgManagerDisplayConfig(displayName: \"window\" | \"wizi-block\" | \"fiche-product\" | \"simple-with-button\" | 'angular-fiche-product') {\n switch (displayName) {\n case \"window\":\n return this.fullWindowConfig;\n\n case \"wizi-block\":\n return this.wiziblockConfig;\n\n case \"fiche-product\":\n return this.pageFicheProductConfig;\n\n case \"simple-with-button\":\n return this.simpleWithButtonOpenerConfig;\n\n case 'angular-fiche-product':\n return this.angularFicheProductConfig\n\n default:\n return;\n }\n }\n\n getAllImgManagerDisplayConfig(): ImgManagerDisplayConfig[] {\n return [\n this.fullWindowConfig,\n this.wiziblockConfig,\n this.pageFicheProductConfig,\n this.simpleWithButtonOpenerConfig,\n ]\n }\n}","import { Injectable } from '@angular/core';\nimport { ImgCDNConfigDTO } from '../../dto/config/image-cdn/image-cdn-config.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgCDNService {\n\n imgCDNConfig: ImgCDNConfigDTO = null;\n\n constructor() {}\n\n setImgCDNConfig(imgCDNConfig: ImgCDNConfigDTO) {\n this.imgCDNConfig = imgCDNConfig;\n }\n\n getUrlImg(size: '100'|'200'|'400'|'800'|'raw'|string) {\n const urlProperty = Object.keys(this.imgCDNConfig)\n .filter(url =>\n new RegExp(size, 'i').test(url)\n )[0];\n\n return this.imgCDNConfig[urlProperty];\n }\n\n getAllSize(): string[] {\n return Object.keys(this.imgCDNConfig)\n .map(elem =>\n elem.match(/_(\\w+)_/)[1]\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ImgManagerConfigDto } from '../../dto/config/external/external-config.dto';\nimport { ImgManagerService } from '../img-manager.service';\nimport { ImgCDNService } from './img-cdn.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerConfigService {\n\n externalConfig: ImgManagerConfigDto;\n\n constructor(\n private imgManagerService: ImgManagerService,\n private imgCDNService: ImgCDNService\n ) {}\n\n /**\n * Set imgManagerService and imgCDNService\n * Canva and Pexel service retrieve the externalConfig at their initialization\n * @param externalConfig\n */\n setExternalConfig(externalConfig: ImgManagerConfigDto) {\n this.externalConfig = externalConfig;\n this.imgManagerService.setApiConfig(externalConfig.api.image_manager_route, externalConfig.api.shop_token);\n this.imgCDNService.setImgCDNConfig(externalConfig.imgCDNConfig);\n }\n\n getCanvaApiURL() {\n return this.externalConfig.api.canva_url;\n }\n\n getCanvaApiToken() {\n return this.externalConfig.api.canva_token;\n }\n\n getRouteAssets() {\n return this.externalConfig.api.assets_route;\n }\n\n getPexelsApiURL() {\n return this.externalConfig.api.pexels_route;\n }\n\n getPexelsApiToken() {\n return this.externalConfig.api.pexels_token;\n }\n\n getShopCategory() {\n return this.externalConfig.api.shop_category;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n\n private userdisplayPreference = 'WzImgManagerListDisplayed';\n\n constructor() {\n }\n\n /**\n * true : display list\n * false : display mosaic\n * @param value\n */\n setUserDisplayPreference(value: boolean) {\n localStorage.setItem(this.userdisplayPreference, '' + value);\n }\n\n getUserDisplayPreference(): boolean {\n const value = localStorage.getItem(this.userdisplayPreference);\n return value == 'true';\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subscriber, BehaviorSubject } from 'rxjs';\nimport { CanvaButtonApi } from '../dto/canva.dto';\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { WiziBlockMediaDto } from '../dto/wizi-block-media.dto';\n\ndeclare let Canva : {\n DesignButton : {\n initialize: (opts: { apiKey: string }) => Promise<CanvaButtonApi>;\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CanvaService {\n\n canvaApi; // Object use to manage the canva api\n canvaApiURL: string;\n canvaApiKey: string;\n canvaLogoRoute: string;\n\n private bindExpectedImgSizeEvent: BehaviorSubject<WiziBlockMediaDto> = new BehaviorSubject<WiziBlockMediaDto>(null);\n private bindExpectedSizeDone = this.bindExpectedImgSizeEvent.asObservable();\n\n constructor(\n private externalConfigService: ImgManagerConfigService\n ) { }\n\n private setCanvaApiConfig() {\n this.canvaApiURL = this.externalConfigService.getCanvaApiURL();\n this.canvaApiKey = this.externalConfigService.getCanvaApiToken();\n }\n\n getCanvaLogo() {\n return this.externalConfigService.getRouteAssets() + \"canva/icon_canva.svg\";\n }\n\n bindEventExepectedImgSizeChange() {\n return this.bindExpectedSizeDone;\n }\n\n expectedImgSizesChange (mediaDTO: WiziBlockMediaDto){\n this.bindExpectedImgSizeEvent.next(mediaDTO);\n }\n\n getCanvaApi():Observable<CanvaButtonApi> {\n if (!this.canvaApiURL || !this.canvaApiKey) {\n this.setCanvaApiConfig();\n }\n return new Observable(observer => {\n this.loadCanva().subscribe({\n complete: () => {\n if(this.canvaApi && Canva.DesignButton) {\n observer.next(this.canvaApi);\n observer.complete();\n } else {\n this.initializeCanva(observer);\n }\n }\n })\n });\n }\n\n private initializeCanva(observer: Subscriber<CanvaButtonApi>) {\n if (Canva.DesignButton) {\n Canva.DesignButton.initialize({\n apiKey: this.canvaApiKey\n\n }).then((canvaApi) => {\n this.canvaApi = canvaApi;\n observer.next(this.canvaApi);\n observer.complete();\n });\n }\n }\n\n private loadCanva():Observable<null> {\n return new Observable(observer => {\n if(this.canvaApi) {\n observer.complete();\n }else{\n this.loadCanvaScript(observer);\n }\n });\n }\n\n private loadCanvaScript(observer: Subscriber<null>) {\n\n const node = document.createElement('script');\n node.src = this.canvaApiURL;\n node.type = 'text/javascript';\n node.async = false;\n node.charset = 'utf-8';\n node.onload = () => {\n observer.complete();\n }\n document.getElementsByTagName('head')[0].appendChild(node);\n }\n}\n","import {Injectable} from '@angular/core';\nimport { Subject } from \"rxjs\";\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class ImgEventService {\n\n constructor() { }\n\n private imgToEditEvent: Subject<ImgPictureDTO> = new Subject<ImgPictureDTO>();\n private imgRemoved: Subject<string> = new Subject<string>();\n private imgAdded: Subject<string> = new Subject<string>();\n private listDisplayedChange: Subject<boolean> = new Subject<boolean>();\n\n emitImgRemoved(id_file: string){\n this.imgRemoved.next(id_file);\n }\n\n getImgRemovedEventListner(){\n return this.imgRemoved.asObservable();\n }\n\n emitImgToEdit(imgToEdit: ImgPictureDTO){\n this.imgToEditEvent.next(imgToEdit);\n }\n\n getImgToEditEventListner(){\n return this.imgToEditEvent.asObservable();\n }\n\n emitImgAdded(id_file: string){\n this.imgAdded.next(id_file);\n }\n\n getImgAddedEventListner(){\n return this.imgAdded.asObservable();\n }\n\n emitlistDisplayedChange(value: boolean){\n this.listDisplayedChange.next(value);\n }\n\n getlistDisplayedChange(){\n return this.listDisplayedChange.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DomService {\n private documentEventSource = new Subject();\n private documentEventDone = this.documentEventSource.asObservable();\n\n private documentScrollSource = new Subject();\n private documentScrollDone = this.documentScrollSource.asObservable();\n\n documentEvent() {\n return this.documentEventDone;\n }\n\n setDocumentEventListener() {\n document.body.addEventListener('click', event => {\n this.documentEventSource.next(event.target);\n });\n }\n\n documentScroll() {\n return this.documentScrollDone;\n }\n\n setScrollEventListener() {\n window.onscroll = () => {\n this.documentScrollSource.next(window);\n };\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from './services/img-selection.service';\nimport { ImgManagerConfigDto } from './dto/config/external/external-config.dto';\nimport { ImgManagerConfigService } from './services/config/external-config.service';\nimport { Subscription } from 'rxjs';\nimport { UserSettingsService } from './services/user-settings.service';\nimport { CanvaService } from './services/canva.service';\nimport { ImgEventService } from './services/img-event.service';\nimport { DomService } from './services/dom.service';\nimport { HostListener } from '@angular/core';\nimport { stateDisplayed } from '../public-api';\n\n@Component({\n selector: 'wz-img-manager',\n templateUrl: './wz-img-manager.component.html'\n})\nexport class WzImgManagerComponent implements OnInit {\n @Input() stateDisplayed: stateDisplayed;\n @Input() showSelection: boolean = false;\n @Input() externalConfig: ImgManagerConfigDto;\n @Output() imgManagerClosed = new EventEmitter();\n private _multipleImgMode: boolean = false;\n\n @Input() set multipleImgMode(activate: boolean) {\n this._multipleImgMode = activate;\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n }\n\n get multipleImgMode(): boolean {\n return this._multipleImgMode;\n }\n\n _showImgManagerModule: boolean = false;\n @Input() set showImgManagerModule(activate: boolean) {\n this._showImgManagerModule = activate;\n if (activate) {\n this.displaySmall();\n }\n }\n\n get showImgManagerModule(): boolean {\n return this._multipleImgMode;\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (this.stateDisplayed && this.stateDisplayed !== 'window') {\n this.onClose();\n }\n }\n\n close: boolean = false\n selectImgEvent: Subscription;\n listDisplayed: boolean = false;\n listDisplayedEvent: Subscription;\n hideTab: boolean = false;\n // Save the defaut overflow apply to html tag, when the module is full open\n private overflowHTML: string;\n private bodyPadding: number;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private externalConfigService: ImgManagerConfigService,\n private userSettingsService: UserSettingsService,\n private canvaService: CanvaService,\n private imgEventService: ImgEventService,\n private domService: DomService\n ) {}\n\n ngOnInit(): void {\n this.externalConfigService.setExternalConfig(this.externalConfig);\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n this.imgSelectionService.initImgSelectedList(null);\n this.selectImgEvent = this.imgSelectionService.getImgSelectionChange().subscribe(imgSlection =>{\n\n if (imgSlection && imgSlection.length && this.checkCloseImgManager()) {\n // Close the img manager\n this.onClose();\n }\n });\n this.checkUserDisplayPreference();\n // Use when the img manager is full open or open in page. This display the user preference display, mosaic or list.\n this.listDisplayedEvent = this.imgEventService.getlistDisplayedChange().subscribe(value => this.listDisplayed = value);\n // Register dom service to listen on all event on the body to avoid having multiple instance of the same thing every where\n this.domService.setDocumentEventListener();\n }\n\n checkUserDisplayPreference() {\n if (this.stateDisplayed === 'window' || this.stateDisplayed === 'full') {\n this.listDisplayed = this.userSettingsService.getUserDisplayPreference();\n }\n }\n\n setCurrentTab(event) {\n if (event === 'img-edition') {\n this.hideTab = true;\n return;\n }\n this.hideTab = false;\n }\n\n displaySmall() {\n if (this.stateDisplayed !== 'window') {\n setTimeout(() => {\n this.stateDisplayed = 'small';\n this.addBodyBottomPaddingForModule();\n }, 10);\n }\n }\n\n openSmall() {\n this.stateDisplayed = 'small';\n this.setBodyMainScroll();\n this.listDisplayed = false;\n }\n\n openFull() {\n this.stateDisplayed = 'full';\n this.checkUserDisplayPreference();\n this.hideBodyMainScroll();\n }\n\n onClose() {\n this.stateDisplayed = 'closed';\n this.hideTab = false;\n this.setBodyMainScroll();\n this.removeBodyBottomPaddingForModule();\n // Wait the end of the closing annimation\n setTimeout(() => {\n this.imgManagerClosed.emit();\n }, 250);\n }\n\n onImgManagerClosed() {\n this.onClose();\n }\n\n /**\n * Close the img manager after one img is selected, if not in multiple img to select\n */\n checkCloseImgManager() {\n return !this.multipleImgMode && this.stateDisplayed !== 'window' ? true : false;\n }\n\n hideBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n\n if (!this.overflowHTML) {\n this.overflowHTML = html.style.overflowY;\n }\n\n html.style.overflowY = \"hidden\";\n }\n\n setBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n html.style.overflowY = this.overflowHTML ? this.overflowHTML : \"scroll\";\n }\n\n addBodyBottomPaddingForModule() {\n const body = document.getElementsByTagName('body')[0];\n this.bodyPadding = this.bodyPadding ? parseInt(body.style.paddingBottom) : 0;\n body.style.paddingBottom = this.bodyPadding + 300 + 'px';\n }\n\n removeBodyBottomPaddingForModule() {\n if (typeof this.bodyPadding !== 'undefined') {\n const body = document.getElementsByTagName('body')[0];\n body.style.paddingBottom = this.bodyPadding + 'px';\n this.bodyPadding = 0;\n }\n }\n\n changeDisplayTab() {\n this.stateDisplayed = 'full';\n }\n\n ngOnDestroy() {\n this.selectImgEvent.unsubscribe();\n this.canvaService.expectedImgSizesChange(null);\n this.listDisplayedEvent.unsubscribe();\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\n\nexport const easeInOut = // the fade-in/fade-out animation.\ntrigger('easeInOut', [\n\n // the \"in\" style determines the \"resting\" state of the element when it is visible.\n state('in', style({opacity: 1})),\n\n // fade in when created. this could also be written as transition('void => *')\n transition(':enter', [\n style({opacity: 0}),\n animate('0.5s ease-in-out' )\n ]),\n]);\n","import { Injectable } from '@angular/core';\nimport { NwbAlertConfig, NwbAlertComponent } from '@wizishop/ng-wizi-bulma';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NwbAlertService } from '@wizishop/ng-wizi-bulma';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n actionMsg = 'ImgManager.alert.action';\n\n alertConfig: NwbAlertConfig = {\n message: '',\n duration: 5000\n }\n\n private alertRefComponent: NwbAlertComponent;\n\n constructor(\n private nwbAlertService: NwbAlertService,\n private translateService: TranslateService\n ) { }\n\n openAlert(msgKey: string) {\n this.closePreviousAlert();\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.setAlertColor(msgKey);\n\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n openAlertWithBackendRespons(msgKey: string, msgBackend: string) {\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.alertConfig.message += '<br/>' + JSON.parse(msgBackend).message;\n\n this.closePreviousAlert();\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n private closePreviousAlert() {\n if (this.alertRefComponent) {\n this.alertRefComponent.dismiss();\n }\n }\n\n private setAlertColor(msgKey: string) {\n const isErrorMsg: boolean = /error/i.test(msgKey);\n this.alertConfig.color = isErrorMsg ? 'is-danger' : 'is-success';\n }\n}\n","import {Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport {ImgManagerConfigService} from \"../../services/config/external-config.service\";\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'img-upload',\n templateUrl: './img-upload.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgUploadComponent implements OnInit {\n\n files: any = [];\n isLoading: boolean = false;\n assetsIcon: string;\n @Input() stateDisplayed: stateDisplayed;\n @Output() imgUploaded = new EventEmitter();\n\n @ViewChild('dragAndDropBox') dragAndDropBox: ElementRef;\n\n loadingText = 'ImgManager.ImgUpload.loading';\n errorUploadingImg = 'ImgManager.ImgUpload.errorUploadingImg';\n errorNotImg = 'ImgManager.ImgUpload.errorNotImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private externalConfigService: ImgManagerConfigService\n ) {}\n\n ngOnInit(): void {\n this.assetsIcon = this.getAssets();\n }\n\n filesChangeByClick(event: any) {\n this.uploadFile(event.target.files);\n }\n\n getAssets() {\n return this.externalConfigService.getRouteAssets() + \"img/icon_picture.svg\";\n }\n\n filesChangeByDragAndDrop(filesList: File[]) {\n this.removeDragAndDropStyle();\n this.uploadFile(filesList);\n }\n\n uploadFile(files: File[]) {\n if (files && !files.length) {\n return;\n }\n\n this.isLoading =true;\n const imgToUploadList: Observable<any>[] = [];\n for (const file of files) {\n\n const formData = new FormData();\n formData.append('image', file, file.name);\n\n if(!this.isFileImage(file.type)) {\n this.alertService.openAlert(this.errorNotImg);\n this.isLoading =false;\n continue;\n }\n imgToUploadList.push(this.imgManager.uploadFile(formData));\n }\n\n forkJoin(imgToUploadList).subscribe(\n (img: ImgPictureDTO[]) => {\n this.onImgUpload(img),\n this.isLoading =false;\n },\n error => {\n this.alertService.openAlert(this.errorUploadingImg);\n this.isLoading =false;\n }\n )\n }\n\n /**\n * Send the img uploaded to the tabs components,\n * Then the tabs components add the img to upload list by calling the method onImgUploaded of the upload-list component\n * @param img\n */\n onImgUpload(img: ImgPictureDTO[]) {\n this.imgUploaded.emit(img);\n }\n\n isFileImage(fileType: string) {\n return fileType.split('/')[0] === 'image';\n }\n\n /**\n * Remove the style of the drag and drop box\n * After an img is droped, the box is still grey\n */\n removeDragAndDropStyle() {\n this.dragAndDropBox.nativeElement.style = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ImgManagerService } from './img-manager.service';\nimport { AlertService } from './alert.service';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { PictureNameUpdate } from '../dto/picture-name-update.dto';\n\n@Injectable({providedIn: 'root'})\nexport class RenamePictureService {\n\n private picturesList: ImgPictureDTO[] = [];\n private pictureNameChanged: Subject<PictureNameUpdate> = new Subject<PictureNameUpdate>();\n\n private errorRenameImg = 'ImgManager.ImgList.errorRenameImg';\n private msgSavingImgName = 'ImgManager.ImgLib.savingImgName';\n private msgImgNameSaved = 'ImgManager.ImgLib.imgNameSaved';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n )\n {\n this.setEvents();\n }\n\n setPicturesList(picturesList: ImgPictureDTO[]) {\n this.picturesList = picturesList;\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChanged.next(pictureRenamed);\n }\n\n private setEvents() {\n this.pictureNameChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe((pictureNameUpdate:PictureNameUpdate) => {\n this.renamePicture(pictureNameUpdate);\n });\n }\n\n private renamePicture(pictureNameUpdate: PictureNameUpdate) {\n const picture: ImgPictureDTO = this.getPictureById(pictureNameUpdate.id);\n if (!picture) {\n this.alertService.openAlert(this.errorRenameImg);\n return;\n }\n this.alertService.openAlert(this.msgSavingImgName);\n this.imgManager\n .changeImgName(picture.display_name, picture.id_file)\n .subscribe(\n (data: ImgPictureDTO) => {\n picture.display_name = data.display_name;\n this.alertService.openAlert(this.msgImgNameSaved);\n },\n (error) => {\n picture.display_name = pictureNameUpdate.previousName;\n this.alertService.openAlert(this.errorRenameImg);\n }\n );\n }\n\n private getPictureById(id_file: string): ImgPictureDTO {\n if (!this.picturesList) {\n return;\n }\n\n for (const picture of this.picturesList) {\n if(picture.id_file === id_file) {\n return picture;\n }\n }\n\n return null;\n }\n\n}","import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { PictureNameUpdate, stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\n\n@Component({\n selector: 'upload-list',\n templateUrl: './upload-list.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class UploadListComponent implements OnInit {\n\n picturesList: ImgPictureDTO[] = [];\n imgSelectionChange: Subscription;\n selectImgEvent: Subscription;\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() multipleImgMode: boolean = false;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private renamePictureService: RenamePictureService\n ) { }\n\n ngOnInit(): void {\n this.setEvents();\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n img.forEach(picture =>\n this.picturesList.push(picture)\n );\n this.renamePictureService.setPicturesList(this.picturesList);\n }\n\n onToggleSelectImg(index: number) {\n if (this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n switchDisplayWindowCard() {\n this.switchDisplayWindow.emit(true);\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n private setEvents() {\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n ngOnDestroy(): void {\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import {Component, Input, OnInit, ViewChild, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { UploadListComponent } from '../upload-list/upload-list.component';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { NwbSnackbarConfig } from '@wizishop/ng-wizi-bulma';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\nimport {Router} from '@angular/router';\nimport { SelectItem } from '../shared/select/select-items.dto';\n\n@Component({\n selector: 'img-tabs',\n templateUrl: './img-tabs.component.html'\n})\nexport class ImgTabsComponent implements OnInit {\n\n @Input()\n multipleImgMode: boolean = false;\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n listDisplayed = false;\n\n @Output()\n imgManagerClosed = new EventEmitter();\n\n @Output()\n currentTab = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n tabs: SelectItem[] = [\n {\n name: 'ImgManager.Tabs.addImg',\n value: 'img-upload',\n selected: true,\n id: 0\n },\n {\n name: 'ImgManager.Tabs.imgLib',\n value: 'images-view',\n id: 1\n },\n {\n name: 'ImgManager.Tabs.freeImgLib',\n value: 'pexels-lib',\n id: 2\n },\n {\n name: 'ImgManager.Tabs.Editor',\n value: 'img-edition',\n hide: true,\n id: 3\n }\n ];\n\n tabActive: SelectItem = this.tabs[0];\n\n /* tabActive = 'images-view';\n tabs: string[] = ['img-upload', 'images-view', 'pexels-lib', 'img-edition']; */\n editTab = false;\n\n imgToEdit: ImgPictureDTO;\n\n imgUpload = false;\n\n @ViewChild( 'imgUploadedImg' )\n imgUploadedComponent: UploadListComponent ;\n\n snackBarNewVersionConfig: NwbSnackbarConfig = {\n message: '',\n duration: 3000\n };\n\n constructor(\n private imgEventEditService: ImgEventService,\n private alertService: AlertService,\n private route: Router\n ) { }\n\n ngOnInit(): void {\n this.imgEventEditService.getImgToEditEventListner().subscribe(imgToEdit =>{\n this.tabActive = this.tabs[3];\n this.imgToEdit = imgToEdit;\n this.editTab = true;\n this.currentTab.emit(this.tabs[3]);\n });\n }\n\n toggleTabs(item: SelectItem) {\n this.imgUpload = false;\n this.editTab = false;\n this.tabActive = item;\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n this.imgUpload = true;\n this.imgUploadedComponent.onImgUploaded(img);\n }\n\n onEditClosed(msgKey: string) {\n this.editTab = false;\n this.toggleTabs(this.tabs[1]);\n if (msgKey) {\n this.alertService.openAlert(msgKey);\n }\n this.currentTab.emit('close');\n }\n\n onShowImgUploaded() {\n this.tabActive = this.tabs[1];\n }\n\n switchDisplayWindowImgView() {\n this.switchDisplayWindow.emit(true);\n }\n\n switchRouterLink(event) {\n\n }\n\n onImgManagerClosed() {\n this.imgManagerClosed.emit();\n }\n}\n","import { Directive, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]'\n})\nexport class DragDropDirective {\n\n @Output() onFileDropped = new EventEmitter<Event>();\n\n @HostBinding('style.background-color') background = '#fff'\n @HostBinding('style.opacity') opacity = '1'\n\n @HostListener('dragover', ['$event']) onDragOver(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5';\n this.opacity = '0.8';\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#fff';\n this.opacity = '1';\n }\n\n @HostListener('drop', ['$event']) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5'\n this.opacity = '1'\n const files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.onFileDropped.emit(files);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\nimport {WzImgLibDto} from \"../dto/pexels-img.dto\";\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PexelsService {\n apiBaseUrl;\n apiKey;\n lang: string;\n languages = {'fr': 'fr-FR', 'en': 'en-US', 'it': 'it-IT', 'es': 'es-ES'};\n\n constructor(\n private http: HttpClient,\n private externalConfigService: ImgManagerConfigService,\n private translateService: TranslateService\n ) {\n this.setLang(this.translateService.currentLang);\n this.translateService.onLangChange.subscribe(langData => {\n this.setLang(langData.lang);\n })\n }\n\n setLang(lang: string) {\n this.lang = this.languages[lang] ? this.languages[lang] : 'fr-FR';\n }\n\n searchOnPexels(toSearch: string, perPage: number, page: number): Observable<WzImgLibDto> {\n if(!this.apiBaseUrl || this.apiKey) {\n this.apiBaseUrl = this.externalConfigService.getPexelsApiURL();\n this.apiKey = this.externalConfigService.getPexelsApiToken();\n }\n\n const httpOptions = {\n headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.apiKey\n })\n };\n\n let request;\n\n // If search value is not empty or blank\n if (toSearch && !/^\\s*$/.test(toSearch)) {\n request = `/search?query=${toSearch}&per_page=${perPage}&page=${page}&locale=${this.lang}`;\n\n } else { // Search by category or display Pexels selection\n const shopCategory = this.externalConfigService.getShopCategory();\n\n // Search by shop category\n if (shopCategory && shopCategory !== 'other' && shopCategory !== 'btob') {\n request = `/search?query=${shopCategory}&per_page=${perPage}&page=${page}&locale=en-US`;\n } else { // Display Pexels selection\n request = `/curated?per_page=${perPage}&page=${page}`;\n }\n }\n\n return this.http.get(this.apiBaseUrl + request, httpOptions).pipe(\n map((data: WzImgLibDto) => {\n return data;\n })\n );\n }\n}\n","import { stagger } from '@angular/animations';\nimport { query } from '@angular/animations';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport const listAnnimation = // the fade-in/fade-out animation.\ntrigger('listAnimation', [\n transition(':enter, * => 0, * => -1', []),\n transition(':increment', [\n query(':enter', [\n style({opacity: 0, transform: 'translateY(100px)'}),\n stagger(50, [\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)', style({ opacity: 1, transform: 'none' })),\n ]),\n ], { optional: true })\n ]),\n]);\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild, Input, Output, EventEmitter} from '@angular/core';\nimport {PexelsService} from '../../services/pexels.service';\nimport {Subject, Subscription} from 'rxjs';\nimport {WzImgLibDto, PhotosColumns, WzImgLibPhotoDto} from '../../dto/pexels-img.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { listAnnimation } from '../../animations/listAnnimation/list.animation';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'pexels-lib',\n templateUrl: './pexels-lib.component.html',\n animations: [\n easeInOut,\n listAnnimation\n ]\n})\nexport class PexelLibComponent implements OnInit, AfterViewInit {\n\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n searchValue: string = '';\n /** Pass to true to hide search input */\n @Input()\n disableSearch: boolean = false;\n\n @Output()\n showImgUploaded = new EventEmitter();\n\n perPage = 30;\n searchUpdated = new Subject();\n oldSearchValue: string;\n nbResult = 0;\n wzImgLibDto: WzImgLibDto;\n currentPage = 1;\n isLoading = true;\n initComponent = true;\n photosColumns: PhotosColumns[] = [];\n nbColumuns = 6;\n responsiveColumns = [1250, 1050, 750, 500];\n outerElement = null;\n\n uploadingImg = 'ImgManager.PexelLib.uploadingImg';\n untitled = 'ImgManager.PexelLib.untitled';\n successUploadPhoto = 'ImgManager.PexelLib.successImport';\n errorUploadPhoto = 'ImgManager.PexelLib.errorUploadPhoto';\n errorRetrievePhotos = 'ImgManager.PexelLib.errorRetrievePhotos';\n\n private subs: Subscription[] = [];\n\n @ViewChild('outerElement') set content(control: ElementRef) {\n this.outerElement = control;\n }\n\n constructor(\n private wzImgLibService: PexelsService,\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n this.oldSearchValue = this.searchValue;\n this.isLoading = false;\n\n this.setNbColumnsToDisplayPhoto();\n this.setPhotosColumns();\n this.search();\n }\n\n setNbColumnsToDisplayPhoto(): void {\n const width = this.outerElement.nativeElement.offsetWidth;\n\n if (this.stateDisplayed !== 'window') {\n this.nbColumuns = 8;\n }\n\n this.responsiveColumns.forEach(value => {\n if (width < value) {\n this.nbColumuns--;\n }\n });\n }\n\n onSearchNameChanged() {\n this.onSearchChange();\n }\n\n onBottomReached() {\n this.scrollHandler();\n }\n\n onSearchChange() {\n this.search();\n }\n\n search() {\n if (this.isLoading) {\n return;\n }\n if (this.searchValue !== this.oldSearchValue) {\n this.resetSearch();\n }\n\n // All the picture are displayed\n if (this.nbResult && this.nbResult <= (this.currentPage - 1) * this.perPage) {\n return;\n }\n\n this.isLoading = true;\n const searchSub = this.wzImgLibService.searchOnPexels(this.searchValue, this.perPage, this.currentPage).subscribe(\n (data: WzImgLibDto) => {\n this.wzImgLibDto = data;\n this.nbResult = this.wzImgLibDto.total_results;\n\n if (this.nbResult) {\n data.photos.forEach(photo => {\n const bestColumnIndex = this.getBestColumn();\n const height = (photo.height / photo.width) * 1000;\n\n this.photosColumns[bestColumnIndex].height += height;\n this.photosColumns[bestColumnIndex].photos.push(photo);\n });\n }\n\n this.isLoading = false;\n this.initComponent = false;\n },\n error => {\n this.isLoading = false;\n this.initComponent = false;\n this.alertService.openAlert(this.errorRetrievePhotos);\n }\n );\n\n this.subs.push(searchSub);\n }\n\n scrollHandler() {\n if (this.isLoading) {\n return;\n }\n const bestColumnIndex = this.getBestColumn();\n const lastPic = this.photosColumns[bestColumnIndex].photos[this.photosColumns[bestColumnIndex].photos.length - 1];\n const lastPhoto = lastPic ? document.querySelector<HTMLImageElement>('img[src=\"' + lastPic.src.medium + '\"]') : null;\n\n if (lastPhoto) {\n if (!this.isLoading) {\n this.currentPage += 1;\n this.search();\n }\n }\n }\n\n setPhotosColumns() {\n for (let indexColumn=0; indexColumn < this.nbColumuns ; indexColumn++) {\n const photosColumn: PhotosColumns = {\n height: 0,\n photos: []\n };\n this.photosColumns.push(photosColumn);\n }\n }\n\n getBestColumn(): number {\n const bestColumn = {\n index: 0,\n height: this.photosColumns[0].height\n };\n this.photosColumns.forEach((photosColumn, index) => {\n if (bestColumn.height > photosColumn.height) {\n bestColumn.index = index;\n bestColumn.height = photosColumn.height;\n }\n });\n return bestColumn.index;\n }\n\n resetSearch() {\n this.oldSearchValue = this.searchValue;\n this.photosColumns = [];\n this.currentPage = 1;\n this.setPhotosColumns();\n }\n\n uploadPhoto(photo: WzImgLibPhotoDto, url: string) {\n photo.uploading = true;\n\n const uploadSub = this.imgManager.uploadFileByUrl(url, this.translateService.instant(this.untitled)).subscribe(\n (img: ImgPictureDTO) => {\n photo.uploading = false;\n photo.uploaded = true;\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n photo.uploading = false;\n if(error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadPhoto, error.error.message);\n } else {\n this.alertService.openAlert(this.errorUploadPhoto);\n }\n });\n\n // Display img uploading msg\n this.alertService.openAlert(this.uploadingImg);\n this.subs.push(uploadSub);\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Directive, Input, Output } from \"@angular/core\";\nimport { EventEmitter } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subscription } from \"rxjs\";\nimport { stateDisplayed } from \"../../dto/export-dtos.api\";\nimport { PictureNameUpdate } from \"../../dto/picture-name-update.dto\";\nimport { ImgPictureDTO } from \"../../dto/img-manager.dto\";\nimport { AlertService } from \"../../services/alert.service\";\nimport { ImgManagerConfigService } from \"../../services/config/external-config.service\";\nimport { ImgCDNService } from \"../../services/config/img-cdn.service\";\nimport { ImgEventService } from \"../../services/img-event.service\";\nimport { ImgManagerService } from \"../../services/img-manager.service\";\nimport { ImgSelectionService } from \"../../services/img-selection.service\";\nimport { TableFilters } from \"../../services/table/filters-table.service\";\n\n@Directive()\nexport abstract class ImagesActionHandler {\n @Input()\n picturesList: ImgPictureDTO[] = [];\n @Output()\n picturesListChange: EventEmitter<void> = new EventEmitter();\n\n @Input()\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 30,\n currentPage: 1\n };\n @Input()\n displayPexelsResults: boolean = false;\n\n @Input()\n disable: boolean = false;\n @Output()\n disableChange: EventEmitter<boolean> = new EventEmitter();\n\n @Output()\n filtersChange = new EventEmitter();\n @Output()\n pictureNameChange: EventEmitter<PictureNameUpdate> = new EventEmitter();\n\n @Input() isLoading = false;\n\n @Input()\n stateDisplayed: stateDisplayed;\n\n previousName: string; // Use to save the previous picture name, when a user change his name\n fakeImgRoute: string;\n\n private getDataAPISub: Subscription;\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n private errorAlreadyUsedImg = 'ImgManager.ImgList.errorAlreadyUsed';\n\n constructor(\n protected imgManager: ImgManagerService,\n protected imgSelectionService: ImgSelectionService,\n protected http: HttpClient,\n protected imgCDNService: ImgCDNService,\n protected imgEventCardService: ImgEventService,\n protected alertService: AlertService,\n protected translateService: TranslateService,\n protected externalService: ImgManagerConfigService\n ) {\n this.fakeImgRoute = this.externalService.getRouteAssets() + 'img/fake.png';\n }\n\n /** Event emit when the header checkbox is checked */\n onToggleAllCheckBoxRow(event) {\n this.picturesList.forEach(data => {\n data.delSelected = event;\n });\n this._pictureListeChange();\n }\n\n onToggleDelSelection(index: number) {\n if (this.disable) {\n return;\n }\n this.picturesList[index].delSelected = !this.picturesList[index].delSelected;\n this._pictureListeChange();\n }\n\n /** Event emit each time filters change */\n onFiltersChange() {\n this.filtersChange.emit();\n }\n\n onEdit(picture: ImgPictureDTO) {\n this.imgEventCardService.emitImgToEdit(picture);\n }\n\n onToggleSelectImg(index: number) {\n if (this.disable || this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRemoveImg(picture: ImgPictureDTO) {\n picture.deleted = true;\n this.imgManager.removeImg(picture.id_file).subscribe(\n data => {\n this.imgEventCardService.emitImgRemoved(picture.id_file);\n this.imgSelectionService.removeImgSelectedById(picture.id_file);\n },\n error => {\n const msg = error.status === 409 ? this.errorAlreadyUsedImg: this.errorRemoveImg;\n picture.deleted = false;\n this.alertService.openAlert(msg);\n });\n }\n\n onPictureNotLoading(event) {\n event.target.src = this.fakeImgRoute;\n }\n\n onDownloadImg(display_name: string, file_name: string) {\n this.http.get(this.getRAWImgRoute(file_name), { responseType: 'blob' }).subscribe(val => {\n let url = URL.createObjectURL(val);\n this.downloadUrl(url, display_name);\n URL.revokeObjectURL(url);\n });\n }\n\n onNameChange(id_file: string) {\n this.pictureNameChange.emit({id: id_file, previousName: this.previousName});\n }\n\n private getRAWImgRoute(file_name: string){\n return this.imgCDNService.getUrlImg('raw') + file_name;\n }\n\n private _pictureListeChange() {\n this.picturesListChange.emit();\n }\n\n private downloadUrl(url: string, fileName: string) {\n const a: any = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n }\n\n ngDestroy() {\n if (this.getDataAPISub) {\n this.getDataAPISub.unsubscribe();\n }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgEventService } from '../../../../services/img-event.service';\nimport { ImgPictureDTO } from '../../../../dto/img-manager.dto';\nimport { HttpClient } from '@angular/common/http';\nimport { ImgManagerService } from '../../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../../services/img-selection.service';\nimport { ImgCDNService } from '../../../../services/config/img-cdn.service';\nimport { ImgManagerConfigService } from '../../../../services/config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ImagesActionHandler } from '../../images-actions-handler';\nimport { easeInOut } from '../../../../animations/easeInOut/ease-in-out.animation'\nimport { tabDisplayed } from '../../../../dto/export-dtos.api';\nimport { AlertService } from '../../../../services/alert.service';\n\n@Component({\n selector: 'img-card',\n templateUrl: './img-card.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgCardComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n picture: ImgPictureDTO;\n @Input()\n index: number;\n focusInput = false;\n\n @Output()\n toggleImgSelected: EventEmitter<void> = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n isUploadSection: boolean = false;\n activeConfirmDelete = false;\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n this.isUploadSection = this.tabDisplayed === 'img-upload';\n }\n\n displayLargeWindow(): void {\n this.switchDisplayWindow.emit(true);\n }\n\n onToggleImgSelected() {\n this.toggleImgSelected.next();\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\n\n@Component({\n selector: 'img-editor',\n templateUrl: './img-editor.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgEditorComponent implements OnInit {\n\n @Input()\n stateDisplayed;\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Output() editClosed = new EventEmitter();\n\n isLoading: boolean = false;\n isImgModified: boolean = false;\n isNameModified: boolean = false;\n currentCroppedImage: string = ''; // Img modified return in base64 by the cropper\n private previousName: string;\n\n msgFailSave: string = 'ImgManager.ImgEditor.msgFailSave';\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n msgSuccessEdit: string = \"Les modifications de l'image ont bien été enregistrées.\"\n\n constructor(\n private imgManagerService: ImgManagerService,\n ) { }\n\n ngOnInit(): void {\n this.previousName = this.imgToEdit.display_name;\n }\n\n onSave() {\n if (this.isLoading) {\n return;\n }\n this.isLoading = true;\n\n if (!this.isImgModified && !this.isNameModified) {\n this.isLoading = false;\n this.onEditClosed();\n }\n\n const obsReplaceImg: Observable<any> = this.imgManagerService.replaceImg(this.currentCroppedImage, this.imgToEdit.id_file);\n const obsChangeImgName: Observable<any> = this.imgManagerService.changeImgName(this.imgToEdit.display_name, this.imgToEdit.id_file);\n\n if(this.isImgModified && this.isNameModified) {\n this.ranameAndReplaceImg(obsChangeImgName, obsReplaceImg);\n return;\n }\n\n if(this.isImgModified){\n obsReplaceImg.subscribe(data => {\n this.isLoading = false;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.currentCroppedImage = '';\n this.onEditClosed(this.msgFailSave);\n });\n return;\n }\n\n if (this.isNameModified) {\n obsChangeImgName.subscribe(data => {\n this.isLoading = false;\n this.previousName = this.imgToEdit.display_name;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.imgToEdit.display_name = this.previousName;\n this.onEditClosed(this.msgFailSave);\n });\n }\n this.isNameModified = false;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestartEdit() {\n this.isImgModified = false;\n this.isNameModified = false;\n this.imgToEdit.display_name = this.previousName;\n }\n\n onCancel() {\n this.onEditClosed('');\n }\n\n onImgCropped(imgBase64: string) {\n this.currentCroppedImage = imgBase64;\n }\n\n private ranameAndReplaceImg(obsChangeImgName: Observable<any>, obsReplaceImg: Observable<any>) {\n // Avoid to use forkjoin, because it can create conflict and loos the img\n obsChangeImgName.subscribe(\n res1 => {\n obsReplaceImg.subscribe(\n res2 => {\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n }\n}\n","import {Component, OnInit, Output, EventEmitter, Input, OnDestroy, Inject, Renderer2} from '@angular/core';\nimport { CanvaService } from '../../services/canva.service';\nimport { CanvaButtonApi } from '../../dto/canva.dto';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { WiziBlockMediaDto } from '../../dto/wizi-block-media.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { AlertService } from '../../services/alert.service';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { CanvaCreateDesign } from '../../dto/canva-create-design.dto';\n\n@Component({\n selector: 'canva-btn',\n templateUrl: './canva-btn.component.html'\n})\nexport class CanvaBtnComponent implements OnInit, OnDestroy {\n\n @Input() stateDisplayed: stateDisplayed;\n\n @Output() showImgUploaded = new EventEmitter();\n\n canvaApi: CanvaButtonApi;\n canvaLogoRouteAssets: string;\n imgLoading = false;\n\n availableFormat = {\n 'ImgManager.CanvaBtn.smallSquare' : {\n 'width' : 500,\n 'height' : 500\n },\n 'ImgManager.CanvaBtn.mediumSquare' : {\n 'width' : 1000,\n 'height' : 1000\n },\n 'ImgManager.CanvaBtn.bigSquare' : {\n 'width' : 2500,\n 'height' : 2500\n }\n }\n\n openDropDownMenu: boolean = false;\n\n expectedHeight: number;\n expectedWidth: number;\n subs: Subscription[] = [];\n\n uploadingImg = 'ImgManager.CanvaBtn.uploadingImg';\n successUploadPhoto = 'ImgManager.CanvaBtn.successImport';\n errorUploadCanvaImg = 'ImgManager.CanvaBtn.errorUploadCanvaImg';\n errorRenameCanvaImg = 'ImgManager.CanvaBtn.errorRenameCanvaImg';\n\n constructor(\n private canvaService: CanvaService,\n private imgManager: ImgManagerService,\n private wzImgEventService: ImgEventService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n this.canvaLogoRouteAssets = this.canvaService.getCanvaLogo();\n this.listenCanvaExpectedSize();\n }\n\n listenCanvaExpectedSize() {\n // Subcribe to askImg from wizi-block\n const subExpectedImgSizesChange =\n this.canvaService.bindEventExepectedImgSizeChange().subscribe( (mediaDTO: WiziBlockMediaDto) => {\n if (mediaDTO) {\n this.expectedWidth = parseInt(mediaDTO.image_width, 10);\n this.expectedHeight = parseInt(mediaDTO.image_height, 10);\n } else {\n this.expectedWidth = undefined;\n this.expectedHeight = undefined;\n }\n });\n this.subs.push(subExpectedImgSizesChange);\n }\n\n onOpenCanva(width: number, height: number) {\n if (this.imgLoading) {\n return;\n }\n const subCanvaApi =\n this.canvaService.getCanvaApi().subscribe((api: CanvaButtonApi) => {\n this.canvaApi = api;\n this.addOverflowBody();\n this.createDesign(width, height);\n });\n this.subs.push(subCanvaApi);\n }\n\n private createDesign(width: number, height: number) {\n const createDesign: CanvaCreateDesign = {\n type: 'EtsyShopIcon',\n dimensions : {\n units: 'px',\n width: width ? width : undefined,\n height: height ? height : undefined,\n },\n publishLabel: this.translateService.instant('ImgManager.CanvaBtn.publish'),\n };\n this.canvaApi.createDesign({\n design: createDesign,\n onDesignPublish: ({ exportUrl, designTitle }) => this.designPublished(exportUrl, designTitle),\n onDesignClose: () => {\n this.removeOverflowBody();\n }\n\n });\n }\n\n private designPublished(exportUrl: string, designTitle: string) {\n this.alertService.openAlert(this.uploadingImg);\n this.imgLoading = true;\n\n const subUploadImg =\n this.imgManager.uploadFileByUrl(exportUrl, designTitle).subscribe(\n (img: ImgPictureDTO) => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n this.wzImgEventService.emitImgAdded(img.id_file);\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n if (error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadCanvaImg, error.error.message)\n } else {\n this.alertService.openAlert(this.errorUploadCanvaImg);\n }\n }\n );\n\n this.subs.push(subUploadImg);\n\n }\n\n private addOverflowBody() {\n this.renderer.addClass(document.body, 'ovh-canva');\n }\n\n private removeOverflowBody() {\n this.renderer.removeClass(document.body, 'ovh-canva');\n }\n\n ngOnDestroy() {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { tabDisplayed } from '../../dto/export-dtos.api';\n\n\n@Component({\n selector: 'img-selection',\n templateUrl: './img-selection.component.html'\n})\nexport class ImgSelectionComponent implements OnInit {\n\n @Input() tabDisplayed: tabDisplayed;\n @Output() imgManagerClosed = new EventEmitter();\n\n imgSelectedList: ImgPictureDTO[] = [];\n removingAll: boolean = false;\n cancellingAll: boolean = false;\n importingAll: boolean = false;\n dragStart = false;\n isLoading: boolean = false;\n trashPositionIndex = 0;\n trashPositionLeft = '-5px';\n\n constructor(\n private imgSelectionService: ImgSelectionService\n ) { }\n\n ngOnInit(): void {\n this.getImgSelected();\n this.imgSelectionService.getImgListLoadingEventListner().subscribe(loading => {\n this.isLoading = loading;\n })\n }\n\n init() {\n this.removingAll = false;\n this.cancellingAll = false;\n this.importingAll = false;\n }\n\n getImgSelected() {\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n removeImg(index: number) {\n this.imgSelectionService.removeImgSelectedByIndex(index);\n }\n\n drop(event: CdkDragDrop<string[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.imgSelectionService.moveImgOrder(event);\n }\n }\n\n removeImgFromSelection(event: CdkDragDrop<string[]>) {\n this.imgSelectionService.removeImgSelectedByIndex(event.previousIndex);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[btnLoadingAnim]'\n})\nexport class LoadingDirective {\n\n element: ElementRef;\n currentLoading = 0;\n interval = null;\n\n constructor(el: ElementRef) {\n this.element = el;\n this.launchLoading();\n }\n\n launchLoading() {\n if (this.interval !== null) {\n return;\n }\n this.currentLoading = 10;\n\n this.element.nativeElement.style.width = this.currentLoading + '%';\n\n this.interval = setInterval(() => {\n if (this.currentLoading < 80) {\n this.currentLoading += Math.floor(Math.random() * 15);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n if (this.currentLoading >= 80 && this.currentLoading < 95) {\n this.currentLoading += Math.floor(Math.random() * 2);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n }, 70);\n }\n\n ngOnDestroy() {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n }\n}\n","import { Directive, ElementRef, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { DomService } from '../services/dom.service';\n\n@Directive({\n selector: '[wzAutoHide]'\n})\nexport class AutoHideDirective implements AfterViewInit {\n @Input() triggerElement: string;\n @Input() forceOn: Array<string> = null;\n\n constructor(private _elementRef: ElementRef, private domService: DomService) {}\n\n @Output('clickOutside') clickOutside: EventEmitter<any> = new EventEmitter();\n\n ngAfterViewInit(): void {\n this.domService.documentEvent().subscribe((targetElement: Element) => {\n const clickedInside = this._elementRef.nativeElement.contains(targetElement);\n const classNameFromElement = targetElement.getAttribute('class');\n\n if (!clickedInside && (classNameFromElement === null || !classNameFromElement.includes(this.triggerElement))) {\n this.clickOutside.emit(null);\n }\n\n if (this.forceOn != null && classNameFromElement !== null) {\n let needToClose = true;\n this.forceOn.forEach(v => {\n if (!classNameFromElement.includes(v)) {\n needToClose = false;\n }\n });\n if (needToClose) {\n this.clickOutside.emit(null);\n }\n }\n });\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostListener } from \"@angular/core\";\n\n@Directive({ selector: '[copy-clipboard]' })\nexport class CopyClipboardDirective {\n\n @Input(\"copy-clipboard\")\n public payload: string;\n\n @Output(\"copied\")\n public copied: EventEmitter<string> = new EventEmitter<string>();\n\n @HostListener(\"click\", [\"$event\"])\n public onClick(event: MouseEvent): void {\n\n event.preventDefault();\n if (!this.payload)\n return;\n\n let listener = (e: ClipboardEvent) => {\n let clipboard = e.clipboardData || window[\"clipboardData\"];\n clipboard.setData(\"text\", this.payload.toString());\n e.preventDefault();\n\n this.copied.emit(this.payload);\n };\n\n document.addEventListener(\"copy\", listener, false)\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener, false);\n }\n}","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'dropdown',\n templateUrl: './dropdown.component.html'\n})\nexport class DropdownComponent implements OnInit {\n\n @Input()\n dropDownMenuClass: string;\n @Input()\n disable: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { EventEmitter } from '@angular/core';\nimport { Output } from '@angular/core';\nimport { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { AlertService } from '../../../services/alert.service';\n\n@Component({\n selector: 'info-section',\n templateUrl: './info-section.component.html'\n})\nexport class EditorInfoSectionComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isNameModified(isNameModified: boolean) {\n this._isNameModified = isNameModified;\n }\n get isNameModified(): boolean {\n return this._isNameModified;\n }\n private _isNameModified: boolean = false;\n\n @Output()\n isNameModifiedChange = new EventEmitter<boolean>();\n\n imgName: string;\n imgRoute: string;\n\n msgCopyToClipBoard: string = 'ImgManager.ImgEditor.copytoClipBoard';\n\n constructor(\n private alertService: AlertService,\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgName = this.imgToEdit.display_name;\n }\n getFileSize() {\n return this.imgToEdit ? Math.round(parseInt(this.imgToEdit.size)/1000) : '-';\n }\n\n copyToClipBoard(event) {\n this.alertService.openAlert(this.msgCopyToClipBoard);\n }\n\n onNameChange() {\n this.isNameModifiedChange.emit(true);\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const insertRemove = // the fade-in/fade-out animation.\ntrigger('insertRemoveAnnim', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('0.5s ease-in-out', style({ opacity: 1 })),\n ])\n]);\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\nimport { insertRemove } from '../../../animations/insertRemove/insert-remove.animation';\nimport { CropperConfigDTO, ImgCropperConfigDTO } from '../../../dto/img-editor-config.dto';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\n\n@Component({\n selector: 'cropper',\n templateUrl: './cropper.component.html',\n animations: [\n insertRemove\n ]\n})\nexport class CropperComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isImgModified(isImgModified: boolean) {\n this._isImgModified = isImgModified;\n if (!isImgModified) {\n this.restartEdit();\n }\n }\n get isImgModified(): boolean {\n return this._isImgModified;\n }\n private _isImgModified: boolean = false;\n\n @Output()\n isImgModifiedChange = new EventEmitter<boolean>();\n\n @Output()\n editClosed = new EventEmitter();\n\n @Output()\n currentCroppedImageChange = new EventEmitter<string>();\n\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n\n\n isNameModified: boolean = false;\n isCropperReady: boolean = false; // Use to not display the crop validation btn, after the img is loaded or changed\n currentCroppedImage: string = ''; // Img modified return in base64\n isCropped: boolean = false;\n isLoading: boolean = false;\n isImgCropped: boolean = false;\n isImgCroppedInitilized: boolean = false;\n\n // Image Cropper properties\n imgType: string;\n imgRoute: string;\n imageChangedEvent: any = '';\n croppedImage: any = '';\n canvasRotation = 0;\n rotation = 0;\n scale = 1;\n showCropper = false;\n containWithinAspectRatio = false;\n transform: ImageTransform = {};\n\n defaultAspectRatio: number;\n\n // dropdown list\n resolutionConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.origin',\n config: {\n maintainAspectRatio: true\n },\n },\n {\n label: 'ImgManager.ImgEditor.config.free',\n config: {\n maintainAspectRatio: false\n },\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.square',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 1 / 1\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.Portrait',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 3 / 4\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.landscape',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 5 / 3\n }\n }\n ];\n\n rotationConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.schedule',\n icon: \"fal fa-redo-alt\",\n method: \"rotateRight\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.AntiSchedule',\n icon: \"fal fa-undo-alt\",\n method: \"rotateLeft\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipVert',\n icon: \"fal fa-sort-alt\",\n method: \"flipVertical\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipHoriz',\n icon: \"fal fa-exchange-alt\",\n method: \"flipHorizontal\"\n }\n ];\n\n zoomConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.zoom',\n icon: \"fal fa-search-plus\",\n method: \"zoomIn\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.dezoom',\n icon: \"fal fa-search-minus\",\n method: \"zoomOut\"\n }\n ];\n\n // Img cropper variables\n imgCropperConfig:CropperConfigDTO = {\n maintainAspectRatio: false,\n aspectRatio: undefined\n }\n\n constructor(\n private imgCDNService: ImgCDNService\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgRoute = this.getRAWImgRoute();\n this.imgType = this.getImgType();\n this.croppedImage = null;\n this.setDefautAspectRatio();\n }\n\n getRAWImgRoute(){\n return this.imgCDNService.getUrlImg('raw') + this.imgToEdit.file_name;\n }\n\n getImgType() {\n return this.imgToEdit.file_name ? this.imgToEdit.file_name.split('.').pop() : undefined;\n }\n\n setDefautAspectRatio() {\n const height = parseInt(this.imgToEdit.raw_height);\n const width = parseInt(this.imgToEdit.raw_width);\n this.defaultAspectRatio = height / width;\n this.resolutionConfig[0].config.aspectRatio = this.defaultAspectRatio;\n this.imgCropperConfig.aspectRatio = this.defaultAspectRatio;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestart() {\n this.isImgModifiedChange.emit(false);\n }\n\n restartEdit() {\n this.init();\n this.resetConfCropper();\n }\n\n onImgModified() {\n this.isImgModified = true;\n this.isImgModifiedChange.emit(true);\n }\n\n ////// Img cropper methods ////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /* Cropper output events */\n\n fileChangeEvent(event: any): void {\n this.imageChangedEvent = event;\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.detectImgCropperChange();\n\n this.currentCroppedImage = event.base64;\n this.currentCroppedImageChange.emit(this.currentCroppedImage);\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n cropperReady() {\n this.isCropperReady = true;\n }\n\n loadImageFailed() {\n this.onEditClosed(this.msgFailLoad);\n }\n\n /* Resize functions */\n\n changeResolutionSize(index: number) {\n this.setActiveItem(this.resolutionConfig, index);\n const config = this.resolutionConfig[index].config;\n this.setCropperProperties(config);\n }\n\n confirmCrop() {\n this.imgRoute = null;\n this.croppedImage = this.currentCroppedImage;\n this.isImgCropped = false;\n this.isImgCroppedInitilized = false;\n this.resetConfCropper();\n this.onImgModified();\n }\n\n resetConfCropper() {\n this.scale = 1;\n this.rotation = 0;\n this.canvasRotation = 0;\n this.transform = {};\n }\n\n private setActiveItem(array:any[], index: number) {\n // Set active-item class for the dropdown\n array.forEach((item, indexItem) => {\n item.active = indexItem === index ? true : false;\n });\n }\n\n private setCropperProperties(config: any) {\n for (const property in config) {\n this.imgCropperConfig[property] = config[property];\n }\n }\n\n private detectImgCropperChange() {\n this.isImgCropped = this.isImgCroppedInitilized;\n this.isImgCroppedInitilized = true;\n }\n\n /* Rotations functions */\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n this.onImgModified();\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n this.onImgModified();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n /* Zoom functions */\n\n zoomOut() {\n this.scale -= this.scale < 0.2? 0 : .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n zoomIn() {\n this.scale += .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n applyMethod(method: string) {\n this[method](); // call the method contains in zoomConfig or rotationConfig\n }\n}\n","import {Component, OnInit, Input, ViewChild, ElementRef, AfterViewInit, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO, ImgPicturesDTO, ParamsImgManagerDTO } from '../../dto/img-manager.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Subscription, Subject} from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { UserSettingsService } from '../../services/user-settings.service';\nimport { TableFilters } from '../../services/table/filters-table.service';\nimport { PictureNameUpdate } from '../../dto/picture-name-update.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { insertRemove } from '../../animations/insertRemove/insert-remove.animation';\nimport { stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'images-view',\n templateUrl: './images-view.component.html',\n animations: [\n easeInOut,\n insertRemove\n ]\n})\nexport class ImagesViewComponent implements OnInit, AfterViewInit {\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() fullSize: boolean;\n @Input() maxLengthCardShow: number;\n @Input() nbRowToShow: number;\n @Input() listDisplayed = false; // Display format list or mosaic\n @Input() multipleImgMode = false;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n // Data filters\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 1\n };\n\n @ViewChild('imgLibContainer') imgLibContainer : ElementRef;\n widthLargeCard: number = 219; // Default value of a card width 199 + margin 20\n widthSmallCard: number = 160; // Default value of a card width 140 + margin 20\n nbMinImgPerLine: number;\n nbMaxImgPerLine: number;\n nbFakeImg: number = 0;\n\n imgFullWidthConfig:any = [\n {\n max: 419,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 499,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 719, // tablet\n largeImgWidthFactor : 0.5,\n smallImgWidthFactor : 0.3333\n },\n {\n max: 1023, // deskop\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.2,\n smallImgWidthFactor : 0.1111\n },\n {\n largeImgWidthFactor : 0.1666,\n smallImgWidthFactor : 0.1\n }\n ];\n\n imgWidthConfig:any = [\n {\n max: 1024,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1199,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1299,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.14\n },\n {\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n }\n ];\n\n imgSubscribe: Subscription;\n imgRemovedEvent: Subscription;\n imgAddedEvent: Subscription;\n imgSelectionChange: Subscription;\n searchQueryChanged: Subject<string> = new Subject<string>();\n filtersChanged: Subject<void> = new Subject<void>();\n\n picturesList: ImgPictureDTO[] = [];\n savePictureList: ImgPictureDTO[] = [];\n imgSelectedList: ImgPictureDTO[];\n searchedValue: string; // Value from the search bar or img added by canva\n nbImgToDelSelected: number = 0;\n disable: boolean = false; // Use to disable action during server request\n isLoading: boolean = true;\n isTotalRetieved: boolean = false;\n delListImgLoader = false;\n initComponent: boolean = true;\n failLoaded: boolean = false;\n displayPexelsResults: boolean = false; // Use when no img find by name, display img from Pexels\n searchText: string;\n confirmImgSup:boolean = false;\n previousSearchValue: string;\n\n // Paginator Params\n pageIndex: number =0;\n length: number = 0;\n pageSize: number = 30; // Default value\n pageSizeOptions: number[] = [25, 50, 100, 250];\n\n // Api Img manager Params\n params:ParamsImgManagerDTO;\n\n private errorGetAllImg = 'ImgManager.ImgLib.errorGetAllImg';\n private errorGetTotalImg = 'ImgManager.ImgLib.errorGetTotalImg';\n private errorGetImg = 'ImgManager.ImgLib.errorGetCanvaImg';\n private msgNoImgFound = 'ImgManager.ImgLib.noImgFound';\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private imgEventService: ImgEventService,\n private imgSelectionService: ImgSelectionService,\n private alertService: AlertService,\n private userSettingsService: UserSettingsService,\n private renamePictureService: RenamePictureService) { }\n\n ngOnInit(): void {\n /* if (this.maxLengthCardShow) {\n this.reducePictureListMaxLength();\n } */\n this.setEvents();\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n ngAfterViewInit() {\n this.setNbImgToDisplay();\n this._getImgList();\n if (!this.savePictureList) {\n this.savePictureList = this.picturesList;\n }\n }\n\n /* reducePictureListMaxLength() {\n this.picturesList.splice(0, this.maxLengthCardShow);\n } */\n\n getImgList() {\n this.filtersChanged.next();\n }\n\n /**\n * true : go to list display\n * false : go to mosaic display\n * @param activate\n */\n onSwitchFormatDisplayed(activate: boolean) {\n this.listDisplayed = activate;\n this.userSettingsService.setUserDisplayPreference(activate);\n this.imgEventService.emitlistDisplayedChange(activate);\n }\n\n /**\n * Calcul the number of img selected for masse deletion\n */\n onImgSelected() {\n this.setNbImgToDelSelected();\n }\n\n onShowImgUploaded() {\n this.searchText = null;\n this.searchedValue = null;\n this.getImgList();\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n console.log('onRenamePicture pictureRenamed', pictureRenamed);\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n removeListImg() {\n if (this.disable) {\n return;\n }\n this.disable = true;\n this.delListImgLoader = true;\n this.confirmImgSup = false;\n\n // Get the id of the img to remove\n // And add deleted property\n const idImgToRemove: string[] = [];\n this.picturesList.forEach( img => {\n if (img.delSelected) {\n img.deleted = true;\n idImgToRemove.push(img.id_file);\n }\n });\n\n this.imgManager.removeMultipleImg(idImgToRemove).subscribe(\n () => {\n this.getImgList();\n this.imgSelectionService.removeImgSelectionByIds(idImgToRemove);\n },\n error => {\n this.getImgList();\n this.alertService.openAlert(this.errorRemoveImg);\n }\n );\n\n\n }\n\n selectImgChosen() {\n if (this.disable) {\n return;\n }\n const picturesListSelected: ImgPictureDTO[] = [];\n this.picturesList.map(img => {\n if(img.delSelected) {\n img.delSelected =false;\n img.selected = true;\n }\n if (img.selected) {\n picturesListSelected.push(img);\n }\n });\n this.setNbImgToDelSelected();\n this.imgSelectionService.setImgSelection(picturesListSelected);\n }\n\n displayConfirmImgSup(){\n if (this.disable) {\n return;\n }\n this.confirmImgSup = true;\n }\n\n cancelSup() {\n this.confirmImgSup = false;\n }\n\n /**\n * Event emit when a img selected in order to delete\n */\n onPicturesListChange() {\n this.setNbImgToDelSelected();\n }\n\n onFiltersChange() {\n this.getImgList();\n }\n\n /**\n * Set default number of img per page to display at the initialisation\n * This number is between 30 and 50\n */\n private setNbImgToDisplay() {\n const containerWidth = this.imgLibContainer.nativeElement.offsetWidth + 30; // + 30px -> left + right margin\n const scrollWidth = window.innerWidth - document.body.offsetWidth;\n\n const [maxImgWidthFactor, minImgWidthFactor] = this.getImgWidthFactors();\n\n const minImgWidth = Math.floor(containerWidth * minImgWidthFactor);\n const maxImgWidth = Math.ceil((containerWidth + scrollWidth ) * maxImgWidthFactor);\n\n this.nbMaxImgPerLine = Math.floor(containerWidth / minImgWidth);\n this.nbMinImgPerLine = Math.floor( (containerWidth + scrollWidth ) / maxImgWidth);\n\n this.pageSize = this.getTotalImgPerPage();\n }\n\n private getImgWidthFactors(): number[] {\n const screenWidth = window.innerWidth;\n let minWidth:number = 0;\n let imgSizesConfig: number[] = [];\n\n const currentImgWidthConfig = this.fullSize ? this.imgFullWidthConfig : this.imgWidthConfig;\n\n for (const widthConfig of currentImgWidthConfig) {\n if (!widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n if (minWidth < screenWidth && screenWidth <= widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n minWidth = widthConfig.max;\n }\n return imgSizesConfig;\n }\n\n private getTotalImgPerPage(): number {\n if (this.nbRowToShow) {\n const nbImgPerLine = this.stateDisplayed === 'full' ? this.nbMinImgPerLine : this.nbMaxImgPerLine;\n return nbImgPerLine * this.nbRowToShow;\n }\n\n let total = this.nbMinImgPerLine;\n\n while (total < 30 || total % this.nbMaxImgPerLine !== 0 || total % this.nbMinImgPerLine !== 0) {\n total += this.nbMinImgPerLine;\n }\n return total;\n }\n\n private setParams() {\n this.params = {\n limit: this.maxLengthCardShow?.toString() || (this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage.toString() : this.pageSize.toString()),\n page: this.tableFilters.currentPage.toString()\n };\n if (this.tableFilters.searchValue) {\n this.params[\"display_name:contains\"] = this.tableFilters.searchValue.toString();\n }\n }\n\n private initVariables(loadingSuccess: boolean) {\n this.nbImgToDelSelected = 0;\n this.disable = false;\n this.isLoading = false;\n this.delListImgLoader = false;\n this.initComponent = false;\n this.displayPexelsResults = false;\n this.failLoaded = !loadingSuccess;\n this.nbFakeImg = 0;\n }\n\n private selectImgSelected () {\n if (!this.imgSelectedList || !this.imgSelectedList.length) {\n return;\n }\n\n const idImgSlectedList: string[] = [];\n\n this.imgSelectedList.forEach(img =>\n idImgSlectedList.push(img.id_file)\n );\n\n this.picturesList.forEach(picture => {\n if (idImgSlectedList.indexOf(picture.id_file) !== -1) {\n picture.selected = true;\n }\n });\n }\n\n private displayPexelsLib () {\n this.displayPexelsResults = true;\n this.alertService.openAlert(this.msgNoImgFound);\n }\n\n /**\n * Set a img list in order to fill properly all the line of images displayed in mosaic.\n * Otherwise, the space-between css will do a bad display\n */\n private calculNbImgFake(nbImgDisplayed: number) {\n const nbImgPerLine = this.stateDisplayed === 'small' || this.tabDisplayed === 'img-upload' ? this.nbMaxImgPerLine : this.nbMinImgPerLine;\n\n if (nbImgDisplayed % nbImgPerLine !== 0) {\n this.nbFakeImg = nbImgPerLine - nbImgDisplayed % nbImgPerLine;\n }\n }\n\n private getImg (id_file: string) {\n this.imgManager.getShopImg(id_file).pipe(take(1)).subscribe(\n (picture: ImgPictureDTO) => {\n\n if (!this.imgAlreadyExist(picture.id_file)) {\n // check the img is not already present\n this.picturesList.unshift(picture);\n this.length += 1;\n }\n },\n error => {\n this.alertService.openAlert(this.errorGetImg);\n }\n );\n }\n\n private imgAlreadyExist (id_file: string): boolean {\n for (const img of this.picturesList) {\n if (img.id_file === id_file) {\n return true;\n }\n }\n return false;\n }\n\n private setNbImgToDelSelected () {\n this.nbImgToDelSelected = this.picturesList.filter(img =>\n img.delSelected).length;\n\n if (!this.nbImgToDelSelected) {\n this.confirmImgSup = false;\n }\n }\n\n private setEvents() {\n // Add a timer to retrieve img when the search bar or the paginator are used\n this.searchQueryChanged\n .pipe(debounceTime(400)) // wait 0.5 sec after the last event before emitting last event\n .subscribe(data => {\n this.getImgList();\n });\n\n this.filtersChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe(data => {\n this._getImgList();\n });\n\n // Reload img when img is/are removed\n this.imgRemovedEvent = this.imgEventService.getImgRemovedEventListner().subscribe(id_file =>{\n this.getImgList();\n });\n\n // Create img from Canva\n this.imgAddedEvent = this.imgEventService.getImgAddedEventListner().subscribe(id_file =>{\n if (id_file && !this.imgAlreadyExist(id_file)) {\n this.getImg(id_file);\n }\n });\n\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n if (this.listDisplayed) {\n return;\n }\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n\n private _getImgList() {\n this.isLoading = true;\n this.displayPexelsResults = false;\n this.setParams();\n\n this.refreshTotalImgList();\n\n this.imgManager.getShopImgList(this.params).pipe(take(1)).subscribe((data: ImgPicturesDTO) => {\n this.initVariables(true);\n const nbImgDisplayed = data.data.length;\n this.calculNbImgFake(nbImgDisplayed);\n this.picturesList = data.data;\n this.renamePictureService.setPicturesList(this.picturesList);\n this.selectImgSelected();\n\n this.length = this.isTotalRetieved ? this.length : data.totalRecords;\n this.tableFilters.totalItems = this.isTotalRetieved ? this.tableFilters.totalItems : data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\n\n // Display Pexels if no result\n if (data.totalRecords === 0) {\n this.displayPexelsLib();\n }\n\n },\n error => {\n this.alertService.openAlert(this.errorGetAllImg);\n this.initVariables(false);\n });\n }\n\n private refreshTotalImgList() {\n const searchValue = this.tableFilters.searchValue;\n\n if (this.isTotalRetieved && searchValue === this.previousSearchValue) {\n // Keep current total result\n return;\n }\n\n this.isTotalRetieved = false;\n\n this.imgManager.getShopTotalImgList(this.params).pipe(take(1)).subscribe(\n\n (data: ImgPicturesDTO) => {\n this.previousSearchValue = searchValue;\n this.isTotalRetieved = true;\n this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n },\n\n error => {\n //this.alertService.openAlert(this.errorGetTotalImg);\n this.initVariables(false);\n });\n }\n\n switchDisplayWindowMosaic() {\n this.switchDisplayWindow.emit(true);\n }\n\n ngOnDestroy(): void {\n this.searchQueryChanged.unsubscribe();\n this.imgRemovedEvent.unsubscribe();\n this.imgAddedEvent.unsubscribe();\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { PictureNameUpdate, tabDisplayed } from '../../../dto/export-dtos.api';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'mosaic-view',\n templateUrl: './mosaic-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class MosaicViewComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n nbFakeImg: number = 0;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n }\n\n onSearchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.filtersChange.emit(this.tableFilters);\n }\n\n onCardRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChange.next(pictureRenamed);\n }\n\n switchDisplayWindowCard() {\n this.switchDisplayWindow.emit(true);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'table-view',\n templateUrl: './table-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class TableViewComponent extends ImagesActionHandler implements OnInit {\n dataTableName: string = 'imgagesView'; // Name of your table\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NwbFilterGroup, NwbFilterRoutingBuilder } from '@wizishop/ng-wizi-bulma';\nimport { Subject } from 'rxjs';\nimport { PaginationFilters } from '../../components/shared/pagination/pagination.component';\n\nexport interface TableFilters extends PaginationFilters {\n sort: string;\n order: boolean;\n searchValue: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FiltersTableService {\n filterGroups = new Map<string, NwbFilterGroup>();\n dataTableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: undefined,\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 0\n };\n\n private sortSubject: Subject<any> = new Subject<any>();\n\n constructor(private filterRoutingBuilder: NwbFilterRoutingBuilder) {}\n\n getTableFilterGroup(dataTableName: string) {\n if (this.filterGroups.has(dataTableName)) {\n return this.filterGroups.get(dataTableName);\n }\n const filterGroup: NwbFilterGroup = this.filterRoutingBuilder.group(this.dataTableFilters, dataTableName);\n this.filterGroups.set(dataTableName, filterGroup);\n return filterGroup;\n }\n\n /**\n * Use to reset the others sorts of the table\n * @param dataTableName\n * @param sortName\n * @param order\n */\n emitSortChange(dataTableName: string, sortName: string, order: boolean) {\n this.sortSubject.next({ dataTableName, sortName, order });\n }\n\n getSortChangeListner() {\n return this.sortSubject.asObservable();\n }\n\n setPaginationFilters(dataTableName: string, totalItems: number, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage,\n currentPage\n });\n }\n\n setInitialPaginationFiltersIfNotExist(dataTableName: string, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage: filterGroup.get('itemsPerPage') ? parseInt(filterGroup.get('itemsPerPage')) : itemsPerPage,\n currentPage: filterGroup.get('currentPage') ? parseInt(filterGroup.get('currentPage')) : currentPage\n });\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { TableFilters, FiltersTableService } from '../../../services/table/filters-table.service';\n\n@Component({\n selector: 'wz-table',\n templateUrl: './table.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class TableComponent implements OnInit {\n /// Input/Output of table filters ///\n\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n @Input() tableRoutingName: string; // Name of the table\n @Input() placeholder: string = '';\n\n private _filterGroup: NwbFilterGroup;\n\n /// Input/Output of checkbox ///\n\n /** Pass to true to display checkbox in the header table */\n @Input() checkbox = false;\n /** Emit new header checboxValue */\n @Output() toggleAllCheckBox: EventEmitter<boolean> = new EventEmitter();\n\n /// Input to disable section ///\n\n /** Pass to true to hide search input */\n @Input() disableSearch: boolean = false;\n /** Pass to true to hide the pagniator */\n @Input() disablePagniation: boolean = false;\n\n /// Input for loader on table body ///\n @Input() isLoading = false;\n\n /// Private variables ///\n headerCheckBoxId: string;\n private filterGroupChangeSub: Subscription;\n\n constructor(private filtersTableService: FiltersTableService) {}\n\n ngOnInit(): void {\n this.headerCheckBoxId = uuid(); // Create checkbox unique id\n\n /* Handle routing filters */\n if (this.tableRoutingName) {\n this._filterGroup = this.filtersTableService.getTableFilterGroup(this.tableRoutingName);\n\n // Performe initial fetch data\n this._filterGroup.valuesChange$.next([]);\n\n this.setTablesFilters();\n\n // Listen to filters changes with debounced time to limit multiple api calls\n this.filterGroupChangeSub = this._filterGroup.valuesChange$.subscribe(filters => {\n this.setTablesFilters();\n });\n }\n }\n\n onToggleAllCheckBox(event) {\n this.toggleAllCheckBox.emit(event.target.checked);\n }\n\n searchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n\n // Reset routing filters\n if (this._filterGroup) {\n this._filterGroup.setValues({\n searchValue: this.tableFilters.searchValue,\n sort: undefined,\n order: undefined,\n currentPage: 1\n });\n }\n }\n\n pageChange() {\n this.tableFiltersChange.emit(this.tableFilters);\n if (this._filterGroup) {\n this._filterGroup.setValues({\n itemsPerPage: this.tableFilters.itemsPerPage,\n currentPage: this.tableFilters.currentPage\n });\n }\n }\n\n /**\n * Set tableFilters from routing data existing in the url\n * */\n private setTablesFilters() {\n this.tableFilters = {\n sort: this._filterGroup.get('sort'),\n order: this._filterGroup.get('order'),\n searchValue: this._filterGroup.get('searchValue'),\n itemsPerPage: this._filterGroup.get('itemsPerPage') ? parseInt(this._filterGroup.get('itemsPerPage')) : 0,\n currentPage: this._filterGroup.get('currentPage') ? parseInt(this._filterGroup.get('currentPage')) : 0,\n totalItems: this.tableFilters.totalItems\n };\n this.tableFiltersChange.emit(this.tableFilters);\n }\n\n ngDestroy() {\n if (this.filterGroupChangeSub) {\n this.filterGroupChangeSub.unsubscribe();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-input-search',\n templateUrl: './input-search.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: InputSearchComponent, multi: true }]\n})\nexport class InputSearchComponent implements ControlValueAccessor {\n @Input()\n placeholder = '';\n @Input()\n smallPadding = false;\n @Input()\n id;\n private innerValue: any = '';\n @Output() changeDebounced = new EventEmitter<any>(); // debounced\n\n private onTouchedCallback: () => void = () => {};\n private onChangeCallback: (_: any) => void = () => {};\n\n get value(): any {\n return this.innerValue;\n }\n\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n this.onChangeCallback(v);\n }\n }\n\n writeValue(value: any) {\n if (value !== this.innerValue) {\n this.innerValue = value;\n }\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public handleDebouncedKeyUp(event): void {\n this.changeDebounced.emit(event.target.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'IsLastPage'\n})\nexport class PagniationIsLastPage implements PipeTransform {\n /**\n * Return true, if the current page is the last page. Otherwise, return false.\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): boolean {\n if (!(currentPage >= 0 && totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('currentPage or totalItems or itemsPerPage is/are missing in PagniationIsLastPage pipe.');\n }\n return currentPage === Math.ceil(totalItems / itemsPerPage);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PagniationIsLastPage } from '../../../pipes/pagination/total-pages/is-last-page.pipe';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-pagination',\n templateUrl: './pagination.component.html'\n})\nexport class PaginationComponent {\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Output() pageChange: EventEmitter<PaginationFilters> = new EventEmitter();\n\n constructor() {}\n\n decrementPage() {\n if (this.pagination.currentPage <= 1) {\n return;\n }\n this.pagination.currentPage--;\n this.pageChange.emit(this.pagination);\n }\n\n incrementPage() {\n const isLastPage = new PagniationIsLastPage().transform(\n this.pagination.currentPage,\n this.pagination.totalItems,\n this.pagination.itemsPerPage\n );\n if (isLastPage) {\n return;\n }\n this.pagination.currentPage++;\n this.pageChange.emit(this.pagination);\n }\n\n onGotoPageChange(pageNumber) {\n this.pagination.currentPage = parseInt(pageNumber);\n this.pageChange.emit(this.pagination);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ArrayTotalPages'\n})\nexport class PagniationArrayTotalPages implements PipeTransform {\n /**\n * Return an incremental array corresponding with the number page\n * [ 1, 2, 3 ..., last page number ]\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n const arrayLength: number = Math.ceil(totalItems / itemsPerPage);\n return Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => x + 1);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'customPagniationText'\n})\nexport class PagniationText implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Update pagination text if at least one entrie change\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): any {\n let currentItemsLow = 0,\n currentItemsHigh = 0;\n\n if (totalItems) {\n currentItemsLow = (currentPage - 1) * itemsPerPage + 1;\n currentItemsHigh = currentPage * itemsPerPage;\n }\n\n if (currentItemsHigh > totalItems) {\n currentItemsHigh = totalItems;\n }\n\n return this.translateService.instant('PaginationComponent.on', { low: currentItemsLow, high: currentItemsHigh, total: totalItems });\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-checkbox',\n templateUrl: './checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input()\n label = '';\n @Input()\n value: any;\n @Input()\n type: string;\n @Input()\n alone = false;\n @Input()\n checked = false;\n @Input()\n id = '';\n @Input()\n name: string;\n disabled = false;\n constructor() {}\n private _onChange: Function;\n private _onTouched: Function;\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n writeValue(obj: any): void {\n this.value = obj;\n }\n\n onChange(value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ComponentFactoryResolver,\n EventEmitter,\n Inject,\n Output,\n Renderer2,\n Directive,\n ElementRef,\n Input,\n ComponentRef,\n ApplicationRef,\n EmbeddedViewRef,\n Injector,\n Type\n} from '@angular/core';\n\nimport { v4 as uuid } from 'uuid';\nimport { CheckboxComponent } from '../../components/shared/checkbox/checkbox.component';\n\n@Directive({\n selector: '[checkBoxRow]'\n})\nexport class CheckBoxRow {\n @Input('checkBoxId') checkBoxId: string | number;\n @Input('checkBoxName') checkBoxName: string;\n\n @Input('checkBoxValue') set checkBoxValue(value: boolean) {\n this._value = value;\n if (this.checkboxComponentRef) {\n this.setCheckBoxValue();\n }\n }\n _value: boolean;\n get checkBoxValue(): boolean {\n return this._value;\n }\n\n @Output() checkBoxValueChange: EventEmitter<boolean> = new EventEmitter();\n\n private checkboxComponentRef: ComponentRef<CheckboxComponent>;\n private htmlContainer: HtmlContainer;\n\n constructor(\n private currentRow: ElementRef,\n private appRef: ApplicationRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private resolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.createCheckBoxComponent();\n this.handleChecboxInputs();\n this.handleCheckboxOutputs();\n }\n\n createCheckBoxComponent() {\n // Create the container\n const checkBoxContainer = document.createElement('div');\n checkBoxContainer.className = 'wz-table__body__line__cell wz-table__body__line__cell--checkbox';\n\n // Insert divCheckBox in the DOM as the first child of the row\n this.renderer.insertBefore(this.currentRow.nativeElement, checkBoxContainer, this.currentRow.nativeElement.firstChild);\n\n // Insert the CheckBoxComponent inside the container (DOM and Angular DOM)\n this.htmlContainer = new HtmlContainer(checkBoxContainer, this.appRef, this.resolver, this.injector);\n this.checkboxComponentRef = this.htmlContainer.attach(CheckboxComponent);\n }\n\n private handleChecboxInputs() {\n this.checkboxComponentRef.instance.id = this.checkBoxId ? this.checkBoxId : uuid();\n this.checkboxComponentRef.instance.name = this.checkBoxName ? this.checkBoxName : undefined;\n this.checkboxComponentRef.instance.alone = true;\n this.setCheckBoxValue();\n }\n\n private setCheckBoxValue() {\n this.checkboxComponentRef.instance.value = this.checkBoxValue;\n }\n\n private handleCheckboxOutputs() {\n // Detect checkbox changes\n this.checkboxComponentRef.instance.registerOnChange(() => {\n this._toggleCheckbox();\n });\n }\n\n private _toggleCheckbox() {\n this.checkBoxValue = !this.checkBoxValue;\n this.checkBoxValueChange.emit(this.checkBoxValue);\n }\n\n ngOnDestroy() {\n this.htmlContainer.dispose();\n }\n}\n\nexport class HtmlContainer {\n private attached: boolean = false;\n\n private disposeFn: () => void;\n\n constructor(\n private hostElement: Element,\n private appRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n attach(component: Type<any>): ComponentRef<any> {\n if (this.attached) {\n throw new Error('component has already been attached');\n }\n\n this.attached = true;\n const childComponentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\n\n let componentRef = childComponentFactory.create(this.injector);\n\n this.appRef.attachView(componentRef.hostView);\n this.disposeFn = () => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n };\n\n this.hostElement.appendChild((componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0]);\n\n return componentRef;\n }\n\n dispose() {\n if (this.attached) {\n this.disposeFn();\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[tableColumn]'\n})\nexport class TableColumn {\n @Input('columnSize') columnSize: string; // Optional.\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__body__line__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Output } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { FiltersTableService, TableFilters } from '../../services/table/filters-table.service';\n\n@Directive({\n // The selector has the same name as the headerCell selector in table.component.html\n selector: '[headerCell]'\n})\nexport class TableColumnHeader {\n @Input('headerName') // Optional.\n set headerName(value: string) {\n this._headerName = value;\n this.setHeaderName();\n }\n _headerName: string = '';\n get headerName(): string {\n return this._headerName;\n }\n @Input('columnSize') columnSize: string; // Optional.\n @Input('filterRouting') filterRouting: boolean = false; // Optional. Set to true to use Filter Routing.\n @Input('tableName') tableName: string; // Optional, but mandatory to handle sorting\n @Input('sortName') sortName: string; // Optional, but mandatory to handle sorting\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n @Output() onSortChange: EventEmitter<boolean> = new EventEmitter(); // Emit the sort value (true, false, undefuned) of the current sort icon when clicking\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n private contentHeader: HTMLAnchorElement;\n private filterGroup: NwbFilterGroup;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private currentCell: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private filtersTableService: FiltersTableService\n ) {}\n\n ngOnInit() {\n if (this.tableName && this.sortName) {\n if (this.filterRouting) {\n this.handleSortRouting();\n } else {\n this.handleSortBasic();\n }\n }\n }\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n this.renderHeaderColumn();\n }\n\n handleSortRouting() {\n this.filterGroup = this.filtersTableService.getTableFilterGroup(this.tableName);\n\n const filterGroupChangeSub = this.filterGroup.valuesChange$.subscribe(filters => {\n const filterSort = filters.filter(filter => filter.key === 'sort')[0];\n if (this.sortName !== filterSort.value) {\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(filterGroupChangeSub);\n }\n\n handleSortBasic() {\n const sortChangeSub = this.filtersTableService.getSortChangeListner().subscribe(sort => {\n if (this.tableName === sort.dataTableName && this.sortName !== sort.sortName) {\n // Reset the current sort icon\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(sortChangeSub);\n }\n\n resetSortIcon() {\n // Replace current icon with default icon\n this.contentHeader.className = this.contentHeader.className.replace(this.getCurrentSortIcon(), 'idle');\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__head__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__head__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n\n renderHeaderColumn() {\n this.createHeaderContent();\n this.renderer.appendChild(this.currentCell.nativeElement, this.contentHeader);\n }\n\n createHeaderContent() {\n this.contentHeader = document.createElement('a');\n this.contentHeader.className = 'wz-table__head__cell__search';\n this.setHeaderName();\n if (this.tableName && this.sortName) {\n this.handleSort();\n }\n }\n\n private setHeaderName() {\n if (!this.contentHeader) {\n return;\n }\n this.contentHeader.innerHTML = this.headerName;\n }\n\n handleSort() {\n // Set icon in the header column cell\n this.contentHeader.className += ' wz-table__head__cell__search--' + this.getInitialSortIcon();\n\n // On click on the content header, change the icon and emit event\n this.renderer.listen(this.contentHeader, 'click', () => {\n const currentIcon = this.getCurrentSortIcon();\n let newIcon: string;\n let newSort: string, newOrder: boolean;\n\n switch (currentIcon) {\n case 'idle':\n newIcon = 'up';\n newSort = this.sortName;\n newOrder = true;\n break;\n\n case 'up':\n newIcon = 'down';\n newSort = this.sortName;\n newOrder = false;\n break;\n\n case 'down':\n newIcon = 'idle';\n break;\n\n default:\n newIcon = 'idle';\n break;\n }\n // Replace the icon\n this.contentHeader.className = this.contentHeader.className.replace(currentIcon, newIcon);\n\n this.emitEvents(newSort, newOrder);\n });\n }\n\n getInitialSortIcon() {\n if (!this.filterRouting) {\n return 'idle';\n }\n // Get Initial Sort Icon for Routing Filter\n let initialSortIcon = 'idle';\n if (this.filterGroup.get('sort') === this.sortName) {\n initialSortIcon = this.filterGroup.get('order') == 'true' ? 'up' : 'down';\n }\n return initialSortIcon;\n }\n\n getCurrentSortIcon() {\n const regexp = /wz-table__head__cell__search--(?<icon>\\w+)/;\n const { groups } = regexp.exec(this.contentHeader.className);\n return groups.icon;\n }\n\n emitEvents(newSort, newOrder) {\n if (this.filterRouting) {\n // Will send the filter routing value has changes event\n this.filterGroup.setValues({\n sort: newSort,\n order: newOrder,\n currentPage: 1\n });\n } else {\n // Send the event sort change\n this.filtersTableService.emitSortChange(this.tableName, this.sortName, newOrder);\n }\n if (this.tableFilters) {\n this.tableFilters.sort = this.sortName;\n this.tableFilters.order = newOrder;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n }\n this.onSortChange.emit(newOrder);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n // The selector has the same name as the tableRaw selector in table.component.html\n selector: '[tableRow]'\n})\nexport class TableRow {\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ImgCDNService } from '../../services/config/img-cdn.service';\n\n@Pipe({\n name: 'imgSrc'\n})\nexport class ImageSrcPipe implements PipeTransform {\n\n constructor(private imgCDNService: ImgCDNService) { }\n\n transform(pictureName: string, size: string): string {\n if(!size) {\n throw \"The size is undefined in ImageSrcPipe.\";\n }\n\n const route: string = this.imgCDNService.getUrlImg(size);\n\n if (!route) {\n throw \"The expected size is not defined in ImageSrcPipe.\";\n }\n\n return route + pictureName;\n }\n}\n","import { Directive, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\n@Directive({\n selector: 'AbstractDebounceDirective'\n})\nexport class AbstractDebounceDirective implements OnDestroy {\n @Input()\n public debounceTime: number;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n protected emitEvent$: Subject<any>;\n protected subscription$: Subject<void>;\n\n constructor() {\n this.debounceTime = 500;\n this.onEventChange = new EventEmitter<any>();\n this.emitEvent$ = new Subject<any>();\n this.subscription$ = new Subject<void>();\n }\n\n ngOnInit(): void {\n this.emitEvent$\n .pipe(\n takeUntil(this.subscription$),\n debounceTime(this.debounceTime),\n distinctUntilChanged(),\n tap(value => this.emitChange(value))\n )\n .subscribe();\n }\n\n public emitChange(value: any): void {\n this.onEventChange.emit(value);\n }\n\n ngOnDestroy(): void {\n this.subscription$.next();\n this.subscription$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AbstractDebounceDirective } from './abstract-debounce.directive';\n@Directive({\n selector: 'input[debounceKeyUp]'\n})\nexport class DebounceKeyupDirective extends AbstractDebounceDirective {\n constructor() {\n super();\n }\n\n @HostListener('keyup', ['$event'])\n public onKeyUp(event: any): void {\n event.preventDefault();\n this.emitEvent$.next(event);\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'wz-loader',\n templateUrl: './loader.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class LoaderComponent {\n @Input()\n text: string;\n @Input()\n small = false;\n @Input()\n position: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'wz-alert',\n styleUrls: ['./alert.component.scss'],\n templateUrl: './alert.component.html'\n})\nexport class AlertComponent implements OnInit {\n @Input() icon = true;\n @Input() warning = false;\n @Input() success = false;\n @Input() iconClass = 'fas fa-info';\n constructor() {}\n ngOnInit(): void {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberToArray'\n})\nexport class NumberToArray implements PipeTransform {\n\n transform(number: number): any[] {\n return Array.from('x'.repeat(number));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-page-selector',\n templateUrl: './page-selector.component.html'\n})\nexport class PageSelectorComponent {\n\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Input() set totalItems(totalItems: number) {\n this.numberOfPage = Math.ceil(totalItems / this.pagination.itemsPerPage);\n this.largeNumberOfPage = this.numberOfPage > 30;\n }\n get totalItems(): number {\n return this._totalItems;\n }\n private _totalItems: number;\n openAbsoluteSelect:boolean = false;\n\n largeNumberOfPage: boolean = false;\n numberOfPage: number = 0;\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter();\n\n constructor() {}\n\n onGotoPageChange(event, directValue) {\n if (directValue) {\n this.pageChange.emit(event);\n this.openAbsoluteSelect = false;\n } else {\n this.pageChange.emit(parseInt(event.target.value));\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LargeNumberOfPage'\n})\nexport class LargeNumberOfPagePipe implements PipeTransform {\n /**\n * Return an incremental array\n * Display 30 pages, from -15 to +15 of the current page\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number, currentPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n\n let arrayLength: number = 32;\n\n const startAtPage = currentPage <= 15 ? 0: currentPage - 15;\n const totalPage = Math.ceil(totalItems / itemsPerPage);\n\n\n\n const arrayWithPageNumber = Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => {\n\n const pageIndex:any = {\n display: startAtPage + x + 1,\n value: startAtPage + x + 1\n };\n\n if (x === arrayLength - 2) {\n pageIndex.display = '...';\n }\n if (x === arrayLength - 1) {\n pageIndex.display = totalPage;\n pageIndex.value = totalPage;\n }\n\n return pageIndex;\n });\n\n\n if (startAtPage) {\n arrayWithPageNumber.unshift(\n {\n display: 1,\n value: 1\n },\n {\n display: \"...\",\n value: 2\n }\n );\n }\n\n return arrayWithPageNumber;\n }\n}\n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectItem } from './select-items.dto';\nimport { CalllToAction } from './call-to-action.model';\n\n@Component({\n selector: 'wac-select',\n templateUrl: './select.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }]\n})\nexport class SelectComponent implements OnInit, ControlValueAccessor {\n @Input()\n items: SelectItem[];\n\n @Input()\n placeholder: string;\n\n @Input()\n label: string;\n\n @Input()\n maxWidthItems: string;\n\n @Input()\n search = false;\n\n @Input()\n type = 'default';\n\n @Input()\n callToAction: CalllToAction;\n\n @Input() maxWidth = '100%';\n\n @Input()\n disabled = false;\n\n @Output() selectValue = new EventEmitter<number>();\n\n @Output() clickOnCallToAction = new EventEmitter<any>();\n\n @ViewChild('search') searchElement: ElementRef;\n\n openCategories = false;\n searchValue = '';\n\n indexItemSelected: number = -1;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit(): void {\n this.indexItemSelected = this.items.findIndex(item => item.selected);\n }\n\n onClose() {\n this.openCategories = false;\n }\n\n customTB(item: SelectItem, index: number) {\n return `${item.id}-${index}`;\n }\n\n onSelectItem(id: number) {\n this.unselectAll();\n this.setIndexItemSelected(id);\n const itemSelected: SelectItem = this.getItemSelected();\n itemSelected.selected = true;\n this.selectValue.emit(this.indexItemSelected);\n this.onChange(itemSelected);\n }\n\n onClickCallToAction() {\n this.onClose();\n this.clickOnCallToAction.emit(this.callToAction.value);\n }\n\n private getItemSelected(): SelectItem {\n return this.items[this.indexItemSelected];\n }\n\n showCategories() {\n this.openCategories = true;\n setTimeout(() => { // this will make the execution after the above boolean has changed\n this.searchElement.nativeElement.focus();\n }, 0);\n }\n\n private unselectAll() {\n this.items.forEach(item => item.selected = false);\n }\n\n private setIndexItemSelected(id: number) {\n this.indexItemSelected = this.items.findIndex(item => item.id === id);\n }\n\n // ControlValueAccessor methods\n\n onChange: (selectItem: SelectItem) => void = () => {};\n onTouch: any = () => {}\n\n writeValue(selectItem: any){\n if (!selectItem) {\n return;\n }\n this.unselectAll();\n selectItem.selected = true;\n this.setIndexItemSelected(selectItem.id);\n }\n\n registerOnChange(fn: any){\n this.onChange = fn;\n }\n registerOnTouched(fn: any){\n this.onTouch = fn;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SelectItem } from '../../components/shared/select/select-items.dto';\n\n@Pipe({\n name: 'selectFilters'\n})\n\nexport class SelectFiltersPipe implements PipeTransform {\n transform(items: SelectItem[], filterName: string): any {\n return items.filter(item => {\n const regexp = new RegExp(filterName, 'i');\n return regexp.test(item.name);\n });\n }\n}","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[zIndexToggle]'\n})\nexport class ZindexToggleDirective implements OnInit, OnDestroy {\n isActived = false;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n @Input('zIndexToggle')\n set isActive(value: boolean) {\n this.isActived = value;\n this.switchToggle();\n }\n get isActive(): boolean {\n return this.isActived;\n }\n\n constructor(private currentElement: ElementRef, private renderer: Renderer2) {\n }\n\n ngOnInit(): void {\n }\n\n switchToggle() {\n if (this.isActived) {\n this.renderer.addClass(this.currentElement.nativeElement.parentElement.parentNode, 'zindexToggle');\n } else {\n this.renderer.removeClass(this.currentElement.nativeElement.parentElement.parentNode, 'zindexToggle');\n }\n }\n\n ngOnDestroy(): void {\n }\n}\n","import { NgModule } from '@angular/core';\nimport { WzImgManagerComponent } from './wz-img-manager.component';\nimport { ImgUploadComponent } from './components/img-upload/img-upload.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ImgTabsComponent } from './components/img-tabs/img-tabs.component';\nimport { CommonModule } from '@angular/common';\nimport { DragDropDirective } from './directives/drag-drop.directive';\nimport { PexelLibComponent } from './components/pexels-lib/pexels-lib.component';\nimport { FormsModule } from '@angular/forms';\nimport { ImgCardComponent } from './components/images-view/mosaic-view/img-card/img-card.component';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\nimport { NgScrollbarReachedModule } from 'ngx-scrollbar/reached-event';\nimport { NwbAllModule } from '@wizishop/ng-wizi-bulma';\nimport { UploadListComponent } from './components/upload-list/upload-list.component';\nimport { ImgEditorComponent } from './components/img-editor/img-editor.component';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CanvaBtnComponent } from './components/canva-btn/canva-btn.component';\nimport { ImgSelectionComponent } from './components/img-selection/img-selection.component';;\nimport { LoadingDirective } from './directives/loading.directive';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AutoHideDirective } from './directives/auto-hide.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CopyClipboardDirective } from './directives/copy-to-clipboard.directive';\nimport { DropdownComponent } from './components/shared/dropdown/dropdown.component';\nimport { EditorInfoSectionComponent } from './components/img-editor/info-section/info-section.component';\nimport { CropperComponent } from './components/img-editor/cropper/cropper.component';\nimport { ImagesViewComponent } from './components/images-view/images-view.component';\nimport { MosaicViewComponent } from './components/images-view/mosaic-view/mosaic-view.component';\nimport { TableViewComponent } from './components/images-view/table-view/table-view.component';\nimport { TableComponent } from './components/shared/table/table.component';\nimport { InputSearchComponent } from './components/shared/input-search/input-search.component';\nimport { PaginationComponent } from './components/shared/pagination/pagination.component';\nimport { PagniationArrayTotalPages } from './pipes/pagination/array-total-pages/array-pages.pipe';\nimport { PagniationText } from './pipes/pagination/text/custom-text.pipe';\nimport { PagniationIsLastPage } from './pipes/pagination/total-pages/is-last-page.pipe';\nimport { CheckBoxRow } from './directives/table/checkBoxRow.directive';\nimport { TableColumn } from './directives/table/column.directive';\nimport { TableColumnHeader } from './directives/table/columnHeader.directive';\nimport { TableRow } from './directives/table/raw.directive';\nimport { CheckboxComponent } from './components/shared/checkbox/checkbox.component';\nimport { ImageSrcPipe } from './pipes/images/img-src.pipe';\nimport { AbstractDebounceDirective } from './directives/abstract-debounce/abstract-debounce.directive';\nimport { DebounceKeyupDirective } from './directives/abstract-debounce/debounce-keyup.directive';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { AlertComponent } from './components/shared/alert/alert.component';\nimport { NumberToArray } from './pipes/number-to-array.pipe';\nimport { PageSelectorComponent } from './components/shared/pagination/page-selector/page-selector.component';\nimport { LargeNumberOfPagePipe } from './pipes/pagination/large-number-of-page/large-number-of-page.pipe';\nimport { SelectComponent } from './components/shared/select/select.component';\nimport { SelectFiltersPipe } from './pipes/select/select-filters.pipe';\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\nimport { ZindexToggleDirective } from './directives/zindex-toggle.directive';\n\nconst components = [\n WzImgManagerComponent,\n ImgTabsComponent,\n ImgUploadComponent,\n PexelLibComponent,\n ImgCardComponent,\n UploadListComponent,\n ImgEditorComponent,\n EditorInfoSectionComponent,\n CanvaBtnComponent,\n ImgSelectionComponent,\n LoaderComponent,\n DropdownComponent,\n CropperComponent,\n ImagesViewComponent,\n MosaicViewComponent,\n TableViewComponent,\n TableComponent,\n InputSearchComponent,\n PaginationComponent,\n CheckboxComponent,\n AlertComponent,\n PageSelectorComponent,\n SelectComponent\n];\n\nconst directives = [\n DragDropDirective,\n LoadingDirective,\n AutoHideDirective,\n CopyClipboardDirective,\n TableColumn,\n CheckBoxRow,\n TableColumnHeader,\n TableRow,\n AbstractDebounceDirective,\n DebounceKeyupDirective,\n ZindexToggleDirective\n];\n\nconst pipes = [\n PagniationArrayTotalPages,\n PagniationIsLastPage,\n PagniationText,\n ImageSrcPipe,\n NumberToArray,\n LargeNumberOfPagePipe,\n SelectFiltersPipe\n];\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n NgScrollbarModule,\n NgScrollbarReachedModule,\n NwbAllModule,\n ImageCropperModule,\n CdkTableModule,\n DragDropModule,\n TranslateModule,\n PerfectScrollbarModule\n ],\n providers: [],\n exports: [\n WzImgManagerComponent]\n})\nexport class WzImgManagerModule { }\n","import { CanvaCreateDesign } from \"./canva-create-design.dto\";\n\nexport class CanvaButtonApi {\n createDesign: (\n opts: {\n design: CanvaCreateDesign,\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n ) => void;\n editDesign: (opts: {\n opts: {\n design: {\n id: any\n },\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n }) => void;\n};","export class ImgApiDto {\n shop_token: string;\n image_manager_route = '';\n pexels_token: string;\n pexels_route = '';\n shop_category: string;\n canva_token: string;\n canva_url = '';\n assets_route: string = 'assets/img-manager/';\n}\n","export class ImgCDNConfigDTO {\n url_raw_image = '';\n url_100_image = '';\n url_200_image = '';\n url_400_image = '';\n url_800_image = '';\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@wizishop/img-manager/lib/services/img-selection.service.ts","ng://@wizishop/img-manager/lib/dto/config/external/external-config.dto.ts","ng://@wizishop/img-manager/lib/services/img-manager.service.ts","ng://@wizishop/img-manager/lib/services/config/img-cdn.service.ts","ng://@wizishop/img-manager/lib/services/config/external-config.service.ts","ng://@wizishop/img-manager/lib/services/user-settings.service.ts","ng://@wizishop/img-manager/lib/services/alert.service.ts","ng://@wizishop/img-manager/lib/services/img-event.service.ts","ng://@wizishop/img-manager/lib/services/canva.service.ts","ng://@wizishop/img-manager/lib/services/dom.service.ts","ng://@wizishop/img-manager/lib/wz-img-manager.component.ts","ng://@wizishop/img-manager/lib/animations/easeInOut/ease-in-out.animation.ts","ng://@wizishop/img-manager/lib/components/img-upload/img-upload.component.ts","ng://@wizishop/img-manager/lib/services/rename-picture.service.ts","ng://@wizishop/img-manager/lib/components/upload-list/upload-list.component.ts","ng://@wizishop/img-manager/lib/components/img-tabs/img-tabs.component.ts","ng://@wizishop/img-manager/lib/directives/drag-drop.directive.ts","ng://@wizishop/img-manager/lib/services/pexels.service.ts","ng://@wizishop/img-manager/lib/animations/listAnnimation/list.animation.ts","ng://@wizishop/img-manager/lib/components/pexels-lib/pexels-lib.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-actions-handler.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/img-card/img-card.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/img-editor.component.ts","ng://@wizishop/img-manager/lib/components/canva-btn/canva-btn.component.ts","ng://@wizishop/img-manager/lib/components/img-selection/img-selection.component.ts","ng://@wizishop/img-manager/lib/directives/loading.directive.ts","ng://@wizishop/img-manager/lib/directives/auto-hide.directive.ts","ng://@wizishop/img-manager/lib/directives/copy-to-clipboard.directive.ts","ng://@wizishop/img-manager/lib/components/shared/dropdown/dropdown.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/info-section/info-section.component.ts","ng://@wizishop/img-manager/lib/animations/insertRemove/insert-remove.animation.ts","ng://@wizishop/img-manager/lib/components/img-editor/cropper/cropper.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/mosaic-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/table-view/table-view.component.ts","ng://@wizishop/img-manager/lib/services/table/filters-table.service.ts","ng://@wizishop/img-manager/lib/components/shared/table/table.component.ts","ng://@wizishop/img-manager/lib/components/shared/input-search/input-search.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/total-pages/is-last-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/pagination.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/array-total-pages/array-pages.pipe.ts","ng://@wizishop/img-manager/lib/pipes/pagination/text/custom-text.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/checkbox/checkbox.component.ts","ng://@wizishop/img-manager/lib/directives/table/checkBoxRow.directive.ts","ng://@wizishop/img-manager/lib/directives/table/column.directive.ts","ng://@wizishop/img-manager/lib/directives/table/columnHeader.directive.ts","ng://@wizishop/img-manager/lib/directives/table/raw.directive.ts","ng://@wizishop/img-manager/lib/pipes/images/img-src.pipe.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/abstract-debounce.directive.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/debounce-keyup.directive.ts","ng://@wizishop/img-manager/lib/components/loader/loader.component.ts","ng://@wizishop/img-manager/lib/components/shared/alert/alert.component.ts","ng://@wizishop/img-manager/lib/pipes/number-to-array.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/page-selector/page-selector.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/select/select.component.ts","ng://@wizishop/img-manager/lib/pipes/select/select-filters.pipe.ts","ng://@wizishop/img-manager/lib/directives/zindex-toggle.directive.ts","ng://@wizishop/img-manager/lib/wz-img-manager.module.ts","ng://@wizishop/img-manager/lib/dto/canva.dto.ts","ng://@wizishop/img-manager/lib/dto/config/apis/api.dto.ts","ng://@wizishop/img-manager/lib/dto/config/image-cdn/image-cdn-config.dto.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","ImgSelectionService","imgSelectedList","multipleImgMode","imgSelectionSubscriber","imgListLoading","ReplaySubject","getImgSelection","setImgSelection","_this","forEach","elem","emitImgSelectionChange","addImgSelected","picture","getImgSelectionChange","Observable","subscriber","map","obs","JSON","parse","stringify","removeImgSelectedByIndex","index","splice","removeImgSelectedById","id_file","_b","_c","removeImgSelectionByIds","id_file_list","indexOf","removeAllImgSelected","setMultipleImgMode","activated","initImgSelectedList","emitImgListLoading","loading","getImgListLoadingEventListner","asObservable","moveImgOrder","event","fromIndex","previousIndex","toIndex","currentIndex","Injectable","providedIn","ImgManagerService","http","params","HttpParams","set","pageFicheProductConfig","stateDisplayed","showImgManagerModule","showSelection","displayBtn","pageficheProduct","angularFicheProductConfig","wiziblockConfig","simpleWithButtonOpenerConfig","fullWindowConfig","setApiConfig","img_manager_route","shop_token","imgManagerRoute","shopToken","getOptionsHeaders","header","headers","HttpHeaders","Authorization","getParams","getShopImgList","get","getShopTotalImgList","getShopImg","idFile","param","uploadFile","formData","post","uploadFileByUrl","url","fileName","replaceImg","imageBase64","body","type","put","changeImgName","removeImg","delete","removeMultipleImg","id_array","getImgManagerDisplayConfig","displayName","getAllImgManagerDisplayConfig","HttpClient","ImgCDNService","imgCDNConfig","setImgCDNConfig","getUrlImg","size","urlProperty","keys","filter","RegExp","test","getAllSize","match","ImgManagerConfigService","imgManagerService","imgCDNService","setExternalConfig","externalConfig","api","image_manager_route","getCanvaApiURL","canva_url","getCanvaApiToken","canva_token","getRouteAssets","assets_route","getPexelsApiURL","pexels_route","getPexelsApiToken","pexels_token","getShopCategory","shop_category","UserSettingsService","userdisplayPreference","setUserDisplayPreference","localStorage","setItem","getUserDisplayPreference","getItem","AlertService","nwbAlertService","translateService","actionMsg","alertConfig","message","duration","openAlert","msgKey","closePreviousAlert","subscribe","trans","setAlertColor","alertRefComponent","open","afterClosed","openAlertWithBackendRespons","msgBackend","dismiss","isErrorMsg","color","NwbAlertService","TranslateService","ImgEventService","imgToEditEvent","Subject","imgRemoved","imgAdded","listDisplayedChange","emitImgRemoved","getImgRemovedEventListner","emitImgToEdit","imgToEdit","getImgToEditEventListner","emitImgAdded","getImgAddedEventListner","emitlistDisplayedChange","getlistDisplayedChange","CanvaService","externalConfigService","imgManager","wzImgEventService","alertService","imgLoading","uploadingImg","successUploadPhoto","errorUploadCanvaImg","errorRenameCanvaImg","forceToOpenCanva","bindExpectedImgSizeEvent","BehaviorSubject","bindExpectedSizeDone","setCanvaApiConfig","canvaApiURL","canvaApiKey","getCanvaLogo","bindEventExepectedImgSizeChange","expectedImgSizesChange","mediaDTO","openCanva","parseInt","image_width","image_height","getCanvaApi","observer","loadCanva","complete","canvaApi","Canva","DesignButton","initializeCanva","initialize","apiKey","then","loadCanvaScript","node","document","createElement","src","async","charset","onload","getElementsByTagName","appendChild","width","height","pipe","take","addOverflowBody","createDesign","classList","add","removeOverflowBody","remove","dimensions","units","undefined","publishLabel","instant","design","onDesignPublish","_a","exportUrl","designTitle","designPublished","onDesignClose","img","code","DomService","documentEventSource","documentEventDone","documentScrollSource","documentScrollDone","documentEvent","setDocumentEventListener","addEventListener","documentScroll","setScrollEventListener","window","onscroll","WzImgManagerComponent","imgSelectionService","userSettingsService","canvaService","imgEventService","domService","imgManagerClosed","EventEmitter","_multipleImgMode","_showImgManagerModule","close","listDisplayed","hideTab","activate","displaySmall","onKeydownHandler","onClose","ngOnInit","selectImgEvent","imgSlection","checkCloseImgManager","checkUserDisplayPreference","listDisplayedEvent","setCurrentTab","setTimeout","addBodyBottomPaddingForModule","openSmall","setBodyMainScroll","openFull","hideBodyMainScroll","removeBodyBottomPaddingForModule","emit","onImgManagerClosed","html","overflowHTML","style","overflowY","bodyPadding","paddingBottom","changeDisplayTab","ngOnDestroy","unsubscribe","Input","ImgManagerConfigDto","Output","HostListener","KeyboardEvent","Component","selector","template","easeInOut","trigger","state","opacity","transition","animate","ImgUploadComponent","files","isLoading","imgUploaded","loadingText","errorUploadingImg","errorNotImg","MAX_IMAGE_SIZE","assetsIcon","getAssets","filesChangeByClick","filesChangeByDragAndDrop","filesList","removeDragAndDropStyle","imgToUploadList","files_1","files_1_1","file","console","log","isFileImage","isSizeValid","FormData","append","name","getImageSizeInKo","forkJoin","onImgUpload","statusText","fileType","split","imageBytesSize","Math","round","dragAndDropBox","nativeElement","ViewChild","ElementRef","animations","RenamePictureService","picturesList","pictureNameChanged","errorRenameImg","msgSavingImgName","msgImgNameSaved","setEvents","setPicturesList","onRenamePicture","pictureRenamed","debounceTime","pictureNameUpdate","renamePicture","getPictureById","id","display_name","data","previousName","UploadListComponent","renamePictureService","switchDisplayWindow","onImgUploaded","onToggleSelectImg","selected","switchDisplayWindowCard","imgSelectionChange","imgSelection","idFileList","ImgTabsComponent","imgEventEditService","route","currentTab","tabs","hide","tabActive","editTab","imgUpload","snackBarNewVersionConfig","toggleTabs","item","imgUploadedComponent","onEditClosed","onShowImgUploaded","switchDisplayWindowImgView","switchRouterLink","Router","DragDropDirective","onFileDropped","background","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","HostBinding","Directive","PexelsService","languages","fr","en","it","es","setLang","currentLang","onLangChange","langData","lang","searchOnPexels","toSearch","perPage","page","apiBaseUrl","request","httpOptions","shopCategory","listAnnimation","query","transform","stagger","optional","PexelLibComponent","wzImgLibService","searchValue","disableSearch","showImgUploaded","searchUpdated","nbResult","currentPage","initComponent","photosColumns","nbColumuns","responsiveColumns","outerElement","untitled","errorUploadPhoto","errorRetrievePhotos","subs","control","ngAfterViewInit","oldSearchValue","setNbColumnsToDisplayPhoto","setPhotosColumns","search","offsetWidth","onSearchNameChanged","onSearchChange","onBottomReached","scrollHandler","resetSearch","searchSub","wzImgLibDto","total_results","photos","photo","bestColumnIndex","getBestColumn","lastPic","querySelector","medium","indexColumn","bestColumn","photosColumn","uploadPhoto","uploading","uploadSub","uploaded","sub","ImagesActionHandler","imgEventCardService","externalService","picturesListChange","tableFilters","sort","order","totalItems","itemsPerPage","displayPexelsResults","disable","disableChange","filtersChange","pictureNameChange","errorRemoveImg","errorAlreadyUsedImg","fakeImgRoute","onToggleAllCheckBoxRow","delSelected","_pictureListeChange","onToggleDelSelection","onFiltersChange","onEdit","onRemoveImg","deleted","msg","status","onPictureNotLoading","onDownloadImg","file_name","getRAWImgRoute","responseType","val","URL","createObjectURL","downloadUrl","revokeObjectURL","onNameChange","a","href","download","click","ngDestroy","getDataAPISub","ImgCardComponent","_super","focusInput","toggleImgSelected","isUploadSection","activeConfirmDelete","tabDisplayed","displayLargeWindow","onToggleImgSelected","ImgEditorComponent","editClosed","isImgModified","isNameModified","currentCroppedImage","msgFailSave","msgFailLoad","msgSuccessEdit","onSave","obsReplaceImg","obsChangeImgName","ranameAndReplaceImg","onRestartEdit","onCancel","onImgCropped","imgBase64","res1","res2","CanvaBtnComponent","availableFormat","ImgManager.CanvaBtn.smallSquare","ImgManager.CanvaBtn.mediumSquare","ImgManager.CanvaBtn.bigSquare","openDropDownMenu","canvaLogoRouteAssets","listenCanvaExpectedSize","subExpectedImgSizesChange","expectedWidth","expectedHeight","onOpenCanva","ImgSelectionComponent","removingAll","cancellingAll","importingAll","dragStart","trashPositionIndex","trashPositionLeft","getImgSelected","init","drop","removeImgFromSelection","LoadingDirective","el","currentLoading","interval","element","launchLoading","setInterval","floor","random","clearInterval","AutoHideDirective","_elementRef","forceOn","clickOutside","targetElement","clickedInside","contains","classNameFromElement","getAttribute","includes","triggerElement","needToClose_1","v","CopyClipboardDirective","copied","onClick","payload","listener","clipboardData","setData","toString","execCommand","removeEventListener","MouseEvent","DropdownComponent","EditorInfoSectionComponent","_isNameModified","isNameModifiedChange","msgCopyToClipBoard","imgName","getFileSize","copyToClipBoard","insertRemove","CropperComponent","_isImgModified","isImgModifiedChange","currentCroppedImageChange","isCropperReady","isCropped","isImgCropped","isImgCroppedInitilized","imageChangedEvent","croppedImage","canvasRotation","rotation","scale","showCropper","containWithinAspectRatio","resolutionConfig","label","config","maintainAspectRatio","active","aspectRatio","rotationConfig","icon","method","zoomConfig","imgCropperConfig","restartEdit","imgRoute","imgType","getImgType","setDefautAspectRatio","pop","raw_height","raw_width","defaultAspectRatio","onRestart","resetConfCropper","onImgModified","fileChangeEvent","imageCropped","detectImgCropperChange","base64","imageLoaded","cropperReady","loadImageFailed","changeResolutionSize","setActiveItem","setCropperProperties","confirmCrop","array","indexItem","property","rotateLeft","flipAfterRotate","rotateRight","flipHorizontal","flipH","flipVertical","flipV","flippedH","flippedV","zoomOut","zoomIn","applyMethod","ImagesViewComponent","widthLargeCard","widthSmallCard","nbFakeImg","imgFullWidthConfig","max","largeImgWidthFactor","smallImgWidthFactor","imgWidthConfig","searchQueryChanged","filtersChanged","savePictureList","nbImgToDelSelected","isTotalRetieved","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","errorGetTotalImg","errorGetImg","msgNoImgFound","setNbImgToDisplay","_getImgList","getImgList","onSwitchFormatDisplayed","onImgSelected","setNbImgToDelSelected","searchText","searchedValue","removeListImg","idImgToRemove","selectImgChosen","picturesListSelected","displayConfirmImgSup","cancelSup","onPicturesListChange","containerWidth","imgLibContainer","scrollWidth","innerWidth","getImgWidthFactors","maxImgWidthFactor","minImgWidthFactor","minImgWidth","maxImgWidth","ceil","nbMaxImgPerLine","nbMinImgPerLine","getTotalImgPerPage","screenWidth","minWidth","imgSizesConfig","currentImgWidthConfig","fullSize","currentImgWidthConfig_1","currentImgWidthConfig_1_1","widthConfig","nbRowToShow","total","setParams","limit","maxLengthCardShow","initVariables","loadingSuccess","selectImgSelected","idImgSlectedList","displayPexelsLib","calculNbImgFake","nbImgDisplayed","nbImgPerLine","getImg","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","refreshTotalImgList","totalRecords","previousSearchValue","switchDisplayWindowMosaic","MosaicViewComponent","onCardRenamePicture","TableViewComponent","dataTableName","FiltersTableService","filterRoutingBuilder","filterGroups","Map","dataTableFilters","sortSubject","getTableFilterGroup","has","filterGroup","group","emitSortChange","sortName","getSortChangeListner","setPaginationFilters","setValues","setInitialPaginationFiltersIfNotExist","NwbFilterRoutingBuilder","TableComponent","filtersTableService","tableFiltersChange","placeholder","checkbox","toggleAllCheckBox","disablePagniation","headerCheckBoxId","uuid","tableRoutingName","_filterGroup","valuesChange$","setTablesFilters","filterGroupChangeSub","filters","onToggleAllCheckBox","checked","searchChange","pageChange","encapsulation","ViewEncapsulation","None","InputSearchComponent","smallPadding","innerValue","changeDebounced","onTouchedCallback","onChangeCallback","writeValue","registerOnChange","fn","registerOnTouched","handleDebouncedKeyUp","InputSearchComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","multi","PagniationIsLastPage","Error","Pipe","PaginationComponent","_pagination","pagination","decrementPage","incrementPage","onGotoPageChange","pageNumber","PagniationArrayTotalPages","arrayLength","Number","x","PagniationText","currentItemsLow","currentItemsHigh","low","high","CheckboxComponent","alone","disabled","_onChange","_onTouched","setDisabledState","isDisabled","obj","onChange","CheckboxComponent_1","CheckBoxRow","currentRow","appRef","renderer","resolver","injector","checkBoxValueChange","_value","checkboxComponentRef","setCheckBoxValue","createCheckBoxComponent","handleChecboxInputs","handleCheckboxOutputs","checkBoxContainer","className","insertBefore","firstChild","htmlContainer","HtmlContainer","attach","instance","checkBoxId","checkBoxName","checkBoxValue","_toggleCheckbox","dispose","ApplicationRef","Renderer2","Inject","args","DOCUMENT","ComponentFactoryResolver","Injector","hostElement","componentFactoryResolver","attached","component","componentRef","resolveComponentFactory","attachView","hostView","disposeFn","detachView","destroy","rootNodes","TableColumn","currentCell","centerCellValue","applyCustomStylesOnCell","flexGrow","columnSize","addClass","centerCell","TableColumnHeader","_headerName","filterRouting","onSortChange","subscriptions","setHeaderName","tableName","handleSortRouting","handleSortBasic","renderHeaderColumn","filterSort","resetSortIcon","sortChangeSub","contentHeader","replace","getCurrentSortIcon","createHeaderContent","handleSort","innerHTML","headerName","getInitialSortIcon","listen","newIcon","newSort","newOrder","currentIcon","emitEvents","initialSortIcon","exec","groups","subscription","TableRow","ImageSrcPipe","pictureName","AbstractDebounceDirective","onEventChange","emitEvent$","subscription$","takeUntil","distinctUntilChanged","tap","emitChange","DebounceKeyupDirective","onKeyUp","LoaderComponent","small","AlertComponent","warning","success","iconClass","NumberToArray","number","from","repeat","PageSelectorComponent","openAbsoluteSelect","largeNumberOfPage","numberOfPage","_totalItems","directValue","LargeNumberOfPagePipe","startAtPage","totalPage","arrayWithPageNumber","display","SelectComponent","maxWidth","selectValue","clickOnCallToAction","openCategories","indexItemSelected","onTouch","items","findIndex","customTB","onSelectItem","unselectAll","setIndexItemSelected","itemSelected","getItemSelected","onClickCallToAction","callToAction","showCategories","searchElement","focus","selectItem","SelectComponent_1","SelectFiltersPipe","filterName","ZindexToggleDirective","currentElement","isActived","switchToggle","parentElement","parentNode","removeClass","components","directives","pipes","WzImgManagerModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","NgScrollbarModule","NgScrollbarReachedModule","NwbAllModule","ImageCropperModule","CdkTableModule","DragDropModule","TranslateModule","PerfectScrollbarModule","exports","url_raw_image","url_100_image","url_200_image","url_400_image","url_800_image"],"mappings":";;;;;;;;;;;;;;oFAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,IAGrB,SAASO,EAAUR,EAAGC,GAEzB,SAASQ,IAAOC,KAAKC,YAAcX,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEY,UAAkB,OAANX,EAAaC,OAAOW,OAAOZ,IAAMQ,EAAGG,UAAYX,EAAEW,UAAW,IAAIH,GAG5E,IAAIK,EAAW,WAQlB,OAPAA,EAAWZ,OAAOa,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIZ,KADTW,EAAIG,UAAUF,GACOhB,OAAOU,UAAUL,eAAee,KAAKL,EAAGX,KAAIU,EAAEV,GAAKW,EAAEX,IAE9E,OAAOU,IAEKO,MAAMb,KAAMU,YAezB,SAASI,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2H5B,EAAvH6B,EAAIT,UAAUC,OAAQS,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAO1B,OAAO6B,yBAAyBL,EAAQC,GAAOC,EACrH,GAAuB,iBAAZI,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIV,EAAIO,EAAWJ,OAAS,EAAGH,GAAK,EAAGA,KAASlB,EAAIyB,EAAWP,MAAIY,GAAKD,EAAI,EAAI7B,EAAE8B,GAAKD,EAAI,EAAI7B,EAAE0B,EAAQC,EAAKG,GAAK9B,EAAE0B,EAAQC,KAASG,GAChJ,OAAOD,EAAI,GAAKC,GAAK5B,OAAOgC,eAAeR,EAAQC,EAAKG,GAAIA,EAGzD,SAASK,EAAQC,EAAYC,GAChC,OAAO,SAAUX,EAAQC,GAAOU,EAAUX,EAAQC,EAAKS,IAGpD,SAASE,EAAWC,EAAaC,GACpC,GAAuB,iBAAZR,SAAoD,mBAArBA,QAAQS,SAAyB,OAAOT,QAAQS,SAASF,EAAaC,GA6C7G,SAASE,EAASC,GACrB,IAAI1B,EAAsB,mBAAX2B,QAAyBA,OAAOC,SAAUC,EAAI7B,GAAK0B,EAAE1B,GAAIC,EAAI,EAC5E,GAAI4B,EAAG,OAAOA,EAAExB,KAAKqB,GACrB,GAAIA,GAAyB,iBAAbA,EAAEtB,OAAqB,MAAO,CAC1C0B,KAAM,WAEF,OADIJ,GAAKzB,GAAKyB,EAAEtB,SAAQsB,OAAI,GACrB,CAAEK,MAAOL,GAAKA,EAAEzB,KAAM+B,MAAON,KAG5C,MAAM,IAAIO,UAAUjC,EAAI,0BAA4B,mCAGjD,SAASkC,EAAOR,EAAGxB,GACtB,IAAI2B,EAAsB,mBAAXF,QAAyBD,EAAEC,OAAOC,UACjD,IAAKC,EAAG,OAAOH,EACf,IAAmBb,EAAYsB,EAA3BlC,EAAI4B,EAAExB,KAAKqB,GAAOU,EAAK,GAC3B,IACI,WAAc,IAANlC,GAAgBA,KAAM,MAAQW,EAAIZ,EAAE6B,QAAQE,MAAMI,EAAGC,KAAKxB,EAAEkB,OAExE,MAAOO,GAASH,EAAI,CAAEG,MAAOA,GACjC,QACQ,IACQzB,IAAMA,EAAEmB,OAASH,EAAI5B,EAAU,SAAI4B,EAAExB,KAAKJ,GAE1D,QAAkB,GAAIkC,EAAG,MAAMA,EAAEG,OAE7B,OAAOF,EAGJ,SAASG,IACZ,IAAK,IAAIH,EAAK,GAAInC,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAC3CmC,EAAKA,EAAGI,OAAON,EAAO/B,UAAUF,KACpC,OAAOmC,mBC9HP,SAAAK,IALAhD,KAAAiD,gBAAmC,GACnCjD,KAAAkD,iBAA2B,EACnBlD,KAAAmD,uBAA4C,GAC5CnD,KAAAoD,eAAyC,IAAIC,EAAAA,qBAIrDL,EAAA9C,UAAAoD,gBAAA,WACI,OAAOtD,KAAKiD,iBAIhBD,EAAA9C,UAAAqD,gBAAA,SAAgBN,GAAhB,IAAAO,EAAAxD,KACIA,KAAKiD,gBAAgBtC,OAAS,EAE1BsC,GAAmBA,EAAgBtC,QACnCsC,EAAgBQ,SAAQ,SAAAC,GAAQ,OAAAF,EAAKP,gBAAgBL,KAAKc,MAE9D1D,KAAK2D,0BAGTX,EAAA9C,UAAA0D,eAAA,SAAeC,GACP7D,KAAKkD,gBACLlD,KAAKiD,gBAAgBL,KAAKiB,GAE1B7D,KAAKiD,gBAAkB,CAACY,GAE5B7D,KAAK2D,0BAGTX,EAAA9C,UAAA4D,sBAAA,WAAA,IAAAN,EAAAxD,KAII,OAHwB,IAAI+D,EAAAA,YAA4B,SAAAC,GACpDR,EAAKL,uBAAuBP,KAAKoB,OAKzChB,EAAA9C,UAAAyD,uBAAA,WAAA,IAAAH,EAAAxD,KACIA,KAAKmD,uBAAuBc,KAAI,SAAAC,GAC5B,OAAAA,EAAI7B,KAAK8B,KAAKC,MAAMD,KAAKE,UAAUb,EAAKP,uBAIhDD,EAAA9C,UAAAoE,yBAAA,SAAyBC,GACrBvE,KAAKiD,gBAAgBuB,OAAOD,EAAO,GACnCvE,KAAK2D,0BAGTX,EAAA9C,UAAAuE,sBAAA,SAAsBC,WAClB,GAAK1E,KAAKkD,gBAAV,CAIA,IAAIqB,EAAQ,MACZ,IAAmB,IAAAI,EAAA3C,EAAAhC,KAAKiD,iBAAe2B,EAAAD,EAAAtC,QAAAuC,EAAArC,KAAAqC,EAAAD,EAAAtC,OAAE,CACrC,GADUuC,EAAAtC,MACHoC,UAAYA,EAAS,CACxB1E,KAAKsE,yBAAyBC,GAC9B,MAEJA,4GATAvE,KAAKiD,gBAAkB,IAa/BD,EAAA9C,UAAA2E,wBAAA,SAAwBC,GACpB,GAAK9E,KAAKkD,gBAKV,IAAK,IAAIqB,EAAQvE,KAAKiD,gBAAgBtC,OAAQ,EAAG4D,GAAS,EAAIA,IAAS,CACnE,IAAMG,EAAU1E,KAAKiD,gBAAgBsB,GAAOG,SACL,IAAnCI,EAAaC,QAAQL,IACrB1E,KAAKsE,yBAAyBC,QAPlCvE,KAAKiD,gBAAkB,IAY/BD,EAAA9C,UAAA8E,qBAAA,WACIhF,KAAKiD,gBAAgBtC,OAAS,EAC9BX,KAAK2D,0BAITX,EAAA9C,UAAA+E,mBAAA,SAAmBC,GACflF,KAAKkD,gBAAkBgC,GAG3BlC,EAAA9C,UAAAiF,oBAAA,SAAoBlC,GAEZA,EACAjD,KAAKiD,gBAAkBA,EAIvBjD,KAAKiD,iBAAmBjD,KAAKiD,gBAAgBtC,OAC7CX,KAAKiD,gBAAgBuB,OAAO,EAAGxE,KAAKiD,gBAAgBtC,QAGxDX,KAAKiD,gBAAkB,IAO3BD,EAAA9C,UAAAkF,mBAAA,SAAmBC,GACfrF,KAAKoD,eAAef,KAAKgD,IAO7BrC,EAAA9C,UAAAoF,8BAAA,WACI,OAAOtF,KAAKoD,eAAemC,gBAQ/BvC,EAAA9C,UAAAsF,aAAA,SAAaC,GACT,IAAMC,EAAYD,EAAME,cAClBC,EAAUH,EAAMI,aACtB7F,KAAKiD,gBAAgBuB,OAAOoB,EAAS,EAAG5F,KAAKiD,gBAAgBuB,OAAOkB,EAAW,GAAG,IAClF1F,KAAK2D,wHAhIAX,EAAmBlC,EAAA,CAH/BgF,EAAAA,WAAW,CACVC,WAAY,oCAED/C,QCLb,0BCwDE,SAAAgD,EAAoBC,GAAAjG,KAAAiG,KAAAA,EA7CpBjG,KAAAkG,QAAS,IAAIC,EAAAA,YAAaC,IAAI,QAAQ,MAAMA,IAAI,OAAO,KAG/CpG,KAAAqG,uBAAkD,CACxDC,eAAgB,SAChBpD,iBAAiB,EACjBqD,sBAAsB,EACtBC,eAAe,EACfC,YAAY,EACZC,kBAAkB,GAGZ1G,KAAA2G,0BAAqD,CAC3DL,eAAgB,SAChBpD,iBAAiB,EACjBqD,sBAAsB,EACtBC,eAAe,EACfC,YAAY,EACZC,kBAAkB,GAGZ1G,KAAA4G,gBAA2C,CACjDN,eAAgB,SAChBpD,iBAAiB,EACjBqD,sBAAsB,EACtBC,eAAe,EACfC,YAAY,GAGNzG,KAAA6G,6BAAwD,CAC9DP,eAAgB,SAChBpD,iBAAiB,EACjBqD,sBAAsB,EACtBC,eAAe,EACfC,YAAY,GAGNzG,KAAA8G,iBAA4C,CAClDR,eAAgB,SAChBpD,iBAAiB,EACjBqD,sBAAsB,EACtBC,eAAe,EACfC,YAAY,UAKdT,EAAA9F,UAAA6G,aAAA,SAAaC,EAA2BC,GACtCjH,KAAKkH,gBAAkBF,EACvBhH,KAAKmH,UAAYF,GAGXjB,EAAA9F,UAAAkH,kBAAR,SAA0BlB,GACxB,IAAMmB,EAAS,CAAEC,QAAS,IAAIC,EAAAA,YAAY,CACxCC,cAAe,UAAYxH,KAAKmH,aAOlC,OAJIjB,IACFlG,KAAKyH,UAAUvB,GACfmB,EAAe,OAAIrH,KAAKkG,QAEnBmB,GAGTrB,EAAA9F,UAAAwH,eAAA,SAAexB,GACb,OAAOlG,KAAKiG,KAAK0B,IAAO3H,KAAKkH,gBAAe,UAAWlH,KAAKoH,kBAAkBlB,KAGhFF,EAAA9F,UAAA0H,oBAAA,SAAoB1B,GAClB,OAAOlG,KAAKiG,KAAK0B,IAAO3H,KAAKkH,gBAAe,eAAgBlH,KAAKoH,kBAAkBlB,KAGrFF,EAAA9F,UAAA2H,WAAA,SAAWC,GACT,OAAO9H,KAAKiG,KAAK0B,IAAO3H,KAAKkH,gBAAe,WAAWY,EAAU9H,KAAKoH,sBAGxEpB,EAAA9F,UAAAuH,UAAA,SAAUvB,GAGR,IAAK,IAAM6B,KAFX/H,KAAKkG,OAAS,IAAIC,EAAAA,WAClBnG,KAAKkG,OAASlG,KAAKkG,OAAOE,IAAI,eAAgB,QAC1BF,EAClBlG,KAAKkG,OAASlG,KAAKkG,OAAOE,IAAI2B,EAAO7B,EAAO6B,KAIhD/B,EAAA9F,UAAA8H,WAAA,SAAWC,GACT,OAAOjI,KAAKiG,KAAKiC,KAAQlI,KAAKkH,gBAAe,mBAAoBe,EAAUjI,KAAKoH,sBAGlFpB,EAAA9F,UAAAiI,gBAAA,SAAgBC,EAAaC,GAK3B,OAAOrI,KAAKiG,KAAKiC,KAAQlI,KAAKkH,gBAAe,mBAAoB,CAAEkB,IAAGA,EAAEC,SAAQA,GAAIrI,KAAKoH,sBAG3FpB,EAAA9F,UAAAoI,WAAA,SAAWC,EAAqB7D,GAC9B,IAAM8D,EAAO,CACXD,YAAWA,EACXE,KAAO,OAET,OAAOzI,KAAKiG,KAAKyC,IAAO1I,KAAKkH,gBAAe,WAAWxC,EAAO,WAAY8D,EAAMxI,KAAKoH,sBAGvFpB,EAAA9F,UAAAyI,cAAA,SAAcN,EAAkB3D,GAC9B,OAAO1E,KAAKiG,KAAKyC,IAAO1I,KAAKkH,gBAAe,WAAWxC,EAAO,cAAc2D,EAAY,KAAMrI,KAAKoH,sBAGrGpB,EAAA9F,UAAA0I,UAAA,SAAUlE,GACR,OAAO1E,KAAKiG,KAAK4C,OAAU7I,KAAKkH,gBAAe,WAAWxC,EAAW1E,KAAKoH,sBAG5EpB,EAAA9F,UAAA4I,kBAAA,SAAkBC,GAChB,OAAO/I,KAAKiG,KAAKiC,KAAQlI,KAAKkH,gBAAe,0BAA2B,CAAE6B,SAAQA,GAAI/I,KAAKoH,sBAG7FpB,EAAA9F,UAAA8I,2BAAA,SAA2BC,GACzB,OAAQA,GACN,IAAK,SACH,OAAOjJ,KAAK8G,iBAEd,IAAK,aACH,OAAO9G,KAAK4G,gBAEd,IAAK,gBACH,OAAO5G,KAAKqG,uBAEd,IAAK,qBACH,OAAOrG,KAAK6G,6BAEd,IAAK,wBACH,OAAO7G,KAAK2G,0BAEd,QACE,SAINX,EAAA9F,UAAAgJ,8BAAA,WACE,MAAO,CACLlJ,KAAK8G,iBACL9G,KAAK4G,gBACL5G,KAAKqG,uBACLrG,KAAK6G,wEAlGiBsC,EAAAA,yIAlDfnD,EAAiBlF,EAAA,CAH7BgF,EAAAA,WAAW,CACVC,WAAY,gCAoDcoD,EAAAA,cAlDfnD,mBCCX,SAAAoD,IAFApJ,KAAAqJ,aAAgC,YAIhCD,EAAAlJ,UAAAoJ,gBAAA,SAAgBD,GACdrJ,KAAKqJ,aAAeA,GAGtBD,EAAAlJ,UAAAqJ,UAAA,SAAUC,GACR,IAAMC,EAAcjK,OAAOkK,KAAK1J,KAAKqJ,cAClCM,QAAO,SAAAvB,GACN,OAAA,IAAIwB,OAAOJ,EAAM,KAAKK,KAAKzB,MAC3B,GAEF,OAAOpI,KAAKqJ,aAAaI,IAG7BL,EAAAlJ,UAAA4J,WAAA,WACE,OAAOtK,OAAOkK,KAAK1J,KAAKqJ,cACvBpF,KAAI,SAAAP,GACH,OAAAA,EAAKqG,MAAM,WAAW,qGAtBfX,EAAatI,EAAA,CAHzBgF,EAAAA,WAAW,CACVC,WAAY,oCAEDqD,mBCMX,SAAAY,EACYC,EACAC,GADAlK,KAAAiK,kBAAAA,EACAjK,KAAAkK,cAAAA,SAQZF,EAAA9J,UAAAiK,kBAAA,SAAkBC,GAChBpK,KAAKoK,eAAiBA,EACtBpK,KAAKiK,kBAAkBlD,aAAaqD,EAAeC,IAAIC,oBAAqBF,EAAeC,IAAIpD,YAC/FjH,KAAKkK,cAAcZ,gBAAgBc,EAAef,eAGpDW,EAAA9J,UAAAqK,eAAA,WACE,OAAOvK,KAAKoK,eAAeC,IAAIG,WAGjCR,EAAA9J,UAAAuK,iBAAA,WACE,OAAOzK,KAAKoK,eAAeC,IAAIK,aAGjCV,EAAA9J,UAAAyK,eAAA,WACE,OAAO3K,KAAKoK,eAAeC,IAAIO,cAGjCZ,EAAA9J,UAAA2K,gBAAA,WACE,OAAO7K,KAAKoK,eAAeC,IAAIS,cAGjCd,EAAA9J,UAAA6K,kBAAA,WACE,OAAO/K,KAAKoK,eAAeC,IAAIW,cAGjChB,EAAA9J,UAAA+K,gBAAA,WACE,OAAOjL,KAAKoK,eAAeC,IAAIa,wDApCFlF,SACJoD,sIANhBY,EAAuBlJ,EAAA,CAHnCgF,EAAAA,WAAW,CACVC,WAAY,gCAOmBC,EACJoD,KANhBY,mBCCT,SAAAmB,IAFQnL,KAAAoL,sBAAwB,mCAUhCD,EAAAjL,UAAAmL,yBAAA,SAAyB/I,GACrBgJ,aAAaC,QAAQvL,KAAKoL,sBAAuB,GAAK9I,IAG1D6I,EAAAjL,UAAAsL,yBAAA,WAEI,MAAgB,QADFF,aAAaG,QAAQzL,KAAKoL,sHAjBnCD,EAAmBrK,EAAA,CAH/BgF,EAAAA,WAAW,CACVC,WAAY,oCAEDoF,mBCcT,SAAAO,EACYC,EACAC,GADA5L,KAAA2L,gBAAAA,EACA3L,KAAA4L,iBAAAA,EAXZ5L,KAAA6L,UAAY,0BAEZ7L,KAAA8L,YAA8B,CAC5BC,QAAS,GACTC,SAAU,YAUZN,EAAAxL,UAAA+L,UAAA,SAAUC,GAAV,IAAA1I,EAAAxD,KACEA,KAAKmM,qBACLnM,KAAK4L,iBAAiBjE,IAAIuE,GAAQE,WAAU,SAAAC,GACxC7I,EAAKsI,YAAYC,QAAUM,EAC3B7I,EAAK8I,cAAcJ,GAEnB1I,EAAK+I,kBAAoB/I,EAAKmI,gBAAgBa,KAAKhJ,EAAKsI,aACxDtI,EAAK+I,kBAAkBE,cAAcL,gBAI3CV,EAAAxL,UAAAwM,4BAAA,SAA4BR,EAAgBS,GAA5C,IAAAnJ,EAAAxD,KACEA,KAAK4L,iBAAiBjE,IAAIuE,GAAQE,WAAU,SAAAC,GAC1C7I,EAAKsI,YAAYC,QAAUM,EAC3B7I,EAAKsI,YAAYC,SAAW,QAAU5H,KAAKC,MAAMuI,GAAYZ,QAE7DvI,EAAK2I,qBACL3I,EAAK+I,kBAAoB/I,EAAKmI,gBAAgBa,KAAKhJ,EAAKsI,aACxDtI,EAAK+I,kBAAkBE,cAAcL,gBAIjCV,EAAAxL,UAAAiM,mBAAR,WACMnM,KAAKuM,mBACPvM,KAAKuM,kBAAkBK,WAInBlB,EAAAxL,UAAAoM,cAAR,SAAsBJ,GACpB,IAAMW,EAAsB,SAAShD,KAAKqC,GAC1ClM,KAAK8L,YAAYgB,MAAQD,EAAa,YAAc,uDAlCzBE,EAAAA,uBACCC,EAAAA,sLAbrBtB,EAAY5K,EAAA,CAHxBgF,EAAAA,WAAW,CACVC,WAAY,gCAcmBgH,EAAAA,gBACCC,EAAAA,oBAbrBtB,mBCCX,SAAAuB,IAEQjN,KAAAkN,eAAyC,IAAIC,EAAAA,QAC7CnN,KAAAoN,WAA8B,IAAID,EAAAA,QAClCnN,KAAAqN,SAA4B,IAAIF,EAAAA,QAChCnN,KAAAsN,oBAAwC,IAAIH,EAAAA,eAEnDF,EAAA/M,UAAAqN,eAAA,SAAe7I,GACZ1E,KAAKoN,WAAW/K,KAAKqC,IAGxBuI,EAAA/M,UAAAsN,0BAAA,WACG,OAAOxN,KAAKoN,WAAW7H,gBAG1B0H,EAAA/M,UAAAuN,cAAA,SAAcC,GACX1N,KAAKkN,eAAe7K,KAAKqL,IAG5BT,EAAA/M,UAAAyN,yBAAA,WACG,OAAO3N,KAAKkN,eAAe3H,gBAG9B0H,EAAA/M,UAAA0N,aAAA,SAAalJ,GACV1E,KAAKqN,SAAShL,KAAKqC,IAGtBuI,EAAA/M,UAAA2N,wBAAA,WACG,OAAO7N,KAAKqN,SAAS9H,gBAGxB0H,EAAA/M,UAAA4N,wBAAA,SAAwBxL,GACrBtC,KAAKsN,oBAAoBjL,KAAKC,IAGjC2K,EAAA/M,UAAA6N,uBAAA,WACG,OAAO/N,KAAKsN,oBAAoB/H,8GAtCzB0H,EAAenM,EAAA,CAH3BgF,EAAAA,WAAW,CACTC,WAAY,oCAEFkH,mBCiCX,SAAAe,EACUC,EACAC,EACAC,EACAC,EACAxC,GAJA5L,KAAAiO,sBAAAA,EACAjO,KAAAkO,WAAAA,EACAlO,KAAAmO,kBAAAA,EACAnO,KAAAoO,aAAAA,EACApO,KAAA4L,iBAAAA,EAhBV5L,KAAAqO,YAAa,EACbrO,KAAAsO,aAAe,mCACftO,KAAAuO,mBAAqB,oCACrBvO,KAAAwO,oBAAsB,0CACtBxO,KAAAyO,oBAAsB,0CAEtBzO,KAAA0O,kBAA4B,EAEpB1O,KAAA2O,yBAA+D,IAAIC,EAAAA,gBAAmC,MACtG5O,KAAA6O,qBAAuB7O,KAAK2O,yBAAyBpJ,sBAUrDyI,EAAA9N,UAAA4O,kBAAR,WACE9O,KAAK+O,YAAc/O,KAAKiO,sBAAsB1D,iBAC9CvK,KAAKgP,YAAchP,KAAKiO,sBAAsBxD,oBAGhDuD,EAAA9N,UAAA+O,aAAA,WACC,OAAOjP,KAAKiO,sBAAsBtD,iBAAmB,wBAGtDqD,EAAA9N,UAAAgP,gCAAA,WACE,OAAOlP,KAAK6O,sBAGdb,EAAA9N,UAAAiP,uBAAA,SAAwBC,GACtBpP,KAAK2O,yBAAyBtM,KAAK+M,GAC/BpP,KAAK0O,kBACP1O,KAAKqP,UAAUC,SAASF,EAASG,aAAcD,SAASF,EAASI,gBAIrExB,EAAA9N,UAAAuP,YAAA,WAAA,IAAAjM,EAAAxD,KAIE,OAHKA,KAAK+O,aAAgB/O,KAAKgP,aAC7BhP,KAAK8O,oBAEA,IAAI/K,EAAAA,YAAW,SAAA2L,GACtBlM,EAAKmM,YAAYvD,UAAU,CACvBwD,SAAU,WACHpM,EAAKqM,UAAYC,MAAMC,cACtBL,EAASrN,KAAKmB,EAAKqM,UACnBH,EAASE,YAETpM,EAAKwM,gBAAgBN,UAO3B1B,EAAA9N,UAAA8P,gBAAR,SAAwBN,GAAxB,IAAAlM,EAAAxD,KACM8P,MAAMC,cACRD,MAAMC,aAAaE,WAAW,CAC5BC,OAAQlQ,KAAKgP,cAEZmB,MAAK,SAACN,GACPrM,EAAKqM,SAAYA,EACjBH,EAASrN,KAAKmB,EAAKqM,UACnBH,EAASE,eAKP5B,EAAA9N,UAAAyP,UAAR,WAAA,IAAAnM,EAAAxD,KACI,OAAO,IAAI+D,EAAAA,YAAW,SAAA2L,GACjBlM,EAAKqM,SACNH,EAASE,WAETpM,EAAK4M,gBAAgBV,OAKrB1B,EAAA9N,UAAAkQ,gBAAR,SAAwBV,GAEtB,IAAMW,EAAOC,SAASC,cAAc,UACpCF,EAAKG,IAAMxQ,KAAK+O,YAChBsB,EAAK5H,KAAO,kBACZ4H,EAAKI,OAAQ,EACbJ,EAAKK,QAAU,QACfL,EAAKM,OAAS,WACZjB,EAASE,YAEXU,SAASM,qBAAqB,QAAQ,GAAGC,YAAYR,IAGvDrC,EAAA9N,UAAAmP,UAAA,SAAUyB,EAAeC,GAAzB,IAAAvN,EAAAxD,KACMA,KAAKqO,YAGTrO,KAAKyP,cAAcuB,KAAKC,EAAAA,KAAK,IAAI7E,WAAU,SAAC/B,GAC1C7G,EAAKqM,SAAWxF,EAChB7G,EAAK0N,kBACL1N,EAAK2N,aAAaL,EAAOC,OAIrB/C,EAAA9N,UAAAgR,gBAAR,WACEZ,SAAS9H,KAAK4I,UAAUC,IAAI,cAGtBrD,EAAA9N,UAAAoR,mBAAR,WACEhB,SAAS9H,KAAK4I,UAAUG,OAAO,cAGzBvD,EAAA9N,UAAAiR,aAAR,SAAqBL,EAAeC,GAApC,IAAAvN,EAAAxD,KACSmR,EAAkC,CACvC1I,KAAM,eACN+I,WAAa,CACXC,MAAO,KACPX,MAAOA,QAAgBY,EACvBX,OAAQA,QAAkBW,GAE5BC,aAAc3R,KAAK4L,iBAAiBgG,QAAQ,gCAE9C5R,KAAK6P,SAASsB,aAAa,CACzBU,OAAQV,EACRW,gBAAiB,SAACC,OAAEC,EAAAD,EAAAC,UAAWC,EAAAF,EAAAE,YAAkB,OAAAzO,EAAK0O,gBAAgBF,EAAWC,IACjFE,cAAe,WACb3O,EAAK8N,yBAMHtD,EAAA9N,UAAAgS,gBAAR,SAAwBF,EAAmBC,GAA3C,IAAAzO,EAAAxD,KACEA,KAAKoO,aAAanC,UAAUjM,KAAKsO,cACjCtO,KAAKqO,YAAa,EAGlBrO,KAAKkO,WAAW/F,gBAAgB6J,EAAWC,GAAajB,KAAKC,EAAAA,KAAK,IAAI7E,WACpE,SAACgG,GACC5O,EAAK6K,YAAa,EAClB7K,EAAK8N,qBAEL9N,EAAK2K,kBAAkBP,aAAawE,EAAI1N,SACxClB,EAAK4K,aAAanC,UAAUzI,EAAK+K,uBAEnC,SAAA1L,GACEW,EAAK6K,YAAa,EAClB7K,EAAK8N,qBAEoB,MAArBzO,EAAMA,MAAMwP,MAAgBxP,EAAMA,MAAMkJ,QAC1CvI,EAAK4K,aAAa1B,4BAA4BlJ,EAAKgL,oBAAqB3L,EAAMA,MAAMkJ,SAEpFvI,EAAK4K,aAAanC,UAAUzI,EAAKgL,kEA5IRxE,SACXhE,SACOiH,SACLvB,SACIsB,EAAAA,yNAvBjBgB,EAAYlN,EAAA,CAHxBgF,EAAAA,WAAW,CACVC,WAAY,gCAqBqBiE,EACXhE,EACOiH,EACLvB,EACIsB,EAAAA,oBAvBjBgB,mBChBb,SAAAsE,IACUtS,KAAAuS,oBAAsB,IAAIpF,EAAAA,QAC1BnN,KAAAwS,kBAAoBxS,KAAKuS,oBAAoBhN,eAE7CvF,KAAAyS,qBAAuB,IAAItF,EAAAA,QAC3BnN,KAAA0S,mBAAqB1S,KAAKyS,qBAAqBlN,sBAEvD+M,EAAApS,UAAAyS,cAAA,WACE,OAAO3S,KAAKwS,mBAGdF,EAAApS,UAAA0S,yBAAA,WAAA,IAAApP,EAAAxD,KACEsQ,SAAS9H,KAAKqK,iBAAiB,SAAS,SAAApN,GACtCjC,EAAK+O,oBAAoBlQ,KAAKoD,EAAMzE,YAIxCsR,EAAApS,UAAA4S,eAAA,WACE,OAAO9S,KAAK0S,oBAGdJ,EAAApS,UAAA6S,uBAAA,WAAA,IAAAvP,EAAAxD,KACEgT,OAAOC,SAAW,WAChBzP,EAAKiP,qBAAqBpQ,KAAK2Q,wGAvBxBV,EAAUxR,EAAA,CAHtBgF,EAAAA,WAAW,CACVC,WAAY,UAEDuM,mBCmEX,SAAAY,EACUC,EACAlF,EACAmF,EACAC,EACAC,EACAC,GALAvT,KAAAmT,oBAAAA,EACAnT,KAAAiO,sBAAAA,EACAjO,KAAAoT,oBAAAA,EACApT,KAAAqT,aAAAA,EACArT,KAAAsT,gBAAAA,EACAtT,KAAAuT,WAAAA,EA5DDvT,KAAAwG,eAAyB,EAexBxG,KAAAwT,iBAAmB,IAAIC,EAAAA,aACzBzT,KAAA0T,kBAA4B,EAWpC1T,KAAA2T,uBAAiC,EAkBjC3T,KAAA4T,OAAiB,EAEjB5T,KAAA6T,eAAyB,EAEzB7T,KAAA8T,SAAmB,EA+HrB,OA3KWtU,OAAAgC,eAAI0R,EAAAhT,UAAA,mBAAgB,KAApB,SAAqBwO,GAC5B1O,KAAKqT,aAAa3E,mBAAqBA,EAEP,kBAArBA,GAIX1O,KAAKqT,aAAalE,uBAAuBT,oCAMlClP,OAAAgC,eAAI0R,EAAAhT,UAAA,kBAAe,KAK5B,WACE,OAAOF,KAAK0T,sBANL,SAAoBK,GAC3B/T,KAAK0T,iBAAmBK,EACxB/T,KAAKmT,oBAAoBlO,mBAAmBjF,KAAK0T,mDAQ1ClU,OAAAgC,eAAI0R,EAAAhT,UAAA,uBAAoB,KAOjC,WACE,OAAOF,KAAK0T,sBARL,SAAyBK,GAChC/T,KAAK2T,sBAAwBI,EACzBA,GACF/T,KAAKgU,gDAQ4Cd,EAAAhT,UAAA+T,iBAAA,SAAiBxO,GAChEzF,KAAKsG,gBAA0C,WAAxBtG,KAAKsG,gBAC9BtG,KAAKkU,WAsBThB,EAAAhT,UAAAiU,SAAA,WAAA,IAAA3Q,EAAAxD,KACEA,KAAKiO,sBAAsB9D,kBAAkBnK,KAAKoK,gBAClDpK,KAAKmT,oBAAoBlO,mBAAmBjF,KAAK0T,kBACjD1T,KAAKmT,oBAAoBhO,oBAAoB,MAC7CnF,KAAKoU,eAAiBpU,KAAKmT,oBAAoBrP,wBAAwBsI,WAAU,SAAAiI,GAE3EA,GAAeA,EAAY1T,QAAU6C,EAAK8Q,wBAE5C9Q,EAAK0Q,aAGTlU,KAAKuU,6BAELvU,KAAKwU,mBAAqBxU,KAAKsT,gBAAgBvF,yBAAyB3B,WAAU,SAAA9J,GAAS,OAAAkB,EAAKqQ,cAAgBvR,KAEhHtC,KAAKuT,WAAWX,4BAGlBM,EAAAhT,UAAAqU,2BAAA,WAC8B,WAAxBvU,KAAKsG,gBAAuD,SAAxBtG,KAAKsG,iBAC3CtG,KAAK6T,cAAgB7T,KAAKoT,oBAAoB5H,6BAIlD0H,EAAAhT,UAAAuU,cAAA,SAAchP,GAKZzF,KAAK8T,QAJS,gBAAVrO,GAONyN,EAAAhT,UAAA8T,aAAA,WAAA,IAAAxQ,EAAAxD,KAC8B,WAAxBA,KAAKsG,gBACPoO,YAAW,WACTlR,EAAK8C,eAAiB,QACtB9C,EAAKmR,kCACJ,KAIPzB,EAAAhT,UAAA0U,UAAA,WACE5U,KAAKsG,eAAiB,QACtBtG,KAAK6U,oBACL7U,KAAK6T,eAAgB,GAGvBX,EAAAhT,UAAA4U,SAAA,WACE9U,KAAKsG,eAAiB,OACtBtG,KAAKuU,6BACLvU,KAAK+U,sBAGP7B,EAAAhT,UAAAgU,QAAA,WAAA,IAAA1Q,EAAAxD,KACEA,KAAKsG,eAAiB,SACtBtG,KAAK8T,SAAU,EACf9T,KAAK6U,oBACL7U,KAAKgV,mCAELN,YAAW,WACTlR,EAAKgQ,iBAAiByB,SACrB,MAGL/B,EAAAhT,UAAAgV,mBAAA,WACElV,KAAKkU,WAMPhB,EAAAhT,UAAAoU,qBAAA,WACE,OAAQtU,KAAKkD,iBAA2C,WAAxBlD,KAAKsG,gBAGvC4M,EAAAhT,UAAA6U,mBAAA,WACE,IAAMI,EAAO7E,SAASM,qBAAqB,QAAQ,GAE9C5Q,KAAKoV,eACRpV,KAAKoV,aAAeD,EAAKE,MAAMC,WAGjCH,EAAKE,MAAMC,UAAY,UAGzBpC,EAAAhT,UAAA2U,kBAAA,WACevE,SAASM,qBAAqB,QAAQ,GAC9CyE,MAAMC,UAAYtV,KAAKoV,aAAepV,KAAKoV,aAAe,UAGjElC,EAAAhT,UAAAyU,8BAAA,WACE,IAAMnM,EAAO8H,SAASM,qBAAqB,QAAQ,GACnD5Q,KAAKuV,YAAcvV,KAAKuV,YAAcjG,SAAS9G,EAAK6M,MAAMG,eAAiB,EAC3EhN,EAAK6M,MAAMG,cAAgBxV,KAAKuV,YAAc,IAAM,MAGtDrC,EAAAhT,UAAA8U,iCAAA,gBACkC,IAArBhV,KAAKuV,cACDjF,SAASM,qBAAqB,QAAQ,GAC9CyE,MAAMG,cAAgBxV,KAAKuV,YAAc,KAC9CvV,KAAKuV,YAAc,IAIvBrC,EAAAhT,UAAAuV,iBAAA,WACEzV,KAAKsG,eAAiB,QAGxB4M,EAAAhT,UAAAwV,YAAA,WACE1V,KAAKoU,eAAeuB,cACpB3V,KAAKqT,aAAalE,uBAAuB,MACzCnP,KAAKwU,mBAAmBmB,wDAvHK3S,SACEgH,SACFmB,SACP6C,SACGf,SACLqF,KA7DbxR,EAAA,CAAR8U,EAAAA,sEACQ9U,EAAA,CAAR8U,EAAAA,sEACQ9U,EAAA,CAAR8U,EAAAA,wBAAwBC,yCAIhB/U,EAAA,CAAR8U,EAAAA,sGAUS9U,EAAA,CAATgV,EAAAA,yEAGQhV,EAAA,CAAR8U,EAAAA,uGAUQ9U,EAAA,CAAR8U,EAAAA,4GAWoD9U,EAAA,CAApDiV,EAAAA,aAAa,0BAA2B,CAAC,4DAAmCC,oFAzClE9C,EAAqBpS,EAAA,CAJjCmV,EAAAA,UAAU,CACTC,SAAU,iBACVC,SAAA,ytDA2D+BnT,EACEgH,EACFmB,EACP6C,EACGf,EACLqF,KA9DXY,MCfAkD,EACbC,EAAAA,QAAQ,YAAa,CAGnBC,EAAAA,MAAM,KAAMjB,EAAAA,MAAM,CAACkB,QAAS,KAG5BC,EAAAA,WAAW,SAAU,CACnBnB,EAAAA,MAAM,CAACkB,QAAS,IAChBE,EAAAA,QAAQ,qCCqBV,SAAAC,EACUxI,EACAE,EACAH,GAFAjO,KAAAkO,WAAAA,EACAlO,KAAAoO,aAAAA,EACApO,KAAAiO,sBAAAA,EAjBVjO,KAAA2W,MAAa,GACb3W,KAAA4W,WAAqB,EAGX5W,KAAA6W,YAAc,IAAIpD,EAAAA,aAI5BzT,KAAA8W,YAAc,+BACd9W,KAAA+W,kBAAoB,yCACpB/W,KAAAgX,YAAc,mCAEdhX,KAAAiX,eAAiB,IAkGnB,OA1FEP,EAAAxW,UAAAiU,SAAA,WACEnU,KAAKkX,WAAalX,KAAKmX,aAGzBT,EAAAxW,UAAAkX,mBAAA,SAAmB3R,GACjBzF,KAAKgI,WAAWvC,EAAMzE,OAAO2V,QAG/BD,EAAAxW,UAAAiX,UAAA,WACE,OAAOnX,KAAKiO,sBAAsBtD,iBAAmB,wBAGvD+L,EAAAxW,UAAAmX,yBAAA,SAAyBC,GACvBtX,KAAKuX,yBACLvX,KAAKgI,WAAWsP,IAGlBZ,EAAAxW,UAAA8H,WAAA,SAAW2O,WAAXnT,EAAAxD,KACE,IAAI2W,GAAUA,EAAMhW,OAApB,CAIAX,KAAK4W,WAAW,EAChB,IAAMY,EAAqC,OAC3C,IAAmB,IAAAC,EAAAzV,EAAA2U,GAAKe,EAAAD,EAAApV,QAAAqV,EAAAnV,KAAAmV,EAAAD,EAAApV,OAAE,CAArB,IAAMsV,EAAID,EAAApV,MAGb,GAFAsV,QAAQC,IAAI,OAAQF,EAAKnO,MAErBxJ,KAAK8X,YAAYH,EAAKlP,MAM1B,GAAKzI,KAAK+X,YAAYJ,EAAKnO,MAA3B,CAMA,IAAMvB,EAAW,IAAI+P,SACrB/P,EAASgQ,OAAO,QAASN,EAAMA,EAAKO,MAGpCV,EAAgB5U,KAAK5C,KAAKkO,WAAWlG,WAAWC,SAT9CjI,KAAKoO,aAAanC,UAAU,aAAa0L,EAAKO,KAAI,qBAAqBlY,KAAKmY,iBAAiBR,EAAKnO,MAAK,iCAAiCxJ,KAAKmY,iBAAiBnY,KAAKiX,gBAAe,MAClLjX,KAAK4W,WAAY,OAPjB5W,KAAKoO,aAAanC,UAAUjM,KAAKgX,aACjChX,KAAK4W,WAAY,oGAiBrBwB,EAAAA,SAASZ,GAAiBpL,WACxB,SAACgG,GACC5O,EAAK6U,YAAYjG,GACjB5O,EAAKoT,WAAW,KAElB,SAAA/T,YACkB,QAAZ8B,EAAK,QAALoN,EAAAlP,SAAK,IAAAkP,OAAA,EAAAA,EAAElP,aAAK,IAAA8B,OAAA,EAAAA,EAAEoH,UAAgC,gBAArBlJ,EAAMyV,WACjC9U,EAAK4K,aAAa1B,4BAA4BlJ,EAAKuT,kBAAmBlU,EAAMA,MAAMkJ,SAElFvI,EAAK4K,aAAanC,UAAUzI,EAAKuT,mBAEnCvT,EAAKoT,WAAW,OAUtBF,EAAAxW,UAAAmY,YAAA,SAAYjG,GACVpS,KAAK6W,YAAY5B,KAAK7C,IAGxBsE,EAAAxW,UAAA4X,YAAA,SAAYS,GACV,MAAkC,UAA3BA,EAASC,MAAM,KAAK,IAG7B9B,EAAAxW,UAAA6X,YAAA,SAAYU,GACV,OAAOA,EAAiBzY,KAAKiX,gBAG/BP,EAAAxW,UAAAiY,iBAAA,SAAiB3O,GACf,OAAOkP,KAAKC,MAAMnP,EAAO,OAO3BkN,EAAAxW,UAAAqX,uBAAA,WACEvX,KAAK4Y,eAAeC,cAAcxD,MAAQ,6CA7FtBrP,SACE0F,SACS1B,KAdxBlJ,EAAA,CAAR8U,EAAAA,sEACS9U,EAAA,CAATgV,EAAAA,oEAE4BhV,EAAA,CAA5BgY,EAAAA,UAAU,kCAAkCC,EAAAA,kDARlCrC,EAAkB5V,EAAA,CAP9BmV,EAAAA,UAAU,CACTC,SAAU,aACVC,SAAA,6wCACA6C,WAAY,CACV5C,4BAoBoBpQ,EACE0F,EACS1B,KAnBtB0M,mBCET,SAAAuC,EACU/K,EACAE,GADApO,KAAAkO,WAAAA,EACAlO,KAAAoO,aAAAA,EATFpO,KAAAkZ,aAAgC,GAChClZ,KAAAmZ,mBAAiD,IAAIhM,EAAAA,QAErDnN,KAAAoZ,eAAiB,oCACjBpZ,KAAAqZ,iBAAmB,kCACnBrZ,KAAAsZ,gBAAkB,iCAOtBtZ,KAAKuZ,mBAGTN,EAAA/Y,UAAAsZ,gBAAA,SAAgBN,GACZlZ,KAAKkZ,aAAeA,GAGxBD,EAAA/Y,UAAAuZ,gBAAA,SAAgBC,GACZ1Z,KAAKmZ,mBAAmB9W,KAAKqX,IAGzBT,EAAA/Y,UAAAqZ,UAAR,WAAA,IAAA/V,EAAAxD,KACIA,KAAKmZ,mBACFnI,KAAK2I,EAAAA,aAAa,MAClBvN,WAAU,SAACwN,GACRpW,EAAKqW,cAAcD,OAIrBX,EAAA/Y,UAAA2Z,cAAR,SAAsBD,GAAtB,IAAApW,EAAAxD,KACU6D,EAAyB7D,KAAK8Z,eAAeF,EAAkBG,IAChElW,GAIL7D,KAAKoO,aAAanC,UAAUjM,KAAKqZ,kBACjCrZ,KAAKkO,WACFvF,cAAc9E,EAAQmW,aAAcnW,EAAQa,SAC5C0H,WACC,SAAC6N,GACCpW,EAAQmW,aAAeC,EAAKD,aAC5BxW,EAAK4K,aAAanC,UAAUzI,EAAK8V,oBAEnC,SAACzW,GACCgB,EAAQmW,aAAeJ,EAAkBM,aACzC1W,EAAK4K,aAAanC,UAAUzI,EAAK4V,oBAbrCpZ,KAAKoO,aAAanC,UAAUjM,KAAKoZ,iBAkB/BH,EAAA/Y,UAAA4Z,eAAR,SAAuBpV,WACnB,GAAK1E,KAAKkZ,aAAV,KAIA,IAAsB,IAAAvU,EAAA3C,EAAAhC,KAAKkZ,cAAYtU,EAAAD,EAAAtC,QAAAuC,EAAArC,KAAAqC,EAAAD,EAAAtC,OAAE,CAApC,IAAMwB,EAAOe,EAAAtC,MAChB,GAAGuB,EAAQa,UAAYA,EACrB,OAAOb,oGAIX,OAAO,gDAvDWmC,SACE0F,sIAXfuN,EAAoBnY,EAAA,CADhCgF,EAAAA,WAAW,CAACC,WAAY,gCAWCC,EACE0F,KAXfuN,mBCkBX,SAAAkB,EACUhH,EACAiH,GADApa,KAAAmT,oBAAAA,EACAnT,KAAAoa,qBAAAA,EAZVpa,KAAAkZ,aAAgC,GAMvBlZ,KAAAkD,iBAA2B,EAEpClD,KAAAqa,oBAA6C,IAAI5G,EAAAA,aAqDnD,OA9CE0G,EAAAja,UAAAiU,SAAA,WACEnU,KAAKuZ,aAGPY,EAAAja,UAAAoa,cAAA,SAAclI,GAAd,IAAA5O,EAAAxD,KACEoS,EAAI3O,SAAQ,SAAAI,GACV,OAAAL,EAAK0V,aAAatW,KAAKiB,MAEzB7D,KAAKoa,qBAAqBZ,gBAAgBxZ,KAAKkZ,eAGjDiB,EAAAja,UAAAqa,kBAAA,SAAkBhW,GACY,WAAxBvE,KAAKsG,iBAGJtG,KAAKkZ,aAAa3U,GAAOiW,UAI5Bxa,KAAKmT,oBAAoB1O,sBAAsBzE,KAAKkZ,aAAa3U,GAAOG,SACxE1E,KAAKkZ,aAAa3U,GAAOiW,UAAW,IAJpCxa,KAAKmT,oBAAoBvP,eAAe5D,KAAKkZ,aAAa3U,IAC1DvE,KAAKkZ,aAAa3U,GAAOiW,UAAW,KAOxCL,EAAAja,UAAAua,wBAAA,WACEza,KAAKqa,oBAAoBpF,MAAK,IAGhCkF,EAAAja,UAAAuZ,gBAAA,SAAgBC,GACd1Z,KAAKoa,qBAAqBX,gBAAgBC,IAGpCS,EAAAja,UAAAqZ,UAAR,WAAA,IAAA/V,EAAAxD,KACEA,KAAK0a,mBAAqB1a,KAAKmT,oBAAoBrP,wBAAwBsI,WAAU,SAAAuO,WAC7EC,EAAa,GACnBD,EAAa1W,KAAI,SAAAmO,GAAO,OAAAwI,EAAWhY,KAAKwP,EAAI1N,gBAC5C,IAAsB,IAAAC,EAAA3C,EAAAwB,EAAK0V,cAAYtU,EAAAD,EAAAtC,QAAAuC,EAAArC,KAAAqC,EAAAD,EAAAtC,OAAE,CAApC,IAAMwB,EAAOe,EAAAtC,OAC6B,IAAzCsY,EAAW7V,QAAQlB,EAAQa,WAC7Bb,EAAQ2W,UAAW,0GAK3BL,EAAAja,UAAAwV,YAAA,WACE1V,KAAK0a,mBAAmB/E,wDAhDK3S,SACCiW,KARvBnY,EAAA,CAAR8U,EAAAA,sEACQ9U,EAAA,CAAR8U,EAAAA,oEACQ9U,EAAA,CAAR8U,EAAAA,wEAED9U,EAAA,CADCgV,EAAAA,yBACoBrC,EAAAA,yDAVV0G,EAAmBrZ,EAAA,CAP/BmV,EAAAA,UAAU,CACTC,SAAU,cACVC,SAAA,u/GACA6C,WAAY,CACV5C,4BAgB6BpT,EACCiW,KAdrBkB,mBC4DX,SAAAU,EACUC,EACA1M,EACA2M,GAFA/a,KAAA8a,oBAAAA,EACA9a,KAAAoO,aAAAA,EACApO,KAAA+a,MAAAA,EA7DV/a,KAAAkD,iBAA2B,EAI3BlD,KAAA6T,eAAgB,EAGhB7T,KAAAwT,iBAAmB,IAAIC,EAAAA,aAGvBzT,KAAAgb,WAAa,IAAIvH,EAAAA,aAGjBzT,KAAAqa,oBAA6C,IAAI5G,EAAAA,aAEjDzT,KAAAib,KAAqB,CACnB,CACE/C,KAAM,yBACN5V,MAAO,aACPkY,UAAU,EACVT,GAAI,GAEN,CACE7B,KAAM,yBACN5V,MAAO,cACPyX,GAAI,GAEN,CACE7B,KAAM,6BACN5V,MAAO,aACPyX,GAAI,GAEN,CACE7B,KAAM,yBACN5V,MAAO,cACP4Y,MAAM,EACNnB,GAAI,IAIR/Z,KAAAmb,UAAwBnb,KAAKib,KAAK,GAIlCjb,KAAAob,SAAU,EAIVpb,KAAAqb,WAAY,EAKZrb,KAAAsb,yBAA8C,CAC5CvP,QAAS,GACTC,SAAU,KAqDd,OA5CE6O,EAAA3a,UAAAiU,SAAA,WAAA,IAAA3Q,EAAAxD,KACEA,KAAK8a,oBAAoBnN,2BAA2BvB,WAAU,SAAAsB,GAC5DlK,EAAK2X,UAAY3X,EAAKyX,KAAK,GAC3BzX,EAAKkK,UAAYA,EACjBlK,EAAK4X,SAAU,EACf5X,EAAKwX,WAAW/F,KAAKzR,EAAKyX,KAAK,QAInCJ,EAAA3a,UAAAqb,WAAA,SAAWC,GACTxb,KAAKqb,WAAY,EACjBrb,KAAKob,SAAU,EACfpb,KAAKmb,UAAYK,GAGnBX,EAAA3a,UAAAoa,cAAA,SAAclI,GACZpS,KAAKqb,WAAY,EACjBrb,KAAKyb,qBAAqBnB,cAAclI,IAG1CyI,EAAA3a,UAAAwb,aAAA,SAAaxP,GACXlM,KAAKob,SAAU,EACfpb,KAAKub,WAAWvb,KAAKib,KAAK,IACtB/O,GACFlM,KAAKoO,aAAanC,UAAUC,GAE9BlM,KAAKgb,WAAW/F,KAAK,UAGvB4F,EAAA3a,UAAAyb,kBAAA,WACE3b,KAAKmb,UAAYnb,KAAKib,KAAK,IAG7BJ,EAAA3a,UAAA0b,2BAAA,WACE5b,KAAKqa,oBAAoBpF,MAAK,IAGhC4F,EAAA3a,UAAA2b,iBAAA,SAAiBpW,KAIjBoV,EAAA3a,UAAAgV,mBAAA,WACElV,KAAKwT,iBAAiByB,iDA/COhI,SACPvB,SACPoQ,EAAAA,UA7DjBhb,EAAA,CADC8U,EAAAA,wEAGD9U,EAAA,CADC8U,EAAAA,sEAGD9U,EAAA,CADC8U,EAAAA,qEAID9U,EAAA,CADCgV,EAAAA,yEAIDhV,EAAA,CADCgV,EAAAA,mEAIDhV,EAAA,CADCgV,EAAAA,yBACoBrC,EAAAA,yDAsCrB3S,EAAA,CADCgY,EAAAA,UAAW,kCACUqB,+CAtDXU,EAAgB/Z,EAAA,CAJ5BmV,EAAAA,UAAU,CACTC,SAAU,WACVC,SAAA,g2HAgE+BlJ,EACPvB,EACPoQ,EAAAA,UAhENjB,mBCTb,SAAAkB,IAEY/b,KAAAgc,cAAgB,IAAIvI,EAAAA,aAESzT,KAAAic,WAAa,OACtBjc,KAAAuW,QAAU,IA0B1C,OAxBwCwF,EAAA7b,UAAAgc,WAAA,SAAWC,GAC/CA,EAAIC,iBACJD,EAAIE,kBACJrc,KAAKic,WAAa,UAClBjc,KAAKuW,QAAU,OAG6BwF,EAAA7b,UAAAoc,YAAP,SAAmBH,GACxDA,EAAIC,iBACJD,EAAIE,kBACJrc,KAAKic,WAAa,OAClBjc,KAAKuW,QAAU,KAGwBwF,EAAA7b,UAAAqc,OAAP,SAAcJ,GAC9CA,EAAIC,iBACJD,EAAIE,kBACJrc,KAAKic,WAAa,UAClBjc,KAAKuW,QAAU,IACf,IAAMI,EAAQwF,EAAIK,aAAa7F,MAC3BA,EAAMhW,OAAS,GACjBX,KAAKgc,cAAc/G,KAAK0B,IA1BlB7V,EAAA,CAATgV,EAAAA,sEAEsChV,EAAA,CAAtC2b,EAAAA,YAAY,oFACiB3b,EAAA,CAA7B2b,EAAAA,YAAY,wEAEyB3b,EAAA,CAArCiV,EAAAA,aAAa,WAAY,CAAC,mIAOYjV,EAAA,CAAtCiV,EAAAA,aAAa,YAAa,CAAC,oIAOMjV,EAAA,CAAjCiV,EAAAA,aAAa,OAAQ,CAAC,+HArBZgG,EAAiBjb,EAAA,CAH7B4b,EAAAA,UAAU,CACTxG,SAAU,mBAEC6F,mBCYX,SAAAY,EACU1W,EACAgI,EACArC,GAHV,IAAApI,EAAAxD,KACUA,KAAAiG,KAAAA,EACAjG,KAAAiO,sBAAAA,EACAjO,KAAA4L,iBAAAA,EALV5L,KAAA4c,UAAY,CAACC,GAAM,QAASC,GAAM,QAASC,GAAM,QAASC,GAAM,SAO9Dhd,KAAKid,QAAQjd,KAAK4L,iBAAiBsR,aACnCld,KAAK4L,iBAAiBuR,aAAa/Q,WAAU,SAAAgR,GAC3C5Z,EAAKyZ,QAAQG,EAASC,gBAIzBV,EAAAzc,UAAA+c,QAAA,SAAQI,GACPrd,KAAKqd,KAAOrd,KAAK4c,UAAUS,GAAQrd,KAAK4c,UAAUS,GAAQ,SAG5DV,EAAAzc,UAAAod,eAAA,SAAeC,EAAkBC,EAAiBC,GAC5Czd,KAAK0d,aAAc1d,KAAKkQ,SAC1BlQ,KAAK0d,WAAa1d,KAAKiO,sBAAsBpD,kBAC7C7K,KAAKkQ,OAASlQ,KAAKiO,sBAAsBlD,qBAG3C,IAMI4S,EANEC,EAAc,CAClBtW,QAAS,IAAIC,EAAAA,YAAY,CACvBC,cAAe,UAAYxH,KAAKkQ,UAOpC,GAAIqN,IAAa,QAAQ1T,KAAK0T,GAC5BI,EAAU,iBAAiBJ,EAAQ,aAAaC,EAAO,SAASC,EAAI,WAAWzd,KAAKqd,SAE/E,CACL,IAAMQ,EAAe7d,KAAKiO,sBAAsBhD,kBAI9C0S,EADEE,GAAiC,UAAjBA,GAA6C,SAAjBA,EACpC,iBAAiBA,EAAY,aAAaL,EAAO,SAASC,EAAI,gBAE9D,qBAAqBD,EAAO,SAASC,EAInD,OAAOzd,KAAKiG,KAAK0B,IAAI3H,KAAK0d,WAAaC,EAASC,GAAa5M,KAC3D/M,EAAAA,KAAI,SAACgW,GACH,OAAOA,gDA7CG9Q,EAAAA,kBACiBa,SACLgD,EAAAA,kMATjB2P,EAAa7b,EAAA,CAHzBgF,EAAAA,WAAW,CACVC,WAAY,gCASIoD,EAAAA,WACiBa,EACLgD,EAAAA,oBATjB2P,MCPAmB,EACbzH,EAAAA,QAAQ,gBAAiB,CACvBG,EAAAA,WAAW,0BAA2B,IACtCA,EAAAA,WAAW,aAAc,CACvBuH,EAAAA,MAAM,SAAU,CACd1I,EAAAA,MAAM,CAACkB,QAAS,EAAGyH,UAAW,sBAC9BC,EAAAA,QAAQ,GAAI,CACVxH,EAAAA,QAAQ,uCAAwCpB,EAAAA,MAAM,CAAEkB,QAAS,EAAGyH,UAAW,aAEhF,CAAEE,UAAU,qBC6CjB,SAAAC,EACUC,EACAlQ,EACAE,EACAxC,GAHA5L,KAAAoe,gBAAAA,EACApe,KAAAkO,WAAAA,EACAlO,KAAAoO,aAAAA,EACApO,KAAA4L,iBAAAA,EArCV5L,KAAAqe,YAAsB,GAGtBre,KAAAse,eAAyB,EAGzBte,KAAAue,gBAAkB,IAAI9K,EAAAA,aAEtBzT,KAAAwd,QAAU,GACVxd,KAAAwe,cAAgB,IAAIrR,EAAAA,QAEpBnN,KAAAye,SAAW,EAEXze,KAAA0e,YAAc,EACd1e,KAAA4W,WAAY,EACZ5W,KAAA2e,eAAgB,EAChB3e,KAAA4e,cAAiC,GACjC5e,KAAA6e,WAAa,EACb7e,KAAA8e,kBAAoB,CAAC,KAAM,KAAM,IAAK,KACtC9e,KAAA+e,aAAe,KAEf/e,KAAAsO,aAAe,mCACftO,KAAAgf,SAAW,+BACXhf,KAAAuO,mBAAqB,oCACrBvO,KAAAif,iBAAmB,uCACnBjf,KAAAkf,oBAAsB,0CAEdlf,KAAAmf,KAAuB,GAyKjC,OAvK6B3f,OAAAgC,eAAI2c,EAAAje,UAAA,UAAO,KAAX,SAAYkf,GACrCpf,KAAK+e,aAAeK,mCAUtBjB,EAAAje,UAAAiU,SAAA,aAGAgK,EAAAje,UAAAmf,gBAAA,WACErf,KAAKsf,eAAiBtf,KAAKqe,YAC3Bre,KAAK4W,WAAY,EAEjB5W,KAAKuf,6BACLvf,KAAKwf,mBACLxf,KAAKyf,UAGPtB,EAAAje,UAAAqf,2BAAA,WAAA,IAAA/b,EAAAxD,KACQ8Q,EAAQ9Q,KAAK+e,aAAalG,cAAc6G,YAElB,WAAxB1f,KAAKsG,iBACPtG,KAAK6e,WAAa,GAGpB7e,KAAK8e,kBAAkBrb,SAAQ,SAAAnB,GACzBwO,EAAQxO,GACVkB,EAAKqb,iBAKXV,EAAAje,UAAAyf,oBAAA,WACE3f,KAAK4f,kBAGPzB,EAAAje,UAAA2f,gBAAA,WACE7f,KAAK8f,iBAGP3B,EAAAje,UAAA0f,eAAA,WACE5f,KAAKyf,UAGPtB,EAAAje,UAAAuf,OAAA,WAAA,IAAAjc,EAAAxD,KAEE,GADA4X,QAAQC,IAAI,YACR7X,KAAK4W,YAGL5W,KAAKqe,cAAgBre,KAAKsf,gBAC5Btf,KAAK+f,cAIH/f,KAAKye,UAAYze,KAAKye,WAAaze,KAAK0e,YAAc,GAAK1e,KAAKwd,UAApE,CAIAxd,KAAK4W,WAAY,EACjB,IAAMoJ,EAAYhgB,KAAKoe,gBAAgBd,eAAetd,KAAKqe,YAAare,KAAKwd,QAASxd,KAAK0e,aAAatS,WACtG,SAAC6N,GACCrC,QAAQC,IAAI,qBACZD,QAAQC,IAAIoC,GACZzW,EAAKyc,YAAchG,EACnBzW,EAAKib,SAAWjb,EAAKyc,YAAYC,cAE7B1c,EAAKib,UACPxE,EAAKkG,OAAO1c,SAAQ,SAAA2c,GAClB,IAAMC,EAAkB7c,EAAK8c,gBACvBvP,EAAUqP,EAAMrP,OAASqP,EAAMtP,MAAS,IAE9CtN,EAAKob,cAAcyB,GAAiBtP,QAAUA,EAC9CvN,EAAKob,cAAcyB,GAAiBF,OAAOvd,KAAKwd,MAIpD5c,EAAKoT,WAAY,EACjBpT,EAAKmb,eAAgB,KAEvB,SAAA9b,GACEW,EAAKoT,WAAY,EACjBpT,EAAKmb,eAAgB,EACrBnb,EAAK4K,aAAanC,UAAUzI,EAAK0b,wBAIrClf,KAAKmf,KAAKvc,KAAKod,KAGjB7B,EAAAje,UAAA4f,cAAA,WACE,IAAI9f,KAAK4W,UAAT,CAGA,IAAMyJ,EAAkBrgB,KAAKsgB,gBACvBC,EAAUvgB,KAAK4e,cAAcyB,GAAiBF,OAAOngB,KAAK4e,cAAcyB,GAAiBF,OAAOxf,OAAS,IAC7F4f,EAAUjQ,SAASkQ,cAAgC,YAAcD,EAAQ/P,IAAIiQ,OAAS,MAAQ,QAGzGzgB,KAAK4W,YACR5W,KAAK0e,aAAe,EACpB1e,KAAKyf,aAKXtB,EAAAje,UAAAsf,iBAAA,WACE,IAAK,IAAIkB,EAAY,EAAGA,EAAc1gB,KAAK6e,WAAa6B,IAAe,CAKrE1gB,KAAK4e,cAAchc,KAJiB,CAClCmO,OAAQ,EACRoP,OAAQ,OAMdhC,EAAAje,UAAAogB,cAAA,WACE,IAAMK,EAAa,CACjBpc,MAAO,EACPwM,OAAQ/Q,KAAK4e,cAAc,GAAG7N,QAQhC,OANA/Q,KAAK4e,cAAcnb,SAAQ,SAACmd,EAAcrc,GACpCoc,EAAW5P,OAAS6P,EAAa7P,SACnC4P,EAAWpc,MAAQA,EACnBoc,EAAW5P,OAAS6P,EAAa7P,WAG9B4P,EAAWpc,OAGpB4Z,EAAAje,UAAA6f,YAAA,WACE/f,KAAKsf,eAAiBtf,KAAKqe,YAC3Bre,KAAK4e,cAAgB,GACrB5e,KAAK0e,YAAc,EACnB1e,KAAKwf,oBAGPrB,EAAAje,UAAA2gB,YAAA,SAAYT,EAAyBhY,GAArC,IAAA5E,EAAAxD,KACEogB,EAAMU,WAAY,EAElB,IAAMC,EAAY/gB,KAAKkO,WAAW/F,gBAAgBC,EAAKpI,KAAK4L,iBAAiBgG,QAAQ5R,KAAKgf,WAAW5S,WACnG,SAACgG,GACCgO,EAAMU,WAAY,EAClBV,EAAMY,UAAW,EACjBxd,EAAK4K,aAAanC,UAAUzI,EAAK+K,uBAEnC,SAAA1L,GACEud,EAAMU,WAAY,EACM,MAArBje,EAAMA,MAAMwP,MAAgBxP,EAAMA,MAAMkJ,QACzCvI,EAAK4K,aAAa1B,4BAA4BlJ,EAAKyb,iBAAkBpc,EAAMA,MAAMkJ,SAEjFvI,EAAK4K,aAAanC,UAAUzI,EAAKyb,qBAKrCjf,KAAKoO,aAAanC,UAAUjM,KAAKsO,cACjCtO,KAAKmf,KAAKvc,KAAKme,IAGnB5C,EAAAje,UAAAwV,YAAA,WACE1V,KAAKmf,KAAK1b,SAAQ,SAAAwd,GAAO,OAAAA,EAAItL,2DAhKJgH,SACL3W,SACE0F,SACIsB,EAAAA,oBAvC5BlM,EAAA,CADC8U,EAAAA,sEAGD9U,EAAA,CADC8U,EAAAA,mEAID9U,EAAA,CADC8U,EAAAA,sEAID9U,EAAA,CADCgV,EAAAA,wEAwB0BhV,EAAA,CAA1BgY,EAAAA,UAAU,gCAAqCC,EAAAA,mCAAAA,EAAAA,0CAlCrCoF,EAAiBrd,EAAA,CAR7BmV,EAAAA,UAAU,CACTC,SAAU,aACVC,SAAA,smJACA6C,WAAY,CACV5C,EACA0H,4BA0CyBnB,EACL3W,EACE0F,EACIsB,EAAAA,oBA1CjBmR,mBCqCT,SAAA+C,EACYhT,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,GAPAphB,KAAAkO,WAAAA,EACAlO,KAAAmT,oBAAAA,EACAnT,KAAAiG,KAAAA,EACAjG,KAAAkK,cAAAA,EACAlK,KAAAmhB,oBAAAA,EACAnhB,KAAAoO,aAAAA,EACApO,KAAA4L,iBAAAA,EACA5L,KAAAohB,gBAAAA,EA9CZphB,KAAAkZ,aAAgC,GAEhClZ,KAAAqhB,mBAAyC,IAAI5N,EAAAA,aAG7CzT,KAAAshB,aAA6B,CAC3BC,UAAM7P,EACN8P,WAAO9P,EACP2M,YAAa,GACboD,WAAY,EACZC,aAAc,GACdhD,YAAa,GAGf1e,KAAA2hB,sBAAgC,EAGhC3hB,KAAA4hB,SAAmB,EAEnB5hB,KAAA6hB,cAAuC,IAAIpO,EAAAA,aAG3CzT,KAAA8hB,cAAgB,IAAIrO,EAAAA,aAEpBzT,KAAA+hB,kBAAqD,IAAItO,EAAAA,aAEhDzT,KAAA4W,WAAY,EASb5W,KAAAgiB,eAAiB,oCACjBhiB,KAAAiiB,oBAAsB,sCAY1BjiB,KAAKkiB,aAAeliB,KAAKohB,gBAAgBzW,iBAAmB,eA2FpE,OAvFIuW,EAAAhhB,UAAAiiB,uBAAA,SAAuB1c,GACrBzF,KAAKkZ,aAAazV,SAAQ,SAAAwW,GACxBA,EAAKmI,YAAc3c,KAErBzF,KAAKqiB,uBAGPnB,EAAAhhB,UAAAoiB,qBAAA,SAAqB/d,GACfvE,KAAK4hB,UAGT5hB,KAAKkZ,aAAa3U,GAAO6d,aAAepiB,KAAKkZ,aAAa3U,GAAO6d,YACjEpiB,KAAKqiB,wBAIPnB,EAAAhhB,UAAAqiB,gBAAA,WACEviB,KAAK8hB,cAAc7M,QAGrBiM,EAAAhhB,UAAAsiB,OAAA,SAAO3e,GACL7D,KAAKmhB,oBAAoB1T,cAAc5J,IAGzCqd,EAAAhhB,UAAAqa,kBAAA,SAAkBhW,GACZvE,KAAK4hB,SAAmC,WAAxB5hB,KAAKsG,iBAGpBtG,KAAKkZ,aAAa3U,GAAOiW,UAI5Bxa,KAAKmT,oBAAoB1O,sBAAsBzE,KAAKkZ,aAAa3U,GAAOG,SACxE1E,KAAKkZ,aAAa3U,GAAOiW,UAAW,IAJpCxa,KAAKmT,oBAAoBvP,eAAe5D,KAAKkZ,aAAa3U,IAC1DvE,KAAKkZ,aAAa3U,GAAOiW,UAAW,KAOxC0G,EAAAhhB,UAAAuiB,YAAA,SAAY5e,GAAZ,IAAAL,EAAAxD,KACE6D,EAAQ6e,SAAU,EAClB1iB,KAAKkO,WAAWtF,UAAU/E,EAAQa,SAAS0H,WACzC,SAAA6N,GACEzW,EAAK2d,oBAAoB5T,eAAe1J,EAAQa,SAChDlB,EAAK2P,oBAAoB1O,sBAAsBZ,EAAQa,YAEzD,SAAA7B,GACE,IAAM8f,EAAuB,MAAjB9f,EAAM+f,OAAkBpf,EAAKye,oBAAqBze,EAAKwe,eACnEne,EAAQ6e,SAAU,EAClBlf,EAAK4K,aAAanC,UAAU0W,OAIlCzB,EAAAhhB,UAAA2iB,oBAAA,SAAoBpd,GAClBA,EAAMzE,OAAOwP,IAAMxQ,KAAKkiB,cAG1BhB,EAAAhhB,UAAA4iB,cAAA,SAAc9I,EAAsB+I,GAApC,IAAAvf,EAAAxD,KACEA,KAAKiG,KAAK0B,IAAI3H,KAAKgjB,eAAeD,GAAY,CAAEE,aAAc,SAAU7W,WAAU,SAAA8W,GAChF,IAAI9a,EAAM+a,IAAIC,gBAAgBF,GAC9B1f,EAAK6f,YAAYjb,EAAK4R,GACtBmJ,IAAIG,gBAAgBlb,OAIxB8Y,EAAAhhB,UAAAqjB,aAAA,SAAa7e,GACX1E,KAAK+hB,kBAAkB9M,KAAK,CAAC8E,GAAIrV,EAASwV,aAAcla,KAAKka,gBAGvDgH,EAAAhhB,UAAA8iB,eAAR,SAAuBD,GACrB,OAAO/iB,KAAKkK,cAAcX,UAAU,OAASwZ,GAGvC7B,EAAAhhB,UAAAmiB,oBAAR,WACEriB,KAAKqhB,mBAAmBpM,QAGlBiM,EAAAhhB,UAAAmjB,YAAR,SAAoBjb,EAAaC,GAC/B,IAAMmb,EAASlT,SAASC,cAAc,KACtCiT,EAAEC,KAAOrb,EACTob,EAAEE,SAAWrb,EACbmb,EAAEG,SAGJzC,EAAAhhB,UAAA0jB,UAAA,WACM5jB,KAAK6jB,eACP7jB,KAAK6jB,cAAclO,wDAjGC3P,SACShD,SACfmG,EAAAA,kBACSC,SACM6D,SACPvB,SACIsB,EAAAA,wBACDhD,KA9C7BlJ,EAAA,CADC8U,EAAAA,mEAGD9U,EAAA,CADCgV,EAAAA,yBACmBrC,EAAAA,wDAGpB3S,EAAA,CADC8U,EAAAA,oEAUD9U,EAAA,CADC8U,EAAAA,6EAID9U,EAAA,CADC8U,EAAAA,gEAGD9U,EAAA,CADCgV,EAAAA,yBACcrC,EAAAA,mDAGf3S,EAAA,CADCgV,EAAAA,sEAGDhV,EAAA,CADCgV,EAAAA,yBACkBrC,EAAAA,uDAEV3S,EAAA,CAAR8U,EAAAA,iEAGD9U,EAAA,CADC8U,EAAAA,sEA9BiBsL,EAAmBpgB,EAAA,CADxC4b,EAAAA,mCA0C2B1W,EACShD,EACfmG,EAAAA,WACSC,EACM6D,EACPvB,EACIsB,EAAAA,iBACDhD,KAhDXkX,oBCyBpB,SAAA4C,EACE5V,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,GARF,IAAA5d,EAUEugB,EAAAnjB,KAAAZ,KACEkO,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,IACDphB,YA9BHwD,EAAAwgB,YAAa,EAGbxgB,EAAAygB,kBAAwC,IAAIxQ,EAAAA,aAG5CjQ,EAAA6W,oBAA6C,IAAI5G,EAAAA,aAEjDjQ,EAAA0gB,iBAA2B,EAC3B1gB,EAAA2gB,qBAAsB,IAmCxB,OAtDsCrkB,EAAAgkB,EAAAC,GA2CpCD,EAAA5jB,UAAAiU,SAAA,WACEnU,KAAKkkB,gBAAwC,eAAtBlkB,KAAKokB,cAG9BN,EAAA5jB,UAAAmkB,mBAAA,WACErkB,KAAKqa,oBAAoBpF,MAAK,IAGhC6O,EAAA5jB,UAAAokB,oBAAA,WACEtkB,KAAKikB,kBAAkB5hB,iDA9BX2D,SACShD,SACfmG,EAAAA,kBACSC,SACM6D,SACPvB,SACIsB,EAAAA,wBACDhD,KA1BnBlJ,EAAA,CADC8U,EAAAA,oEAGD9U,EAAA,CADC8U,EAAAA,iEAGD9U,EAAA,CADC8U,EAAAA,+DAGD9U,EAAA,CADC8U,EAAAA,6DAKD9U,EAAA,CADCgV,EAAAA,yBACkBrC,EAAAA,uDAGnB3S,EAAA,CADCgV,EAAAA,yBACoBrC,EAAAA,yDAhBVqQ,EAAgBhjB,EAAA,CAP5BmV,EAAAA,UAAU,CACTC,SAAU,WACVC,SAAA,m1HACA6C,WAAY,CACV5C,4BAyBYpQ,EACShD,EACfmG,EAAAA,WACSC,EACM6D,EACPvB,EACIsB,EAAAA,iBACDhD,KA7BR8Z,IAAyB5C,gBCWpC,SAAAqD,EACUta,GAAAjK,KAAAiK,kBAAAA,EAbAjK,KAAAwkB,WAAa,IAAI/Q,EAAAA,aAE3BzT,KAAA4W,WAAqB,EACrB5W,KAAAykB,eAAyB,EACzBzkB,KAAA0kB,gBAA0B,EAC1B1kB,KAAA2kB,oBAA8B,GAG9B3kB,KAAA4kB,YAAsB,mCACtB5kB,KAAA6kB,YAAsB,mCACtB7kB,KAAA8kB,eAAyB,0DA6F3B,OAvFEP,EAAArkB,UAAAiU,SAAA,WACEnU,KAAKka,aAAela,KAAK0N,UAAUsM,cAGrCuK,EAAArkB,UAAA6kB,OAAA,WAAA,IAAAvhB,EAAAxD,KACE,IAAIA,KAAK4W,UAAT,CAGA5W,KAAK4W,WAAY,EAEZ5W,KAAKykB,eAAmBzkB,KAAK0kB,iBAChC1kB,KAAK4W,WAAY,EACjB5W,KAAK0b,gBAGP,IAAMsJ,EAAiChlB,KAAKiK,kBAAkB3B,WAAWtI,KAAK2kB,oBAAqB3kB,KAAK0N,UAAUhJ,SAC5GugB,EAAoCjlB,KAAKiK,kBAAkBtB,cAAc3I,KAAK0N,UAAUsM,aAAcha,KAAK0N,UAAUhJ,SAExH1E,KAAKykB,eAAiBzkB,KAAK0kB,eAC5B1kB,KAAKklB,oBAAoBD,EAAkBD,GAI1ChlB,KAAKykB,cACNO,EAAc5Y,WAAU,SAAA6N,GACtBzW,EAAKoT,WAAY,EACjBpT,EAAKkY,aAAalY,EAAKshB,mBAEzB,SAAAjiB,GACEW,EAAKoT,WAAY,EACjBpT,EAAKmhB,oBAAsB,GAC3BnhB,EAAKkY,aAAalY,EAAKohB,iBAKvB5kB,KAAK0kB,gBACPO,EAAiB7Y,WAAU,SAAA6N,GACzBzW,EAAKoT,WAAY,EACjBpT,EAAK0W,aAAe1W,EAAKkK,UAAUsM,aACnCxW,EAAKkY,aAAalY,EAAKshB,mBAEzB,SAAAjiB,GACEW,EAAKoT,WAAY,EACjBpT,EAAKkK,UAAUsM,aAAexW,EAAK0W,aACnC1W,EAAKkY,aAAalY,EAAKohB,gBAG3B5kB,KAAK0kB,gBAAiB,KAGxBH,EAAArkB,UAAAwb,aAAA,SAAaxP,GACXlM,KAAKwkB,WAAWvP,KAAK/I,IAGvBqY,EAAArkB,UAAAilB,cAAA,WACEnlB,KAAKykB,eAAgB,EACrBzkB,KAAK0kB,gBAAiB,EACtB1kB,KAAK0N,UAAUsM,aAAeha,KAAKka,cAGrCqK,EAAArkB,UAAAklB,SAAA,WACEplB,KAAK0b,aAAa,KAGpB6I,EAAArkB,UAAAmlB,aAAA,SAAaC,GACXtlB,KAAK2kB,oBAAsBW,GAGrBf,EAAArkB,UAAAglB,oBAAR,SAA4BD,EAAmCD,GAA/D,IAAAxhB,EAAAxD,KAEEilB,EAAiB7Y,WACf,SAAAmZ,GACEP,EAAc5Y,WACZ,SAAAoZ,GACEhiB,EAAKkY,aAAalY,EAAKshB,mBAEzB,SAAAjiB,GACEW,EAAKkY,aAAalY,EAAKohB,mBAI7B,SAAA/hB,GACEW,EAAKkY,aAAalY,EAAKohB,0DAtFA5e,KAjB7BlF,EAAA,CADC8U,EAAAA,sEAGD9U,EAAA,CADC8U,EAAAA,iEAGS9U,EAAA,CAATgV,EAAAA,mEAPUyO,EAAkBzjB,EAAA,CAP9BmV,EAAAA,UAAU,CACTC,SAAU,aACVC,SAAA,8lEACA6C,WAAY,CACV5C,4BAuB2BpQ,KApBlBue,mBCoCX,SAAAkB,EACUpS,GAAArT,KAAAqT,aAAAA,EA5BArT,KAAAue,gBAAkB,IAAI9K,EAAAA,aAIhCzT,KAAAqO,YAAa,EAEbrO,KAAA0lB,gBAAkB,CAChBC,kCAAoC,CAClC7U,MAAU,IACVC,OAAW,KAEb6U,mCAAqC,CACnC9U,MAAU,IACVC,OAAW,KAEb8U,gCAAkC,CAChC/U,MAAU,KACVC,OAAW,OAIf/Q,KAAA8lB,kBAA4B,EAI5B9lB,KAAAmf,KAAuB,GAiCzB,OA3BEsG,EAAAvlB,UAAAiU,SAAA,WACEnU,KAAK+lB,qBAAuB/lB,KAAKqT,aAAapE,eAC9CjP,KAAKgmB,2BAGPP,EAAAvlB,UAAA8lB,wBAAA,WAAA,IAAAxiB,EAAAxD,KAEQimB,EACJjmB,KAAKqT,aAAanE,kCAAkC9C,WAAW,SAACgD,GAC1DA,GACF5L,EAAK0iB,cAAgB5W,SAASF,EAASG,YAAa,IACpD/L,EAAK2iB,eAAiB7W,SAASF,EAASI,aAAc,MAEtDhM,EAAK0iB,mBAAgBxU,EACrBlO,EAAK2iB,oBAAiBzU,MAG5B1R,KAAKmf,KAAKvc,KAAKqjB,IAGjBR,EAAAvlB,UAAAkmB,YAAA,SAAYtV,EAAeC,GACzB/Q,KAAKqT,aAAahE,UAAUyB,EAAOC,IAGrC0U,EAAAvlB,UAAAwV,YAAA,WACE1V,KAAKmf,KAAK1b,SAAQ,SAAAwd,GAAO,OAAAA,EAAItL,2DA5BP3H,KA9BflN,EAAA,CAAR8U,EAAAA,sEAES9U,EAAA,CAATgV,EAAAA,wEAJU2P,EAAiB3kB,EAAA,CAJ7BmV,EAAAA,UAAU,CACTC,SAAU,YACVC,SAAA,k0EAkCwBnI,KAhCbyX,mBCOX,SAAAY,EACUlT,GAAAnT,KAAAmT,oBAAAA,EAZAnT,KAAAwT,iBAAmB,IAAIC,EAAAA,aAEjCzT,KAAAiD,gBAAmC,GACnCjD,KAAAsmB,aAAuB,EACvBtmB,KAAAumB,eAAyB,EACzBvmB,KAAAwmB,cAAwB,EACxBxmB,KAAAymB,WAAY,EACZzmB,KAAA4W,WAAqB,EACrB5W,KAAA0mB,mBAAqB,EACrB1mB,KAAA2mB,kBAAoB,OAoCtB,OA9BEN,EAAAnmB,UAAAiU,SAAA,WAAA,IAAA3Q,EAAAxD,KACEA,KAAK4mB,iBACL5mB,KAAKmT,oBAAoB7N,gCAAgC8G,WAAU,SAAA/G,GACjE7B,EAAKoT,UAAYvR,MAIrBghB,EAAAnmB,UAAA2mB,KAAA,WACE7mB,KAAKsmB,aAAc,EACnBtmB,KAAKumB,eAAgB,EACrBvmB,KAAKwmB,cAAe,GAGtBH,EAAAnmB,UAAA0mB,eAAA,WACE5mB,KAAKiD,gBAAkBjD,KAAKmT,oBAAoB7P,mBAGlD+iB,EAAAnmB,UAAA0I,UAAA,SAAUrE,GACRvE,KAAKmT,oBAAoB7O,yBAAyBC,IAGpD8hB,EAAAnmB,UAAA4mB,KAAA,SAAKrhB,GACCA,EAAME,gBAAkBF,EAAMI,cAChC7F,KAAKmT,oBAAoB3N,aAAaC,IAI1C4gB,EAAAnmB,UAAA6mB,uBAAA,SAAuBthB,GACrBzF,KAAKmT,oBAAoB7O,yBAAyBmB,EAAME,yDA/B3B3C,KAbtBlC,EAAA,CAAR8U,EAAAA,oEACS9U,EAAA,CAATgV,EAAAA,yEAHUuQ,EAAqBvlB,EAAA,CAJjCmV,EAAAA,UAAU,CACTC,SAAU,gBACVC,SAAA,6kDAiB+BnT,KAfpBqjB,mBCAX,SAAAW,EAAYC,GAHZjnB,KAAAknB,eAAiB,EACjBlnB,KAAAmnB,SAAW,KAGTnnB,KAAKonB,QAAUH,EACfjnB,KAAKqnB,gBA6BT,OA1BEL,EAAA9mB,UAAAmnB,cAAA,WAAA,IAAA7jB,EAAAxD,KACwB,OAAlBA,KAAKmnB,WAGTnnB,KAAKknB,eAAiB,GAEtBlnB,KAAKonB,QAAQvO,cAAcxD,MAAMvE,MAAQ9Q,KAAKknB,eAAiB,IAE/DlnB,KAAKmnB,SAAWG,aAAY,WACtB9jB,EAAK0jB,eAAiB,KACxB1jB,EAAK0jB,gBAAkBxO,KAAK6O,MAAsB,GAAhB7O,KAAK8O,UACvChkB,EAAK4jB,QAAQvO,cAAcxD,MAAMvE,MAAQtN,EAAK0jB,eAAiB,KAE7D1jB,EAAK0jB,gBAAkB,IAAM1jB,EAAK0jB,eAAiB,KACrD1jB,EAAK0jB,gBAAkBxO,KAAK6O,MAAsB,EAAhB7O,KAAK8O,UACvChkB,EAAK4jB,QAAQvO,cAAcxD,MAAMvE,MAAQtN,EAAK0jB,eAAiB,OAEhE,MAGLF,EAAA9mB,UAAAwV,YAAA,WACM1V,KAAKmnB,WACPM,cAAcznB,KAAKmnB,UACnBnnB,KAAKmnB,SAAW,gDA5BJpO,EAAAA,cANLiO,EAAgBlmB,EAAA,CAH5B4b,EAAAA,UAAU,CACTxG,SAAU,4CAQM6C,EAAAA,cANLiO,mBCKX,SAAAU,EAAoBC,EAAiCpU,GAAjCvT,KAAA2nB,YAAAA,EAAiC3nB,KAAAuT,WAAAA,EAF5CvT,KAAA4nB,QAAyB,KAIV5nB,KAAA6nB,aAAkC,IAAIpU,EAAAA,aAwBhE,OAtBEiU,EAAAxnB,UAAAmf,gBAAA,WAAA,IAAA7b,EAAAxD,KACEA,KAAKuT,WAAWZ,gBAAgBvG,WAAU,SAAC0b,GACzC,IAAMC,EAAgBvkB,EAAKmkB,YAAY9O,cAAcmP,SAASF,GACxDG,EAAuBH,EAAcI,aAAa,SAMxD,GAJKH,GAA2C,OAAzBE,GAAkCA,EAAqBE,SAAS3kB,EAAK4kB,iBAC1F5kB,EAAKqkB,aAAa5S,KAAK,MAGL,MAAhBzR,EAAKokB,SAA4C,OAAzBK,EAA+B,CACzD,IAAII,GAAc,EAClB7kB,EAAKokB,QAAQnkB,SAAQ,SAAA6kB,GACdL,EAAqBE,SAASG,KACjCD,GAAc,MAGdA,GACF7kB,EAAKqkB,aAAa5S,KAAK,oDArBE8D,EAAAA,kBAAgCzG,KAHxDxR,EAAA,CAAR8U,EAAAA,sEACQ9U,EAAA,CAAR8U,EAAAA,wBAAiBjW,sCAIMmB,EAAA,CAAvBgV,EAAAA,OAAO,gCAA8BrC,EAAAA,kDAN3BiU,EAAiB5mB,EAAA,CAH7B4b,EAAAA,UAAU,CACTxG,SAAU,wCAMuB6C,EAAAA,WAAgCzG,KAJtDoV,oBCHb,SAAAa,IAMSvoB,KAAAwoB,OAA+B,IAAI/U,EAAAA,aAqB5C,OAlBS8U,EAAAroB,UAAAuoB,QAAP,SAAehjB,GADf,IAAAjC,EAAAxD,KAIE,GADAyF,EAAM2W,iBACDpc,KAAK0oB,QAAV,CAGA,IAAIC,EAAW,SAACjmB,IACEA,EAAEkmB,eAAiB5V,OAAsB,eAC/C6V,QAAQ,OAAQrlB,EAAKklB,QAAQI,YACvCpmB,EAAE0Z,iBAEF5Y,EAAKglB,OAAOvT,KAAKzR,EAAKklB,UAGxBpY,SAASuC,iBAAiB,OAAQ8V,GAAU,GAC5CrY,SAASyY,YAAY,QACrBzY,SAAS0Y,oBAAoB,OAAQL,GAAU,KAtBjD7nB,EAAA,CADC8U,EAAAA,MAAM,yEAIP9U,EAAA,CADCgV,EAAAA,OAAO,0BACOrC,EAAAA,4CAGf3S,EAAA,CADCiV,EAAAA,aAAa,QAAS,CAAC,4DACFkT,wEATXV,EAAsBznB,EAAA,CADlC4b,EAAAA,UAAU,CAAExG,SAAU,sBACVqS,oBCUX,SAAAW,IAFAlpB,KAAA4hB,SAAmB,EAOrB,OAHEsH,EAAAhpB,UAAAiU,SAAA,aANArT,EAAA,CADC8U,EAAAA,yEAGD9U,EAAA,CADC8U,EAAAA,gEAJUsT,EAAiBpoB,EAAA,CAJ7BmV,EAAAA,UAAU,CACTC,SAAU,WACVC,SAAA,weAEW+S,oBC0BX,SAAAC,EACU/a,GAAApO,KAAAoO,aAAAA,EAXFpO,KAAAopB,iBAA2B,EAGnCppB,KAAAqpB,qBAAuB,IAAI5V,EAAAA,aAK3BzT,KAAAspB,mBAA6B,uCAwB/B,OAtCE9pB,OAAAgC,eAAI2nB,EAAAjpB,UAAA,iBAAc,KAGlB,WACE,OAAOF,KAAKopB,qBAJd,SAAmB1E,GACjB1kB,KAAKopB,gBAAkB1E,mCAmBzByE,EAAAjpB,UAAAiU,SAAA,WACEnU,KAAK6mB,QAGPsC,EAAAjpB,UAAA2mB,KAAA,WACE7mB,KAAKupB,QAAUvpB,KAAK0N,UAAUsM,cAEhCmP,EAAAjpB,UAAAspB,YAAA,WACE,OAAOxpB,KAAK0N,UAAYgL,KAAKC,MAAMrJ,SAAStP,KAAK0N,UAAUlE,MAAM,KAAQ,KAG3E2f,EAAAjpB,UAAAupB,gBAAA,SAAgBhkB,GACdzF,KAAKoO,aAAanC,UAAUjM,KAAKspB,qBAGnCH,EAAAjpB,UAAAqjB,aAAA,WACEvjB,KAAKqpB,qBAAqBpU,MAAK,6CAnBTvJ,KApBxB5K,EAAA,CADC8U,EAAAA,iEAID9U,EAAA,CADC8U,EAAAA,sGAUD9U,EAAA,CADCgV,EAAAA,6EAdUqT,EAA0BroB,EAAA,CAJtCmV,EAAAA,UAAU,CACTC,SAAU,eACVC,SAAA,88GAyBwBzK,KAvBbyd,MCRAO,GACbrT,EAAAA,QAAQ,oBAAqB,CACvBG,EAAAA,WAAW,SAAU,CACnBnB,EAAAA,MAAM,CAAEkB,QAAS,IACjBE,EAAAA,QAAQ,mBAAoBpB,EAAAA,MAAM,CAAEkB,QAAS,uBC6InD,SAAAoT,EACUzf,GAAAlK,KAAAkK,cAAAA,EAvHFlK,KAAA4pB,gBAA0B,EAGlC5pB,KAAA6pB,oBAAsB,IAAIpW,EAAAA,aAG1BzT,KAAAwkB,WAAa,IAAI/Q,EAAAA,aAGjBzT,KAAA8pB,0BAA4B,IAAIrW,EAAAA,aAEhCzT,KAAA6kB,YAAsB,mCAGtB7kB,KAAA0kB,gBAA0B,EAC1B1kB,KAAA+pB,gBAA0B,EAC1B/pB,KAAA2kB,oBAA8B,GAC9B3kB,KAAAgqB,WAAqB,EACrBhqB,KAAA4W,WAAqB,EACrB5W,KAAAiqB,cAAwB,EACxBjqB,KAAAkqB,wBAAkC,EAKlClqB,KAAAmqB,kBAAyB,GACzBnqB,KAAAoqB,aAAoB,GACpBpqB,KAAAqqB,eAAiB,EACjBrqB,KAAAsqB,SAAW,EACXtqB,KAAAuqB,MAAQ,EACRvqB,KAAAwqB,aAAc,EACdxqB,KAAAyqB,0BAA2B,EAC3BzqB,KAAAge,UAA4B,GAK5Bhe,KAAA0qB,iBAAyC,CACvC,CACEC,MAAO,qCACPC,OAAQ,CACNC,qBAAqB,IAGzB,CACEF,MAAO,mCACPC,OAAQ,CACNC,qBAAqB,GAEvBC,QAAQ,GAEV,CACEH,MAAO,qCACPC,OAAQ,CACNC,qBAAqB,EACrBE,YAAa,IAGjB,CACEJ,MAAO,uCACPC,OAAQ,CACNC,qBAAqB,EACrBE,YAAa,MAGjB,CACEJ,MAAO,wCACPC,OAAQ,CACNC,qBAAqB,EACrBE,YAAa,EAAI,KAKvB/qB,KAAAgrB,eAAuC,CACrC,CACEL,MAAO,uCACPM,KAAM,kBACNC,OAAQ,cACRJ,QAAQ,GAEV,CACEH,MAAO,2CACPM,KAAM,kBACNC,OAAQ,cAEV,CACEP,MAAO,uCACPM,KAAM,kBACNC,OAAQ,gBAEV,CACEP,MAAO,wCACPM,KAAM,sBACNC,OAAQ,mBAIZlrB,KAAAmrB,WAAmC,CACjC,CACER,MAAO,mCACPM,KAAM,qBACNC,OAAQ,SACRJ,QAAQ,GAEV,CACEH,MAAO,qCACPM,KAAM,sBACNC,OAAQ,YAKZlrB,KAAAorB,iBAAoC,CAClCP,qBAAqB,EACrBE,iBAAarZ,GAwLjB,OApTElS,OAAAgC,eAAImoB,EAAAzpB,UAAA,gBAAa,KAMjB,WACE,OAAOF,KAAK4pB,oBAPd,SAAkBnF,GAChBzkB,KAAK4pB,eAAiBnF,EACjBA,GACHzkB,KAAKqrB,+CAgIT1B,EAAAzpB,UAAAiU,SAAA,WACEnU,KAAK6mB,QAGP8C,EAAAzpB,UAAA2mB,KAAA,WACE7mB,KAAKsrB,SAAWtrB,KAAKgjB,iBACrBhjB,KAAKurB,QAAUvrB,KAAKwrB,aACpBxrB,KAAKoqB,aAAe,KACpBpqB,KAAKyrB,wBAGP9B,EAAAzpB,UAAA8iB,eAAA,WACE,OAAOhjB,KAAKkK,cAAcX,UAAU,OAASvJ,KAAK0N,UAAUqV,WAG9D4G,EAAAzpB,UAAAsrB,WAAA,WACE,OAAOxrB,KAAK0N,UAAUqV,UAAY/iB,KAAK0N,UAAUqV,UAAUvK,MAAM,KAAKkT,WAAQha,GAGhFiY,EAAAzpB,UAAAurB,qBAAA,WACE,IAAM1a,EAASzB,SAAStP,KAAK0N,UAAUie,YACjC7a,EAAQxB,SAAStP,KAAK0N,UAAUke,WACtC5rB,KAAK6rB,mBAAqB9a,EAASD,EACnC9Q,KAAK0qB,iBAAiB,GAAGE,OAAOG,YAAc/qB,KAAK6rB,mBACnD7rB,KAAKorB,iBAAiBL,YAAc/qB,KAAK6rB,oBAG3ClC,EAAAzpB,UAAAwb,aAAA,SAAaxP,GACXlM,KAAKwkB,WAAWvP,KAAK/I,IAGvByd,EAAAzpB,UAAA4rB,UAAA,WACE9rB,KAAK6pB,oBAAoB5U,MAAK,IAGhC0U,EAAAzpB,UAAAmrB,YAAA,WACErrB,KAAK6mB,OACL7mB,KAAK+rB,oBAGPpC,EAAAzpB,UAAA8rB,cAAA,WACEhsB,KAAKykB,eAAgB,EACrBzkB,KAAK6pB,oBAAoB5U,MAAK,IAOhC0U,EAAAzpB,UAAA+rB,gBAAA,SAAgBxmB,GACdzF,KAAKmqB,kBAAoB1kB,GAG3BkkB,EAAAzpB,UAAAgsB,aAAA,SAAazmB,GACXzF,KAAKmsB,yBAELnsB,KAAK2kB,oBAAsBlf,EAAM2mB,OACjCpsB,KAAK8pB,0BAA0B7U,KAAKjV,KAAK2kB,sBAG3CgF,EAAAzpB,UAAAmsB,YAAA,WACErsB,KAAKwqB,aAAc,GAGrBb,EAAAzpB,UAAAosB,aAAA,WACEtsB,KAAK+pB,gBAAiB,GAGxBJ,EAAAzpB,UAAAqsB,gBAAA,WACEvsB,KAAK0b,aAAa1b,KAAK6kB,cAKzB8E,EAAAzpB,UAAAssB,qBAAA,SAAqBjoB,GACnBvE,KAAKysB,cAAczsB,KAAK0qB,iBAAkBnmB,GAC1C,IAAMqmB,EAAS5qB,KAAK0qB,iBAAiBnmB,GAAOqmB,OAC5C5qB,KAAK0sB,qBAAqB9B,IAG5BjB,EAAAzpB,UAAAysB,YAAA,WACE3sB,KAAKsrB,SAAW,KAChBtrB,KAAKoqB,aAAepqB,KAAK2kB,oBACzB3kB,KAAKiqB,cAAe,EACpBjqB,KAAKkqB,wBAAyB,EAC9BlqB,KAAK+rB,mBACL/rB,KAAKgsB,iBAGPrC,EAAAzpB,UAAA6rB,iBAAA,WACE/rB,KAAKuqB,MAAQ,EACbvqB,KAAKsqB,SAAW,EAChBtqB,KAAKqqB,eAAiB,EACtBrqB,KAAKge,UAAY,IAGX2L,EAAAzpB,UAAAusB,cAAR,SAAsBG,EAAaroB,GAEjCqoB,EAAMnpB,SAAQ,SAAC+X,EAAMqR,GACnBrR,EAAKsP,OAAS+B,IAActoB,MAIxBolB,EAAAzpB,UAAAwsB,qBAAR,SAA6B9B,GAC3B,IAAK,IAAMkC,KAAYlC,EACrB5qB,KAAKorB,iBAAiB0B,GAAYlC,EAAOkC,IAIrCnD,EAAAzpB,UAAAisB,uBAAR,WACEnsB,KAAKiqB,aAAejqB,KAAKkqB,uBACzBlqB,KAAKkqB,wBAAyB,GAKhCP,EAAAzpB,UAAA6sB,WAAA,WACI/sB,KAAKqqB,iBACLrqB,KAAKgtB,kBACLhtB,KAAKgsB,iBAGTrC,EAAAzpB,UAAA+sB,YAAA,WACIjtB,KAAKqqB,iBACLrqB,KAAKgtB,kBACLhtB,KAAKgsB,iBAGTrC,EAAAzpB,UAAAgtB,eAAA,WACIltB,KAAKge,UAAS5d,EAAAA,EAAA,GACPJ,KAAKge,WAAS,CACjBmP,OAAQntB,KAAKge,UAAUmP,QAE3BntB,KAAKgsB,iBAGTrC,EAAAzpB,UAAAktB,aAAA,WACIptB,KAAKge,UAAS5d,EAAAA,EAAA,GACPJ,KAAKge,WAAS,CACjBqP,OAAQrtB,KAAKge,UAAUqP,QAE3BrtB,KAAKgsB,iBAGDrC,EAAAzpB,UAAA8sB,gBAAR,WACE,IAAMM,EAAWttB,KAAKge,UAAUmP,MAC1BI,EAAWvtB,KAAKge,UAAUqP,MAChCrtB,KAAKge,UAAS5d,EAAAA,EAAA,GACPJ,KAAKge,WAAS,CACjBmP,MAAOI,EACPF,MAAOC,KAMb3D,EAAAzpB,UAAAstB,QAAA,WACIxtB,KAAKuqB,OAAUvqB,KAAKuqB,MAAQ,GAAK,EAAI,GACrCvqB,KAAKge,UAAS5d,EAAAA,EAAA,GACPJ,KAAKge,WAAS,CACjBuM,MAAOvqB,KAAKuqB,QAEhBvqB,KAAKgsB,iBAGTrC,EAAAzpB,UAAAutB,OAAA,WACIztB,KAAKuqB,OAAS,GACdvqB,KAAKge,UAAS5d,EAAAA,EAAA,GACPJ,KAAKge,WAAS,CACjBuM,MAAOvqB,KAAKuqB,QAEhBvqB,KAAKgsB,iBAGTrC,EAAAzpB,UAAAwtB,YAAA,SAAYxC,GACVlrB,KAAKkrB,+CAlLkB9hB,KAnIzBtI,EAAA,CADC8U,EAAAA,iEAID9U,EAAA,CADC8U,EAAAA,qGAaD9U,EAAA,CADCgV,EAAAA,4EAIDhV,EAAA,CADCgV,EAAAA,mEAIDhV,EAAA,CADCgV,EAAAA,kFAvBU6T,EAAgB7oB,EAAA,CAP5BmV,EAAAA,UAAU,CACTC,SAAU,UACVC,SAAA,88HACA6C,WAAY,CACV0Q,6BAyIuBtgB,KAtIdugB,oBCkJX,SAAAgE,EACUzf,EACAoF,EACAH,EACA/E,EACAgF,EACAgH,GALApa,KAAAkO,WAAAA,EACAlO,KAAAsT,gBAAAA,EACAtT,KAAAmT,oBAAAA,EACAnT,KAAAoO,aAAAA,EACApO,KAAAoT,oBAAAA,EACApT,KAAAoa,qBAAAA,EAvIDpa,KAAA6T,eAAgB,EAChB7T,KAAAkD,iBAAkB,EAE3BlD,KAAAqa,oBAA6C,IAAI5G,EAAAA,aAGjDzT,KAAAshB,aAA6B,CAC3BC,UAAM7P,EACN8P,WAAO9P,EACP2M,YAAa,GACboD,WAAY,EACZC,aAAc,EACdhD,YAAa,GAIf1e,KAAA4tB,eAAyB,IACzB5tB,KAAA6tB,eAAyB,IAGzB7tB,KAAA8tB,UAAoB,EAEpB9tB,KAAA+tB,mBAAyB,CACvB,CACEC,IAAK,IACLC,oBAAsB,EACtBC,oBAAsB,IAExB,CACEF,IAAK,IACLC,oBAAsB,EACtBC,oBAAsB,IAExB,CACEF,IAAK,IACLC,oBAAsB,GACtBC,oBAAsB,OAExB,CACEF,IAAK,KACLC,oBAAsB,MACtBC,oBAAsB,IAExB,CACEF,IAAK,KACLC,oBAAsB,IACtBC,oBAAsB,MAExB,CACEF,IAAK,KACLC,oBAAsB,GACtBC,oBAAsB,OAExB,CACED,oBAAsB,MACtBC,oBAAsB,KAI1BluB,KAAAmuB,eAAqB,CACnB,CACEH,IAAK,KACLC,oBAAsB,IACtBC,oBAAsB,MAExB,CACEF,IAAK,KACLC,oBAAsB,MACtBC,oBAAsB,IAExB,CACEF,IAAK,KACLC,oBAAsB,MACtBC,oBAAsB,OAExB,CACEF,IAAK,KACLC,oBAAsB,IACtBC,oBAAsB,OAExB,CACEF,IAAK,KACLC,oBAAsB,IACtBC,oBAAsB,KAExB,CACED,oBAAsB,IACtBC,oBAAsB,OAQ1BluB,KAAAouB,mBAAsC,IAAIjhB,EAAAA,QAC1CnN,KAAAquB,eAAgC,IAAIlhB,EAAAA,QAEpCnN,KAAAkZ,aAAgC,GAChClZ,KAAAsuB,gBAAmC,GAGnCtuB,KAAAuuB,mBAA6B,EAC7BvuB,KAAA4hB,SAAmB,EACnB5hB,KAAA4W,WAAqB,EACrB5W,KAAAwuB,iBAA2B,EAC3BxuB,KAAAyuB,kBAAmB,EACnBzuB,KAAA2e,eAAyB,EACzB3e,KAAA0uB,YAAsB,EACtB1uB,KAAA2hB,sBAAgC,EAEhC3hB,KAAA2uB,eAAwB,EAIxB3uB,KAAA4uB,UAAmB,EACnB5uB,KAAAW,OAAiB,EACjBX,KAAA6uB,SAAmB,GACnB7uB,KAAA8uB,gBAA4B,CAAC,GAAI,GAAI,IAAK,KAKlC9uB,KAAA+uB,eAAiB,mCACjB/uB,KAAAgvB,iBAAmB,qCACnBhvB,KAAAivB,YAAc,qCACdjvB,KAAAkvB,cAAgB,+BAChBlvB,KAAAgiB,eAAiB,oCAiY3B,OAvXE2L,EAAAztB,UAAAiU,SAAA,WAIEnU,KAAKuZ,YACLvZ,KAAKiD,gBAAkBjD,KAAKmT,oBAAoB7P,mBAGlDqqB,EAAAztB,UAAAmf,gBAAA,WACErf,KAAKmvB,oBACLnvB,KAAKovB,cACApvB,KAAKsuB,kBACRtuB,KAAKsuB,gBAAkBtuB,KAAKkZ,eAQhCyU,EAAAztB,UAAAmvB,WAAA,WACErvB,KAAKquB,eAAehsB,QAQtBsrB,EAAAztB,UAAAovB,wBAAA,SAAwBvb,GACtB/T,KAAK6T,cAAgBE,EACrB/T,KAAKoT,oBAAoB/H,yBAAyB0I,GAClD/T,KAAKsT,gBAAgBxF,wBAAwBiG,IAM/C4Z,EAAAztB,UAAAqvB,cAAA,WACEvvB,KAAKwvB,yBAGP7B,EAAAztB,UAAAyb,kBAAA,WACE3b,KAAKyvB,WAAa,KAClBzvB,KAAK0vB,cAAgB,KACrB1vB,KAAKqvB,cAGP1B,EAAAztB,UAAAuZ,gBAAA,SAAgBC,GACd9B,QAAQC,IAAI,iCAAkC6B,GAC9C1Z,KAAKoa,qBAAqBX,gBAAgBC,IAG5CiU,EAAAztB,UAAAyvB,cAAA,WAAA,IAAAnsB,EAAAxD,KACE,IAAIA,KAAK4hB,QAAT,CAGA5hB,KAAK4hB,SAAU,EACf5hB,KAAKyuB,kBAAmB,EACxBzuB,KAAK2uB,eAAgB,EAIrB,IAAMiB,EAA0B,GAChC5vB,KAAKkZ,aAAazV,SAAS,SAAA2O,GACrBA,EAAIgQ,cACNhQ,EAAIsQ,SAAU,EACdkN,EAAchtB,KAAKwP,EAAI1N,aAI3B1E,KAAKkO,WAAWpF,kBAAkB8mB,GAAexjB,WAC/C,WACE5I,EAAK6rB,aACL7rB,EAAK2P,oBAAoBtO,wBAAwB+qB,MAEnD,SAAA/sB,GACEW,EAAK6rB,aACL7rB,EAAK4K,aAAanC,UAAUzI,EAAKwe,qBAOvC2L,EAAAztB,UAAA2vB,gBAAA,WACE,IAAI7vB,KAAK4hB,QAAT,CAGA,IAAMkO,EAAwC,GAC9C9vB,KAAKkZ,aAAajV,KAAI,SAAAmO,GACjBA,EAAIgQ,cACLhQ,EAAIgQ,aAAa,EACjBhQ,EAAIoI,UAAW,GAEbpI,EAAIoI,UACNsV,EAAqBltB,KAAKwP,MAG9BpS,KAAKwvB,wBACLxvB,KAAKmT,oBAAoB5P,gBAAgBusB,KAG3CnC,EAAAztB,UAAA6vB,qBAAA,WACM/vB,KAAK4hB,UAGT5hB,KAAK2uB,eAAgB,IAGvBhB,EAAAztB,UAAA8vB,UAAA,WACEhwB,KAAK2uB,eAAgB,GAMvBhB,EAAAztB,UAAA+vB,qBAAA,WACEjwB,KAAKwvB,yBAGP7B,EAAAztB,UAAAqiB,gBAAA,WACEviB,KAAKqvB,cAOC1B,EAAAztB,UAAAivB,kBAAR,WACE,IAAMe,EAAiBlwB,KAAKmwB,gBAAgBtX,cAAc6G,YAAc,GAClE0Q,EAAcpd,OAAOqd,WAAa/f,SAAS9H,KAAKkX,YAEhD3N,EAAAtP,EAAAzC,KAAAswB,qBAAA,GAACC,EAAAxe,EAAA,GAAmBye,EAAAze,EAAA,GAEpB0e,EAAc/X,KAAK6O,MAAM2I,EAAiBM,GAC1CE,EAAchY,KAAKiY,MAAMT,EAAiBE,GAAgBG,GAEhEvwB,KAAK4wB,gBAAkBlY,KAAK6O,MAAM2I,EAAiBO,GACnDzwB,KAAK6wB,gBAAkBnY,KAAK6O,OAAQ2I,EAAiBE,GAAgBM,GAErE1wB,KAAK6uB,SAAW7uB,KAAK8wB,sBAGfnD,EAAAztB,UAAAowB,mBAAR,mBACQS,EAAc/d,OAAOqd,WACvBW,EAAkB,EAClBC,EAA2B,GAEzBC,EAAwBlxB,KAAKmxB,SAAWnxB,KAAK+tB,mBAAqB/tB,KAAKmuB,mBAE7E,IAA0B,IAAAiD,EAAApvB,EAAAkvB,GAAqBG,EAAAD,EAAA/uB,QAAAgvB,EAAA9uB,KAAA8uB,EAAAD,EAAA/uB,OAAE,CAA5C,IAAMivB,EAAWD,EAAA/uB,MAClB,IAAKgvB,EAAYtD,IAAK,CACpBiD,EAAiB,CAACK,EAAYrD,oBAAqBqD,EAAYpD,qBAC/D,MAEF,GAAI8C,EAAWD,GAAeA,GAAeO,EAAYtD,IAAK,CAC5DiD,EAAiB,CAACK,EAAYrD,oBAAqBqD,EAAYpD,qBAC/D,MAEF8C,EAAWM,EAAYtD,sGAE3B,OAAOiD,GAGDtD,EAAAztB,UAAA4wB,mBAAR,WACE,GAAI9wB,KAAKuxB,YAEP,OAD6C,SAAxBvxB,KAAKsG,eAA4BtG,KAAK6wB,gBAAkB7wB,KAAK4wB,iBAC5D5wB,KAAKuxB,YAK7B,IAFA,IAAIC,EAAQxxB,KAAK6wB,gBAEVW,EAAQ,IAAMA,EAAQxxB,KAAK4wB,iBAAoB,GAAMY,EAAQxxB,KAAK6wB,iBAAoB,GAC3FW,GAASxxB,KAAK6wB,gBAEhB,OAAOW,GAGD7D,EAAAztB,UAAAuxB,UAAR,iBACEzxB,KAAKkG,OAAS,CACZwrB,OAA6B,QAAtB3f,EAAA/R,KAAK2xB,yBAAiB,IAAA5f,OAAA,EAAAA,EAAE+W,cAAe9oB,KAAKshB,aAAaI,aAAe1hB,KAAKshB,aAAaI,aAAaoH,WAAa9oB,KAAK6uB,SAAS/F,YACzIrL,KAAMzd,KAAKshB,aAAa5C,YAAYoK,YAElC9oB,KAAKshB,aAAajD,cACpBre,KAAKkG,OAAO,yBAA2BlG,KAAKshB,aAAajD,YAAYyK,aAIjE6E,EAAAztB,UAAA0xB,cAAR,SAAsBC,GACpB7xB,KAAKuuB,mBAAqB,EAC1BvuB,KAAK4hB,SAAU,EACf5hB,KAAK4W,WAAY,EACjB5W,KAAKyuB,kBAAmB,EACxBzuB,KAAK2e,eAAgB,EACrB3e,KAAK2hB,sBAAuB,EAC5B3hB,KAAK0uB,YAAcmD,EACnB7xB,KAAK8tB,UAAY,GAGXH,EAAAztB,UAAA4xB,kBAAR,WACE,GAAK9xB,KAAKiD,iBAAoBjD,KAAKiD,gBAAgBtC,OAAnD,CAIA,IAAMoxB,EAA6B,GAEnC/xB,KAAKiD,gBAAgBQ,SAAQ,SAAA2O,GAC3B,OAAA2f,EAAiBnvB,KAAKwP,EAAI1N,YAG5B1E,KAAKkZ,aAAazV,SAAQ,SAAAI,IAC2B,IAA/CkuB,EAAiBhtB,QAAQlB,EAAQa,WACnCb,EAAQ2W,UAAW,QAKjBmT,EAAAztB,UAAA8xB,iBAAR,WACEhyB,KAAK2hB,sBAAuB,EAC5B3hB,KAAKoO,aAAanC,UAAUjM,KAAKkvB,gBAO3BvB,EAAAztB,UAAA+xB,gBAAR,SAAwBC,GACtB,IAAMC,EAAuC,UAAxBnyB,KAAKsG,gBAAoD,eAAtBtG,KAAKokB,aAAgCpkB,KAAK4wB,gBAAkB5wB,KAAK6wB,gBAErHqB,EAAiBC,GAAiB,IACpCnyB,KAAK8tB,UAAYqE,EAAeD,EAAiBC,IAI7CxE,EAAAztB,UAAAkyB,OAAR,SAAgB1tB,GAAhB,IAAAlB,EAAAxD,KACEA,KAAKkO,WAAWrG,WAAWnD,GAASsM,KAAKC,EAAAA,KAAK,IAAI7E,WAChD,SAACvI,GAEML,EAAK6uB,gBAAgBxuB,EAAQa,WAEhClB,EAAK0V,aAAaoZ,QAAQzuB,GAC1BL,EAAK7C,QAAU,MAGnB,SAAAkC,GACEW,EAAK4K,aAAanC,UAAUzI,EAAKyrB,iBAK/BtB,EAAAztB,UAAAmyB,gBAAR,SAAyB3tB,eACvB,IAAkB,IAAAC,EAAA3C,EAAAhC,KAAKkZ,cAAYtU,EAAAD,EAAAtC,QAAAuC,EAAArC,KAAAqC,EAAAD,EAAAtC,OAAE,CACnC,GADYuC,EAAAtC,MACJoC,UAAYA,EAClB,OAAO,oGAGX,OAAO,GAGDipB,EAAAztB,UAAAsvB,sBAAR,WACExvB,KAAKuuB,mBAAqBvuB,KAAKkZ,aAAavP,QAAO,SAAAyI,GACjD,OAAAA,EAAIgQ,eAAazhB,OAEdX,KAAKuuB,qBACRvuB,KAAK2uB,eAAgB,IAIjBhB,EAAAztB,UAAAqZ,UAAR,WAAA,IAAA/V,EAAAxD,KAEEA,KAAKouB,mBACFpd,KAAK2I,EAAAA,aAAa,MAClBvN,WAAU,SAAA6N,GACPzW,EAAK6rB,gBAGXrvB,KAAKquB,eACFrd,KAAK2I,EAAAA,aAAa,MAClBvN,WAAU,SAAA6N,GACPzW,EAAK4rB,iBAIXpvB,KAAKuyB,gBAAkBvyB,KAAKsT,gBAAgB9F,4BAA4BpB,WAAU,SAAA1H,GAChFlB,EAAK6rB,gBAIPrvB,KAAKwyB,cAAgBxyB,KAAKsT,gBAAgBzF,0BAA0BzB,WAAU,SAAA1H,GACxEA,IAAYlB,EAAK6uB,gBAAgB3tB,IACnClB,EAAK4uB,OAAO1tB,MAIhB1E,KAAK0a,mBAAqB1a,KAAKmT,oBAAoBrP,wBAAwBsI,WAAU,SAAAuO,WACnF,IAAInX,EAAKqQ,cAAT,CAGA,IAAM+G,EAAa,GACnBD,EAAa1W,KAAI,SAAAmO,GAAO,OAAAwI,EAAWhY,KAAKwP,EAAI1N,gBAC5C,IAAsB,IAAAC,EAAA3C,EAAAwB,EAAK0V,cAAYtU,EAAAD,EAAAtC,QAAAuC,EAAArC,KAAAqC,EAAAD,EAAAtC,OAAE,CAApC,IAAMwB,EAAOe,EAAAtC,OAC6B,IAAzCsY,EAAW7V,QAAQlB,EAAQa,WAC7Bb,EAAQ2W,UAAW,2GAMnBmT,EAAAztB,UAAAkvB,YAAR,WAAA,IAAA5rB,EAAAxD,KACEA,KAAK4W,WAAY,EACjB5W,KAAK2hB,sBAAuB,EAC5B3hB,KAAKyxB,YAELzxB,KAAKyyB,sBAELzyB,KAAKkO,WAAWxG,eAAe1H,KAAKkG,QAAQ8K,KAAKC,EAAAA,KAAK,IAAI7E,WAAU,SAAC6N,GACnEzW,EAAKouB,eAAc,GACnB,IAAMM,EAAiBjY,EAAKA,KAAKtZ,OACjC6C,EAAKyuB,gBAAgBC,GACrB1uB,EAAK0V,aAAee,EAAKA,KACzBzW,EAAK4W,qBAAqBZ,gBAAgBhW,EAAK0V,cAC/C1V,EAAKsuB,oBAELtuB,EAAK7C,OAAS6C,EAAKgrB,gBAAkBhrB,EAAK7C,OAASsZ,EAAKyY,aACxDlvB,EAAK8d,aAAaG,WAAaje,EAAKgrB,gBAAkBhrB,EAAK8d,aAAaG,WAAaxH,EAAKyY,aAC1FlvB,EAAK8d,aAAaI,aAAgBle,EAAK8d,aAAaI,aAAgBle,EAAK8d,aAAaI,aAAele,EAAKqrB,SAGhF,IAAtB5U,EAAKyY,cACPlvB,EAAKwuB,sBAIT,SAAAnvB,GACEW,EAAK4K,aAAanC,UAAUzI,EAAKurB,gBACjCvrB,EAAKouB,eAAc,OAIfjE,EAAAztB,UAAAuyB,oBAAR,WAAA,IAAAjvB,EAAAxD,KACQqe,EAAcre,KAAKshB,aAAajD,YAElCre,KAAKwuB,iBAAmBnQ,IAAgBre,KAAK2yB,sBAKjD3yB,KAAKwuB,iBAAkB,EAEvBxuB,KAAKkO,WAAWtG,oBAAoB5H,KAAKkG,QAAQ8K,KAAKC,EAAAA,KAAK,IAAI7E,WAE7D,SAAC6N,GACCzW,EAAKmvB,oBAAsBtU,EAC3B7a,EAAKgrB,iBAAkB,EACvBhrB,EAAK7C,OAASsZ,EAAKyY,aACnBlvB,EAAK8d,aAAaG,WAAaxH,EAAKyY,gBAGtC,SAAA7vB,GAEEW,EAAKouB,eAAc,QAIzBjE,EAAAztB,UAAA0yB,0BAAA,WACE5yB,KAAKqa,oBAAoBpF,MAAK,IAGhC0Y,EAAAztB,UAAAwV,YAAA,WACE1V,KAAKouB,mBAAmBzY,cACxB3V,KAAKuyB,gBAAgB5c,cACrB3V,KAAKwyB,cAAc7c,cACnB3V,KAAK0a,mBAAmB/E,wDA5XJ3P,SACKiH,SACIjK,SACP0I,SACOP,SACC8N,KA5IvBnY,EAAA,CAAR8U,EAAAA,sEACQ9U,EAAA,CAAR8U,EAAAA,oEACQ9U,EAAA,CAAR8U,EAAAA,iEACQ9U,EAAA,CAAR8U,EAAAA,yEACQ9U,EAAA,CAAR8U,EAAAA,mEACQ9U,EAAA,CAAR8U,EAAAA,qEACQ9U,EAAA,CAAR8U,EAAAA,uEAED9U,EAAA,CADCgV,EAAAA,yBACoBrC,EAAAA,yDAYS3S,EAAA,CAA7BgY,EAAAA,UAAU,mCAAqCC,EAAAA,mDAtBrC4U,EAAmB7sB,EAAA,CAR/BmV,EAAAA,UAAU,CACTC,SAAU,cACVC,SAAA,sxNACA6C,WAAY,CACV5C,EACAsT,6BA4IoB1jB,EACKiH,EACIjK,EACP0I,EACOP,EACC8N,KA9IrB0U,qBCOX,SAAAkF,EACE3kB,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,GARF,IAAA5d,EAUEugB,EAAAnjB,KAAAZ,KACEkO,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,IACDphB,YAvBHwD,EAAAsqB,UAAoB,EAEpBtqB,EAAA6W,oBAA6C,IAAI5G,EAAAA,eA0CnD,OAnDyC3T,EAAA+yB,EAAA9O,GAiCvC8O,EAAA3yB,UAAAiU,SAAA,aAGA0e,EAAA3yB,UAAA0f,eAAA,SAAena,GAEbzF,KAAKshB,aAAaC,UAAO7P,EACzB1R,KAAKshB,aAAaE,WAAQ9P,EAC1B1R,KAAKshB,aAAa5C,YAAc,EAChC1e,KAAK8hB,cAAc7M,KAAKjV,KAAKshB,eAG/BuR,EAAA3yB,UAAA4yB,oBAAA,SAAoBpZ,GAClB1Z,KAAK+hB,kBAAkB1f,KAAKqX,IAG9BmZ,EAAA3yB,UAAAua,wBAAA,WACEza,KAAKqa,oBAAoBpF,MAAK,6CArClBjP,SACShD,SACfmG,EAAAA,kBACSC,SACM6D,SACPvB,SACIsB,EAAAA,wBACDhD,KAhBnBlJ,EAAA,CADC8U,EAAAA,oEAGD9U,EAAA,CADC8U,EAAAA,iEAGD9U,EAAA,CADC8U,EAAAA,iEAGD9U,EAAA,CADCgV,EAAAA,yBACoBrC,EAAAA,yDATVof,EAAmB/xB,EAAA,CAP/BmV,EAAAA,UAAU,CACTC,SAAU,cACVC,SAAA,2iEACA6C,WAAY,CACV8E,4BAeY9X,EACShD,EACfmG,EAAAA,WACSC,EACM6D,EACPvB,EACIsB,EAAAA,iBACDhD,KAnBR6oB,IAA4B3R,kBCErC,SAAA6R,EACE7kB,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,GARF,IAAA5d,EAUEugB,EAAAnjB,KAAAZ,KACEkO,EACAiF,EACAlN,EACAiE,EACAiX,EACA/S,EACAxC,EACAwV,IACDphB,YArBHwD,EAAAwvB,cAAwB,gBA2B5B,OA5BwClzB,EAAAizB,EAAAhP,GAyBpCgP,EAAA7yB,UAAAiU,SAAA,sDArBcnO,SACShD,SACfmG,EAAAA,kBACSC,SACM6D,SACPvB,SACIsB,EAAAA,wBACDhD,KAXV+oB,EAAkBjyB,EAAA,CAP9BmV,EAAAA,UAAU,CACTC,SAAU,aACVC,SAAA,+sIACA6C,WAAY,CACV8E,4BAOc9X,EACShD,EACfmG,EAAAA,WACSC,EACM6D,EACPvB,EACIsB,EAAAA,iBACDhD,KAXV+oB,IAA2B7R,iBCQtC,SAAA+R,EAAoBC,GAAAlzB,KAAAkzB,qBAAAA,EAZpBlzB,KAAAmzB,aAAe,IAAIC,IACnBpzB,KAAAqzB,iBAAiC,CAC/B9R,UAAM7P,EACN8P,WAAO9P,EACP2M,iBAAa3M,EACb+P,WAAY,EACZC,aAAc,EACdhD,YAAa,GAGP1e,KAAAszB,YAA4B,IAAInmB,EAAAA,eAIxC8lB,EAAA/yB,UAAAqzB,oBAAA,SAAoBP,GAClB,GAAIhzB,KAAKmzB,aAAaK,IAAIR,GACxB,OAAOhzB,KAAKmzB,aAAaxrB,IAAIqrB,GAE/B,IAAMS,EAA8BzzB,KAAKkzB,qBAAqBQ,MAAM1zB,KAAKqzB,iBAAkBL,GAE3F,OADAhzB,KAAKmzB,aAAa/sB,IAAI4sB,EAAeS,GAC9BA,GASTR,EAAA/yB,UAAAyzB,eAAA,SAAeX,EAAuBY,EAAkBpS,GACtDxhB,KAAKszB,YAAYjxB,KAAK,CAAE2wB,cAAaA,EAAEY,SAAQA,EAAEpS,MAAKA,KAGxDyR,EAAA/yB,UAAA2zB,qBAAA,WACE,OAAO7zB,KAAKszB,YAAY/tB,gBAG1B0tB,EAAA/yB,UAAA4zB,qBAAA,SAAqBd,EAAuBvR,EAAoBC,EAAsBhD,GAChE1e,KAAKuzB,oBAAoBP,GACjCe,UAAU,CACpBrS,aAAYA,EACZhD,YAAWA,KAIfuU,EAAA/yB,UAAA8zB,sCAAA,SAAsChB,EAAuBtR,EAAsBhD,GACjF,IAAM+U,EAAczzB,KAAKuzB,oBAAoBP,GAC7CS,EAAYM,UAAU,CACpBrS,aAAc+R,EAAY9rB,IAAI,gBAAkB2H,SAASmkB,EAAY9rB,IAAI,iBAAmB+Z,EAC5FhD,YAAa+U,EAAY9rB,IAAI,eAAiB2H,SAASmkB,EAAY9rB,IAAI,gBAAkB+W,8CArCnDuV,EAAAA,mKAb/BhB,EAAmBnyB,EAAA,CAH/BgF,EAAAA,WAAW,CACVC,WAAY,gCAe8BkuB,EAAAA,2BAb/BhB,oBC6BX,SAAAiB,EAAoBC,GAAAn0B,KAAAm0B,oBAAAA,EA5BVn0B,KAAAo0B,mBAAiD,IAAI3gB,EAAAA,aAGtDzT,KAAAq0B,YAAsB,GAOtBr0B,KAAAs0B,UAAW,EAEVt0B,KAAAu0B,kBAA2C,IAAI9gB,EAAAA,aAKhDzT,KAAAse,eAAyB,EAEzBte,KAAAw0B,mBAA6B,EAG7Bx0B,KAAA4W,WAAY,EA+EvB,OAvEEsd,EAAAh0B,UAAAiU,SAAA,WAAA,IAAA3Q,EAAAxD,KACEA,KAAKy0B,iBAAmBC,EAAAA,KAGpB10B,KAAK20B,mBACP30B,KAAK40B,aAAe50B,KAAKm0B,oBAAoBZ,oBAAoBvzB,KAAK20B,kBAGtE30B,KAAK40B,aAAaC,cAAcxyB,KAAK,IAErCrC,KAAK80B,mBAGL90B,KAAK+0B,qBAAuB/0B,KAAK40B,aAAaC,cAAczoB,WAAU,SAAA4oB,GACpExxB,EAAKsxB,wBAKXZ,EAAAh0B,UAAA+0B,oBAAA,SAAoBxvB,GAClBzF,KAAKu0B,kBAAkBtf,KAAKxP,EAAMzE,OAAOk0B,UAG3ChB,EAAAh0B,UAAAi1B,aAAA,SAAa1vB,GAEXzF,KAAKshB,aAAaC,UAAO7P,EACzB1R,KAAKshB,aAAaE,WAAQ9P,EAC1B1R,KAAKshB,aAAa5C,YAAc,EAChC1e,KAAKo0B,mBAAmBnf,KAAKjV,KAAKshB,cAG9BthB,KAAK40B,cACP50B,KAAK40B,aAAab,UAAU,CAC1B1V,YAAare,KAAKshB,aAAajD,YAC/BkD,UAAM7P,EACN8P,WAAO9P,EACPgN,YAAa,KAKnBwV,EAAAh0B,UAAAk1B,WAAA,WACEp1B,KAAKo0B,mBAAmBnf,KAAKjV,KAAKshB,cAC9BthB,KAAK40B,cACP50B,KAAK40B,aAAab,UAAU,CAC1BrS,aAAc1hB,KAAKshB,aAAaI,aAChChD,YAAa1e,KAAKshB,aAAa5C,eAQ7BwV,EAAAh0B,UAAA40B,iBAAR,WACE90B,KAAKshB,aAAe,CAClBC,KAAMvhB,KAAK40B,aAAajtB,IAAI,QAC5B6Z,MAAOxhB,KAAK40B,aAAajtB,IAAI,SAC7B0W,YAAare,KAAK40B,aAAajtB,IAAI,eACnC+Z,aAAc1hB,KAAK40B,aAAajtB,IAAI,gBAAkB2H,SAAStP,KAAK40B,aAAajtB,IAAI,iBAAmB,EACxG+W,YAAa1e,KAAK40B,aAAajtB,IAAI,eAAiB2H,SAAStP,KAAK40B,aAAajtB,IAAI,gBAAkB,EACrG8Z,WAAYzhB,KAAKshB,aAAaG,YAEhCzhB,KAAKo0B,mBAAmBnf,KAAKjV,KAAKshB,eAGpC4S,EAAAh0B,UAAA0jB,UAAA,WACM5jB,KAAK+0B,sBACP/0B,KAAK+0B,qBAAqBpf,wDAtEWsd,MA7BhCnyB,EAAA,CAAR8U,EAAAA,oEACS9U,EAAA,CAATgV,EAAAA,yBAA6BrC,EAAAA,wDAErB3S,EAAA,CAAR8U,EAAAA,wEACQ9U,EAAA,CAAR8U,EAAAA,mEAOQ9U,EAAA,CAAR8U,EAAAA,gEAES9U,EAAA,CAATgV,EAAAA,yBAA4BrC,EAAAA,uDAKpB3S,EAAA,CAAR8U,EAAAA,sEAEQ9U,EAAA,CAAR8U,EAAAA,0EAGQ9U,EAAA,CAAR8U,EAAAA,iEA1BUse,EAAcpzB,EAAA,CAL1BmV,EAAAA,UAAU,CACTC,SAAU,WACVC,SAAA,yxCACAkf,cAAeC,EAAAA,kBAAkBC,8BAkCQtC,MAhC9BiB,oBCHb,SAAAsB,IAEEx1B,KAAAq0B,YAAc,GAEdr0B,KAAAy1B,cAAe,EAGPz1B,KAAA01B,WAAkB,GAChB11B,KAAA21B,gBAAkB,IAAIliB,EAAAA,aAExBzT,KAAA41B,kBAAgC,aAChC51B,KAAA61B,iBAAqC,mBA8B/C,SAzCaL,EAaXh2B,OAAAgC,eAAIg0B,EAAAt1B,UAAA,QAAK,KAAT,WACE,OAAOF,KAAK01B,gBAGd,SAAUpN,GACJA,IAAMtoB,KAAK01B,aACb11B,KAAK01B,WAAapN,EAClBtoB,KAAK61B,iBAAiBvN,qCAI1BkN,EAAAt1B,UAAA41B,WAAA,SAAWxzB,GACLA,IAAUtC,KAAK01B,aACjB11B,KAAK01B,WAAapzB,IAItBkzB,EAAAt1B,UAAA61B,iBAAA,SAAiBC,GACfh2B,KAAK61B,iBAAmBG,GAG1BR,EAAAt1B,UAAA+1B,kBAAA,SAAkBD,GAChBh2B,KAAK41B,kBAAoBI,GAGpBR,EAAAt1B,UAAAg2B,qBAAP,SAA4BzwB,GAC1BzF,KAAK21B,gBAAgB1gB,KAAKxP,EAAMzE,OAAOsB,QArCzCxB,EAAA,CADC8U,EAAAA,mEAGD9U,EAAA,CADC8U,EAAAA,oEAGD9U,EAAA,CADC8U,EAAAA,0DAGS9U,EAAA,CAATgV,EAAAA,wEARU0f,EAAoBW,EAAAr1B,EAAA,CALhCmV,EAAAA,UAAU,CACTC,SAAU,kBACVC,SAAA,+cACAigB,UAAW,CAAC,CAAEC,QAASC,EAAAA,kBAAmBC,YAAaJ,EAAsBK,OAAO,OAEzEhB,oBCHb,SAAAiB,KAaA,OANEA,EAAAv2B,UAAA8d,UAAA,SAAUU,EAAqB+C,EAAoBC,GACjD,KAAMhD,GAAe,GAAK+C,GAAc,GAAKC,GAAgB,GAC3D,MAAM,IAAIgV,MAAM,0FAElB,OAAOhY,IAAgBhG,KAAKiY,KAAKlP,EAAaC,IAXrC+U,EAAoB31B,EAAA,CAHhC61B,EAAAA,KAAK,CACJze,KAAM,gBAEKue,oBCmBX,SAAAG,IAFU52B,KAAAo1B,WAA8C,IAAI3hB,EAAAA,aA6B9D,OArCWjU,OAAAgC,eAAIo1B,EAAA12B,UAAA,aAAU,KAGvB,WACE,OAAOF,KAAK62B,iBAJL,SAAeC,GACtB92B,KAAK62B,YAAcC,mCAWrBF,EAAA12B,UAAA62B,cAAA,WACM/2B,KAAK82B,WAAWpY,aAAe,IAGnC1e,KAAK82B,WAAWpY,cAChB1e,KAAKo1B,WAAWngB,KAAKjV,KAAK82B,cAG5BF,EAAA12B,UAAA82B,cAAA,YACqB,IAAIP,IAAuBzY,UAC5Che,KAAK82B,WAAWpY,YAChB1e,KAAK82B,WAAWrV,WAChBzhB,KAAK82B,WAAWpV,gBAKlB1hB,KAAK82B,WAAWpY,cAChB1e,KAAKo1B,WAAWngB,KAAKjV,KAAK82B,cAG5BF,EAAA12B,UAAA+2B,iBAAA,SAAiBC,GACfl3B,KAAK82B,WAAWpY,YAAcpP,SAAS4nB,GACvCl3B,KAAKo1B,WAAWngB,KAAKjV,KAAK82B,aAnCnBh2B,EAAA,CAAR8U,EAAAA,gGAQS9U,EAAA,CAATgV,EAAAA,yBAAqBrC,EAAAA,gDATXmjB,EAAmB91B,EAAA,CAJ/BmV,EAAAA,UAAU,CACTC,SAAU,gBACVC,SAAA,67CAEWygB,oBCRb,SAAAO,KAgBA,OATEA,EAAAj3B,UAAA8d,UAAA,SAAUyD,EAAoBC,GAC5B,KAAMD,GAAc,GAAKC,GAAgB,GACvC,MAAM,IAAIgV,MAAM,+DAElB,IAAMU,EAAsB1e,KAAKiY,KAAKlP,EAAaC,GACnD,OAAO/hB,MAAMkB,MAAM,KAAM,CAAEF,OAAQy2B,IAChCnzB,IAAIozB,OAAOz2B,KAAMy2B,QACjBpzB,KAAI,SAACqzB,GAAc,OAAAA,EAAI,MAdjBH,EAAyBr2B,EAAA,CAHrC61B,EAAAA,KAAK,CACJze,KAAM,qBAEKif,oBCEX,SAAAI,EAAoB3rB,GAAA5L,KAAA4L,iBAAAA,EAuBtB,OAfE2rB,EAAAr3B,UAAA8d,UAAA,SAAUU,EAAqB+C,EAAoBC,GACjD,IAAI8V,EAAkB,EACpBC,EAAmB,EAWrB,OATIhW,IACF+V,GAAmB9Y,EAAc,GAAKgD,EAAe,EACrD+V,EAAmB/Y,EAAcgD,GAG/B+V,EAAmBhW,IACrBgW,EAAmBhW,GAGdzhB,KAAK4L,iBAAiBgG,QAAQ,yBAA0B,CAAE8lB,IAAKF,EAAiBG,KAAMF,EAAkBjG,MAAO/P,8CArBlFzU,EAAAA,oBAD3BuqB,EAAcz2B,EAAA,CAH1B61B,EAAAA,KAAK,CACJze,KAAM,gDAGgClL,EAAAA,oBAD3BuqB,oBCmBX,SAAAK,IAdA53B,KAAA2qB,MAAQ,GAMR3qB,KAAA63B,OAAQ,EAER73B,KAAAk1B,SAAU,EAEVl1B,KAAA+Z,GAAK,GAGL/Z,KAAA83B,UAAW,QA0Bb,SAzCaF,EAoBXA,EAAA13B,UAAA61B,iBAAA,SAAiBC,GACfh2B,KAAK+3B,UAAY/B,GAGnB4B,EAAA13B,UAAA+1B,kBAAA,SAAkBD,GAChBh2B,KAAKg4B,WAAahC,GAGpB4B,EAAA13B,UAAA+3B,iBAAA,SAAiBC,GACfl4B,KAAK83B,SAAWI,GAGlBN,EAAA13B,UAAA41B,WAAA,SAAWqC,GACTn4B,KAAKsC,MAAQ61B,GAGfP,EAAA13B,UAAAk4B,SAAA,SAAS91B,GACHtC,KAAK+3B,WACP/3B,KAAK+3B,UAAUz1B,IApCnBxB,EAAA,CADC8U,EAAAA,6DAGD9U,EAAA,CADC8U,EAAAA,6DAGD9U,EAAA,CADC8U,EAAAA,4DAGD9U,EAAA,CADC8U,EAAAA,6DAGD9U,EAAA,CADC8U,EAAAA,+DAGD9U,EAAA,CADC8U,EAAAA,0DAGD9U,EAAA,CADC8U,EAAAA,4DAbUgiB,EAAiBS,EAAAv3B,EAAA,CAN7BmV,EAAAA,UAAU,CACTC,SAAU,cACVC,SAAA,2cACAkf,cAAeC,EAAAA,kBAAkBC,KACjCa,UAAW,CAAC,CAAEC,QAASC,EAAAA,kBAAmBC,YAAa8B,EAAmB7B,OAAO,iCAEtEoB,oBCkCX,SAAAU,EACUC,EACAC,EACAC,EACkBnoB,EAClBooB,EACAC,GALA34B,KAAAu4B,WAAAA,EACAv4B,KAAAw4B,OAAAA,EACAx4B,KAAAy4B,SAAAA,EACkBz4B,KAAAsQ,SAAAA,EAClBtQ,KAAA04B,SAAAA,EACA14B,KAAA24B,SAAAA,EAXA34B,KAAA44B,oBAA6C,IAAInlB,EAAAA,aA2D7D,OAtE0BjU,OAAAgC,eAAI82B,EAAAp4B,UAAA,gBAAa,KAOzC,WACE,OAAOF,KAAK64B,YARU,SAAkBv2B,GACxCtC,KAAK64B,OAASv2B,EACVtC,KAAK84B,sBACP94B,KAAK+4B,oDAsBTT,EAAAp4B,UAAAiU,SAAA,WACEnU,KAAKg5B,0BACLh5B,KAAKi5B,sBACLj5B,KAAKk5B,yBAGPZ,EAAAp4B,UAAA84B,wBAAA,WAEE,IAAMG,EAAoB7oB,SAASC,cAAc,OACjD4oB,EAAkBC,UAAY,kEAG9Bp5B,KAAKy4B,SAASY,aAAar5B,KAAKu4B,WAAW1f,cAAesgB,EAAmBn5B,KAAKu4B,WAAW1f,cAAcygB,YAG3Gt5B,KAAKu5B,cAAgB,IAAIC,GAAcL,EAAmBn5B,KAAKw4B,OAAQx4B,KAAK04B,SAAU14B,KAAK24B,UAC3F34B,KAAK84B,qBAAuB94B,KAAKu5B,cAAcE,OAAO7B,KAGhDU,EAAAp4B,UAAA+4B,oBAAR,WACEj5B,KAAK84B,qBAAqBY,SAAS3f,GAAK/Z,KAAK25B,WAAa35B,KAAK25B,WAAajF,EAAAA,KAC5E10B,KAAK84B,qBAAqBY,SAASxhB,KAAOlY,KAAK45B,aAAe55B,KAAK45B,kBAAeloB,EAClF1R,KAAK84B,qBAAqBY,SAAS7B,OAAQ,EAC3C73B,KAAK+4B,oBAGCT,EAAAp4B,UAAA64B,iBAAR,WACE/4B,KAAK84B,qBAAqBY,SAASp3B,MAAQtC,KAAK65B,eAG1CvB,EAAAp4B,UAAAg5B,sBAAR,WAAA,IAAA11B,EAAAxD,KAEEA,KAAK84B,qBAAqBY,SAAS3D,kBAAiB,WAClDvyB,EAAKs2B,sBAIDxB,EAAAp4B,UAAA45B,gBAAR,WACE95B,KAAK65B,eAAiB75B,KAAK65B,cAC3B75B,KAAK44B,oBAAoB3jB,KAAKjV,KAAK65B,gBAGrCvB,EAAAp4B,UAAAwV,YAAA,WACE1V,KAAKu5B,cAAcQ,oDAnDChhB,EAAAA,kBACJihB,EAAAA,sBACEC,EAAAA,0CACjBC,EAAAA,OAAMC,KAAA,CAACC,EAAAA,mBACUC,EAAAA,gCACAC,EAAAA,YAzBCx5B,EAAA,CAApB8U,EAAAA,MAAM,wEACgB9U,EAAA,CAAtB8U,EAAAA,MAAM,4EAEiB9U,EAAA,CAAvB8U,EAAAA,MAAM,8GAWG9U,EAAA,CAATgV,EAAAA,yBAA8BrC,EAAAA,yDAfpB6kB,EAAWx3B,EAAA,CAHvB4b,EAAAA,UAAU,CACTxG,SAAU,kBA0BPzU,EAAA,EAAAy4B,EAAAA,OAAOE,EAAAA,kCAHYrhB,EAAAA,WACJihB,EAAAA,eACEC,EAAAA,UAASz6B,OAET66B,EAAAA,yBACAC,EAAAA,YA1BThC,MA4EbkB,GAAA,WAKE,SAAAA,EACUe,EACA/B,EACAgC,EACA7B,GAHA34B,KAAAu6B,YAAAA,EACAv6B,KAAAw4B,OAAAA,EACAx4B,KAAAw6B,yBAAAA,EACAx6B,KAAA24B,SAAAA,EARF34B,KAAAy6B,UAAoB,EAqC9B,OA1BEjB,EAAAt5B,UAAAu5B,OAAA,SAAOiB,GAAP,IAAAl3B,EAAAxD,KACE,GAAIA,KAAKy6B,SACP,MAAM,IAAI/D,MAAM,uCAGlB12B,KAAKy6B,UAAW,EAChB,IAEIE,EAF0B36B,KAAKw6B,yBAAyBI,wBAAwBF,GAE3Cv6B,OAAOH,KAAK24B,UAUrD,OARA34B,KAAKw4B,OAAOqC,WAAWF,EAAaG,UACpC96B,KAAK+6B,UAAY,WACfv3B,EAAKg1B,OAAOwC,WAAWL,EAAaG,UACpCH,EAAaM,WAGfj7B,KAAKu6B,YAAY1pB,YAAa8pB,EAAaG,SAAkCI,UAAU,IAEhFP,GAGTnB,EAAAt5B,UAAA65B,QAAA,WACM/5B,KAAKy6B,UACPz6B,KAAK+6B,aAGXvB,EAtCA,iBCrFE,SAAA2B,EAAoBC,EAAiC3C,EAA+CnoB,GAAhFtQ,KAAAo7B,YAAAA,EAAiCp7B,KAAAy4B,SAAAA,EAA+Cz4B,KAAAsQ,SAAAA,EAF5FtQ,KAAAq7B,gBAA4B,CAAC,OAAQ,SAAU,SAqBzD,OAjBEF,EAAAj7B,UAAAmf,gBAAA,WACErf,KAAKs7B,2BAGPH,EAAAj7B,UAAAo7B,wBAAA,WAIE,GAHAt7B,KAAKo7B,YAAYviB,cAAcxD,MAAMkmB,cAAsC,IAApBv7B,KAAKw7B,WAA6Bx7B,KAAKw7B,WAAa,IAC3Gx7B,KAAKy4B,SAASgD,SAASz7B,KAAKo7B,YAAYviB,cAAe,8BAEnD7Y,KAAK07B,WAAY,CACnB,IAAuD,IAAnD17B,KAAKq7B,gBAAgBt2B,QAAQ/E,KAAK07B,YACpC,KAAM,uHAGR,IAAItC,EAAY,uCAA8Cp5B,KAAK07B,WACnE17B,KAAKy4B,SAASgD,SAASz7B,KAAKo7B,YAAYviB,cAAeugB,8CAhB1BrgB,EAAAA,kBAA8BkhB,EAAAA,0CAAYC,EAAAA,OAAMC,KAAA,CAACC,EAAAA,eAL7Dt5B,EAAA,CAApB8U,EAAAA,MAAM,wEACc9U,EAAA,CAApB8U,EAAAA,MAAM,wEAFIulB,EAAWr6B,EAAA,CAHvB4b,EAAAA,UAAU,CACTxG,SAAU,kBAQiEzU,EAAA,EAAAy4B,EAAAA,OAAOE,EAAAA,kCAAjDrhB,EAAAA,WAA8BkhB,EAAAA,UAASz6B,UAN7D27B,oBC8BX,SAAAQ,EACUP,EACA3C,EACkBnoB,EAClB6jB,GAHAn0B,KAAAo7B,YAAAA,EACAp7B,KAAAy4B,SAAAA,EACkBz4B,KAAAsQ,SAAAA,EAClBtQ,KAAAm0B,oBAAAA,EAxBVn0B,KAAA47B,YAAsB,GAKE57B,KAAA67B,eAAyB,EAIvC77B,KAAA87B,aAAsC,IAAIroB,EAAAA,aAE1CzT,KAAAo0B,mBAAiD,IAAI3gB,EAAAA,aAEvDzT,KAAAq7B,gBAA4B,CAAC,OAAQ,SAAU,SAK/Cr7B,KAAA+7B,cAAgC,GAwK1C,OA9LEv8B,OAAAgC,eAAIm6B,EAAAz7B,UAAA,aAAU,KAKd,WACE,OAAOF,KAAK47B,iBANd,SAAet5B,GACbtC,KAAK47B,YAAct5B,EACnBtC,KAAKg8B,iDA6BPL,EAAAz7B,UAAAiU,SAAA,WACMnU,KAAKi8B,WAAaj8B,KAAK4zB,WACrB5zB,KAAK67B,cACP77B,KAAKk8B,oBAELl8B,KAAKm8B,oBAKXR,EAAAz7B,UAAAmf,gBAAA,WACErf,KAAKs7B,0BACLt7B,KAAKo8B,sBAGPT,EAAAz7B,UAAAg8B,kBAAA,WAAA,IAAA14B,EAAAxD,KACEA,KAAKyzB,YAAczzB,KAAKm0B,oBAAoBZ,oBAAoBvzB,KAAKi8B,WAErE,IAAMlH,EAAuB/0B,KAAKyzB,YAAYoB,cAAczoB,WAAU,SAAA4oB,GACpE,IAAMqH,EAAarH,EAAQrrB,QAAO,SAAAA,GAAU,MAAe,SAAfA,EAAO1I,OAAgB,GAC/DuC,EAAKowB,WAAayI,EAAW/5B,OAC/BkB,EAAK84B,mBAGTt8B,KAAK+7B,cAAcn5B,KAAKmyB,IAG1B4G,EAAAz7B,UAAAi8B,gBAAA,WAAA,IAAA34B,EAAAxD,KACQu8B,EAAgBv8B,KAAKm0B,oBAAoBN,uBAAuBznB,WAAU,SAAAmV,GAC1E/d,EAAKy4B,YAAc1a,EAAKyR,eAAiBxvB,EAAKowB,WAAarS,EAAKqS,UAElEpwB,EAAK84B,mBAGTt8B,KAAK+7B,cAAcn5B,KAAK25B,IAG1BZ,EAAAz7B,UAAAo8B,cAAA,WAEEt8B,KAAKw8B,cAAcpD,UAAYp5B,KAAKw8B,cAAcpD,UAAUqD,QAAQz8B,KAAK08B,qBAAsB,SAGjGf,EAAAz7B,UAAAo7B,wBAAA,WAIE,GAHAt7B,KAAKo7B,YAAYviB,cAAcxD,MAAMkmB,cAAsC,IAApBv7B,KAAKw7B,WAA6Bx7B,KAAKw7B,WAAa,IAC3Gx7B,KAAKy4B,SAASgD,SAASz7B,KAAKo7B,YAAYviB,cAAe,wBAEnD7Y,KAAK07B,WAAY,CACnB,IAAuD,IAAnD17B,KAAKq7B,gBAAgBt2B,QAAQ/E,KAAK07B,YACpC,KAAM,uHAGR,IAAItC,EAAY,iCAAwCp5B,KAAK07B,WAC7D17B,KAAKy4B,SAASgD,SAASz7B,KAAKo7B,YAAYviB,cAAeugB,KAI3DuC,EAAAz7B,UAAAk8B,mBAAA,WACEp8B,KAAK28B,sBACL38B,KAAKy4B,SAAS5nB,YAAY7Q,KAAKo7B,YAAYviB,cAAe7Y,KAAKw8B,gBAGjEb,EAAAz7B,UAAAy8B,oBAAA,WACE38B,KAAKw8B,cAAgBlsB,SAASC,cAAc,KAC5CvQ,KAAKw8B,cAAcpD,UAAY,+BAC/Bp5B,KAAKg8B,gBACDh8B,KAAKi8B,WAAaj8B,KAAK4zB,UACzB5zB,KAAK48B,cAIDjB,EAAAz7B,UAAA87B,cAAR,WACOh8B,KAAKw8B,gBAGVx8B,KAAKw8B,cAAcK,UAAY78B,KAAK88B,aAGtCnB,EAAAz7B,UAAA08B,WAAA,WAAA,IAAAp5B,EAAAxD,KAEEA,KAAKw8B,cAAcpD,WAAa,kCAAoCp5B,KAAK+8B,qBAGzE/8B,KAAKy4B,SAASuE,OAAOh9B,KAAKw8B,cAAe,SAAS,WAChD,IACIS,EACAC,EAAiBC,EAFfC,EAAc55B,EAAKk5B,qBAIzB,OAAQU,GACN,IAAK,OACHH,EAAU,KACVC,EAAU15B,EAAKowB,SACfuJ,GAAW,EACX,MAEF,IAAK,KACHF,EAAU,OACVC,EAAU15B,EAAKowB,SACfuJ,GAAW,EACX,MAEF,IAAK,OAIL,QACEF,EAAU,OAIdz5B,EAAKg5B,cAAcpD,UAAY51B,EAAKg5B,cAAcpD,UAAUqD,QAAQW,EAAaH,GAEjFz5B,EAAK65B,WAAWH,EAASC,OAI7BxB,EAAAz7B,UAAA68B,mBAAA,WACE,IAAK/8B,KAAK67B,cACR,MAAO,OAGT,IAAIyB,EAAkB,OAItB,OAHIt9B,KAAKyzB,YAAY9rB,IAAI,UAAY3H,KAAK4zB,WACxC0J,EAAmD,QAAjCt9B,KAAKyzB,YAAY9rB,IAAI,SAAqB,KAAO,QAE9D21B,GAGT3B,EAAAz7B,UAAAw8B,mBAAA,WAGE,MAFe,6CACPa,KAAAv9B,KAAAw8B,cAAApD,WAAAoE,OACMvS,MAGhB0Q,EAAAz7B,UAAAm9B,WAAA,SAAWH,EAASC,GACdn9B,KAAK67B,cAEP77B,KAAKyzB,YAAYM,UAAU,CACzBxS,KAAM2b,EACN1b,MAAO2b,EACPze,YAAa,IAIf1e,KAAKm0B,oBAAoBR,eAAe3zB,KAAKi8B,UAAWj8B,KAAK4zB,SAAUuJ,GAErEn9B,KAAKshB,eACPthB,KAAKshB,aAAaC,KAAOvhB,KAAK4zB,SAC9B5zB,KAAKshB,aAAaE,MAAQ2b,EAC1Bn9B,KAAKshB,aAAa5C,YAAc,EAChC1e,KAAKo0B,mBAAmBnf,KAAKjV,KAAKshB,eAEpCthB,KAAK87B,aAAa7mB,KAAKkoB,IAGzBxB,EAAAz7B,UAAAwV,YAAA,WACE1V,KAAK+7B,cAAct4B,SAAQ,SAAAg6B,GACzBA,EAAa9nB,2DAlKMoD,EAAAA,kBACHkhB,EAAAA,0CACjBC,EAAAA,OAAMC,KAAA,CAACC,EAAAA,mBACqBnH,MA5B/BnyB,EAAA,CADC8U,EAAAA,MAAM,sGASc9U,EAAA,CAApB8U,EAAAA,MAAM,wEACiB9U,EAAA,CAAvB8U,EAAAA,MAAM,+EACa9U,EAAA,CAAnB8U,EAAAA,MAAM,sEACY9U,EAAA,CAAlB8U,EAAAA,MAAM,oEACc9U,EAAA,CAApB8U,EAAAA,MAAM,wEACG9U,EAAA,CAATgV,EAAAA,yBAAuBrC,EAAAA,kDACf3S,EAAA,CAAR8U,EAAAA,oEACS9U,EAAA,CAATgV,EAAAA,yBAA6BrC,EAAAA,wDAjBnBkoB,EAAiB76B,EAAA,CAJ7B4b,EAAAA,UAAU,CAETxG,SAAU,iBA+BPzU,EAAA,EAAAy4B,EAAAA,OAAOE,EAAAA,kCAFarhB,EAAAA,WACHkhB,EAAAA,UAASz6B,OAEEyzB,MA9BpB0I,oBCFX,SAAA+B,EAAoBtC,EAAiC3C,EAA+CnoB,GAAhFtQ,KAAAo7B,YAAAA,EAAiCp7B,KAAAy4B,SAAAA,EAA+Cz4B,KAAAsQ,SAAAA,EAStG,OAPEotB,EAAAx9B,UAAAmf,gBAAA,WACErf,KAAKs7B,2BAGPoC,EAAAx9B,UAAAo7B,wBAAA,WACEt7B,KAAKy4B,SAASgD,SAASz7B,KAAKo7B,YAAYviB,cAAe,kEAPxBE,EAAAA,kBAA8BkhB,EAAAA,0CAAYC,EAAAA,OAAMC,KAAA,CAACC,EAAAA,eADvEsD,EAAQ58B,EAAA,CAJpB4b,EAAAA,UAAU,CAETxG,SAAU,eAGiEzU,EAAA,EAAAy4B,EAAAA,OAAOE,EAAAA,kCAAjDrhB,EAAAA,WAA8BkhB,EAAAA,UAASz6B,UAD7Dk+B,oBCDX,SAAAC,EAAoBzzB,GAAAlK,KAAAkK,cAAAA,EAetB,OAbEyzB,EAAAz9B,UAAA8d,UAAA,SAAU4f,EAAqBp0B,GAC7B,IAAIA,EACF,KAAM,yCAGR,IAAMuR,EAAgB/a,KAAKkK,cAAcX,UAAUC,GAEnD,IAAKuR,EACH,KAAM,oDAGR,OAAOA,EAAQ6iB,4CAbkBx0B,KAFxBu0B,EAAY78B,EAAA,CAHxB61B,EAAAA,KAAK,CACJze,KAAM,kCAI6B9O,KAFxBu0B,oBCWX,SAAAE,IACE79B,KAAK2Z,aAAe,IACpB3Z,KAAK89B,cAAgB,IAAIrqB,EAAAA,aACzBzT,KAAK+9B,WAAa,IAAI5wB,EAAAA,QACtBnN,KAAKg+B,cAAgB,IAAI7wB,EAAAA,QAsB7B,OAnBE0wB,EAAA39B,UAAAiU,SAAA,WAAA,IAAA3Q,EAAAxD,KACEA,KAAK+9B,WACF/sB,KACCitB,EAAAA,UAAUj+B,KAAKg+B,eACfrkB,EAAAA,aAAa3Z,KAAK2Z,cAClBukB,EAAAA,uBACAC,EAAAA,KAAI,SAAA77B,GAAS,OAAAkB,EAAK46B,WAAW97B,OAE9B8J,aAGEyxB,EAAA39B,UAAAk+B,WAAP,SAAkB97B,GAChBtC,KAAK89B,cAAc7oB,KAAK3S,IAG1Bu7B,EAAA39B,UAAAwV,YAAA,WACE1V,KAAKg+B,cAAc37B,OACnBrC,KAAKg+B,cAAcpuB,YAhCrB9O,EAAA,CADC8U,EAAAA,oEAID9U,EAAA,CADCgV,EAAAA,yBACqBrC,EAAAA,mDALXoqB,EAAyB/8B,EAAA,CAHrC4b,EAAAA,UAAU,CACTxG,SAAU,yDAEC2nB,qBCDX,SAAAQ,WACEta,EAAAnjB,KAAAZ,OAAOA,KAQX,OAV4CF,EAAAu+B,EAAAta,GAMnCsa,EAAAn+B,UAAAo+B,QAAP,SAAe74B,GACbA,EAAM2W,iBACNpc,KAAK+9B,WAAW17B,KAAKoD,IAFvB3E,EAAA,CADCiV,EAAAA,aAAa,QAAS,CAAC,gIALbsoB,EAAsBv9B,EAAA,CAHlC4b,EAAAA,UAAU,CACTxG,SAAU,oDAECmoB,IAA+BR,kBCE5C,SAAAU,IAIEv+B,KAAAw+B,OAAQ,EAGV,OALE19B,EAAA,CADC8U,EAAAA,4DAGD9U,EAAA,CADC8U,EAAAA,6DAGD9U,EAAA,CADC8U,EAAAA,gEALU2oB,EAAez9B,EAAA,CAL3BmV,EAAAA,UAAU,CACTC,SAAU,YACVC,SAAA,gZACAkf,cAAeC,EAAAA,kBAAkBC,QAEtBgJ,oBCKX,SAAAE,IAJSz+B,KAAAirB,MAAO,EACPjrB,KAAA0+B,SAAU,EACV1+B,KAAA2+B,SAAU,EACV3+B,KAAA4+B,UAAY,cAGvB,OADEH,EAAAv+B,UAAAiU,SAAA,aALSrT,EAAA,CAAR8U,EAAAA,4DACQ9U,EAAA,CAAR8U,EAAAA,+DACQ9U,EAAA,CAAR8U,EAAAA,+DACQ9U,EAAA,CAAR8U,EAAAA,iEAJU6oB,EAAc39B,EAAA,CAL1BmV,EAAAA,UAAU,CACTC,SAAU,WAEVC,SAAA,45BAEWsoB,oBCFb,SAAAI,KAKA,OAHEA,EAAA3+B,UAAA8d,UAAA,SAAU8gB,GACR,OAAOn/B,MAAMo/B,KAAK,IAAIC,OAAOF,KAHpBD,EAAa/9B,EAAA,CAHzB61B,EAAAA,KAAK,CACJze,KAAM,mBAEK2mB,oBCgCX,SAAAI,IAPAj/B,KAAAk/B,oBAA6B,EAE7Bl/B,KAAAm/B,mBAA6B,EAC7Bn/B,KAAAo/B,aAAuB,EAEbp/B,KAAAo1B,WAAmC,IAAI3hB,EAAAA,aAYnD,OAjCWjU,OAAAgC,eAAIy9B,EAAA/+B,UAAA,aAAU,KAGvB,WACE,OAAOF,KAAK62B,iBAJL,SAAeC,GACtB92B,KAAK62B,YAAcC,mCAOZt3B,OAAAgC,eAAIy9B,EAAA/+B,UAAA,aAAU,KAIvB,WACE,OAAOF,KAAKq/B,iBALL,SAAe5d,GACtBzhB,KAAKo/B,aAAe1mB,KAAKiY,KAAKlP,EAAazhB,KAAK82B,WAAWpV,cAC3D1hB,KAAKm/B,kBAAoBn/B,KAAKo/B,aAAe,oCAe/CH,EAAA/+B,UAAA+2B,iBAAA,SAAiBxxB,EAAO65B,GAClBA,GACFt/B,KAAKo1B,WAAWngB,KAAKxP,GACrBzF,KAAKk/B,oBAAqB,GAE1Bl/B,KAAKo1B,WAAWngB,KAAK3F,SAAS7J,EAAMzE,OAAOsB,SA9BtCxB,EAAA,CAAR8U,EAAAA,gGAQQ9U,EAAA,CAAR8U,EAAAA,gGAaS9U,EAAA,CAATgV,EAAAA,yBAAqBrC,EAAAA,gDAvBXwrB,EAAqBn+B,EAAA,CAJjCmV,EAAAA,UAAU,CACTC,SAAU,mBACVC,SAAA,yoDAEW8oB,oBCPb,SAAAM,KAuDA,OAhDEA,EAAAr/B,UAAA8d,UAAA,SAAUyD,EAAoBC,EAAsBhD,GAClD,KAAM+C,GAAc,GAAKC,GAAgB,GACvC,MAAM,IAAIgV,MAAM,+DAGlB,IAEM8I,EAAc9gB,GAAe,GAAK,EAAIA,EAAc,GACpD+gB,EAAY/mB,KAAKiY,KAAKlP,EAAaC,GAInCge,EAAsB//B,MAAMkB,MAAM,KAAM,CAAEF,OAPtB,KAQzBsD,IAAIozB,OAAOz2B,KAAMy2B,QACjBpzB,KAAI,SAACqzB,GAEJ,IAAM1I,EAAgB,CACpB+Q,QAASH,EAAclI,EAAI,EAC3Bh1B,MAAOk9B,EAAclI,EAAI,GAW3B,OARUF,KAANE,IACD1I,EAAU+Q,QAAU,OAEbvI,KAANE,IACF1I,EAAU+Q,QAAUF,EACpB7Q,EAAUtsB,MAAQm9B,GAGb7Q,KAiBT,OAbI4Q,GACFE,EAAoBpN,QAClB,CACEqN,QAAS,EACTr9B,MAAO,GAET,CACEq9B,QAAS,MACTr9B,MAAO,IAKNo9B,GArDEH,EAAqBz+B,EAAA,CAHjC61B,EAAAA,KAAK,CACJze,KAAM,uBAEKqnB,oBC4CX,SAAAK,EAAoBh0B,GAAA5L,KAAA4L,iBAAAA,EAxBpB5L,KAAAyf,QAAS,EAGTzf,KAAAyI,KAAO,UAKEzI,KAAA6/B,SAAW,OAGpB7/B,KAAA83B,UAAW,EAED93B,KAAA8/B,YAAc,IAAIrsB,EAAAA,aAElBzT,KAAA+/B,oBAAsB,IAAItsB,EAAAA,aAIpCzT,KAAAggC,gBAAiB,EACjBhgC,KAAAqe,YAAc,GAEdre,KAAAigC,mBAA6B,EAmD7BjgC,KAAAo4B,SAA6C,aAC7Cp4B,KAAAkgC,QAAe,mBAiBjB,SAzGaN,EAwCXA,EAAA1/B,UAAAiU,SAAA,WACEnU,KAAKigC,kBAAoBjgC,KAAKmgC,MAAMC,WAAU,SAAA5kB,GAAQ,OAAAA,EAAKhB,aAG7DolB,EAAA1/B,UAAAgU,QAAA,WACElU,KAAKggC,gBAAiB,GAGxBJ,EAAA1/B,UAAAmgC,SAAA,SAAS7kB,EAAkBjX,GACzB,OAAUiX,EAAKzB,GAAE,IAAIxV,GAGvBq7B,EAAA1/B,UAAAogC,aAAA,SAAavmB,GACX/Z,KAAKugC,cACLvgC,KAAKwgC,qBAAqBzmB,GAC1B,IAAM0mB,EAA2BzgC,KAAK0gC,kBACtCD,EAAajmB,UAAW,EACxBxa,KAAK8/B,YAAY7qB,KAAKjV,KAAKigC,mBAC3BjgC,KAAKo4B,SAASqI,IAGhBb,EAAA1/B,UAAAygC,oBAAA,WACE3gC,KAAKkU,UACLlU,KAAK+/B,oBAAoB9qB,KAAKjV,KAAK4gC,aAAat+B,QAG1Cs9B,EAAA1/B,UAAAwgC,gBAAR,WACE,OAAO1gC,KAAKmgC,MAAMngC,KAAKigC,oBAGzBL,EAAA1/B,UAAA2gC,eAAA,WAAA,IAAAr9B,EAAAxD,KACEA,KAAKggC,gBAAiB,EACtBtrB,YAAW,WACTlR,EAAKs9B,cAAcjoB,cAAckoB,UAChC,IAGGnB,EAAA1/B,UAAAqgC,YAAR,WACEvgC,KAAKmgC,MAAM18B,SAAQ,SAAA+X,GAAQ,OAAAA,EAAKhB,UAAW,MAGrColB,EAAA1/B,UAAAsgC,qBAAR,SAA6BzmB,GAC3B/Z,KAAKigC,kBAAoBjgC,KAAKmgC,MAAMC,WAAU,SAAA5kB,GAAQ,OAAAA,EAAKzB,KAAOA,MAQpE6lB,EAAA1/B,UAAA41B,WAAA,SAAWkL,GACJA,IAGLhhC,KAAKugC,cACLS,EAAWxmB,UAAW,EACtBxa,KAAKwgC,qBAAqBQ,EAAWjnB,MAGvC6lB,EAAA1/B,UAAA61B,iBAAA,SAAiBC,GACfh2B,KAAKo4B,SAAWpC,GAElB4J,EAAA1/B,UAAA+1B,kBAAA,SAAkBD,GAChBh2B,KAAKkgC,QAAUlK,4CAjEqBhpB,EAAAA,oBApCtClM,EAAA,CADC8U,EAAAA,4DAID9U,EAAA,CADC8U,EAAAA,mEAID9U,EAAA,CADC8U,EAAAA,6DAID9U,EAAA,CADC8U,EAAAA,qEAID9U,EAAA,CADC8U,EAAAA,8DAID9U,EAAA,CADC8U,EAAAA,4DAID9U,EAAA,CADC8U,EAAAA,oEAGQ9U,EAAA,CAAR8U,EAAAA,gEAGD9U,EAAA,CADC8U,EAAAA,gEAGS9U,EAAA,CAATgV,EAAAA,oEAEShV,EAAA,CAATgV,EAAAA,4EAEoBhV,EAAA,CAApBgY,EAAAA,UAAU,0BAAyBC,EAAAA,iDA/BzB6mB,EAAeqB,EAAAngC,EAAA,CAL3BmV,EAAAA,UAAU,CACTC,SAAU,aACVC,SAAA,6mFACAigB,UAAW,CAAC,CAAEC,QAASC,EAAAA,kBAAmBC,YAAa0K,EAAiBzK,OAAO,6BAwCzCxpB,EAAAA,oBAtC3B4yB,oBCJb,SAAAsB,KAOA,OANIA,EAAAhhC,UAAA8d,UAAA,SAAUmiB,EAAqBgB,GAC3B,OAAOhB,EAAMx2B,QAAO,SAAA6R,GAEhB,OADe,IAAI5R,OAAOu3B,EAAY,KACxBt3B,KAAK2R,EAAKtD,UAJvBgpB,EAAiBpgC,EAAA,CAJ7B61B,EAAAA,KAAK,CACFze,KAAM,mBAGGgpB,oBCaX,SAAAE,EAAoBC,EAAoC5I,GAApCz4B,KAAAqhC,eAAAA,EAAoCrhC,KAAAy4B,SAAAA,EAdxDz4B,KAAAshC,WAAY,EA8Bd,OAxBE9hC,OAAAgC,eAAI4/B,EAAAlhC,UAAA,WAAQ,KAIZ,WACE,OAAOF,KAAKshC,eALd,SAAah/B,GACXtC,KAAKshC,UAAYh/B,EACjBtC,KAAKuhC,gDASPH,EAAAlhC,UAAAiU,SAAA,aAGAitB,EAAAlhC,UAAAqhC,aAAA,WACMvhC,KAAKshC,UACPthC,KAAKy4B,SAASgD,SAASz7B,KAAKqhC,eAAexoB,cAAc2oB,cAAcC,WAAY,gBAEnFzhC,KAAKy4B,SAASiJ,YAAY1hC,KAAKqhC,eAAexoB,cAAc2oB,cAAcC,WAAY,iBAI1FL,EAAAlhC,UAAAwV,YAAA,sDAdoCqD,EAAAA,kBAA8BkhB,EAAAA,aAXlEn5B,EAAA,CADCgV,EAAAA,yBACqBrC,EAAAA,mDAGtB3S,EAAA,CADC8U,EAAAA,MAAM,wGANIwrB,EAAqBtgC,EAAA,CAHjC4b,EAAAA,UAAU,CACTxG,SAAU,0CAiB0B6C,EAAAA,WAA8BkhB,EAAAA,aAfvDmH,MCiDPO,GAAa,CACfzuB,EACA2H,EACAnE,EACAyH,EACA2F,EACA3J,EACAoK,EACA4E,GACA1D,EACAY,EACAkY,GACArV,GACAS,GACAgE,GACAkF,GACAE,GACAmB,GACAsB,GACAoB,GACAgB,GACA6G,GACAQ,GACAW,IAGEgC,GAAa,CACjB7lB,EACAiL,EACAU,EACAa,GACA4S,GACA7C,GACAqD,GACA+B,GACAG,GACAQ,GACA+C,IAGIS,GAAQ,CACZ1K,GACAV,GACAc,GACAoG,GACAkB,GACAU,GACA2B,IA0BFY,GAAA,WAAA,SAAAA,KAAkC,OAArBA,EAAkBhhC,EAAA,CAvB9BihC,EAAAA,SAAS,CACRC,aAAYl/B,EACP6+B,GACAC,GACAC,IAELI,QAAS,CACPC,EAAAA,aACAC,EAAAA,iBACAC,EAAAA,YACAC,EAAAA,kBACAC,EAAAA,yBACAC,EAAAA,aACAC,EAAAA,mBACAC,EAAAA,eACAC,EAAAA,eACAC,EAAAA,gBACAC,EAAAA,wBAEFxM,UAAW,GACXyM,QAAS,CACP3vB,MAES4uB,GAAb,MC7HA,gBCFA,WAEI9hC,KAAAsK,oBAAsB,GAEtBtK,KAAA8K,aAAe,GAGf9K,KAAAwK,UAAY,GACZxK,KAAA4K,aAAuB,0BCR3B,WACI5K,KAAA8iC,cAAgB,GAChB9iC,KAAA+iC,cAAgB,GAChB/iC,KAAAgjC,cAAgB,GAChBhjC,KAAAijC,cAAgB,GAChBjjC,KAAAkjC,cAAgB","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { Subscriber, Observable, ReplaySubject } from 'rxjs';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgSelectionService {\n\n imgSelectedList: ImgPictureDTO[] = [];\n multipleImgMode: boolean = false;\n private imgSelectionSubscriber: Subscriber<any>[] = [];\n private imgListLoading: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n constructor() {}\n\n getImgSelection() {\n return this.imgSelectedList;\n }\n\n // Use in img manager webelement, when the product img selection is retrieved\n setImgSelection(imgSelectedList: ImgPictureDTO[]) {\n this.imgSelectedList.length = 0;// Remove all the elements from the array and keep the reference\n\n if (imgSelectedList && imgSelectedList.length) {\n imgSelectedList.forEach(elem => this.imgSelectedList.push(elem));\n }\n this.emitImgSelectionChange();\n }\n\n addImgSelected(picture : ImgPictureDTO) {\n if (this.multipleImgMode) {\n this.imgSelectedList.push(picture);\n } else {\n this.imgSelectedList = [picture];\n }\n this.emitImgSelectionChange();\n }\n\n getImgSelectionChange() {\n const obsImgSelection = new Observable<ImgPictureDTO[]>(subscriber => {\n this.imgSelectionSubscriber.push(subscriber);\n });\n return obsImgSelection;\n }\n\n emitImgSelectionChange() {\n this.imgSelectionSubscriber.map(obs =>\n obs.next(JSON.parse(JSON.stringify(this.imgSelectedList)))\n );\n }\n\n removeImgSelectedByIndex(index: number) {\n this.imgSelectedList.splice(index, 1);\n this.emitImgSelectionChange();\n }\n\n removeImgSelectedById(id_file: string) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n let index = 0;\n for (const img of this.imgSelectedList) {\n if(img.id_file === id_file) {\n this.removeImgSelectedByIndex(index);\n break;\n }\n index++;\n }\n }\n\n removeImgSelectionByIds(id_file_list: string[]) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n\n for (let index = this.imgSelectedList.length -1; index > -1 ; index--) {\n const id_file = this.imgSelectedList[index].id_file;\n if (id_file_list.indexOf(id_file) !== -1) {\n this.removeImgSelectedByIndex(index);\n }\n }\n }\n\n removeAllImgSelected() {\n this.imgSelectedList.length = 0;\n this.emitImgSelectionChange();\n // Remove all the elements from the array and keep the reference\n }\n\n setMultipleImgMode(activated: boolean) {\n this.multipleImgMode = activated;\n }\n\n initImgSelectedList(imgSelectedList: ImgPictureDTO[]) {\n // Retrieve the imgSelectedList from parameter\n if (imgSelectedList) {\n this.imgSelectedList = imgSelectedList;\n return;\n }\n // Remove all elements from imgSelectedList\n if (this.imgSelectedList && this.imgSelectedList.length) {\n this.imgSelectedList.splice(0, this.imgSelectedList.length);\n return;\n }\n this.imgSelectedList = [];\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n emitImgListLoading(loading: boolean){\n this.imgListLoading.next(loading);\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n getImgListLoadingEventListner(){\n return this.imgListLoading.asObservable();\n }\n\n /**\n * Use angular cdk function\n * Called by img selection component\n * @param event\n */\n moveImgOrder(event: CdkDragDrop<string[]>) {\n const fromIndex = event.previousIndex;\n const toIndex = event.currentIndex;\n this.imgSelectedList.splice(toIndex, 0, this.imgSelectedList.splice(fromIndex, 1)[0]);\n this.emitImgSelectionChange();\n }\n}\n","import { ImgApiDto } from '../apis/api.dto';\nimport { ImgCDNConfigDTO } from '../image-cdn/image-cdn-config.dto';\n\nexport class ImgManagerConfigDto {\n api: ImgApiDto;\n imgCDNConfig : ImgCDNConfigDTO;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from \"rxjs\";\nimport { ParamsImgManagerDTO } from '../dto/img-manager.dto';\nimport { ImgManagerDisplayConfig } from '../dto/export-dtos.api';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerService {\n\n imgManagerRoute: string;\n shopToken: string;\n\n params = new HttpParams().set(\"limit\",\"20\").set(\"page\",\"1\");\n\n // Display the img selection\n private pageFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: true,\n pageficheProduct: true\n }\n\n private angularFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: false,\n pageficheProduct: true\n }\n\n private wiziblockConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n private simpleWithButtonOpenerConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: true\n }\n\n private fullWindowConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'window',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n constructor(private http: HttpClient) { }\n\n setApiConfig(img_manager_route: string, shop_token: string) {\n this.imgManagerRoute = img_manager_route;\n this.shopToken = shop_token;\n }\n\n private getOptionsHeaders(params?: ParamsImgManagerDTO) {\n const header = { headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.shopToken\n })\n };\n if (params) {\n this.getParams(params);\n header['params'] = this.params\n }\n return header;\n }\n\n getShopImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images`, this.getOptionsHeaders(params));\n }\n\n getShopTotalImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/total/image`, this.getOptionsHeaders(params));\n }\n\n getShopImg(idFile: string): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images/${idFile}`, this.getOptionsHeaders());\n }\n\n getParams(params: ParamsImgManagerDTO){\n this.params = new HttpParams();\n this.params = this.params.set('id_file:sort', 'desc');\n for (const param in params) {\n this.params = this.params.set(param, params[param]);\n }\n }\n\n uploadFile(formData: FormData) {\n return this.http.post(`${this.imgManagerRoute}/images/template`, formData, this.getOptionsHeaders());\n }\n\n uploadFileByUrl(url: string, fileName?: string) {\n const body = {\n url,\n fileName\n };\n return this.http.post(`${this.imgManagerRoute}/images/template`, { url, fileName }, this.getOptionsHeaders());\n }\n\n replaceImg(imageBase64: string, id_file: string) {\n const body = {\n imageBase64,\n type : \"RAW\"\n }\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}/replace`, body, this.getOptionsHeaders());\n }\n\n changeImgName(fileName: string, id_file: string) {\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}?file_name=${fileName}`, null, this.getOptionsHeaders());\n }\n\n removeImg(id_file: string) {\n return this.http.delete(`${this.imgManagerRoute}/images/${id_file}`, this.getOptionsHeaders());\n }\n\n removeMultipleImg(id_array: string[]){\n return this.http.post(`${this.imgManagerRoute}/images-multiple-delete`, { id_array }, this.getOptionsHeaders());\n }\n\n getImgManagerDisplayConfig(displayName: \"window\" | \"wizi-block\" | \"fiche-product\" | \"simple-with-button\" | 'angular-fiche-product') {\n switch (displayName) {\n case \"window\":\n return this.fullWindowConfig;\n\n case \"wizi-block\":\n return this.wiziblockConfig;\n\n case \"fiche-product\":\n return this.pageFicheProductConfig;\n\n case \"simple-with-button\":\n return this.simpleWithButtonOpenerConfig;\n\n case 'angular-fiche-product':\n return this.angularFicheProductConfig\n\n default:\n return;\n }\n }\n\n getAllImgManagerDisplayConfig(): ImgManagerDisplayConfig[] {\n return [\n this.fullWindowConfig,\n this.wiziblockConfig,\n this.pageFicheProductConfig,\n this.simpleWithButtonOpenerConfig,\n ]\n }\n}","import { Injectable } from '@angular/core';\nimport { ImgCDNConfigDTO } from '../../dto/config/image-cdn/image-cdn-config.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgCDNService {\n\n imgCDNConfig: ImgCDNConfigDTO = null;\n\n constructor() {}\n\n setImgCDNConfig(imgCDNConfig: ImgCDNConfigDTO) {\n this.imgCDNConfig = imgCDNConfig;\n }\n\n getUrlImg(size: '100'|'200'|'400'|'800'|'raw'|string) {\n const urlProperty = Object.keys(this.imgCDNConfig)\n .filter(url =>\n new RegExp(size, 'i').test(url)\n )[0];\n\n return this.imgCDNConfig[urlProperty];\n }\n\n getAllSize(): string[] {\n return Object.keys(this.imgCDNConfig)\n .map(elem =>\n elem.match(/_(\\w+)_/)[1]\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ImgManagerConfigDto } from '../../dto/config/external/external-config.dto';\nimport { ImgManagerService } from '../img-manager.service';\nimport { ImgCDNService } from './img-cdn.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerConfigService {\n\n externalConfig: ImgManagerConfigDto;\n\n constructor(\n private imgManagerService: ImgManagerService,\n private imgCDNService: ImgCDNService\n ) {}\n\n /**\n * Set imgManagerService and imgCDNService\n * Canva and Pexel service retrieve the externalConfig at their initialization\n * @param externalConfig\n */\n setExternalConfig(externalConfig: ImgManagerConfigDto) {\n this.externalConfig = externalConfig;\n this.imgManagerService.setApiConfig(externalConfig.api.image_manager_route, externalConfig.api.shop_token);\n this.imgCDNService.setImgCDNConfig(externalConfig.imgCDNConfig);\n }\n\n getCanvaApiURL() {\n return this.externalConfig.api.canva_url;\n }\n\n getCanvaApiToken() {\n return this.externalConfig.api.canva_token;\n }\n\n getRouteAssets() {\n return this.externalConfig.api.assets_route;\n }\n\n getPexelsApiURL() {\n return this.externalConfig.api.pexels_route;\n }\n\n getPexelsApiToken() {\n return this.externalConfig.api.pexels_token;\n }\n\n getShopCategory() {\n return this.externalConfig.api.shop_category;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n\n private userdisplayPreference = 'WzImgManagerListDisplayed';\n\n constructor() {\n }\n\n /**\n * true : display list\n * false : display mosaic\n * @param value\n */\n setUserDisplayPreference(value: boolean) {\n localStorage.setItem(this.userdisplayPreference, '' + value);\n }\n\n getUserDisplayPreference(): boolean {\n const value = localStorage.getItem(this.userdisplayPreference);\n return value == 'true';\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NwbAlertConfig, NwbAlertComponent } from '@wizishop/ng-wizi-bulma';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NwbAlertService } from '@wizishop/ng-wizi-bulma';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n actionMsg = 'ImgManager.alert.action';\n\n alertConfig: NwbAlertConfig = {\n message: '',\n duration: 5000\n }\n\n private alertRefComponent: NwbAlertComponent;\n\n constructor(\n private nwbAlertService: NwbAlertService,\n private translateService: TranslateService\n ) { }\n\n openAlert(msgKey: string) {\n this.closePreviousAlert();\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.setAlertColor(msgKey);\n\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n openAlertWithBackendRespons(msgKey: string, msgBackend: string) {\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.alertConfig.message += '<br/>' + JSON.parse(msgBackend).message;\n\n this.closePreviousAlert();\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n private closePreviousAlert() {\n if (this.alertRefComponent) {\n this.alertRefComponent.dismiss();\n }\n }\n\n private setAlertColor(msgKey: string) {\n const isErrorMsg: boolean = /error/i.test(msgKey);\n this.alertConfig.color = isErrorMsg ? 'is-danger' : 'is-success';\n }\n}\n","import {Injectable} from '@angular/core';\nimport { Subject } from \"rxjs\";\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class ImgEventService {\n\n constructor() { }\n\n private imgToEditEvent: Subject<ImgPictureDTO> = new Subject<ImgPictureDTO>();\n private imgRemoved: Subject<string> = new Subject<string>();\n private imgAdded: Subject<string> = new Subject<string>();\n private listDisplayedChange: Subject<boolean> = new Subject<boolean>();\n\n emitImgRemoved(id_file: string){\n this.imgRemoved.next(id_file);\n }\n\n getImgRemovedEventListner(){\n return this.imgRemoved.asObservable();\n }\n\n emitImgToEdit(imgToEdit: ImgPictureDTO){\n this.imgToEditEvent.next(imgToEdit);\n }\n\n getImgToEditEventListner(){\n return this.imgToEditEvent.asObservable();\n }\n\n emitImgAdded(id_file: string){\n this.imgAdded.next(id_file);\n }\n\n getImgAddedEventListner(){\n return this.imgAdded.asObservable();\n }\n\n emitlistDisplayedChange(value: boolean){\n this.listDisplayedChange.next(value);\n }\n\n getlistDisplayedChange(){\n return this.listDisplayedChange.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subscriber, BehaviorSubject } from 'rxjs';\nimport { CanvaButtonApi } from '../dto/canva.dto';\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { WiziBlockMediaDto } from '../dto/wizi-block-media.dto';\nimport { AlertService } from './alert.service';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { ImgManagerService } from './img-manager.service';\nimport { ImgEventService } from './img-event.service';\nimport { take } from 'rxjs/operators';\nimport { CanvaCreateDesign } from '../dto/canva-create-design.dto';\nimport { TranslateService } from '@ngx-translate/core';\n\ndeclare let Canva : {\n DesignButton : {\n initialize: (opts: { apiKey: string }) => Promise<CanvaButtonApi>;\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CanvaService {\n\n canvaApi; // Object use to manage the canva api\n canvaApiURL: string;\n canvaApiKey: string;\n canvaLogoRoute: string;\n\n imgLoading = false;\n uploadingImg = 'ImgManager.CanvaBtn.uploadingImg';\n successUploadPhoto = 'ImgManager.CanvaBtn.successImport';\n errorUploadCanvaImg = 'ImgManager.CanvaBtn.errorUploadCanvaImg';\n errorRenameCanvaImg = 'ImgManager.CanvaBtn.errorRenameCanvaImg';\n\n forceToOpenCanva: boolean = false;\n\n private bindExpectedImgSizeEvent: BehaviorSubject<WiziBlockMediaDto> = new BehaviorSubject<WiziBlockMediaDto>(null);\n private bindExpectedSizeDone = this.bindExpectedImgSizeEvent.asObservable();\n\n constructor(\n private externalConfigService: ImgManagerConfigService,\n private imgManager: ImgManagerService,\n private wzImgEventService: ImgEventService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) { }\n\n private setCanvaApiConfig() {\n this.canvaApiURL = this.externalConfigService.getCanvaApiURL();\n this.canvaApiKey = this.externalConfigService.getCanvaApiToken();\n }\n\n getCanvaLogo() {\n return this.externalConfigService.getRouteAssets() + \"canva/icon_canva.svg\";\n }\n\n bindEventExepectedImgSizeChange() {\n return this.bindExpectedSizeDone;\n }\n\n expectedImgSizesChange (mediaDTO: WiziBlockMediaDto){\n this.bindExpectedImgSizeEvent.next(mediaDTO);\n if (this.forceToOpenCanva) {\n this.openCanva(parseInt(mediaDTO.image_width), parseInt(mediaDTO.image_height));\n }\n }\n\n getCanvaApi():Observable<CanvaButtonApi> {\n if (!this.canvaApiURL || !this.canvaApiKey) {\n this.setCanvaApiConfig();\n }\n return new Observable(observer => {\n this.loadCanva().subscribe({\n complete: () => {\n if(this.canvaApi && Canva.DesignButton) {\n observer.next(this.canvaApi);\n observer.complete();\n } else {\n this.initializeCanva(observer);\n }\n }\n })\n });\n }\n\n private initializeCanva(observer: Subscriber<CanvaButtonApi>) {\n if (Canva.DesignButton) {\n Canva.DesignButton.initialize({\n apiKey: this.canvaApiKey\n\n }).then((canvaApi) => {\n this.canvaApi = canvaApi;\n observer.next(this.canvaApi);\n observer.complete();\n });\n }\n }\n\n private loadCanva():Observable<null> {\n return new Observable(observer => {\n if(this.canvaApi) {\n observer.complete();\n }else{\n this.loadCanvaScript(observer);\n }\n });\n }\n\n private loadCanvaScript(observer: Subscriber<null>) {\n\n const node = document.createElement('script');\n node.src = this.canvaApiURL;\n node.type = 'text/javascript';\n node.async = false;\n node.charset = 'utf-8';\n node.onload = () => {\n observer.complete();\n }\n document.getElementsByTagName('head')[0].appendChild(node);\n }\n\n openCanva(width: number, height: number) {\n if (this.imgLoading) {\n return;\n }\n this.getCanvaApi().pipe(take(1)).subscribe((api: CanvaButtonApi) => {\n this.canvaApi = api;\n this.addOverflowBody();\n this.createDesign(width, height);\n });\n }\n\n private addOverflowBody() {\n document.body.classList.add('ovh-canva');\n }\n\n private removeOverflowBody() {\n document.body.classList.remove('ovh-canva');\n }\n\n private createDesign(width: number, height: number) {\n const createDesign: CanvaCreateDesign = {\n type: 'EtsyShopIcon',\n dimensions : {\n units: 'px',\n width: width ? width : undefined,\n height: height ? height : undefined,\n },\n publishLabel: this.translateService.instant('ImgManager.CanvaBtn.publish'),\n };\n this.canvaApi.createDesign({\n design: createDesign,\n onDesignPublish: ({ exportUrl, designTitle }) => this.designPublished(exportUrl, designTitle),\n onDesignClose: () => {\n this.removeOverflowBody();\n }\n\n });\n }\n\n private designPublished(exportUrl: string, designTitle: string) {\n this.alertService.openAlert(this.uploadingImg);\n this.imgLoading = true;\n\n\n this.imgManager.uploadFileByUrl(exportUrl, designTitle).pipe(take(1)).subscribe(\n (img: ImgPictureDTO) => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n this.wzImgEventService.emitImgAdded(img.id_file);\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n if (error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadCanvaImg, error.error.message)\n } else {\n this.alertService.openAlert(this.errorUploadCanvaImg);\n }\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DomService {\n private documentEventSource = new Subject();\n private documentEventDone = this.documentEventSource.asObservable();\n\n private documentScrollSource = new Subject();\n private documentScrollDone = this.documentScrollSource.asObservable();\n\n documentEvent() {\n return this.documentEventDone;\n }\n\n setDocumentEventListener() {\n document.body.addEventListener('click', event => {\n this.documentEventSource.next(event.target);\n });\n }\n\n documentScroll() {\n return this.documentScrollDone;\n }\n\n setScrollEventListener() {\n window.onscroll = () => {\n this.documentScrollSource.next(window);\n };\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from './services/img-selection.service';\nimport { ImgManagerConfigDto } from './dto/config/external/external-config.dto';\nimport { ImgManagerConfigService } from './services/config/external-config.service';\nimport { Subscription } from 'rxjs';\nimport { UserSettingsService } from './services/user-settings.service';\nimport { CanvaService } from './services/canva.service';\nimport { ImgEventService } from './services/img-event.service';\nimport { DomService } from './services/dom.service';\nimport { HostListener } from '@angular/core';\nimport { stateDisplayed } from '../public-api';\nimport { WiziBlockMediaDto } from './dto/wizi-block-media.dto';\n\n@Component({\n selector: 'wz-img-manager',\n templateUrl: './wz-img-manager.component.html'\n})\nexport class WzImgManagerComponent implements OnInit {\n @Input() stateDisplayed: stateDisplayed;\n @Input() showSelection: boolean = false;\n @Input() externalConfig: ImgManagerConfigDto;\n\n // If forceToOpenCanva is true : Canva will open with the canvaService.expectedImgSizesChange\n // If forceToOpenCanva is a WiziBlockMediaDto, Canva open immediatly\n @Input() set forceToOpenCanva(forceToOpenCanva: boolean|WiziBlockMediaDto) {\n this.canvaService.forceToOpenCanva = !!forceToOpenCanva;\n\n if (typeof forceToOpenCanva === 'boolean') {\n return;\n }\n\n this.canvaService.expectedImgSizesChange(forceToOpenCanva);\n }\n\n @Output() imgManagerClosed = new EventEmitter();\n private _multipleImgMode: boolean = false;\n\n @Input() set multipleImgMode(activate: boolean) {\n this._multipleImgMode = activate;\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n }\n\n get multipleImgMode(): boolean {\n return this._multipleImgMode;\n }\n\n _showImgManagerModule: boolean = false;\n @Input() set showImgManagerModule(activate: boolean) {\n this._showImgManagerModule = activate;\n if (activate) {\n this.displaySmall();\n }\n }\n\n get showImgManagerModule(): boolean {\n return this._multipleImgMode;\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (this.stateDisplayed && this.stateDisplayed !== 'window') {\n this.onClose();\n }\n }\n\n close: boolean = false\n selectImgEvent: Subscription;\n listDisplayed: boolean = false;\n listDisplayedEvent: Subscription;\n hideTab: boolean = false;\n // Save the defaut overflow apply to html tag, when the module is full open\n private overflowHTML: string;\n private bodyPadding: number;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private externalConfigService: ImgManagerConfigService,\n private userSettingsService: UserSettingsService,\n private canvaService: CanvaService,\n private imgEventService: ImgEventService,\n private domService: DomService\n ) {}\n\n ngOnInit(): void {\n this.externalConfigService.setExternalConfig(this.externalConfig);\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n this.imgSelectionService.initImgSelectedList(null);\n this.selectImgEvent = this.imgSelectionService.getImgSelectionChange().subscribe(imgSlection =>{\n\n if (imgSlection && imgSlection.length && this.checkCloseImgManager()) {\n // Close the img manager\n this.onClose();\n }\n });\n this.checkUserDisplayPreference();\n // Use when the img manager is full open or open in page. This display the user preference display, mosaic or list.\n this.listDisplayedEvent = this.imgEventService.getlistDisplayedChange().subscribe(value => this.listDisplayed = value);\n // Register dom service to listen on all event on the body to avoid having multiple instance of the same thing every where\n this.domService.setDocumentEventListener();\n }\n\n checkUserDisplayPreference() {\n if (this.stateDisplayed === 'window' || this.stateDisplayed === 'full') {\n this.listDisplayed = this.userSettingsService.getUserDisplayPreference();\n }\n }\n\n setCurrentTab(event) {\n if (event === 'img-edition') {\n this.hideTab = true;\n return;\n }\n this.hideTab = false;\n }\n\n displaySmall() {\n if (this.stateDisplayed !== 'window') {\n setTimeout(() => {\n this.stateDisplayed = 'small';\n this.addBodyBottomPaddingForModule();\n }, 10);\n }\n }\n\n openSmall() {\n this.stateDisplayed = 'small';\n this.setBodyMainScroll();\n this.listDisplayed = false;\n }\n\n openFull() {\n this.stateDisplayed = 'full';\n this.checkUserDisplayPreference();\n this.hideBodyMainScroll();\n }\n\n onClose() {\n this.stateDisplayed = 'closed';\n this.hideTab = false;\n this.setBodyMainScroll();\n this.removeBodyBottomPaddingForModule();\n // Wait the end of the closing annimation\n setTimeout(() => {\n this.imgManagerClosed.emit();\n }, 250);\n }\n\n onImgManagerClosed() {\n this.onClose();\n }\n\n /**\n * Close the img manager after one img is selected, if not in multiple img to select\n */\n checkCloseImgManager() {\n return !this.multipleImgMode && this.stateDisplayed !== 'window' ? true : false;\n }\n\n hideBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n\n if (!this.overflowHTML) {\n this.overflowHTML = html.style.overflowY;\n }\n\n html.style.overflowY = \"hidden\";\n }\n\n setBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n html.style.overflowY = this.overflowHTML ? this.overflowHTML : \"scroll\";\n }\n\n addBodyBottomPaddingForModule() {\n const body = document.getElementsByTagName('body')[0];\n this.bodyPadding = this.bodyPadding ? parseInt(body.style.paddingBottom) : 0;\n body.style.paddingBottom = this.bodyPadding + 300 + 'px';\n }\n\n removeBodyBottomPaddingForModule() {\n if (typeof this.bodyPadding !== 'undefined') {\n const body = document.getElementsByTagName('body')[0];\n body.style.paddingBottom = this.bodyPadding + 'px';\n this.bodyPadding = 0;\n }\n }\n\n changeDisplayTab() {\n this.stateDisplayed = 'full';\n }\n\n ngOnDestroy() {\n this.selectImgEvent.unsubscribe();\n this.canvaService.expectedImgSizesChange(null);\n this.listDisplayedEvent.unsubscribe();\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\n\nexport const easeInOut = // the fade-in/fade-out animation.\ntrigger('easeInOut', [\n\n // the \"in\" style determines the \"resting\" state of the element when it is visible.\n state('in', style({opacity: 1})),\n\n // fade in when created. this could also be written as transition('void => *')\n transition(':enter', [\n style({opacity: 0}),\n animate('0.5s ease-in-out' )\n ]),\n]);\n","import {Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport {ImgManagerConfigService} from \"../../services/config/external-config.service\";\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'img-upload',\n templateUrl: './img-upload.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgUploadComponent implements OnInit {\n\n files: any = [];\n isLoading: boolean = false;\n assetsIcon: string;\n @Input() stateDisplayed: stateDisplayed;\n @Output() imgUploaded = new EventEmitter();\n\n @ViewChild('dragAndDropBox') dragAndDropBox: ElementRef;\n\n loadingText = 'ImgManager.ImgUpload.loading';\n errorUploadingImg = 'ImgManager.ImgUpload.errorUploadingImg';\n errorNotImg = 'ImgManager.ImgUpload.errorNotImg';\n\n MAX_IMAGE_SIZE = 10000000; // In bytes\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private externalConfigService: ImgManagerConfigService\n ) {}\n\n ngOnInit(): void {\n this.assetsIcon = this.getAssets();\n }\n\n filesChangeByClick(event: any) {\n this.uploadFile(event.target.files);\n }\n\n getAssets() {\n return this.externalConfigService.getRouteAssets() + \"img/icon_picture.svg\";\n }\n\n filesChangeByDragAndDrop(filesList: File[]) {\n this.removeDragAndDropStyle();\n this.uploadFile(filesList);\n }\n\n uploadFile(files: File[]) {\n if (files && !files.length) {\n return;\n }\n\n this.isLoading =true;\n const imgToUploadList: Observable<any>[] = [];\n for (const file of files) {\n console.log('file', file.size);\n\n if(!this.isFileImage(file.type)) {\n this.alertService.openAlert(this.errorNotImg);\n this.isLoading = false;\n continue;\n }\n\n if (!this.isSizeValid(file.size)) {\n this.alertService.openAlert(`L'image : ${file.name} est trop grande (${this.getImageSizeInKo(file.size)}ko). Taille maximum acceptée: ${this.getImageSizeInKo(this.MAX_IMAGE_SIZE)}ko`);\n this.isLoading = false;\n continue;\n }\n\n const formData = new FormData();\n formData.append('image', file, file.name);\n\n\n imgToUploadList.push(this.imgManager.uploadFile(formData));\n }\n\n forkJoin(imgToUploadList).subscribe(\n (img: ImgPictureDTO[]) => {\n this.onImgUpload(img),\n this.isLoading =false;\n },\n error => {\n if (error?.error?.message && error.statusText !== 'Bad Request') {\n this.alertService.openAlertWithBackendRespons(this.errorUploadingImg, error.error.message);\n } else {\n this.alertService.openAlert(this.errorUploadingImg);\n }\n this.isLoading =false;\n }\n )\n }\n\n /**\n * Send the img uploaded to the tabs components,\n * Then the tabs components add the img to upload list by calling the method onImgUploaded of the upload-list component\n * @param img\n */\n onImgUpload(img: ImgPictureDTO[]) {\n this.imgUploaded.emit(img);\n }\n\n isFileImage(fileType: string) {\n return fileType.split('/')[0] === 'image';\n }\n\n isSizeValid(imageBytesSize: number): boolean {\n return imageBytesSize < this.MAX_IMAGE_SIZE;\n }\n\n getImageSizeInKo(size: number) {\n return Math.round(size / 1024);\n }\n\n /**\n * Remove the style of the drag and drop box\n * After an img is droped, the box is still grey\n */\n removeDragAndDropStyle() {\n this.dragAndDropBox.nativeElement.style = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ImgManagerService } from './img-manager.service';\nimport { AlertService } from './alert.service';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { PictureNameUpdate } from '../dto/picture-name-update.dto';\n\n@Injectable({providedIn: 'root'})\nexport class RenamePictureService {\n\n private picturesList: ImgPictureDTO[] = [];\n private pictureNameChanged: Subject<PictureNameUpdate> = new Subject<PictureNameUpdate>();\n\n private errorRenameImg = 'ImgManager.ImgList.errorRenameImg';\n private msgSavingImgName = 'ImgManager.ImgLib.savingImgName';\n private msgImgNameSaved = 'ImgManager.ImgLib.imgNameSaved';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n )\n {\n this.setEvents();\n }\n\n setPicturesList(picturesList: ImgPictureDTO[]) {\n this.picturesList = picturesList;\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChanged.next(pictureRenamed);\n }\n\n private setEvents() {\n this.pictureNameChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe((pictureNameUpdate:PictureNameUpdate) => {\n this.renamePicture(pictureNameUpdate);\n });\n }\n\n private renamePicture(pictureNameUpdate: PictureNameUpdate) {\n const picture: ImgPictureDTO = this.getPictureById(pictureNameUpdate.id);\n if (!picture) {\n this.alertService.openAlert(this.errorRenameImg);\n return;\n }\n this.alertService.openAlert(this.msgSavingImgName);\n this.imgManager\n .changeImgName(picture.display_name, picture.id_file)\n .subscribe(\n (data: ImgPictureDTO) => {\n picture.display_name = data.display_name;\n this.alertService.openAlert(this.msgImgNameSaved);\n },\n (error) => {\n picture.display_name = pictureNameUpdate.previousName;\n this.alertService.openAlert(this.errorRenameImg);\n }\n );\n }\n\n private getPictureById(id_file: string): ImgPictureDTO {\n if (!this.picturesList) {\n return;\n }\n\n for (const picture of this.picturesList) {\n if(picture.id_file === id_file) {\n return picture;\n }\n }\n\n return null;\n }\n\n}","import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { PictureNameUpdate, stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\n\n@Component({\n selector: 'upload-list',\n templateUrl: './upload-list.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class UploadListComponent implements OnInit {\n\n picturesList: ImgPictureDTO[] = [];\n imgSelectionChange: Subscription;\n selectImgEvent: Subscription;\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() multipleImgMode: boolean = false;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private renamePictureService: RenamePictureService\n ) { }\n\n ngOnInit(): void {\n this.setEvents();\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n img.forEach(picture =>\n this.picturesList.push(picture)\n );\n this.renamePictureService.setPicturesList(this.picturesList);\n }\n\n onToggleSelectImg(index: number) {\n if (this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n switchDisplayWindowCard() {\n this.switchDisplayWindow.emit(true);\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n private setEvents() {\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n ngOnDestroy(): void {\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import {Component, Input, OnInit, ViewChild, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { UploadListComponent } from '../upload-list/upload-list.component';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { NwbSnackbarConfig } from '@wizishop/ng-wizi-bulma';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\nimport {Router} from '@angular/router';\nimport { SelectItem } from '../shared/select/select-items.dto';\n\n@Component({\n selector: 'img-tabs',\n templateUrl: './img-tabs.component.html'\n})\nexport class ImgTabsComponent implements OnInit {\n\n @Input()\n multipleImgMode: boolean = false;\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n listDisplayed = false;\n\n @Output()\n imgManagerClosed = new EventEmitter();\n\n @Output()\n currentTab = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n tabs: SelectItem[] = [\n {\n name: 'ImgManager.Tabs.addImg',\n value: 'img-upload',\n selected: true,\n id: 0\n },\n {\n name: 'ImgManager.Tabs.imgLib',\n value: 'images-view',\n id: 1\n },\n {\n name: 'ImgManager.Tabs.freeImgLib',\n value: 'pexels-lib',\n id: 2\n },\n {\n name: 'ImgManager.Tabs.Editor',\n value: 'img-edition',\n hide: true,\n id: 3\n }\n ];\n\n tabActive: SelectItem = this.tabs[0];\n\n /* tabActive = 'images-view';\n tabs: string[] = ['img-upload', 'images-view', 'pexels-lib', 'img-edition']; */\n editTab = false;\n\n imgToEdit: ImgPictureDTO;\n\n imgUpload = false;\n\n @ViewChild( 'imgUploadedImg' )\n imgUploadedComponent: UploadListComponent ;\n\n snackBarNewVersionConfig: NwbSnackbarConfig = {\n message: '',\n duration: 3000\n };\n\n constructor(\n private imgEventEditService: ImgEventService,\n private alertService: AlertService,\n private route: Router\n ) { }\n\n ngOnInit(): void {\n this.imgEventEditService.getImgToEditEventListner().subscribe(imgToEdit =>{\n this.tabActive = this.tabs[3];\n this.imgToEdit = imgToEdit;\n this.editTab = true;\n this.currentTab.emit(this.tabs[3]);\n });\n }\n\n toggleTabs(item: SelectItem) {\n this.imgUpload = false;\n this.editTab = false;\n this.tabActive = item;\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n this.imgUpload = true;\n this.imgUploadedComponent.onImgUploaded(img);\n }\n\n onEditClosed(msgKey: string) {\n this.editTab = false;\n this.toggleTabs(this.tabs[1]);\n if (msgKey) {\n this.alertService.openAlert(msgKey);\n }\n this.currentTab.emit('close');\n }\n\n onShowImgUploaded() {\n this.tabActive = this.tabs[1];\n }\n\n switchDisplayWindowImgView() {\n this.switchDisplayWindow.emit(true);\n }\n\n switchRouterLink(event) {\n\n }\n\n onImgManagerClosed() {\n this.imgManagerClosed.emit();\n }\n}\n","import { Directive, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]'\n})\nexport class DragDropDirective {\n\n @Output() onFileDropped = new EventEmitter<Event>();\n\n @HostBinding('style.background-color') background = '#fff'\n @HostBinding('style.opacity') opacity = '1'\n\n @HostListener('dragover', ['$event']) onDragOver(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5';\n this.opacity = '0.8';\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#fff';\n this.opacity = '1';\n }\n\n @HostListener('drop', ['$event']) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5'\n this.opacity = '1'\n const files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.onFileDropped.emit(files);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\nimport {WzImgLibDto} from \"../dto/pexels-img.dto\";\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PexelsService {\n apiBaseUrl;\n apiKey;\n lang: string;\n languages = {'fr': 'fr-FR', 'en': 'en-US', 'it': 'it-IT', 'es': 'es-ES'};\n\n constructor(\n private http: HttpClient,\n private externalConfigService: ImgManagerConfigService,\n private translateService: TranslateService\n ) {\n this.setLang(this.translateService.currentLang);\n this.translateService.onLangChange.subscribe(langData => {\n this.setLang(langData.lang);\n })\n }\n\n setLang(lang: string) {\n this.lang = this.languages[lang] ? this.languages[lang] : 'fr-FR';\n }\n\n searchOnPexels(toSearch: string, perPage: number, page: number): Observable<WzImgLibDto> {\n if(!this.apiBaseUrl || this.apiKey) {\n this.apiBaseUrl = this.externalConfigService.getPexelsApiURL();\n this.apiKey = this.externalConfigService.getPexelsApiToken();\n }\n\n const httpOptions = {\n headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.apiKey\n })\n };\n\n let request;\n\n // If search value is not empty or blank\n if (toSearch && !/^\\s*$/.test(toSearch)) {\n request = `/search?query=${toSearch}&per_page=${perPage}&page=${page}&locale=${this.lang}`;\n\n } else { // Search by category or display Pexels selection\n const shopCategory = this.externalConfigService.getShopCategory();\n\n // Search by shop category\n if (shopCategory && shopCategory !== 'other' && shopCategory !== 'btob') {\n request = `/search?query=${shopCategory}&per_page=${perPage}&page=${page}&locale=en-US`;\n } else { // Display Pexels selection\n request = `/curated?per_page=${perPage}&page=${page}`;\n }\n }\n\n return this.http.get(this.apiBaseUrl + request, httpOptions).pipe(\n map((data: WzImgLibDto) => {\n return data;\n })\n );\n }\n}\n","import { stagger } from '@angular/animations';\nimport { query } from '@angular/animations';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport const listAnnimation = // the fade-in/fade-out animation.\ntrigger('listAnimation', [\n transition(':enter, * => 0, * => -1', []),\n transition(':increment', [\n query(':enter', [\n style({opacity: 0, transform: 'translateY(100px)'}),\n stagger(50, [\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)', style({ opacity: 1, transform: 'none' })),\n ]),\n ], { optional: true })\n ]),\n]);\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild, Input, Output, EventEmitter} from '@angular/core';\nimport {PexelsService} from '../../services/pexels.service';\nimport {Subject, Subscription} from 'rxjs';\nimport {WzImgLibDto, PhotosColumns, WzImgLibPhotoDto} from '../../dto/pexels-img.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { listAnnimation } from '../../animations/listAnnimation/list.animation';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'pexels-lib',\n templateUrl: './pexels-lib.component.html',\n animations: [\n easeInOut,\n listAnnimation\n ]\n})\nexport class PexelLibComponent implements OnInit, AfterViewInit {\n\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n searchValue: string = '';\n /** Pass to true to hide search input */\n @Input()\n disableSearch: boolean = false;\n\n @Output()\n showImgUploaded = new EventEmitter();\n\n perPage = 30;\n searchUpdated = new Subject();\n oldSearchValue: string;\n nbResult = 0;\n wzImgLibDto: WzImgLibDto;\n currentPage = 1;\n isLoading = true;\n initComponent = true;\n photosColumns: PhotosColumns[] = [];\n nbColumuns = 6;\n responsiveColumns = [1250, 1050, 750, 500];\n outerElement = null;\n\n uploadingImg = 'ImgManager.PexelLib.uploadingImg';\n untitled = 'ImgManager.PexelLib.untitled';\n successUploadPhoto = 'ImgManager.PexelLib.successImport';\n errorUploadPhoto = 'ImgManager.PexelLib.errorUploadPhoto';\n errorRetrievePhotos = 'ImgManager.PexelLib.errorRetrievePhotos';\n\n private subs: Subscription[] = [];\n\n @ViewChild('outerElement') set content(control: ElementRef) {\n this.outerElement = control;\n }\n\n constructor(\n private wzImgLibService: PexelsService,\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n this.oldSearchValue = this.searchValue;\n this.isLoading = false;\n\n this.setNbColumnsToDisplayPhoto();\n this.setPhotosColumns();\n this.search();\n }\n\n setNbColumnsToDisplayPhoto(): void {\n const width = this.outerElement.nativeElement.offsetWidth;\n\n if (this.stateDisplayed !== 'window') {\n this.nbColumuns = 8;\n }\n\n this.responsiveColumns.forEach(value => {\n if (width < value) {\n this.nbColumuns--;\n }\n });\n }\n\n onSearchNameChanged() {\n this.onSearchChange();\n }\n\n onBottomReached() {\n this.scrollHandler();\n }\n\n onSearchChange() {\n this.search();\n }\n\n search() {\n console.log('search');\n if (this.isLoading) {\n return;\n }\n if (this.searchValue !== this.oldSearchValue) {\n this.resetSearch();\n }\n\n // All the picture are displayed\n if (this.nbResult && this.nbResult <= (this.currentPage - 1) * this.perPage) {\n return;\n }\n\n this.isLoading = true;\n const searchSub = this.wzImgLibService.searchOnPexels(this.searchValue, this.perPage, this.currentPage).subscribe(\n (data: WzImgLibDto) => {\n console.log('search ended here');\n console.log(data);\n this.wzImgLibDto = data;\n this.nbResult = this.wzImgLibDto.total_results;\n\n if (this.nbResult) {\n data.photos.forEach(photo => {\n const bestColumnIndex = this.getBestColumn();\n const height = (photo.height / photo.width) * 1000;\n\n this.photosColumns[bestColumnIndex].height += height;\n this.photosColumns[bestColumnIndex].photos.push(photo);\n });\n }\n\n this.isLoading = false;\n this.initComponent = false;\n },\n error => {\n this.isLoading = false;\n this.initComponent = false;\n this.alertService.openAlert(this.errorRetrievePhotos);\n }\n );\n\n this.subs.push(searchSub);\n }\n\n scrollHandler() {\n if (this.isLoading) {\n return;\n }\n const bestColumnIndex = this.getBestColumn();\n const lastPic = this.photosColumns[bestColumnIndex].photos[this.photosColumns[bestColumnIndex].photos.length - 1];\n const lastPhoto = lastPic ? document.querySelector<HTMLImageElement>('img[src=\"' + lastPic.src.medium + '\"]') : null;\n\n if (lastPhoto) {\n if (!this.isLoading) {\n this.currentPage += 1;\n this.search();\n }\n }\n }\n\n setPhotosColumns() {\n for (let indexColumn=0; indexColumn < this.nbColumuns ; indexColumn++) {\n const photosColumn: PhotosColumns = {\n height: 0,\n photos: []\n };\n this.photosColumns.push(photosColumn);\n }\n }\n\n getBestColumn(): number {\n const bestColumn = {\n index: 0,\n height: this.photosColumns[0].height\n };\n this.photosColumns.forEach((photosColumn, index) => {\n if (bestColumn.height > photosColumn.height) {\n bestColumn.index = index;\n bestColumn.height = photosColumn.height;\n }\n });\n return bestColumn.index;\n }\n\n resetSearch() {\n this.oldSearchValue = this.searchValue;\n this.photosColumns = [];\n this.currentPage = 1;\n this.setPhotosColumns();\n }\n\n uploadPhoto(photo: WzImgLibPhotoDto, url: string) {\n photo.uploading = true;\n\n const uploadSub = this.imgManager.uploadFileByUrl(url, this.translateService.instant(this.untitled)).subscribe(\n (img: ImgPictureDTO) => {\n photo.uploading = false;\n photo.uploaded = true;\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n photo.uploading = false;\n if(error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadPhoto, error.error.message);\n } else {\n this.alertService.openAlert(this.errorUploadPhoto);\n }\n });\n\n // Display img uploading msg\n this.alertService.openAlert(this.uploadingImg);\n this.subs.push(uploadSub);\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Directive, Input, Output } from \"@angular/core\";\nimport { EventEmitter } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subscription } from \"rxjs\";\nimport { stateDisplayed } from \"../../dto/export-dtos.api\";\nimport { PictureNameUpdate } from \"../../dto/picture-name-update.dto\";\nimport { ImgPictureDTO } from \"../../dto/img-manager.dto\";\nimport { AlertService } from \"../../services/alert.service\";\nimport { ImgManagerConfigService } from \"../../services/config/external-config.service\";\nimport { ImgCDNService } from \"../../services/config/img-cdn.service\";\nimport { ImgEventService } from \"../../services/img-event.service\";\nimport { ImgManagerService } from \"../../services/img-manager.service\";\nimport { ImgSelectionService } from \"../../services/img-selection.service\";\nimport { TableFilters } from \"../../services/table/filters-table.service\";\n\n@Directive()\nexport abstract class ImagesActionHandler {\n @Input()\n picturesList: ImgPictureDTO[] = [];\n @Output()\n picturesListChange: EventEmitter<void> = new EventEmitter();\n\n @Input()\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 30,\n currentPage: 1\n };\n @Input()\n displayPexelsResults: boolean = false;\n\n @Input()\n disable: boolean = false;\n @Output()\n disableChange: EventEmitter<boolean> = new EventEmitter();\n\n @Output()\n filtersChange = new EventEmitter();\n @Output()\n pictureNameChange: EventEmitter<PictureNameUpdate> = new EventEmitter();\n\n @Input() isLoading = false;\n\n @Input()\n stateDisplayed: stateDisplayed;\n\n previousName: string; // Use to save the previous picture name, when a user change his name\n fakeImgRoute: string;\n\n private getDataAPISub: Subscription;\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n private errorAlreadyUsedImg = 'ImgManager.ImgList.errorAlreadyUsed';\n\n constructor(\n protected imgManager: ImgManagerService,\n protected imgSelectionService: ImgSelectionService,\n protected http: HttpClient,\n protected imgCDNService: ImgCDNService,\n protected imgEventCardService: ImgEventService,\n protected alertService: AlertService,\n protected translateService: TranslateService,\n protected externalService: ImgManagerConfigService\n ) {\n this.fakeImgRoute = this.externalService.getRouteAssets() + 'img/fake.png';\n }\n\n /** Event emit when the header checkbox is checked */\n onToggleAllCheckBoxRow(event) {\n this.picturesList.forEach(data => {\n data.delSelected = event;\n });\n this._pictureListeChange();\n }\n\n onToggleDelSelection(index: number) {\n if (this.disable) {\n return;\n }\n this.picturesList[index].delSelected = !this.picturesList[index].delSelected;\n this._pictureListeChange();\n }\n\n /** Event emit each time filters change */\n onFiltersChange() {\n this.filtersChange.emit();\n }\n\n onEdit(picture: ImgPictureDTO) {\n this.imgEventCardService.emitImgToEdit(picture);\n }\n\n onToggleSelectImg(index: number) {\n if (this.disable || this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRemoveImg(picture: ImgPictureDTO) {\n picture.deleted = true;\n this.imgManager.removeImg(picture.id_file).subscribe(\n data => {\n this.imgEventCardService.emitImgRemoved(picture.id_file);\n this.imgSelectionService.removeImgSelectedById(picture.id_file);\n },\n error => {\n const msg = error.status === 409 ? this.errorAlreadyUsedImg: this.errorRemoveImg;\n picture.deleted = false;\n this.alertService.openAlert(msg);\n });\n }\n\n onPictureNotLoading(event) {\n event.target.src = this.fakeImgRoute;\n }\n\n onDownloadImg(display_name: string, file_name: string) {\n this.http.get(this.getRAWImgRoute(file_name), { responseType: 'blob' }).subscribe(val => {\n let url = URL.createObjectURL(val);\n this.downloadUrl(url, display_name);\n URL.revokeObjectURL(url);\n });\n }\n\n onNameChange(id_file: string) {\n this.pictureNameChange.emit({id: id_file, previousName: this.previousName});\n }\n\n private getRAWImgRoute(file_name: string){\n return this.imgCDNService.getUrlImg('raw') + file_name;\n }\n\n private _pictureListeChange() {\n this.picturesListChange.emit();\n }\n\n private downloadUrl(url: string, fileName: string) {\n const a: any = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n }\n\n ngDestroy() {\n if (this.getDataAPISub) {\n this.getDataAPISub.unsubscribe();\n }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgEventService } from '../../../../services/img-event.service';\nimport { ImgPictureDTO } from '../../../../dto/img-manager.dto';\nimport { HttpClient } from '@angular/common/http';\nimport { ImgManagerService } from '../../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../../services/img-selection.service';\nimport { ImgCDNService } from '../../../../services/config/img-cdn.service';\nimport { ImgManagerConfigService } from '../../../../services/config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ImagesActionHandler } from '../../images-actions-handler';\nimport { easeInOut } from '../../../../animations/easeInOut/ease-in-out.animation'\nimport { tabDisplayed } from '../../../../dto/export-dtos.api';\nimport { AlertService } from '../../../../services/alert.service';\n\n@Component({\n selector: 'img-card',\n templateUrl: './img-card.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgCardComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n picture: ImgPictureDTO;\n @Input()\n index: number;\n focusInput = false;\n\n @Output()\n toggleImgSelected: EventEmitter<void> = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n isUploadSection: boolean = false;\n activeConfirmDelete = false;\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n this.isUploadSection = this.tabDisplayed === 'img-upload';\n }\n\n displayLargeWindow(): void {\n this.switchDisplayWindow.emit(true);\n }\n\n onToggleImgSelected() {\n this.toggleImgSelected.next();\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\n\n@Component({\n selector: 'img-editor',\n templateUrl: './img-editor.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgEditorComponent implements OnInit {\n\n @Input()\n stateDisplayed;\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Output() editClosed = new EventEmitter();\n\n isLoading: boolean = false;\n isImgModified: boolean = false;\n isNameModified: boolean = false;\n currentCroppedImage: string = ''; // Img modified return in base64 by the cropper\n private previousName: string;\n\n msgFailSave: string = 'ImgManager.ImgEditor.msgFailSave';\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n msgSuccessEdit: string = \"Les modifications de l'image ont bien été enregistrées.\"\n\n constructor(\n private imgManagerService: ImgManagerService,\n ) { }\n\n ngOnInit(): void {\n this.previousName = this.imgToEdit.display_name;\n }\n\n onSave() {\n if (this.isLoading) {\n return;\n }\n this.isLoading = true;\n\n if (!this.isImgModified && !this.isNameModified) {\n this.isLoading = false;\n this.onEditClosed();\n }\n\n const obsReplaceImg: Observable<any> = this.imgManagerService.replaceImg(this.currentCroppedImage, this.imgToEdit.id_file);\n const obsChangeImgName: Observable<any> = this.imgManagerService.changeImgName(this.imgToEdit.display_name, this.imgToEdit.id_file);\n\n if(this.isImgModified && this.isNameModified) {\n this.ranameAndReplaceImg(obsChangeImgName, obsReplaceImg);\n return;\n }\n\n if(this.isImgModified){\n obsReplaceImg.subscribe(data => {\n this.isLoading = false;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.currentCroppedImage = '';\n this.onEditClosed(this.msgFailSave);\n });\n return;\n }\n\n if (this.isNameModified) {\n obsChangeImgName.subscribe(data => {\n this.isLoading = false;\n this.previousName = this.imgToEdit.display_name;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.imgToEdit.display_name = this.previousName;\n this.onEditClosed(this.msgFailSave);\n });\n }\n this.isNameModified = false;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestartEdit() {\n this.isImgModified = false;\n this.isNameModified = false;\n this.imgToEdit.display_name = this.previousName;\n }\n\n onCancel() {\n this.onEditClosed('');\n }\n\n onImgCropped(imgBase64: string) {\n this.currentCroppedImage = imgBase64;\n }\n\n private ranameAndReplaceImg(obsChangeImgName: Observable<any>, obsReplaceImg: Observable<any>) {\n // Avoid to use forkjoin, because it can create conflict and loos the img\n obsChangeImgName.subscribe(\n res1 => {\n obsReplaceImg.subscribe(\n res2 => {\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n }\n}\n","import {Component, OnInit, Output, EventEmitter, Input, OnDestroy, Inject, Renderer2} from '@angular/core';\nimport { CanvaService } from '../../services/canva.service';\nimport { CanvaButtonApi } from '../../dto/canva.dto';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { WiziBlockMediaDto } from '../../dto/wizi-block-media.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { AlertService } from '../../services/alert.service';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { CanvaCreateDesign } from '../../dto/canva-create-design.dto';\n\n@Component({\n selector: 'canva-btn',\n templateUrl: './canva-btn.component.html'\n})\nexport class CanvaBtnComponent implements OnInit, OnDestroy {\n\n @Input() stateDisplayed: stateDisplayed;\n\n @Output() showImgUploaded = new EventEmitter();\n\n canvaApi: CanvaButtonApi;\n canvaLogoRouteAssets: string;\n imgLoading = false;\n\n availableFormat = {\n 'ImgManager.CanvaBtn.smallSquare' : {\n 'width' : 500,\n 'height' : 500\n },\n 'ImgManager.CanvaBtn.mediumSquare' : {\n 'width' : 1000,\n 'height' : 1000\n },\n 'ImgManager.CanvaBtn.bigSquare' : {\n 'width' : 2500,\n 'height' : 2500\n }\n }\n\n openDropDownMenu: boolean = false;\n\n expectedHeight: number;\n expectedWidth: number;\n subs: Subscription[] = [];\n\n constructor(\n private canvaService: CanvaService\n ) { }\n\n ngOnInit(): void {\n this.canvaLogoRouteAssets = this.canvaService.getCanvaLogo();\n this.listenCanvaExpectedSize();\n }\n\n listenCanvaExpectedSize() {\n // Subcribe to askImg from wizi-block\n const subExpectedImgSizesChange =\n this.canvaService.bindEventExepectedImgSizeChange().subscribe( (mediaDTO: WiziBlockMediaDto) => {\n if (mediaDTO) {\n this.expectedWidth = parseInt(mediaDTO.image_width, 10);\n this.expectedHeight = parseInt(mediaDTO.image_height, 10);\n } else {\n this.expectedWidth = undefined;\n this.expectedHeight = undefined;\n }\n });\n this.subs.push(subExpectedImgSizesChange);\n }\n\n onOpenCanva(width: number, height: number) {\n this.canvaService.openCanva(width, height);\n }\n\n ngOnDestroy() {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { tabDisplayed } from '../../dto/export-dtos.api';\n\n\n@Component({\n selector: 'img-selection',\n templateUrl: './img-selection.component.html'\n})\nexport class ImgSelectionComponent implements OnInit {\n\n @Input() tabDisplayed: tabDisplayed;\n @Output() imgManagerClosed = new EventEmitter();\n\n imgSelectedList: ImgPictureDTO[] = [];\n removingAll: boolean = false;\n cancellingAll: boolean = false;\n importingAll: boolean = false;\n dragStart = false;\n isLoading: boolean = false;\n trashPositionIndex = 0;\n trashPositionLeft = '-5px';\n\n constructor(\n private imgSelectionService: ImgSelectionService\n ) { }\n\n ngOnInit(): void {\n this.getImgSelected();\n this.imgSelectionService.getImgListLoadingEventListner().subscribe(loading => {\n this.isLoading = loading;\n })\n }\n\n init() {\n this.removingAll = false;\n this.cancellingAll = false;\n this.importingAll = false;\n }\n\n getImgSelected() {\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n removeImg(index: number) {\n this.imgSelectionService.removeImgSelectedByIndex(index);\n }\n\n drop(event: CdkDragDrop<string[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.imgSelectionService.moveImgOrder(event);\n }\n }\n\n removeImgFromSelection(event: CdkDragDrop<string[]>) {\n this.imgSelectionService.removeImgSelectedByIndex(event.previousIndex);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[btnLoadingAnim]'\n})\nexport class LoadingDirective {\n\n element: ElementRef;\n currentLoading = 0;\n interval = null;\n\n constructor(el: ElementRef) {\n this.element = el;\n this.launchLoading();\n }\n\n launchLoading() {\n if (this.interval !== null) {\n return;\n }\n this.currentLoading = 10;\n\n this.element.nativeElement.style.width = this.currentLoading + '%';\n\n this.interval = setInterval(() => {\n if (this.currentLoading < 80) {\n this.currentLoading += Math.floor(Math.random() * 15);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n if (this.currentLoading >= 80 && this.currentLoading < 95) {\n this.currentLoading += Math.floor(Math.random() * 2);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n }, 70);\n }\n\n ngOnDestroy() {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n }\n}\n","import { Directive, ElementRef, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { DomService } from '../services/dom.service';\n\n@Directive({\n selector: '[wzAutoHide]'\n})\nexport class AutoHideDirective implements AfterViewInit {\n @Input() triggerElement: string;\n @Input() forceOn: Array<string> = null;\n\n constructor(private _elementRef: ElementRef, private domService: DomService) {}\n\n @Output('clickOutside') clickOutside: EventEmitter<any> = new EventEmitter();\n\n ngAfterViewInit(): void {\n this.domService.documentEvent().subscribe((targetElement: Element) => {\n const clickedInside = this._elementRef.nativeElement.contains(targetElement);\n const classNameFromElement = targetElement.getAttribute('class');\n\n if (!clickedInside && (classNameFromElement === null || !classNameFromElement.includes(this.triggerElement))) {\n this.clickOutside.emit(null);\n }\n\n if (this.forceOn != null && classNameFromElement !== null) {\n let needToClose = true;\n this.forceOn.forEach(v => {\n if (!classNameFromElement.includes(v)) {\n needToClose = false;\n }\n });\n if (needToClose) {\n this.clickOutside.emit(null);\n }\n }\n });\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostListener } from \"@angular/core\";\n\n@Directive({ selector: '[copy-clipboard]' })\nexport class CopyClipboardDirective {\n\n @Input(\"copy-clipboard\")\n public payload: string;\n\n @Output(\"copied\")\n public copied: EventEmitter<string> = new EventEmitter<string>();\n\n @HostListener(\"click\", [\"$event\"])\n public onClick(event: MouseEvent): void {\n\n event.preventDefault();\n if (!this.payload)\n return;\n\n let listener = (e: ClipboardEvent) => {\n let clipboard = e.clipboardData || window[\"clipboardData\"];\n clipboard.setData(\"text\", this.payload.toString());\n e.preventDefault();\n\n this.copied.emit(this.payload);\n };\n\n document.addEventListener(\"copy\", listener, false)\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener, false);\n }\n}","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'dropdown',\n templateUrl: './dropdown.component.html'\n})\nexport class DropdownComponent implements OnInit {\n\n @Input()\n dropDownMenuClass: string;\n @Input()\n disable: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { EventEmitter } from '@angular/core';\nimport { Output } from '@angular/core';\nimport { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { AlertService } from '../../../services/alert.service';\n\n@Component({\n selector: 'info-section',\n templateUrl: './info-section.component.html'\n})\nexport class EditorInfoSectionComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isNameModified(isNameModified: boolean) {\n this._isNameModified = isNameModified;\n }\n get isNameModified(): boolean {\n return this._isNameModified;\n }\n private _isNameModified: boolean = false;\n\n @Output()\n isNameModifiedChange = new EventEmitter<boolean>();\n\n imgName: string;\n imgRoute: string;\n\n msgCopyToClipBoard: string = 'ImgManager.ImgEditor.copytoClipBoard';\n\n constructor(\n private alertService: AlertService,\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgName = this.imgToEdit.display_name;\n }\n getFileSize() {\n return this.imgToEdit ? Math.round(parseInt(this.imgToEdit.size)/1000) : '-';\n }\n\n copyToClipBoard(event) {\n this.alertService.openAlert(this.msgCopyToClipBoard);\n }\n\n onNameChange() {\n this.isNameModifiedChange.emit(true);\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const insertRemove = // the fade-in/fade-out animation.\ntrigger('insertRemoveAnnim', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('0.5s ease-in-out', style({ opacity: 1 })),\n ])\n]);\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\nimport { insertRemove } from '../../../animations/insertRemove/insert-remove.animation';\nimport { CropperConfigDTO, ImgCropperConfigDTO } from '../../../dto/img-editor-config.dto';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\n\n@Component({\n selector: 'cropper',\n templateUrl: './cropper.component.html',\n animations: [\n insertRemove\n ]\n})\nexport class CropperComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isImgModified(isImgModified: boolean) {\n this._isImgModified = isImgModified;\n if (!isImgModified) {\n this.restartEdit();\n }\n }\n get isImgModified(): boolean {\n return this._isImgModified;\n }\n private _isImgModified: boolean = false;\n\n @Output()\n isImgModifiedChange = new EventEmitter<boolean>();\n\n @Output()\n editClosed = new EventEmitter();\n\n @Output()\n currentCroppedImageChange = new EventEmitter<string>();\n\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n\n\n isNameModified: boolean = false;\n isCropperReady: boolean = false; // Use to not display the crop validation btn, after the img is loaded or changed\n currentCroppedImage: string = ''; // Img modified return in base64\n isCropped: boolean = false;\n isLoading: boolean = false;\n isImgCropped: boolean = false;\n isImgCroppedInitilized: boolean = false;\n\n // Image Cropper properties\n imgType: string;\n imgRoute: string;\n imageChangedEvent: any = '';\n croppedImage: any = '';\n canvasRotation = 0;\n rotation = 0;\n scale = 1;\n showCropper = false;\n containWithinAspectRatio = false;\n transform: ImageTransform = {};\n\n defaultAspectRatio: number;\n\n // dropdown list\n resolutionConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.origin',\n config: {\n maintainAspectRatio: true\n },\n },\n {\n label: 'ImgManager.ImgEditor.config.free',\n config: {\n maintainAspectRatio: false\n },\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.square',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 1 / 1\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.Portrait',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 3 / 4\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.landscape',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 5 / 3\n }\n }\n ];\n\n rotationConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.schedule',\n icon: \"fal fa-redo-alt\",\n method: \"rotateRight\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.AntiSchedule',\n icon: \"fal fa-undo-alt\",\n method: \"rotateLeft\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipVert',\n icon: \"fal fa-sort-alt\",\n method: \"flipVertical\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipHoriz',\n icon: \"fal fa-exchange-alt\",\n method: \"flipHorizontal\"\n }\n ];\n\n zoomConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.zoom',\n icon: \"fal fa-search-plus\",\n method: \"zoomIn\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.dezoom',\n icon: \"fal fa-search-minus\",\n method: \"zoomOut\"\n }\n ];\n\n // Img cropper variables\n imgCropperConfig:CropperConfigDTO = {\n maintainAspectRatio: false,\n aspectRatio: undefined\n }\n\n constructor(\n private imgCDNService: ImgCDNService\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgRoute = this.getRAWImgRoute();\n this.imgType = this.getImgType();\n this.croppedImage = null;\n this.setDefautAspectRatio();\n }\n\n getRAWImgRoute(){\n return this.imgCDNService.getUrlImg('raw') + this.imgToEdit.file_name;\n }\n\n getImgType() {\n return this.imgToEdit.file_name ? this.imgToEdit.file_name.split('.').pop() : undefined;\n }\n\n setDefautAspectRatio() {\n const height = parseInt(this.imgToEdit.raw_height);\n const width = parseInt(this.imgToEdit.raw_width);\n this.defaultAspectRatio = height / width;\n this.resolutionConfig[0].config.aspectRatio = this.defaultAspectRatio;\n this.imgCropperConfig.aspectRatio = this.defaultAspectRatio;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestart() {\n this.isImgModifiedChange.emit(false);\n }\n\n restartEdit() {\n this.init();\n this.resetConfCropper();\n }\n\n onImgModified() {\n this.isImgModified = true;\n this.isImgModifiedChange.emit(true);\n }\n\n ////// Img cropper methods ////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /* Cropper output events */\n\n fileChangeEvent(event: any): void {\n this.imageChangedEvent = event;\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.detectImgCropperChange();\n\n this.currentCroppedImage = event.base64;\n this.currentCroppedImageChange.emit(this.currentCroppedImage);\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n cropperReady() {\n this.isCropperReady = true;\n }\n\n loadImageFailed() {\n this.onEditClosed(this.msgFailLoad);\n }\n\n /* Resize functions */\n\n changeResolutionSize(index: number) {\n this.setActiveItem(this.resolutionConfig, index);\n const config = this.resolutionConfig[index].config;\n this.setCropperProperties(config);\n }\n\n confirmCrop() {\n this.imgRoute = null;\n this.croppedImage = this.currentCroppedImage;\n this.isImgCropped = false;\n this.isImgCroppedInitilized = false;\n this.resetConfCropper();\n this.onImgModified();\n }\n\n resetConfCropper() {\n this.scale = 1;\n this.rotation = 0;\n this.canvasRotation = 0;\n this.transform = {};\n }\n\n private setActiveItem(array:any[], index: number) {\n // Set active-item class for the dropdown\n array.forEach((item, indexItem) => {\n item.active = indexItem === index ? true : false;\n });\n }\n\n private setCropperProperties(config: any) {\n for (const property in config) {\n this.imgCropperConfig[property] = config[property];\n }\n }\n\n private detectImgCropperChange() {\n this.isImgCropped = this.isImgCroppedInitilized;\n this.isImgCroppedInitilized = true;\n }\n\n /* Rotations functions */\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n this.onImgModified();\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n this.onImgModified();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n /* Zoom functions */\n\n zoomOut() {\n this.scale -= this.scale < 0.2? 0 : .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n zoomIn() {\n this.scale += .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n applyMethod(method: string) {\n this[method](); // call the method contains in zoomConfig or rotationConfig\n }\n}\n","import {Component, OnInit, Input, ViewChild, ElementRef, AfterViewInit, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO, ImgPicturesDTO, ParamsImgManagerDTO } from '../../dto/img-manager.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Subscription, Subject} from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { UserSettingsService } from '../../services/user-settings.service';\nimport { TableFilters } from '../../services/table/filters-table.service';\nimport { PictureNameUpdate } from '../../dto/picture-name-update.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { insertRemove } from '../../animations/insertRemove/insert-remove.animation';\nimport { stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'images-view',\n templateUrl: './images-view.component.html',\n animations: [\n easeInOut,\n insertRemove\n ]\n})\nexport class ImagesViewComponent implements OnInit, AfterViewInit {\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() fullSize: boolean;\n @Input() maxLengthCardShow: number;\n @Input() nbRowToShow: number;\n @Input() listDisplayed = false; // Display format list or mosaic\n @Input() multipleImgMode = false;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n // Data filters\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 1\n };\n\n @ViewChild('imgLibContainer') imgLibContainer : ElementRef;\n widthLargeCard: number = 219; // Default value of a card width 199 + margin 20\n widthSmallCard: number = 160; // Default value of a card width 140 + margin 20\n nbMinImgPerLine: number;\n nbMaxImgPerLine: number;\n nbFakeImg: number = 0;\n\n imgFullWidthConfig:any = [\n {\n max: 419,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 499,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 719, // tablet\n largeImgWidthFactor : 0.5,\n smallImgWidthFactor : 0.3333\n },\n {\n max: 1023, // deskop\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.2,\n smallImgWidthFactor : 0.1111\n },\n {\n largeImgWidthFactor : 0.1666,\n smallImgWidthFactor : 0.1\n }\n ];\n\n imgWidthConfig:any = [\n {\n max: 1024,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1199,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1299,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.14\n },\n {\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n }\n ];\n\n imgSubscribe: Subscription;\n imgRemovedEvent: Subscription;\n imgAddedEvent: Subscription;\n imgSelectionChange: Subscription;\n searchQueryChanged: Subject<string> = new Subject<string>();\n filtersChanged: Subject<void> = new Subject<void>();\n\n picturesList: ImgPictureDTO[] = [];\n savePictureList: ImgPictureDTO[] = [];\n imgSelectedList: ImgPictureDTO[];\n searchedValue: string; // Value from the search bar or img added by canva\n nbImgToDelSelected: number = 0;\n disable: boolean = false; // Use to disable action during server request\n isLoading: boolean = true;\n isTotalRetieved: boolean = false;\n delListImgLoader = false;\n initComponent: boolean = true;\n failLoaded: boolean = false;\n displayPexelsResults: boolean = false; // Use when no img find by name, display img from Pexels\n searchText: string;\n confirmImgSup:boolean = false;\n previousSearchValue: string;\n\n // Paginator Params\n pageIndex: number =0;\n length: number = 0;\n pageSize: number = 30; // Default value\n pageSizeOptions: number[] = [25, 50, 100, 250];\n\n // Api Img manager Params\n params:ParamsImgManagerDTO;\n\n private errorGetAllImg = 'ImgManager.ImgLib.errorGetAllImg';\n private errorGetTotalImg = 'ImgManager.ImgLib.errorGetTotalImg';\n private errorGetImg = 'ImgManager.ImgLib.errorGetCanvaImg';\n private msgNoImgFound = 'ImgManager.ImgLib.noImgFound';\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private imgEventService: ImgEventService,\n private imgSelectionService: ImgSelectionService,\n private alertService: AlertService,\n private userSettingsService: UserSettingsService,\n private renamePictureService: RenamePictureService) { }\n\n ngOnInit(): void {\n /* if (this.maxLengthCardShow) {\n this.reducePictureListMaxLength();\n } */\n this.setEvents();\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n ngAfterViewInit() {\n this.setNbImgToDisplay();\n this._getImgList();\n if (!this.savePictureList) {\n this.savePictureList = this.picturesList;\n }\n }\n\n /* reducePictureListMaxLength() {\n this.picturesList.splice(0, this.maxLengthCardShow);\n } */\n\n getImgList() {\n this.filtersChanged.next();\n }\n\n /**\n * true : go to list display\n * false : go to mosaic display\n * @param activate\n */\n onSwitchFormatDisplayed(activate: boolean) {\n this.listDisplayed = activate;\n this.userSettingsService.setUserDisplayPreference(activate);\n this.imgEventService.emitlistDisplayedChange(activate);\n }\n\n /**\n * Calcul the number of img selected for masse deletion\n */\n onImgSelected() {\n this.setNbImgToDelSelected();\n }\n\n onShowImgUploaded() {\n this.searchText = null;\n this.searchedValue = null;\n this.getImgList();\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n console.log('onRenamePicture pictureRenamed', pictureRenamed);\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n removeListImg() {\n if (this.disable) {\n return;\n }\n this.disable = true;\n this.delListImgLoader = true;\n this.confirmImgSup = false;\n\n // Get the id of the img to remove\n // And add deleted property\n const idImgToRemove: string[] = [];\n this.picturesList.forEach( img => {\n if (img.delSelected) {\n img.deleted = true;\n idImgToRemove.push(img.id_file);\n }\n });\n\n this.imgManager.removeMultipleImg(idImgToRemove).subscribe(\n () => {\n this.getImgList();\n this.imgSelectionService.removeImgSelectionByIds(idImgToRemove);\n },\n error => {\n this.getImgList();\n this.alertService.openAlert(this.errorRemoveImg);\n }\n );\n\n\n }\n\n selectImgChosen() {\n if (this.disable) {\n return;\n }\n const picturesListSelected: ImgPictureDTO[] = [];\n this.picturesList.map(img => {\n if(img.delSelected) {\n img.delSelected =false;\n img.selected = true;\n }\n if (img.selected) {\n picturesListSelected.push(img);\n }\n });\n this.setNbImgToDelSelected();\n this.imgSelectionService.setImgSelection(picturesListSelected);\n }\n\n displayConfirmImgSup(){\n if (this.disable) {\n return;\n }\n this.confirmImgSup = true;\n }\n\n cancelSup() {\n this.confirmImgSup = false;\n }\n\n /**\n * Event emit when a img selected in order to delete\n */\n onPicturesListChange() {\n this.setNbImgToDelSelected();\n }\n\n onFiltersChange() {\n this.getImgList();\n }\n\n /**\n * Set default number of img per page to display at the initialisation\n * This number is between 30 and 50\n */\n private setNbImgToDisplay() {\n const containerWidth = this.imgLibContainer.nativeElement.offsetWidth + 30; // + 30px -> left + right margin\n const scrollWidth = window.innerWidth - document.body.offsetWidth;\n\n const [maxImgWidthFactor, minImgWidthFactor] = this.getImgWidthFactors();\n\n const minImgWidth = Math.floor(containerWidth * minImgWidthFactor);\n const maxImgWidth = Math.ceil((containerWidth + scrollWidth ) * maxImgWidthFactor);\n\n this.nbMaxImgPerLine = Math.floor(containerWidth / minImgWidth);\n this.nbMinImgPerLine = Math.floor( (containerWidth + scrollWidth ) / maxImgWidth);\n\n this.pageSize = this.getTotalImgPerPage();\n }\n\n private getImgWidthFactors(): number[] {\n const screenWidth = window.innerWidth;\n let minWidth:number = 0;\n let imgSizesConfig: number[] = [];\n\n const currentImgWidthConfig = this.fullSize ? this.imgFullWidthConfig : this.imgWidthConfig;\n\n for (const widthConfig of currentImgWidthConfig) {\n if (!widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n if (minWidth < screenWidth && screenWidth <= widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n minWidth = widthConfig.max;\n }\n return imgSizesConfig;\n }\n\n private getTotalImgPerPage(): number {\n if (this.nbRowToShow) {\n const nbImgPerLine = this.stateDisplayed === 'full' ? this.nbMinImgPerLine : this.nbMaxImgPerLine;\n return nbImgPerLine * this.nbRowToShow;\n }\n\n let total = this.nbMinImgPerLine;\n\n while (total < 30 || total % this.nbMaxImgPerLine !== 0 || total % this.nbMinImgPerLine !== 0) {\n total += this.nbMinImgPerLine;\n }\n return total;\n }\n\n private setParams() {\n this.params = {\n limit: this.maxLengthCardShow?.toString() || (this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage.toString() : this.pageSize.toString()),\n page: this.tableFilters.currentPage.toString()\n };\n if (this.tableFilters.searchValue) {\n this.params[\"display_name:contains\"] = this.tableFilters.searchValue.toString();\n }\n }\n\n private initVariables(loadingSuccess: boolean) {\n this.nbImgToDelSelected = 0;\n this.disable = false;\n this.isLoading = false;\n this.delListImgLoader = false;\n this.initComponent = false;\n this.displayPexelsResults = false;\n this.failLoaded = !loadingSuccess;\n this.nbFakeImg = 0;\n }\n\n private selectImgSelected () {\n if (!this.imgSelectedList || !this.imgSelectedList.length) {\n return;\n }\n\n const idImgSlectedList: string[] = [];\n\n this.imgSelectedList.forEach(img =>\n idImgSlectedList.push(img.id_file)\n );\n\n this.picturesList.forEach(picture => {\n if (idImgSlectedList.indexOf(picture.id_file) !== -1) {\n picture.selected = true;\n }\n });\n }\n\n private displayPexelsLib () {\n this.displayPexelsResults = true;\n this.alertService.openAlert(this.msgNoImgFound);\n }\n\n /**\n * Set a img list in order to fill properly all the line of images displayed in mosaic.\n * Otherwise, the space-between css will do a bad display\n */\n private calculNbImgFake(nbImgDisplayed: number) {\n const nbImgPerLine = this.stateDisplayed === 'small' || this.tabDisplayed === 'img-upload' ? this.nbMaxImgPerLine : this.nbMinImgPerLine;\n\n if (nbImgDisplayed % nbImgPerLine !== 0) {\n this.nbFakeImg = nbImgPerLine - nbImgDisplayed % nbImgPerLine;\n }\n }\n\n private getImg (id_file: string) {\n this.imgManager.getShopImg(id_file).pipe(take(1)).subscribe(\n (picture: ImgPictureDTO) => {\n\n if (!this.imgAlreadyExist(picture.id_file)) {\n // check the img is not already present\n this.picturesList.unshift(picture);\n this.length += 1;\n }\n },\n error => {\n this.alertService.openAlert(this.errorGetImg);\n }\n );\n }\n\n private imgAlreadyExist (id_file: string): boolean {\n for (const img of this.picturesList) {\n if (img.id_file === id_file) {\n return true;\n }\n }\n return false;\n }\n\n private setNbImgToDelSelected () {\n this.nbImgToDelSelected = this.picturesList.filter(img =>\n img.delSelected).length;\n\n if (!this.nbImgToDelSelected) {\n this.confirmImgSup = false;\n }\n }\n\n private setEvents() {\n // Add a timer to retrieve img when the search bar or the paginator are used\n this.searchQueryChanged\n .pipe(debounceTime(400)) // wait 0.5 sec after the last event before emitting last event\n .subscribe(data => {\n this.getImgList();\n });\n\n this.filtersChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe(data => {\n this._getImgList();\n });\n\n // Reload img when img is/are removed\n this.imgRemovedEvent = this.imgEventService.getImgRemovedEventListner().subscribe(id_file =>{\n this.getImgList();\n });\n\n // Create img from Canva\n this.imgAddedEvent = this.imgEventService.getImgAddedEventListner().subscribe(id_file =>{\n if (id_file && !this.imgAlreadyExist(id_file)) {\n this.getImg(id_file);\n }\n });\n\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n if (this.listDisplayed) {\n return;\n }\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n\n private _getImgList() {\n this.isLoading = true;\n this.displayPexelsResults = false;\n this.setParams();\n\n this.refreshTotalImgList();\n\n this.imgManager.getShopImgList(this.params).pipe(take(1)).subscribe((data: ImgPicturesDTO) => {\n this.initVariables(true);\n const nbImgDisplayed = data.data.length;\n this.calculNbImgFake(nbImgDisplayed);\n this.picturesList = data.data;\n this.renamePictureService.setPicturesList(this.picturesList);\n this.selectImgSelected();\n\n this.length = this.isTotalRetieved ? this.length : data.totalRecords;\n this.tableFilters.totalItems = this.isTotalRetieved ? this.tableFilters.totalItems : data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\n\n // Display Pexels if no result\n if (data.totalRecords === 0) {\n this.displayPexelsLib();\n }\n\n },\n error => {\n this.alertService.openAlert(this.errorGetAllImg);\n this.initVariables(false);\n });\n }\n\n private refreshTotalImgList() {\n const searchValue = this.tableFilters.searchValue;\n\n if (this.isTotalRetieved && searchValue === this.previousSearchValue) {\n // Keep current total result\n return;\n }\n\n this.isTotalRetieved = false;\n\n this.imgManager.getShopTotalImgList(this.params).pipe(take(1)).subscribe(\n\n (data: ImgPicturesDTO) => {\n this.previousSearchValue = searchValue;\n this.isTotalRetieved = true;\n this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n },\n\n error => {\n //this.alertService.openAlert(this.errorGetTotalImg);\n this.initVariables(false);\n });\n }\n\n switchDisplayWindowMosaic() {\n this.switchDisplayWindow.emit(true);\n }\n\n ngOnDestroy(): void {\n this.searchQueryChanged.unsubscribe();\n this.imgRemovedEvent.unsubscribe();\n this.imgAddedEvent.unsubscribe();\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { PictureNameUpdate, tabDisplayed } from '../../../dto/export-dtos.api';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'mosaic-view',\n templateUrl: './mosaic-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class MosaicViewComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n nbFakeImg: number = 0;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n }\n\n onSearchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.filtersChange.emit(this.tableFilters);\n }\n\n onCardRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChange.next(pictureRenamed);\n }\n\n switchDisplayWindowCard() {\n this.switchDisplayWindow.emit(true);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'table-view',\n templateUrl: './table-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class TableViewComponent extends ImagesActionHandler implements OnInit {\n dataTableName: string = 'imgagesView'; // Name of your table\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NwbFilterGroup, NwbFilterRoutingBuilder } from '@wizishop/ng-wizi-bulma';\nimport { Subject } from 'rxjs';\nimport { PaginationFilters } from '../../components/shared/pagination/pagination.component';\n\nexport interface TableFilters extends PaginationFilters {\n sort: string;\n order: boolean;\n searchValue: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FiltersTableService {\n filterGroups = new Map<string, NwbFilterGroup>();\n dataTableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: undefined,\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 0\n };\n\n private sortSubject: Subject<any> = new Subject<any>();\n\n constructor(private filterRoutingBuilder: NwbFilterRoutingBuilder) {}\n\n getTableFilterGroup(dataTableName: string) {\n if (this.filterGroups.has(dataTableName)) {\n return this.filterGroups.get(dataTableName);\n }\n const filterGroup: NwbFilterGroup = this.filterRoutingBuilder.group(this.dataTableFilters, dataTableName);\n this.filterGroups.set(dataTableName, filterGroup);\n return filterGroup;\n }\n\n /**\n * Use to reset the others sorts of the table\n * @param dataTableName\n * @param sortName\n * @param order\n */\n emitSortChange(dataTableName: string, sortName: string, order: boolean) {\n this.sortSubject.next({ dataTableName, sortName, order });\n }\n\n getSortChangeListner() {\n return this.sortSubject.asObservable();\n }\n\n setPaginationFilters(dataTableName: string, totalItems: number, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage,\n currentPage\n });\n }\n\n setInitialPaginationFiltersIfNotExist(dataTableName: string, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage: filterGroup.get('itemsPerPage') ? parseInt(filterGroup.get('itemsPerPage')) : itemsPerPage,\n currentPage: filterGroup.get('currentPage') ? parseInt(filterGroup.get('currentPage')) : currentPage\n });\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { TableFilters, FiltersTableService } from '../../../services/table/filters-table.service';\n\n@Component({\n selector: 'wz-table',\n templateUrl: './table.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class TableComponent implements OnInit {\n /// Input/Output of table filters ///\n\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n @Input() tableRoutingName: string; // Name of the table\n @Input() placeholder: string = '';\n\n private _filterGroup: NwbFilterGroup;\n\n /// Input/Output of checkbox ///\n\n /** Pass to true to display checkbox in the header table */\n @Input() checkbox = false;\n /** Emit new header checboxValue */\n @Output() toggleAllCheckBox: EventEmitter<boolean> = new EventEmitter();\n\n /// Input to disable section ///\n\n /** Pass to true to hide search input */\n @Input() disableSearch: boolean = false;\n /** Pass to true to hide the pagniator */\n @Input() disablePagniation: boolean = false;\n\n /// Input for loader on table body ///\n @Input() isLoading = false;\n\n /// Private variables ///\n headerCheckBoxId: string;\n private filterGroupChangeSub: Subscription;\n\n constructor(private filtersTableService: FiltersTableService) {}\n\n ngOnInit(): void {\n this.headerCheckBoxId = uuid(); // Create checkbox unique id\n\n /* Handle routing filters */\n if (this.tableRoutingName) {\n this._filterGroup = this.filtersTableService.getTableFilterGroup(this.tableRoutingName);\n\n // Performe initial fetch data\n this._filterGroup.valuesChange$.next([]);\n\n this.setTablesFilters();\n\n // Listen to filters changes with debounced time to limit multiple api calls\n this.filterGroupChangeSub = this._filterGroup.valuesChange$.subscribe(filters => {\n this.setTablesFilters();\n });\n }\n }\n\n onToggleAllCheckBox(event) {\n this.toggleAllCheckBox.emit(event.target.checked);\n }\n\n searchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n\n // Reset routing filters\n if (this._filterGroup) {\n this._filterGroup.setValues({\n searchValue: this.tableFilters.searchValue,\n sort: undefined,\n order: undefined,\n currentPage: 1\n });\n }\n }\n\n pageChange() {\n this.tableFiltersChange.emit(this.tableFilters);\n if (this._filterGroup) {\n this._filterGroup.setValues({\n itemsPerPage: this.tableFilters.itemsPerPage,\n currentPage: this.tableFilters.currentPage\n });\n }\n }\n\n /**\n * Set tableFilters from routing data existing in the url\n * */\n private setTablesFilters() {\n this.tableFilters = {\n sort: this._filterGroup.get('sort'),\n order: this._filterGroup.get('order'),\n searchValue: this._filterGroup.get('searchValue'),\n itemsPerPage: this._filterGroup.get('itemsPerPage') ? parseInt(this._filterGroup.get('itemsPerPage')) : 0,\n currentPage: this._filterGroup.get('currentPage') ? parseInt(this._filterGroup.get('currentPage')) : 0,\n totalItems: this.tableFilters.totalItems\n };\n this.tableFiltersChange.emit(this.tableFilters);\n }\n\n ngDestroy() {\n if (this.filterGroupChangeSub) {\n this.filterGroupChangeSub.unsubscribe();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-input-search',\n templateUrl: './input-search.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: InputSearchComponent, multi: true }]\n})\nexport class InputSearchComponent implements ControlValueAccessor {\n @Input()\n placeholder = '';\n @Input()\n smallPadding = false;\n @Input()\n id;\n private innerValue: any = '';\n @Output() changeDebounced = new EventEmitter<any>(); // debounced\n\n private onTouchedCallback: () => void = () => {};\n private onChangeCallback: (_: any) => void = () => {};\n\n get value(): any {\n return this.innerValue;\n }\n\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n this.onChangeCallback(v);\n }\n }\n\n writeValue(value: any) {\n if (value !== this.innerValue) {\n this.innerValue = value;\n }\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public handleDebouncedKeyUp(event): void {\n this.changeDebounced.emit(event.target.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'IsLastPage'\n})\nexport class PagniationIsLastPage implements PipeTransform {\n /**\n * Return true, if the current page is the last page. Otherwise, return false.\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): boolean {\n if (!(currentPage >= 0 && totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('currentPage or totalItems or itemsPerPage is/are missing in PagniationIsLastPage pipe.');\n }\n return currentPage === Math.ceil(totalItems / itemsPerPage);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PagniationIsLastPage } from '../../../pipes/pagination/total-pages/is-last-page.pipe';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-pagination',\n templateUrl: './pagination.component.html'\n})\nexport class PaginationComponent {\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Output() pageChange: EventEmitter<PaginationFilters> = new EventEmitter();\n\n constructor() {}\n\n decrementPage() {\n if (this.pagination.currentPage <= 1) {\n return;\n }\n this.pagination.currentPage--;\n this.pageChange.emit(this.pagination);\n }\n\n incrementPage() {\n const isLastPage = new PagniationIsLastPage().transform(\n this.pagination.currentPage,\n this.pagination.totalItems,\n this.pagination.itemsPerPage\n );\n if (isLastPage) {\n return;\n }\n this.pagination.currentPage++;\n this.pageChange.emit(this.pagination);\n }\n\n onGotoPageChange(pageNumber) {\n this.pagination.currentPage = parseInt(pageNumber);\n this.pageChange.emit(this.pagination);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ArrayTotalPages'\n})\nexport class PagniationArrayTotalPages implements PipeTransform {\n /**\n * Return an incremental array corresponding with the number page\n * [ 1, 2, 3 ..., last page number ]\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n const arrayLength: number = Math.ceil(totalItems / itemsPerPage);\n return Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => x + 1);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'customPagniationText'\n})\nexport class PagniationText implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Update pagination text if at least one entrie change\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): any {\n let currentItemsLow = 0,\n currentItemsHigh = 0;\n\n if (totalItems) {\n currentItemsLow = (currentPage - 1) * itemsPerPage + 1;\n currentItemsHigh = currentPage * itemsPerPage;\n }\n\n if (currentItemsHigh > totalItems) {\n currentItemsHigh = totalItems;\n }\n\n return this.translateService.instant('PaginationComponent.on', { low: currentItemsLow, high: currentItemsHigh, total: totalItems });\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-checkbox',\n templateUrl: './checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input()\n label = '';\n @Input()\n value: any;\n @Input()\n type: string;\n @Input()\n alone = false;\n @Input()\n checked = false;\n @Input()\n id = '';\n @Input()\n name: string;\n disabled = false;\n constructor() {}\n private _onChange: Function;\n private _onTouched: Function;\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n writeValue(obj: any): void {\n this.value = obj;\n }\n\n onChange(value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ComponentFactoryResolver,\n EventEmitter,\n Inject,\n Output,\n Renderer2,\n Directive,\n ElementRef,\n Input,\n ComponentRef,\n ApplicationRef,\n EmbeddedViewRef,\n Injector,\n Type\n} from '@angular/core';\n\nimport { v4 as uuid } from 'uuid';\nimport { CheckboxComponent } from '../../components/shared/checkbox/checkbox.component';\n\n@Directive({\n selector: '[checkBoxRow]'\n})\nexport class CheckBoxRow {\n @Input('checkBoxId') checkBoxId: string | number;\n @Input('checkBoxName') checkBoxName: string;\n\n @Input('checkBoxValue') set checkBoxValue(value: boolean) {\n this._value = value;\n if (this.checkboxComponentRef) {\n this.setCheckBoxValue();\n }\n }\n _value: boolean;\n get checkBoxValue(): boolean {\n return this._value;\n }\n\n @Output() checkBoxValueChange: EventEmitter<boolean> = new EventEmitter();\n\n private checkboxComponentRef: ComponentRef<CheckboxComponent>;\n private htmlContainer: HtmlContainer;\n\n constructor(\n private currentRow: ElementRef,\n private appRef: ApplicationRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private resolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.createCheckBoxComponent();\n this.handleChecboxInputs();\n this.handleCheckboxOutputs();\n }\n\n createCheckBoxComponent() {\n // Create the container\n const checkBoxContainer = document.createElement('div');\n checkBoxContainer.className = 'wz-table__body__line__cell wz-table__body__line__cell--checkbox';\n\n // Insert divCheckBox in the DOM as the first child of the row\n this.renderer.insertBefore(this.currentRow.nativeElement, checkBoxContainer, this.currentRow.nativeElement.firstChild);\n\n // Insert the CheckBoxComponent inside the container (DOM and Angular DOM)\n this.htmlContainer = new HtmlContainer(checkBoxContainer, this.appRef, this.resolver, this.injector);\n this.checkboxComponentRef = this.htmlContainer.attach(CheckboxComponent);\n }\n\n private handleChecboxInputs() {\n this.checkboxComponentRef.instance.id = this.checkBoxId ? this.checkBoxId : uuid();\n this.checkboxComponentRef.instance.name = this.checkBoxName ? this.checkBoxName : undefined;\n this.checkboxComponentRef.instance.alone = true;\n this.setCheckBoxValue();\n }\n\n private setCheckBoxValue() {\n this.checkboxComponentRef.instance.value = this.checkBoxValue;\n }\n\n private handleCheckboxOutputs() {\n // Detect checkbox changes\n this.checkboxComponentRef.instance.registerOnChange(() => {\n this._toggleCheckbox();\n });\n }\n\n private _toggleCheckbox() {\n this.checkBoxValue = !this.checkBoxValue;\n this.checkBoxValueChange.emit(this.checkBoxValue);\n }\n\n ngOnDestroy() {\n this.htmlContainer.dispose();\n }\n}\n\nexport class HtmlContainer {\n private attached: boolean = false;\n\n private disposeFn: () => void;\n\n constructor(\n private hostElement: Element,\n private appRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n attach(component: Type<any>): ComponentRef<any> {\n if (this.attached) {\n throw new Error('component has already been attached');\n }\n\n this.attached = true;\n const childComponentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\n\n let componentRef = childComponentFactory.create(this.injector);\n\n this.appRef.attachView(componentRef.hostView);\n this.disposeFn = () => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n };\n\n this.hostElement.appendChild((componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0]);\n\n return componentRef;\n }\n\n dispose() {\n if (this.attached) {\n this.disposeFn();\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[tableColumn]'\n})\nexport class TableColumn {\n @Input('columnSize') columnSize: string; // Optional.\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__body__line__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Output } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { FiltersTableService, TableFilters } from '../../services/table/filters-table.service';\n\n@Directive({\n // The selector has the same name as the headerCell selector in table.component.html\n selector: '[headerCell]'\n})\nexport class TableColumnHeader {\n @Input('headerName') // Optional.\n set headerName(value: string) {\n this._headerName = value;\n this.setHeaderName();\n }\n _headerName: string = '';\n get headerName(): string {\n return this._headerName;\n }\n @Input('columnSize') columnSize: string; // Optional.\n @Input('filterRouting') filterRouting: boolean = false; // Optional. Set to true to use Filter Routing.\n @Input('tableName') tableName: string; // Optional, but mandatory to handle sorting\n @Input('sortName') sortName: string; // Optional, but mandatory to handle sorting\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n @Output() onSortChange: EventEmitter<boolean> = new EventEmitter(); // Emit the sort value (true, false, undefuned) of the current sort icon when clicking\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n private contentHeader: HTMLAnchorElement;\n private filterGroup: NwbFilterGroup;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private currentCell: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private filtersTableService: FiltersTableService\n ) {}\n\n ngOnInit() {\n if (this.tableName && this.sortName) {\n if (this.filterRouting) {\n this.handleSortRouting();\n } else {\n this.handleSortBasic();\n }\n }\n }\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n this.renderHeaderColumn();\n }\n\n handleSortRouting() {\n this.filterGroup = this.filtersTableService.getTableFilterGroup(this.tableName);\n\n const filterGroupChangeSub = this.filterGroup.valuesChange$.subscribe(filters => {\n const filterSort = filters.filter(filter => filter.key === 'sort')[0];\n if (this.sortName !== filterSort.value) {\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(filterGroupChangeSub);\n }\n\n handleSortBasic() {\n const sortChangeSub = this.filtersTableService.getSortChangeListner().subscribe(sort => {\n if (this.tableName === sort.dataTableName && this.sortName !== sort.sortName) {\n // Reset the current sort icon\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(sortChangeSub);\n }\n\n resetSortIcon() {\n // Replace current icon with default icon\n this.contentHeader.className = this.contentHeader.className.replace(this.getCurrentSortIcon(), 'idle');\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__head__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__head__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n\n renderHeaderColumn() {\n this.createHeaderContent();\n this.renderer.appendChild(this.currentCell.nativeElement, this.contentHeader);\n }\n\n createHeaderContent() {\n this.contentHeader = document.createElement('a');\n this.contentHeader.className = 'wz-table__head__cell__search';\n this.setHeaderName();\n if (this.tableName && this.sortName) {\n this.handleSort();\n }\n }\n\n private setHeaderName() {\n if (!this.contentHeader) {\n return;\n }\n this.contentHeader.innerHTML = this.headerName;\n }\n\n handleSort() {\n // Set icon in the header column cell\n this.contentHeader.className += ' wz-table__head__cell__search--' + this.getInitialSortIcon();\n\n // On click on the content header, change the icon and emit event\n this.renderer.listen(this.contentHeader, 'click', () => {\n const currentIcon = this.getCurrentSortIcon();\n let newIcon: string;\n let newSort: string, newOrder: boolean;\n\n switch (currentIcon) {\n case 'idle':\n newIcon = 'up';\n newSort = this.sortName;\n newOrder = true;\n break;\n\n case 'up':\n newIcon = 'down';\n newSort = this.sortName;\n newOrder = false;\n break;\n\n case 'down':\n newIcon = 'idle';\n break;\n\n default:\n newIcon = 'idle';\n break;\n }\n // Replace the icon\n this.contentHeader.className = this.contentHeader.className.replace(currentIcon, newIcon);\n\n this.emitEvents(newSort, newOrder);\n });\n }\n\n getInitialSortIcon() {\n if (!this.filterRouting) {\n return 'idle';\n }\n // Get Initial Sort Icon for Routing Filter\n let initialSortIcon = 'idle';\n if (this.filterGroup.get('sort') === this.sortName) {\n initialSortIcon = this.filterGroup.get('order') == 'true' ? 'up' : 'down';\n }\n return initialSortIcon;\n }\n\n getCurrentSortIcon() {\n const regexp = /wz-table__head__cell__search--(?<icon>\\w+)/;\n const { groups } = regexp.exec(this.contentHeader.className);\n return groups.icon;\n }\n\n emitEvents(newSort, newOrder) {\n if (this.filterRouting) {\n // Will send the filter routing value has changes event\n this.filterGroup.setValues({\n sort: newSort,\n order: newOrder,\n currentPage: 1\n });\n } else {\n // Send the event sort change\n this.filtersTableService.emitSortChange(this.tableName, this.sortName, newOrder);\n }\n if (this.tableFilters) {\n this.tableFilters.sort = this.sortName;\n this.tableFilters.order = newOrder;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n }\n this.onSortChange.emit(newOrder);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n // The selector has the same name as the tableRaw selector in table.component.html\n selector: '[tableRow]'\n})\nexport class TableRow {\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ImgCDNService } from '../../services/config/img-cdn.service';\n\n@Pipe({\n name: 'imgSrc'\n})\nexport class ImageSrcPipe implements PipeTransform {\n\n constructor(private imgCDNService: ImgCDNService) { }\n\n transform(pictureName: string, size: string): string {\n if(!size) {\n throw \"The size is undefined in ImageSrcPipe.\";\n }\n\n const route: string = this.imgCDNService.getUrlImg(size);\n\n if (!route) {\n throw \"The expected size is not defined in ImageSrcPipe.\";\n }\n\n return route + pictureName;\n }\n}\n","import { Directive, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\n@Directive({\n selector: 'AbstractDebounceDirective'\n})\nexport class AbstractDebounceDirective implements OnDestroy {\n @Input()\n public debounceTime: number;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n protected emitEvent$: Subject<any>;\n protected subscription$: Subject<void>;\n\n constructor() {\n this.debounceTime = 500;\n this.onEventChange = new EventEmitter<any>();\n this.emitEvent$ = new Subject<any>();\n this.subscription$ = new Subject<void>();\n }\n\n ngOnInit(): void {\n this.emitEvent$\n .pipe(\n takeUntil(this.subscription$),\n debounceTime(this.debounceTime),\n distinctUntilChanged(),\n tap(value => this.emitChange(value))\n )\n .subscribe();\n }\n\n public emitChange(value: any): void {\n this.onEventChange.emit(value);\n }\n\n ngOnDestroy(): void {\n this.subscription$.next();\n this.subscription$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AbstractDebounceDirective } from './abstract-debounce.directive';\n@Directive({\n selector: 'input[debounceKeyUp]'\n})\nexport class DebounceKeyupDirective extends AbstractDebounceDirective {\n constructor() {\n super();\n }\n\n @HostListener('keyup', ['$event'])\n public onKeyUp(event: any): void {\n event.preventDefault();\n this.emitEvent$.next(event);\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'wz-loader',\n templateUrl: './loader.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class LoaderComponent {\n @Input()\n text: string;\n @Input()\n small = false;\n @Input()\n position: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'wz-alert',\n styleUrls: ['./alert.component.scss'],\n templateUrl: './alert.component.html'\n})\nexport class AlertComponent implements OnInit {\n @Input() icon = true;\n @Input() warning = false;\n @Input() success = false;\n @Input() iconClass = 'fas fa-info';\n constructor() {}\n ngOnInit(): void {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberToArray'\n})\nexport class NumberToArray implements PipeTransform {\n\n transform(number: number): any[] {\n return Array.from('x'.repeat(number));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-page-selector',\n templateUrl: './page-selector.component.html'\n})\nexport class PageSelectorComponent {\n\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Input() set totalItems(totalItems: number) {\n this.numberOfPage = Math.ceil(totalItems / this.pagination.itemsPerPage);\n this.largeNumberOfPage = this.numberOfPage > 30;\n }\n get totalItems(): number {\n return this._totalItems;\n }\n private _totalItems: number;\n openAbsoluteSelect:boolean = false;\n\n largeNumberOfPage: boolean = false;\n numberOfPage: number = 0;\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter();\n\n constructor() {}\n\n onGotoPageChange(event, directValue) {\n if (directValue) {\n this.pageChange.emit(event);\n this.openAbsoluteSelect = false;\n } else {\n this.pageChange.emit(parseInt(event.target.value));\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LargeNumberOfPage'\n})\nexport class LargeNumberOfPagePipe implements PipeTransform {\n /**\n * Return an incremental array\n * Display 30 pages, from -15 to +15 of the current page\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number, currentPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n\n let arrayLength: number = 32;\n\n const startAtPage = currentPage <= 15 ? 0: currentPage - 15;\n const totalPage = Math.ceil(totalItems / itemsPerPage);\n\n\n\n const arrayWithPageNumber = Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => {\n\n const pageIndex:any = {\n display: startAtPage + x + 1,\n value: startAtPage + x + 1\n };\n\n if (x === arrayLength - 2) {\n pageIndex.display = '...';\n }\n if (x === arrayLength - 1) {\n pageIndex.display = totalPage;\n pageIndex.value = totalPage;\n }\n\n return pageIndex;\n });\n\n\n if (startAtPage) {\n arrayWithPageNumber.unshift(\n {\n display: 1,\n value: 1\n },\n {\n display: \"...\",\n value: 2\n }\n );\n }\n\n return arrayWithPageNumber;\n }\n}\n","import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectItem } from './select-items.dto';\nimport { CalllToAction } from './call-to-action.model';\n\n@Component({\n selector: 'wac-select',\n templateUrl: './select.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }]\n})\nexport class SelectComponent implements OnInit, ControlValueAccessor {\n @Input()\n items: SelectItem[];\n\n @Input()\n placeholder: string;\n\n @Input()\n label: string;\n\n @Input()\n maxWidthItems: string;\n\n @Input()\n search = false;\n\n @Input()\n type = 'default';\n\n @Input()\n callToAction: CalllToAction;\n\n @Input() maxWidth = '100%';\n\n @Input()\n disabled = false;\n\n @Output() selectValue = new EventEmitter<number>();\n\n @Output() clickOnCallToAction = new EventEmitter<any>();\n\n @ViewChild('search') searchElement: ElementRef;\n\n openCategories = false;\n searchValue = '';\n\n indexItemSelected: number = -1;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit(): void {\n this.indexItemSelected = this.items.findIndex(item => item.selected);\n }\n\n onClose() {\n this.openCategories = false;\n }\n\n customTB(item: SelectItem, index: number) {\n return `${item.id}-${index}`;\n }\n\n onSelectItem(id: number) {\n this.unselectAll();\n this.setIndexItemSelected(id);\n const itemSelected: SelectItem = this.getItemSelected();\n itemSelected.selected = true;\n this.selectValue.emit(this.indexItemSelected);\n this.onChange(itemSelected);\n }\n\n onClickCallToAction() {\n this.onClose();\n this.clickOnCallToAction.emit(this.callToAction.value);\n }\n\n private getItemSelected(): SelectItem {\n return this.items[this.indexItemSelected];\n }\n\n showCategories() {\n this.openCategories = true;\n setTimeout(() => { // this will make the execution after the above boolean has changed\n this.searchElement.nativeElement.focus();\n }, 0);\n }\n\n private unselectAll() {\n this.items.forEach(item => item.selected = false);\n }\n\n private setIndexItemSelected(id: number) {\n this.indexItemSelected = this.items.findIndex(item => item.id === id);\n }\n\n // ControlValueAccessor methods\n\n onChange: (selectItem: SelectItem) => void = () => {};\n onTouch: any = () => {}\n\n writeValue(selectItem: any){\n if (!selectItem) {\n return;\n }\n this.unselectAll();\n selectItem.selected = true;\n this.setIndexItemSelected(selectItem.id);\n }\n\n registerOnChange(fn: any){\n this.onChange = fn;\n }\n registerOnTouched(fn: any){\n this.onTouch = fn;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SelectItem } from '../../components/shared/select/select-items.dto';\n\n@Pipe({\n name: 'selectFilters'\n})\n\nexport class SelectFiltersPipe implements PipeTransform {\n transform(items: SelectItem[], filterName: string): any {\n return items.filter(item => {\n const regexp = new RegExp(filterName, 'i');\n return regexp.test(item.name);\n });\n }\n}","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[zIndexToggle]'\n})\nexport class ZindexToggleDirective implements OnInit, OnDestroy {\n isActived = false;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n @Input('zIndexToggle')\n set isActive(value: boolean) {\n this.isActived = value;\n this.switchToggle();\n }\n get isActive(): boolean {\n return this.isActived;\n }\n\n constructor(private currentElement: ElementRef, private renderer: Renderer2) {\n }\n\n ngOnInit(): void {\n }\n\n switchToggle() {\n if (this.isActived) {\n this.renderer.addClass(this.currentElement.nativeElement.parentElement.parentNode, 'zindexToggle');\n } else {\n this.renderer.removeClass(this.currentElement.nativeElement.parentElement.parentNode, 'zindexToggle');\n }\n }\n\n ngOnDestroy(): void {\n }\n}\n","import { NgModule } from '@angular/core';\nimport { WzImgManagerComponent } from './wz-img-manager.component';\nimport { ImgUploadComponent } from './components/img-upload/img-upload.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ImgTabsComponent } from './components/img-tabs/img-tabs.component';\nimport { CommonModule } from '@angular/common';\nimport { DragDropDirective } from './directives/drag-drop.directive';\nimport { PexelLibComponent } from './components/pexels-lib/pexels-lib.component';\nimport { FormsModule } from '@angular/forms';\nimport { ImgCardComponent } from './components/images-view/mosaic-view/img-card/img-card.component';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\nimport { NgScrollbarReachedModule } from 'ngx-scrollbar/reached-event';\nimport { NwbAllModule } from '@wizishop/ng-wizi-bulma';\nimport { UploadListComponent } from './components/upload-list/upload-list.component';\nimport { ImgEditorComponent } from './components/img-editor/img-editor.component';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CanvaBtnComponent } from './components/canva-btn/canva-btn.component';\nimport { ImgSelectionComponent } from './components/img-selection/img-selection.component';;\nimport { LoadingDirective } from './directives/loading.directive';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AutoHideDirective } from './directives/auto-hide.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CopyClipboardDirective } from './directives/copy-to-clipboard.directive';\nimport { DropdownComponent } from './components/shared/dropdown/dropdown.component';\nimport { EditorInfoSectionComponent } from './components/img-editor/info-section/info-section.component';\nimport { CropperComponent } from './components/img-editor/cropper/cropper.component';\nimport { ImagesViewComponent } from './components/images-view/images-view.component';\nimport { MosaicViewComponent } from './components/images-view/mosaic-view/mosaic-view.component';\nimport { TableViewComponent } from './components/images-view/table-view/table-view.component';\nimport { TableComponent } from './components/shared/table/table.component';\nimport { InputSearchComponent } from './components/shared/input-search/input-search.component';\nimport { PaginationComponent } from './components/shared/pagination/pagination.component';\nimport { PagniationArrayTotalPages } from './pipes/pagination/array-total-pages/array-pages.pipe';\nimport { PagniationText } from './pipes/pagination/text/custom-text.pipe';\nimport { PagniationIsLastPage } from './pipes/pagination/total-pages/is-last-page.pipe';\nimport { CheckBoxRow } from './directives/table/checkBoxRow.directive';\nimport { TableColumn } from './directives/table/column.directive';\nimport { TableColumnHeader } from './directives/table/columnHeader.directive';\nimport { TableRow } from './directives/table/raw.directive';\nimport { CheckboxComponent } from './components/shared/checkbox/checkbox.component';\nimport { ImageSrcPipe } from './pipes/images/img-src.pipe';\nimport { AbstractDebounceDirective } from './directives/abstract-debounce/abstract-debounce.directive';\nimport { DebounceKeyupDirective } from './directives/abstract-debounce/debounce-keyup.directive';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { AlertComponent } from './components/shared/alert/alert.component';\nimport { NumberToArray } from './pipes/number-to-array.pipe';\nimport { PageSelectorComponent } from './components/shared/pagination/page-selector/page-selector.component';\nimport { LargeNumberOfPagePipe } from './pipes/pagination/large-number-of-page/large-number-of-page.pipe';\nimport { SelectComponent } from './components/shared/select/select.component';\nimport { SelectFiltersPipe } from './pipes/select/select-filters.pipe';\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\nimport { ZindexToggleDirective } from './directives/zindex-toggle.directive';\n\nconst components = [\n WzImgManagerComponent,\n ImgTabsComponent,\n ImgUploadComponent,\n PexelLibComponent,\n ImgCardComponent,\n UploadListComponent,\n ImgEditorComponent,\n EditorInfoSectionComponent,\n CanvaBtnComponent,\n ImgSelectionComponent,\n LoaderComponent,\n DropdownComponent,\n CropperComponent,\n ImagesViewComponent,\n MosaicViewComponent,\n TableViewComponent,\n TableComponent,\n InputSearchComponent,\n PaginationComponent,\n CheckboxComponent,\n AlertComponent,\n PageSelectorComponent,\n SelectComponent\n];\n\nconst directives = [\n DragDropDirective,\n LoadingDirective,\n AutoHideDirective,\n CopyClipboardDirective,\n TableColumn,\n CheckBoxRow,\n TableColumnHeader,\n TableRow,\n AbstractDebounceDirective,\n DebounceKeyupDirective,\n ZindexToggleDirective\n];\n\nconst pipes = [\n PagniationArrayTotalPages,\n PagniationIsLastPage,\n PagniationText,\n ImageSrcPipe,\n NumberToArray,\n LargeNumberOfPagePipe,\n SelectFiltersPipe\n];\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n NgScrollbarModule,\n NgScrollbarReachedModule,\n NwbAllModule,\n ImageCropperModule,\n CdkTableModule,\n DragDropModule,\n TranslateModule,\n PerfectScrollbarModule\n ],\n providers: [],\n exports: [\n WzImgManagerComponent]\n})\nexport class WzImgManagerModule { }\n","import { CanvaCreateDesign } from \"./canva-create-design.dto\";\n\nexport class CanvaButtonApi {\n createDesign: (\n opts: {\n design: CanvaCreateDesign,\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n ) => void;\n editDesign: (opts: {\n opts: {\n design: {\n id: any\n },\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n }) => void;\n};","export class ImgApiDto {\n shop_token: string;\n image_manager_route = '';\n pexels_token: string;\n pexels_route = '';\n shop_category: string;\n canva_token: string;\n canva_url = '';\n assets_route: string = 'assets/img-manager/';\n}\n","export class ImgCDNConfigDTO {\n url_raw_image = '';\n url_100_image = '';\n url_200_image = '';\n url_400_image = '';\n url_800_image = '';\n}"]}
|