@wizishop/img-manager 14.0.11 → 14.0.12

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.
@@ -1 +1 @@
1
- {"ImgManager.CanvaBtn.bigSquare":"Big","ImgManager.CanvaBtn.createImg":"Create an image with","ImgManager.CanvaBtn.createImg.title":"Create an image with Canva","ImgManager.CanvaBtn.errorRenameCanvaImg":"Error: the title of the image from Canva could not be retrieved.","ImgManager.CanvaBtn.errorUploadCanvaImg":"Error: the image from Canva could not be uploaded.","ImgManager.CanvaBtn.info":"Select a format","ImgManager.CanvaBtn.mediumSquare":"Medium","ImgManager.CanvaBtn.publish":"Import","ImgManager.CanvaBtn.recommanded":"Recommended","ImgManager.CanvaBtn.smallSquare":"Small","ImgManager.CanvaBtn.successImport":"Your image has been imported.","ImgManager.CanvaBtn.uploadingImg":"Image loading.","ImgManager.ImgCard.confirmDeleteImg":"Are you sure you want to delete this image?","ImgManager.ImgCard.del":"Delete","ImgManager.ImgCard.download":"Download","ImgManager.ImgCard.edit":"Edit","ImgManager.ImgCard.select":"Select","ImgManager.ImgCard.validImgSmall":"Select","ImgManager.ImgEditor.config.AntiSchedule":"Anti-clockwise","ImgManager.ImgEditor.config.dezoom":"Zoom less","ImgManager.ImgEditor.config.flipHoriz":"Turn horizontally","ImgManager.ImgEditor.config.flipVert":"Vertical Reversal","ImgManager.ImgEditor.config.free":"Free size","ImgManager.ImgEditor.config.landscape":"Landscape","ImgManager.ImgEditor.config.origin":"Original format","ImgManager.ImgEditor.config.Portrait":"Portrait","ImgManager.ImgEditor.config.schedule":"Clockwise","ImgManager.ImgEditor.config.square":"Square","ImgManager.ImgEditor.config.zoom":"Zoom more","ImgManager.ImgEditor.copytoClipBoard":"Copied!","ImgManager.ImgEditor.crop":"Crop","ImgManager.ImgEditor.display":"Zoom","ImgManager.ImgEditor.msgFailLoad":"Error: please start again.","ImgManager.ImgEditor.msgFailSave":"Error: The image could not be saved.<br/>Please try again.","ImgManager.ImgEditor.nameEx":"Ex: Black T-shirt","ImgManager.ImgEditor.NameInfo":"The name of the image is used to define the alt attribute.","ImgManager.ImgEditor.restart":"Refresh","ImgManager.ImgEditor.rotation":"Rotate","ImgManager.ImgEditor.saveBtn":"Save and close","ImgManager.ImgEditor.Valid":"Confirm","ImgManager.ImgEditor.ValidtToolTip":"Click here to crop the image","ImgManager.ImgLib.cancel":"Cancel","ImgManager.ImgLib.confirm":"Confirm","ImgManager.ImgLib.confirmSupQuestion":"{{nbImage}} image to delete: Are you sure?","ImgManager.ImgLib.confirmSupQuestions":"{{nbImage}} images to delete: Are you sure?","ImgManager.ImgLib.delMlt":"Delete","ImgManager.ImgLib.errorGetAllImg":"Error: Your images could not be recovered.","ImgManager.ImgLib.errorGetCanvaImg":"Error: the image from Canva could not be retrieved.","ImgManager.ImgLib.errorGetTotalImg":"Error: The total number of images has not been recovered.","ImgManager.ImgLib.imgNameSaved":"Image name saved.","ImgManager.ImgLib.lastImgs":"Your last images","ImgManager.ImgLib.nbImg":"Number of images","ImgManager.ImgLib.noImgFound":"No images found.<br/>Display free images.","ImgManager.ImgLib.savingImgName":"Backup in progress...","ImgManager.ImgLib.select":"Select","ImgManager.ImgList.download":"Download","ImgManager.ImgList.edit":"Edit","ImgManager.ImgList.errorAlreadyUsed":"This image can not be deleted as it is being used.","ImgManager.ImgList.errorRemoveImg":"Error: Some images could not be deleted.","ImgManager.ImgList.errorRenameImg":"Error: Some images could not be renamed.","ImgManager.ImgList.remove":"Delete","ImgManager.ImgList.titleImgName":"Image name","ImgManager.ImgList.titleResolution":"Resolution","ImgManager.ImgSelection.deleteImg":"Delete","ImgManager.ImgSelection.tooltips":"Use the Drag & Drop to change the order of the images","ImgManager.ImgSelection.unselect":"Drag the image here to remove it from the selection","ImgManager.ImgUpload.dropImg":"Drag and drop your image here","ImgManager.ImgUpload.errorNotImg":"Error: Only images can be imported.","ImgManager.ImgUpload.errorUploadingImg":"Error: An image could not be imported.","ImgManager.ImgUpload.loading":"Loading...","ImgManager.ImgUpload.or":"or","ImgManager.ImgUpload.selectImg":"Select the images to be imported","ImgManager.PexelLib.errorRetrievePhotos":"Error: The Pexel images have not been recovered.","ImgManager.PexelLib.errorUploadPhoto":"Error: the image could not be imported","ImgManager.PexelLib.import":"Import","ImgManager.PexelLib.importation":"Import","ImgManager.PexelLib.landscape":"Landscape","ImgManager.PexelLib.nbImgFound":"Number if images found","ImgManager.PexelLib.noResult":"No image found.","ImgManager.PexelLib.original":"Original.","ImgManager.PexelLib.portrait":"Portrait","ImgManager.PexelLib.successImport":"Your image has been imported into the image manager","ImgManager.PexelLib.untitled":"No title","ImgManager.PexelLib.uploadingImg":"Loading the current image.","ImgManager.SearchBar.placeholder":"Name of the image to search","ImgManager.snackBar.action":"View image","ImgManager.Tabs.addImg":"Add an image","ImgManager.Tabs.Editor":"Image editor","ImgManager.Tabs.freeImgLib":"Free image library","ImgManager.Tabs.imgLib":"Your images","ImgManager.UploadList.imgSuccessImport":"images successfully imported and optimized for SEO","ImgManager.UploadList.imgSuccessImportOne":"imported image optimized for SEO","ImgManager.UploadList.properties.imgName":"Image name","ImgManager.UploadList.properties.imgSize":"Size of original image","ImgManager.UploadList.properties.imgURL":"Image URL","ImgManager.UploadList.properties.imgWeight":"Size of original file","ImgManager.UploadList.seo.cdn":"Addition in the CDN.","ImgManager.UploadList.seo.cdnTooltips":"The images you add to your website are sent directly to our CDN (Content Delivery Network). This allows the visuals to be loaded from the servers closest to the user.","ImgManager.UploadList.seo.lazyloading":"Automatic lazyloading.","ImgManager.UploadList.seo.lazyloadingTooltips":"With lazyloading, the content is loaded as the user scrolls down the page. This allows to load only the visible content.","ImgManager.UploadList.seo.rezise":"Resizing and compression.","ImgManager.UploadList.seo.reziseTooltips":"When importing your image on WiziShop, more than 22 formats are created to adapt to different screen sizes. This optimization allows us to send a different size of visual and compressed according to the support of the Internet user.","ImgManager.UploadList.seo.title":"SEO Optimizations","ImgManager.UploadList.seo.webp":"Webp generation","ImgManager.UploadList.seo.webpTooltips":"As soon as you add an image to your site, it will be accessible in the standard format, but it will also be automatically converted to the WebP format for Google. This format allows you to compress, as much as possible, the images present on your store to load them very quickly.","ImgManager.webElement.infoBulle":"The image manager allows you to <strong>download</strong> images, <strong> select them </strong> and apply some <strong>effects</strong> (crop, rotations...).<br/><br/>We recommend using <strong>several photos</strong> of the product (3 or 4) in various positions or environments.","ImgManager.webElement.OpenBtn":"Add photos","ImgManager.webElement.photosTitle":"Photos","no":"no","PaginationComponent.on":"{{low}}-{{high}} on {{total}}","PaginationComponent.page":"Go to page","wac.datatable.noresult":"There are no results for this search","yes":"yes"}
1
+ {"ImgManager.CanvaBtn.bigSquare":"Big","ImgManager.CanvaBtn.createImg":"Create an image with","ImgManager.CanvaBtn.createImg.title":"Create an image with Canva","ImgManager.CanvaBtn.errorRenameCanvaImg":"Error: the title of the image from Canva could not be retrieved.","ImgManager.CanvaBtn.errorUploadCanvaImg":"Error: the image from Canva could not be uploaded.","ImgManager.CanvaBtn.info":"Select a format","ImgManager.CanvaBtn.mediumSquare":"Medium","ImgManager.CanvaBtn.publish":"Import","ImgManager.CanvaBtn.recommanded":"Recommended","ImgManager.CanvaBtn.smallSquare":"Small","ImgManager.CanvaBtn.successImport":"Your image has been imported.","ImgManager.CanvaBtn.uploadingImg":"Image loading.","ImgManager.ImgCard.confirmDeleteImg":"Are you sure you want to delete this image?","ImgManager.ImgCard.del":"Delete","ImgManager.ImgCard.download":"Download","ImgManager.ImgCard.edit":"Edit","ImgManager.ImgCard.select":"Select","ImgManager.ImgCard.validImgSmall":"Select","ImgManager.ImgEditor.config.AntiSchedule":"Anti-clockwise","ImgManager.ImgEditor.config.dezoom":"Zoom less","ImgManager.ImgEditor.config.flipHoriz":"Turn horizontally","ImgManager.ImgEditor.config.flipVert":"Vertical Reversal","ImgManager.ImgEditor.config.free":"Free size","ImgManager.ImgEditor.config.landscape":"Landscape","ImgManager.ImgEditor.config.origin":"Original format","ImgManager.ImgEditor.config.Portrait":"Portrait","ImgManager.ImgEditor.config.schedule":"Clockwise","ImgManager.ImgEditor.config.square":"Square","ImgManager.ImgEditor.config.zoom":"Zoom more","ImgManager.ImgEditor.copytoClipBoard":"Copied!","ImgManager.ImgEditor.crop":"Crop","ImgManager.ImgEditor.display":"Zoom","ImgManager.ImgEditor.msgFailLoad":"Error: please start again.","ImgManager.ImgEditor.msgFailSave":"Error: The image could not be saved.<br/>Please try again.","ImgManager.ImgEditor.nameEx":"Ex: Black T-shirt","ImgManager.ImgEditor.NameInfo":"The name of the image is used to define the alt attribute.","ImgManager.ImgEditor.restart":"Refresh","ImgManager.ImgEditor.rotation":"Rotate","ImgManager.ImgEditor.saveBtn":"Save and close","ImgManager.ImgEditor.Valid":"Confirm","ImgManager.ImgEditor.ValidtToolTip":"Click here to crop the image","ImgManager.ImgLib.cancel":"Cancel","ImgManager.ImgLib.confirm":"Confirm","ImgManager.ImgLib.confirmSupQuestion":"{{nbImage}} image to delete: Are you sure?","ImgManager.ImgLib.confirmSupQuestions":"{{nbImage}} images to delete: Are you sure?","ImgManager.ImgLib.delMlt":"Delete","ImgManager.ImgLib.errorGetAllImg":"Error: Your images could not be recovered.","ImgManager.ImgLib.errorGetCanvaImg":"Error: the image from Canva could not be retrieved.","ImgManager.ImgLib.errorGetTotalImg":"Error: The total number of images has not been recovered.","ImgManager.ImgLib.imgNameSaved":"Image name saved.","ImgManager.ImgLib.lastImgs":"Your last images","ImgManager.ImgLib.nbImg":"Number of images","ImgManager.ImgLib.noImgFound":"No images found.<br/>Display free images.","ImgManager.ImgLib.savingImgName":"Backup in progress...","ImgManager.ImgLib.select":"Select","ImgManager.ImgList.download":"Download","ImgManager.ImgList.edit":"Edit","ImgManager.ImgList.errorAlreadyUsed":"This image can not be deleted as it is being used.","ImgManager.ImgList.errorRemoveImg":"Error: Some images could not be deleted.","ImgManager.ImgList.errorRenameImg":"Error: Some images could not be renamed.","ImgManager.ImgList.remove":"Delete","ImgManager.ImgList.titleImgName":"Image name","ImgManager.ImgList.titleResolution":"Resolution","ImgManager.ImgSelection.deleteImg":"Delete","ImgManager.ImgSelection.tooltips":"Use the Drag & Drop to change the order of the images","ImgManager.ImgSelection.unselect":"Drag the image here to remove it from the selection","ImgManager.ImgUpload.dropImg":"Drag and drop your image here","ImgManager.ImgUpload.ErrorImgSize":"The image: {{fileName}} is too big ({{fileSize}}ko). Maximum size accepted: {{maxFileSize}}ko","ImgManager.ImgUpload.errorNotImg":"Error: Only images can be imported.","ImgManager.ImgUpload.errorUploadingImg":"Error: An image could not be imported.","ImgManager.ImgUpload.loading":"Loading...","ImgManager.ImgUpload.or":"or","ImgManager.ImgUpload.selectImg":"Select the images to be imported","ImgManager.PexelLib.errorRetrievePhotos":"Error: The Pexel images have not been recovered.","ImgManager.PexelLib.errorUploadPhoto":"Error: the image could not be imported","ImgManager.PexelLib.import":"Import","ImgManager.PexelLib.importation":"Import","ImgManager.PexelLib.landscape":"Landscape","ImgManager.PexelLib.nbImgFound":"Number if images found","ImgManager.PexelLib.noResult":"No image found.","ImgManager.PexelLib.original":"Original.","ImgManager.PexelLib.portrait":"Portrait","ImgManager.PexelLib.successImport":"Your image has been imported into the image manager","ImgManager.PexelLib.untitled":"No title","ImgManager.PexelLib.uploadingImg":"Loading the current image.","ImgManager.SearchBar.placeholder":"Name of the image to search","ImgManager.snackBar.action":"View image","ImgManager.Tabs.addImg":"Add an image","ImgManager.Tabs.Editor":"Image editor","ImgManager.Tabs.freeImgLib":"Free image library","ImgManager.Tabs.imgLib":"Your images","ImgManager.UploadList.imgSuccessImport":"images successfully imported and optimized for SEO","ImgManager.UploadList.imgSuccessImportOne":"imported image optimized for SEO","ImgManager.UploadList.properties.imgName":"Image name","ImgManager.UploadList.properties.imgSize":"Size of original image","ImgManager.UploadList.properties.imgURL":"Image URL","ImgManager.UploadList.properties.imgWeight":"Size of original file","ImgManager.UploadList.seo.cdn":"Addition in the CDN.","ImgManager.UploadList.seo.cdnTooltips":"The images you add to your website are sent directly to our CDN (Content Delivery Network). This allows the visuals to be loaded from the servers closest to the user.","ImgManager.UploadList.seo.lazyloading":"Automatic lazyloading.","ImgManager.UploadList.seo.lazyloadingTooltips":"With lazyloading, the content is loaded as the user scrolls down the page. This allows to load only the visible content.","ImgManager.UploadList.seo.rezise":"Resizing and compression.","ImgManager.UploadList.seo.reziseTooltips":"When importing your image on WiziShop, more than 22 formats are created to adapt to different screen sizes. This optimization allows us to send a different size of visual and compressed according to the support of the Internet user.","ImgManager.UploadList.seo.title":"SEO Optimizations","ImgManager.UploadList.seo.webp":"Webp generation","ImgManager.UploadList.seo.webpTooltips":"As soon as you add an image to your site, it will be accessible in the standard format, but it will also be automatically converted to the WebP format for Google. This format allows you to compress, as much as possible, the images present on your store to load them very quickly.","ImgManager.webElement.infoBulle":"The image manager allows you to <strong>download</strong> images, <strong> select them </strong> and apply some <strong>effects</strong> (crop, rotations...).<br/><br/>We recommend using <strong>several photos</strong> of the product (3 or 4) in various positions or environments.","ImgManager.webElement.OpenBtn":"Add photos","ImgManager.webElement.photosTitle":"Photos","no":"no","PaginationComponent.on":"{{low}}-{{high}} on {{total}}","PaginationComponent.page":"Go to page","wac.datatable.noresult":"There are no results for this search","yes":"yes"}
@@ -1 +1 @@
1
- {"ImgManager.CanvaBtn.bigSquare":"Grand","ImgManager.CanvaBtn.createImg":"Créer une image avec","ImgManager.CanvaBtn.createImg.title":"Créer une image avec Canva","ImgManager.CanvaBtn.errorRenameCanvaImg":"Erreur : le titre de l'image provenant de Canva n'a pas pu être récupéré.","ImgManager.CanvaBtn.errorUploadCanvaImg":"Erreur : l'image provenant de Canva n'a pas pu être téléchargée.","ImgManager.CanvaBtn.info":"Sélectionner un format","ImgManager.CanvaBtn.mediumSquare":"Moyen","ImgManager.CanvaBtn.publish":"Importer","ImgManager.CanvaBtn.recommanded":"Recommandé","ImgManager.CanvaBtn.smallSquare":"Petit","ImgManager.CanvaBtn.successImport":"Votre image a bien été importée.","ImgManager.CanvaBtn.uploadingImg":"Chargement de l'image en cours.","ImgManager.ImgCard.confirmDeleteImg":"Êtes-vous sûr(e) de supprimer cette image ?","ImgManager.ImgCard.del":"Supprimer","ImgManager.ImgCard.download":"Télécharger","ImgManager.ImgCard.edit":"Éditer","ImgManager.ImgCard.select":"Sélectionner","ImgManager.ImgCard.validImgSmall":"Sélectionner","ImgManager.ImgEditor.config.AntiSchedule":"Sens anti-horaire","ImgManager.ImgEditor.config.dezoom":"Zoomer moins","ImgManager.ImgEditor.config.flipHoriz":"Retournement Horizontal","ImgManager.ImgEditor.config.flipVert":"Retournement Vertical","ImgManager.ImgEditor.config.free":"Format libre","ImgManager.ImgEditor.config.landscape":"Paysage","ImgManager.ImgEditor.config.origin":"Format d'origine","ImgManager.ImgEditor.config.Portrait":"Portrait","ImgManager.ImgEditor.config.schedule":"Sens horaire","ImgManager.ImgEditor.config.square":"Carré","ImgManager.ImgEditor.config.zoom":"Zoomer plus","ImgManager.ImgEditor.copytoClipBoard":"Copié !","ImgManager.ImgEditor.crop":"Recadrer","ImgManager.ImgEditor.display":"Affichage","ImgManager.ImgEditor.msgFailLoad":"Erreur : Veuillez recommencer.","ImgManager.ImgEditor.msgFailSave":"Erreur : L'image n'a pu être sauvegardée.<br/>Veuillez recommencer.","ImgManager.ImgEditor.nameEx":"Par ex: T-shirt noir","ImgManager.ImgEditor.NameInfo":"Le nom de l'image est utilisé pour définir l'attribut alt.","ImgManager.ImgEditor.restart":"Réinitialiser","ImgManager.ImgEditor.rotation":"Rotation","ImgManager.ImgEditor.saveBtn":"Enregistrer et Fermer","ImgManager.ImgEditor.Valid":"Valider","ImgManager.ImgEditor.ValidtToolTip":"Cliquez ici pour rogner l'image","ImgManager.ImgLib.cancel":"Annuler","ImgManager.ImgLib.confirm":"Confirmer","ImgManager.ImgLib.confirmSupQuestion":"{{nbImage}} image à supprimer : Confirmez-vous ce choix ?","ImgManager.ImgLib.confirmSupQuestions":"{{nbImage}} images à supprimer : Confirmez-vous ce choix ?","ImgManager.ImgLib.delMlt":"Supprimer","ImgManager.ImgLib.errorGetAllImg":"Erreur : Vos images n'ont pas pu être récupérées.","ImgManager.ImgLib.errorGetCanvaImg":"Erreur : Votre image Canva n'a pas pu être récupérée.","ImgManager.ImgLib.errorGetTotalImg":"Erreur : Le nombre total d'images n'a pas été récupéré.","ImgManager.ImgLib.imgNameSaved":"Nom de l'image sauvegardé.","ImgManager.ImgLib.lastImgs":"Vos dernières images","ImgManager.ImgLib.nbImg":"Nombre d'images","ImgManager.ImgLib.noImgFound":"Aucune image trouvée.<br/>Affichage d'images gratuites.","ImgManager.ImgLib.savingImgName":"Sauvegarde en cours...","ImgManager.ImgLib.select":"Sélectionner","ImgManager.ImgList.download":"Télécharger","ImgManager.ImgList.edit":"Éditer","ImgManager.ImgList.errorAlreadyUsed":"Cette image ne peut pas être supprimée, car elle est déjà utilisée.","ImgManager.ImgList.errorRemoveImg":"Erreur : Certaines images n'ont pas pu être supprimées.","ImgManager.ImgList.errorRenameImg":"Erreur : Certaines images n'ont pas pu être renommées.","ImgManager.ImgList.remove":"Supprimer","ImgManager.ImgList.titleImgName":"Nom de l'image","ImgManager.ImgList.titleResolution":"Résolution","ImgManager.ImgSelection.deleteImg":"Retirer","ImgManager.ImgSelection.tooltips":"Utilisez le Drag & Drop pour changer l'ordre de l'image","ImgManager.ImgSelection.unselect":"Glissez l'image ici pour la retirer de la sélection","ImgManager.ImgUpload.dropImg":"Glisser-déposer votre image ici","ImgManager.ImgUpload.errorNotImg":"Erreur : Seul les images peuvent être importées.","ImgManager.ImgUpload.errorUploadingImg":"Erreur : Une image n'a pas pu être importée.","ImgManager.ImgUpload.loading":"Chargement en cours.","ImgManager.ImgUpload.or":"ou","ImgManager.ImgUpload.selectImg":"Choisir les images à importer","ImgManager.PexelLib.errorRetrievePhotos":"Erreur : Les images Pexel n'ont pas été récupérées.","ImgManager.PexelLib.errorUploadPhoto":"Erreur : L'image n'a pas pu être importée.","ImgManager.PexelLib.import":"Importer","ImgManager.PexelLib.importation":"Importation","ImgManager.PexelLib.landscape":"Paysage","ImgManager.PexelLib.nbImgFound":"Nombre d'images gratuites trouvées","ImgManager.PexelLib.noResult":"Aucune image trouvée.","ImgManager.PexelLib.original":"Original","ImgManager.PexelLib.portrait":"Portrait","ImgManager.PexelLib.successImport":"Votre image a été importée dans le gestionnaire d'images","ImgManager.PexelLib.untitled":"Sans titre","ImgManager.PexelLib.uploadingImg":"Chargement de l'image en cours.","ImgManager.SearchBar.placeholder":"Nom de l'image à rechercher","ImgManager.snackBar.action":"Voir l'image","ImgManager.Tabs.addImg":"Ajouter une image","ImgManager.Tabs.Editor":"Editeur d'image","ImgManager.Tabs.freeImgLib":"Bibliothèque d’images gratuites","ImgManager.Tabs.imgLib":"Vos images","ImgManager.UploadList.imgSuccessImport":"images importées et optimisées pour le SEO","ImgManager.UploadList.imgSuccessImportOne":"image importée et optimisée pour le SEO","ImgManager.UploadList.properties.imgName":"Nom de l'image","ImgManager.UploadList.properties.imgSize":"Taille de l'image originale","ImgManager.UploadList.properties.imgURL":"Url de l'image","ImgManager.UploadList.properties.imgWeight":"Taille du fichier original","ImgManager.UploadList.seo.cdn":"Ajout dans le CDN.","ImgManager.UploadList.seo.cdnTooltips":"Les images que vous ajoutez sur votre site marchand sont envoyées directement vers notre CDN (Content Delivery Network). Cela permet de charger les visuels depuis les serveurs les plus proches de l'utilisateur.","ImgManager.UploadList.seo.lazyloading":"Lazyloading automatique.","ImgManager.UploadList.seo.lazyloadingTooltips":"Avec le lazyloading, le contenu se charge au fur et à mesure que l’internaute descend (scroll) dans la page. Ceci permet de charger uniquement le contenu visible.","ImgManager.UploadList.seo.rezise":"Redimensionnement et compression.","ImgManager.UploadList.seo.reziseTooltips":"Lors de l’import de votre image sur WiziShop, ce sont plus de 22 formats qui sont créés pour s’adapter aux différentes tailles d’écran. Cette optimisation nous permet d’envoyer une taille de visuel différente et compressée selon le support de l’internaute.","ImgManager.UploadList.seo.title":"Optimisations SEO","ImgManager.UploadList.seo.webp":"Génération des Webp.","ImgManager.UploadList.seo.webpTooltips":"Dès lors que vous ajoutez une image sur votre site, elle va être accessible au format standard, mais aussi se convertir automatiquement au format WebP pour Google. Ce format permet de compresser, au maximum, les images présentes sur votre boutique pour les charger très rapidement.","ImgManager.webElement.infoBulle":"Le gestionnaire d'image vous permet de <strong>télécharger</strong> des images, les <strong>sélectionner </strong>et appliquer certains <strong>effets</strong>(recadrage, rotations...).\n<br/><br/>\nIl est conseillé d'avoir <strong>plusieurs photos</strong> du produit (3 ou 4) dans divers positions ou situations.","ImgManager.webElement.OpenBtn":"Ajouter des photos","ImgManager.webElement.photosTitle":"Photos","no":"non","PaginationComponent.on":"{{low}}-{{high}} sur {{total}}","PaginationComponent.page":"Aller à la page","wac.datatable.noresult":"Il n'y a aucun résultat pour cette recherche","yes":"oui"}
1
+ {"ImgManager.CanvaBtn.bigSquare":"Grand","ImgManager.CanvaBtn.createImg":"Créer une image avec","ImgManager.CanvaBtn.createImg.title":"Créer une image avec Canva","ImgManager.CanvaBtn.errorRenameCanvaImg":"Erreur : le titre de l'image provenant de Canva n'a pas pu être récupéré.","ImgManager.CanvaBtn.errorUploadCanvaImg":"Erreur : l'image provenant de Canva n'a pas pu être téléchargée.","ImgManager.CanvaBtn.info":"Sélectionner un format","ImgManager.CanvaBtn.mediumSquare":"Moyen","ImgManager.CanvaBtn.publish":"Importer","ImgManager.CanvaBtn.recommanded":"Recommandé","ImgManager.CanvaBtn.smallSquare":"Petit","ImgManager.CanvaBtn.successImport":"Votre image a bien été importée.","ImgManager.CanvaBtn.uploadingImg":"Chargement de l'image en cours.","ImgManager.ImgCard.confirmDeleteImg":"Êtes-vous sûr(e) de supprimer cette image ?","ImgManager.ImgCard.del":"Supprimer","ImgManager.ImgCard.download":"Télécharger","ImgManager.ImgCard.edit":"Éditer","ImgManager.ImgCard.select":"Sélectionner","ImgManager.ImgCard.validImgSmall":"Sélectionner","ImgManager.ImgEditor.config.AntiSchedule":"Sens anti-horaire","ImgManager.ImgEditor.config.dezoom":"Zoomer moins","ImgManager.ImgEditor.config.flipHoriz":"Retournement Horizontal","ImgManager.ImgEditor.config.flipVert":"Retournement Vertical","ImgManager.ImgEditor.config.free":"Format libre","ImgManager.ImgEditor.config.landscape":"Paysage","ImgManager.ImgEditor.config.origin":"Format d'origine","ImgManager.ImgEditor.config.Portrait":"Portrait","ImgManager.ImgEditor.config.schedule":"Sens horaire","ImgManager.ImgEditor.config.square":"Carré","ImgManager.ImgEditor.config.zoom":"Zoomer plus","ImgManager.ImgEditor.copytoClipBoard":"Copié !","ImgManager.ImgEditor.crop":"Recadrer","ImgManager.ImgEditor.display":"Affichage","ImgManager.ImgEditor.msgFailLoad":"Erreur : Veuillez recommencer.","ImgManager.ImgEditor.msgFailSave":"Erreur : L'image n'a pu être sauvegardée.<br/>Veuillez recommencer.","ImgManager.ImgEditor.nameEx":"Par ex: T-shirt noir","ImgManager.ImgEditor.NameInfo":"Le nom de l'image est utilisé pour définir l'attribut alt.","ImgManager.ImgEditor.restart":"Réinitialiser","ImgManager.ImgEditor.rotation":"Rotation","ImgManager.ImgEditor.saveBtn":"Enregistrer et Fermer","ImgManager.ImgEditor.Valid":"Valider","ImgManager.ImgEditor.ValidtToolTip":"Cliquez ici pour rogner l'image","ImgManager.ImgLib.cancel":"Annuler","ImgManager.ImgLib.confirm":"Confirmer","ImgManager.ImgLib.confirmSupQuestion":"{{nbImage}} image à supprimer : Confirmez-vous ce choix ?","ImgManager.ImgLib.confirmSupQuestions":"{{nbImage}} images à supprimer : Confirmez-vous ce choix ?","ImgManager.ImgLib.delMlt":"Supprimer","ImgManager.ImgLib.errorGetAllImg":"Erreur : Vos images n'ont pas pu être récupérées.","ImgManager.ImgLib.errorGetCanvaImg":"Erreur : Votre image Canva n'a pas pu être récupérée.","ImgManager.ImgLib.errorGetTotalImg":"Erreur : Le nombre total d'images n'a pas été récupéré.","ImgManager.ImgLib.imgNameSaved":"Nom de l'image sauvegardé.","ImgManager.ImgLib.lastImgs":"Vos dernières images","ImgManager.ImgLib.nbImg":"Nombre d'images","ImgManager.ImgLib.noImgFound":"Aucune image trouvée.<br/>Affichage d'images gratuites.","ImgManager.ImgLib.savingImgName":"Sauvegarde en cours...","ImgManager.ImgLib.select":"Sélectionner","ImgManager.ImgList.download":"Télécharger","ImgManager.ImgList.edit":"Éditer","ImgManager.ImgList.errorAlreadyUsed":"Cette image ne peut pas être supprimée, car elle est déjà utilisée.","ImgManager.ImgList.errorRemoveImg":"Erreur : Certaines images n'ont pas pu être supprimées.","ImgManager.ImgList.errorRenameImg":"Erreur : Certaines images n'ont pas pu être renommées.","ImgManager.ImgList.remove":"Supprimer","ImgManager.ImgList.titleImgName":"Nom de l'image","ImgManager.ImgList.titleResolution":"Résolution","ImgManager.ImgSelection.deleteImg":"Retirer","ImgManager.ImgSelection.tooltips":"Utilisez le Drag & Drop pour changer l'ordre de l'image","ImgManager.ImgSelection.unselect":"Glissez l'image ici pour la retirer de la sélection","ImgManager.ImgUpload.dropImg":"Glisser-déposer votre image ici","ImgManager.ImgUpload.ErrorImgSize":"L'image : {{fileName}} est trop grande ({{fileSize}}ko). Taille maximum acceptée: {{maxFileSize}}ko","ImgManager.ImgUpload.errorNotImg":"Erreur : Seul les images peuvent être importées.","ImgManager.ImgUpload.errorUploadingImg":"Erreur : Une image n'a pas pu être importée.","ImgManager.ImgUpload.loading":"Chargement en cours.","ImgManager.ImgUpload.or":"ou","ImgManager.ImgUpload.selectImg":"Choisir les images à importer","ImgManager.PexelLib.errorRetrievePhotos":"Erreur : Les images Pexel n'ont pas été récupérées.","ImgManager.PexelLib.errorUploadPhoto":"Erreur : L'image n'a pas pu être importée.","ImgManager.PexelLib.import":"Importer","ImgManager.PexelLib.importation":"Importation","ImgManager.PexelLib.landscape":"Paysage","ImgManager.PexelLib.nbImgFound":"Nombre d'images gratuites trouvées","ImgManager.PexelLib.noResult":"Aucune image trouvée.","ImgManager.PexelLib.original":"Original","ImgManager.PexelLib.portrait":"Portrait","ImgManager.PexelLib.successImport":"Votre image a été importée dans le gestionnaire d'images","ImgManager.PexelLib.untitled":"Sans titre","ImgManager.PexelLib.uploadingImg":"Chargement de l'image en cours.","ImgManager.SearchBar.placeholder":"Nom de l'image à rechercher","ImgManager.snackBar.action":"Voir l'image","ImgManager.Tabs.addImg":"Ajouter une image","ImgManager.Tabs.Editor":"Editeur d'image","ImgManager.Tabs.freeImgLib":"Bibliothèque d’images gratuites","ImgManager.Tabs.imgLib":"Vos images","ImgManager.UploadList.imgSuccessImport":"images importées et optimisées pour le SEO","ImgManager.UploadList.imgSuccessImportOne":"image importée et optimisée pour le SEO","ImgManager.UploadList.properties.imgName":"Nom de l'image","ImgManager.UploadList.properties.imgSize":"Taille de l'image originale","ImgManager.UploadList.properties.imgURL":"Url de l'image","ImgManager.UploadList.properties.imgWeight":"Taille du fichier original","ImgManager.UploadList.seo.cdn":"Ajout dans le CDN.","ImgManager.UploadList.seo.cdnTooltips":"Les images que vous ajoutez sur votre site marchand sont envoyées directement vers notre CDN (Content Delivery Network). Cela permet de charger les visuels depuis les serveurs les plus proches de l'utilisateur.","ImgManager.UploadList.seo.lazyloading":"Lazyloading automatique.","ImgManager.UploadList.seo.lazyloadingTooltips":"Avec le lazyloading, le contenu se charge au fur et à mesure que l’internaute descend (scroll) dans la page. Ceci permet de charger uniquement le contenu visible.","ImgManager.UploadList.seo.rezise":"Redimensionnement et compression.","ImgManager.UploadList.seo.reziseTooltips":"Lors de l’import de votre image sur WiziShop, ce sont plus de 22 formats qui sont créés pour s’adapter aux différentes tailles d’écran. Cette optimisation nous permet d’envoyer une taille de visuel différente et compressée selon le support de l’internaute.","ImgManager.UploadList.seo.title":"Optimisations SEO","ImgManager.UploadList.seo.webp":"Génération des Webp.","ImgManager.UploadList.seo.webpTooltips":"Dès lors que vous ajoutez une image sur votre site, elle va être accessible au format standard, mais aussi se convertir automatiquement au format WebP pour Google. Ce format permet de compresser, au maximum, les images présentes sur votre boutique pour les charger très rapidement.","ImgManager.webElement.infoBulle":"Le gestionnaire d'image vous permet de <strong>télécharger</strong> des images, les <strong>sélectionner </strong>et appliquer certains <strong>effets</strong>(recadrage, rotations...).\n<br/><br/>\nIl est conseillé d'avoir <strong>plusieurs photos</strong> du produit (3 ou 4) dans divers positions ou situations.","ImgManager.webElement.OpenBtn":"Ajouter des photos","ImgManager.webElement.photosTitle":"Photos","no":"non","PaginationComponent.on":"{{low}}-{{high}} sur {{total}}","PaginationComponent.page":"Aller à la page","wac.datatable.noresult":"Il n'y a aucun résultat pour cette recherche","yes":"oui"}
@@ -4,19 +4,21 @@ import { forkJoin } from 'rxjs';
4
4
  import { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';
5
5
  import { ImgManagerConfigService } from "../../services/config/external-config.service";
6
6
  import { AlertService } from '../../services/alert.service';
7
+ import { TranslateService } from '@ngx-translate/core';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "../../services/img-manager.service";
9
10
  import * as i2 from "../../services/alert.service";
10
11
  import * as i3 from "../../services/config/external-config.service";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "../loader/loader.component";
13
- import * as i6 from "../../directives/drag-drop.directive";
14
- import * as i7 from "@ngx-translate/core";
12
+ import * as i4 from "@ngx-translate/core";
13
+ import * as i5 from "@angular/common";
14
+ import * as i6 from "../loader/loader.component";
15
+ import * as i7 from "../../directives/drag-drop.directive";
15
16
  export class ImgUploadComponent {
16
- constructor(imgManager, alertService, externalConfigService) {
17
+ constructor(imgManager, alertService, externalConfigService, translateService) {
17
18
  this.imgManager = imgManager;
18
19
  this.alertService = alertService;
19
20
  this.externalConfigService = externalConfigService;
21
+ this.translateService = translateService;
20
22
  this.files = [];
21
23
  this.isLoading = false;
22
24
  this.imgUploaded = new EventEmitter();
@@ -52,7 +54,12 @@ export class ImgUploadComponent {
52
54
  continue;
53
55
  }
54
56
  if (!this.isSizeValid(file.size)) {
55
- 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`);
57
+ // ImgManager.ImgUpload.ErrorImgSize
58
+ this.alertService.openAlert(this.translateService.instant('ImgManager.ImgUpload.ErrorImgSize', {
59
+ fileName: file.name,
60
+ fileSize: this.getImageSizeInKo(file.size),
61
+ maxFileSize: this.getImageSizeInKo(this.MAX_IMAGE_SIZE)
62
+ }));
56
63
  this.isLoading = false;
57
64
  continue;
58
65
  }
@@ -98,8 +105,8 @@ export class ImgUploadComponent {
98
105
  this.dragAndDropBox.nativeElement.style = '';
99
106
  }
100
107
  }
101
- ImgUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ImgUploadComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.AlertService }, { token: i3.ImgManagerConfigService }], target: i0.ɵɵFactoryTarget.Component });
102
- ImgUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ImgUploadComponent, selector: "img-upload", inputs: { stateDisplayed: "stateDisplayed" }, outputs: { imgUploaded: "imgUploaded" }, viewQueries: [{ propertyName: "dragAndDropBox", first: true, predicate: ["dragAndDropBox"], descendants: true }], ngImport: i0, template: "<div\n class=\"img-upload has-text-centered\"\n [ngClass]=\"{'img-upload--small': stateDisplayed === 'small'}\"\n (click)=\"fileInput.click()\"\n appDragDrop\n (onFileDropped)=\"filesChangeByDragAndDrop($any($event))\"\n #dragAndDropBox\n [@easeInOut]=\"'in'\"\n>\n <input hidden type=\"file\" #fileInput (change)=\"filesChangeByClick($event)\" accept=\"image/*\" multiple >\n <div class=\"img-upload__container\" [ngClass]=\"{'img-upload__container--small': stateDisplayed === 'small'}\">\n\n <div class=\"img-upload__container__wrapper\">\n\n <div class=\"img-upload__container__loader\" *ngIf=\"isLoading\">\n <wz-loader [small]=\"true\" [position]=\"'relative'\"></wz-loader>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"blueColor img-upload__container__dropImgIconDiv\">\n <img *ngIf=\"assetsIcon\" [src]=\"assetsIcon\" alt=\"icon picture\" />\n <p>{{ 'ImgManager.ImgUpload.dropImg' | translate }}</p>\n </div>\n\n <p class=\"img-upload__container__or\">{{ 'ImgManager.ImgUpload.or' | translate }}</p>\n\n <div class=\"img-upload__container__text\">\n <i class=\"fal fa-file-upload\"></i>{{ 'ImgManager.ImgUpload.selectImg' | translate }}\n </div>\n </ng-container>\n\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LoaderComponent, selector: "wz-loader", inputs: ["text", "small", "position"] }, { kind: "directive", type: i6.DragDropDirective, selector: "[appDragDrop]", outputs: ["onFileDropped"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: [
108
+ ImgUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ImgUploadComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.AlertService }, { token: i3.ImgManagerConfigService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
109
+ ImgUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ImgUploadComponent, selector: "img-upload", inputs: { stateDisplayed: "stateDisplayed" }, outputs: { imgUploaded: "imgUploaded" }, viewQueries: [{ propertyName: "dragAndDropBox", first: true, predicate: ["dragAndDropBox"], descendants: true }], ngImport: i0, template: "<div\n class=\"img-upload has-text-centered\"\n [ngClass]=\"{'img-upload--small': stateDisplayed === 'small'}\"\n (click)=\"fileInput.click()\"\n appDragDrop\n (onFileDropped)=\"filesChangeByDragAndDrop($any($event))\"\n #dragAndDropBox\n [@easeInOut]=\"'in'\"\n>\n <input hidden type=\"file\" #fileInput (change)=\"filesChangeByClick($event)\" accept=\"image/*\" multiple >\n <div class=\"img-upload__container\" [ngClass]=\"{'img-upload__container--small': stateDisplayed === 'small'}\">\n\n <div class=\"img-upload__container__wrapper\">\n\n <div class=\"img-upload__container__loader\" *ngIf=\"isLoading\">\n <wz-loader [small]=\"true\" [position]=\"'relative'\"></wz-loader>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"blueColor img-upload__container__dropImgIconDiv\">\n <img *ngIf=\"assetsIcon\" [src]=\"assetsIcon\" alt=\"icon picture\" />\n <p>{{ 'ImgManager.ImgUpload.dropImg' | translate }}</p>\n </div>\n\n <p class=\"img-upload__container__or\">{{ 'ImgManager.ImgUpload.or' | translate }}</p>\n\n <div class=\"img-upload__container__text\">\n <i class=\"fal fa-file-upload\"></i>{{ 'ImgManager.ImgUpload.selectImg' | translate }}\n </div>\n </ng-container>\n\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.LoaderComponent, selector: "wz-loader", inputs: ["text", "small", "position"] }, { kind: "directive", type: i7.DragDropDirective, selector: "[appDragDrop]", outputs: ["onFileDropped"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [
103
110
  easeInOut
104
111
  ] });
105
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ImgUploadComponent, decorators: [{
@@ -107,7 +114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
107
114
  args: [{ selector: 'img-upload', animations: [
108
115
  easeInOut
109
116
  ], template: "<div\n class=\"img-upload has-text-centered\"\n [ngClass]=\"{'img-upload--small': stateDisplayed === 'small'}\"\n (click)=\"fileInput.click()\"\n appDragDrop\n (onFileDropped)=\"filesChangeByDragAndDrop($any($event))\"\n #dragAndDropBox\n [@easeInOut]=\"'in'\"\n>\n <input hidden type=\"file\" #fileInput (change)=\"filesChangeByClick($event)\" accept=\"image/*\" multiple >\n <div class=\"img-upload__container\" [ngClass]=\"{'img-upload__container--small': stateDisplayed === 'small'}\">\n\n <div class=\"img-upload__container__wrapper\">\n\n <div class=\"img-upload__container__loader\" *ngIf=\"isLoading\">\n <wz-loader [small]=\"true\" [position]=\"'relative'\"></wz-loader>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"blueColor img-upload__container__dropImgIconDiv\">\n <img *ngIf=\"assetsIcon\" [src]=\"assetsIcon\" alt=\"icon picture\" />\n <p>{{ 'ImgManager.ImgUpload.dropImg' | translate }}</p>\n </div>\n\n <p class=\"img-upload__container__or\">{{ 'ImgManager.ImgUpload.or' | translate }}</p>\n\n <div class=\"img-upload__container__text\">\n <i class=\"fal fa-file-upload\"></i>{{ 'ImgManager.ImgUpload.selectImg' | translate }}\n </div>\n </ng-container>\n\n </div>\n </div>\n</div>\n" }]
110
- }], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.AlertService }, { type: i3.ImgManagerConfigService }]; }, propDecorators: { stateDisplayed: [{
117
+ }], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.AlertService }, { type: i3.ImgManagerConfigService }, { type: i4.TranslateService }]; }, propDecorators: { stateDisplayed: [{
111
118
  type: Input
112
119
  }], imgUploaded: [{
113
120
  type: Output
@@ -115,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
115
122
  type: ViewChild,
116
123
  args: ['dragAndDropBox']
117
124
  }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ei1pbWctbWFuYWdlci9zcmMvbGliL2NvbXBvbmVudHMvaW1nLXVwbG9hZC9pbWctdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWctdXBsb2FkL2ltZy11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBYyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBUzVELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjdCLFlBQ1UsVUFBNkIsRUFDN0IsWUFBMEIsRUFDMUIscUJBQThDO1FBRjlDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBeUI7UUFqQnhELFVBQUssR0FBUSxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUdqQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJM0MsZ0JBQVcsR0FBRyw4QkFBOEIsQ0FBQztRQUM3QyxzQkFBaUIs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S0FBSyxDQUFDO1FBQ3hCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBb0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXLENBQUMsY0FBc0I7UUFDaEMsT0FBTyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMvQyxDQUFDOzsrR0E5R1Usa0JBQWtCO21HQUFsQixrQkFBa0IsMlBDaEIvQiw4eUNBa0NBLHNmRHRCYztRQUNWLFNBQVM7S0FDVjsyRkFFVSxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0UsWUFBWSxjQUVWO3dCQUNWLFNBQVM7cUJBQ1Y7eUtBT1EsY0FBYztzQkFBdEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltZ01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW1nUGljdHVyZURUTyB9IGZyb20gJy4uLy4uL2R0by9pbWctbWFuYWdlci5kdG8nO1xuaW1wb3J0IHsgZWFzZUluT3V0IH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9lYXNlSW5PdXQvZWFzZS1pbi1vdXQuYW5pbWF0aW9uJztcbmltcG9ydCB7SW1nTWFuYWdlckNvbmZpZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb25maWcvZXh0ZXJuYWwtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7IHN0YXRlRGlzcGxheWVkIH0gZnJvbSAnLi4vLi4vZHRvL2V4cG9ydC1kdG9zLmFwaSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1nLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWctdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgYW5pbWF0aW9uczogW1xuICAgIGVhc2VJbk91dFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEltZ1VwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZmlsZXM6IGFueSA9IFtdO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXNzZXRzSWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0ZURpc3BsYXllZDogc3RhdGVEaXNwbGF5ZWQ7XG4gIEBPdXRwdXQoKSBpbWdVcGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcEJveCcpIGRyYWdBbmREcm9wQm94OiBFbGVtZW50UmVmO1xuXG4gIGxvYWRpbmdUZXh0ID0gJ0ltZ01hbmFnZXIuSW1nVXBsb2FkLmxvYWRpbmcnO1xuICBlcnJvclVwbG9hZGluZ0ltZyA9ICdJbWdNYW5hZ2VyLkltZ1VwbG9hZC5lcnJvclVwbG9hZGluZ0ltZyc7XG4gIGVycm9yTm90SW1nID0gJ0ltZ01hbmFnZXIuSW1nVXBsb2FkLmVycm9yTm90SW1nJztcblxuICBNQVhfSU1BR0VfU0laRSA9IDEwMDAwMDAwOyAvLyBJbiBieXRlc1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW1nTWFuYWdlcjogSW1nTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGV4dGVybmFsQ29uZmlnU2VydmljZTogSW1nTWFuYWdlckNvbmZpZ1NlcnZpY2VcbiAgICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NldHNJY29uID0gdGhpcy5nZXRBc3NldHMoKTtcbiAgfVxuXG4gIGZpbGVzQ2hhbmdlQnlDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGxvYWRGaWxlKGV2ZW50LnRhcmdldC5maWxlcyk7XG4gIH1cblxuICBnZXRBc3NldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZXJuYWxDb25maWdTZXJ2aWNlLmdldFJvdXRlQXNzZXRzKCkgKyBcImltZy9pY29uX3BpY3R1cmUuc3ZnXCI7XG4gIH1cblxuICBmaWxlc0NoYW5nZUJ5RHJhZ0FuZERyb3AoZmlsZXNMaXN0OiBGaWxlTGlzdCkge1xuICAgIGNvbnNvbGUubG9nKCdmaWxlc0xpc3QnLCBmaWxlc0xpc3QpO1xuICAgIHRoaXMucmVtb3ZlRHJhZ0FuZERyb3BTdHlsZSgpO1xuICAgIHRoaXMudXBsb2FkRmlsZShBcnJheS5mcm9tKGZpbGVzTGlzdCkpO1xuICB9XG5cbiAgdXBsb2FkRmlsZShmaWxlczogRmlsZVtdKSB7XG4gICAgaWYgKGZpbGVzICYmICFmaWxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9dHJ1ZTtcbiAgICBjb25zdCBpbWdUb1VwbG9hZExpc3Q6IE9ic2VydmFibGU8YW55PltdID0gW107XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBpZighdGhpcy5pc0ZpbGVJbWFnZShmaWxlLnR5cGUpKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLm9wZW5BbGVydCh0aGlzLmVycm9yTm90SW1nKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5pc1NpemVWYWxpZChmaWxlLnNpemUpKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLm9wZW5BbGVydChgTCdpbWFnZSA6ICR7ZmlsZS5uYW1lfSBlc3QgdHJvcCBncmFuZGUgKCR7dGhpcy5nZXRJbWFnZVNpemVJbktvKGZpbGUuc2l6ZSl9a28pLiBUYWlsbGUgbWF4aW11bSBhY2NlcHTDqWU6ICR7dGhpcy5nZXRJbWFnZVNpemVJbktvKHRoaXMuTUFYX0lNQUdFX1NJWkUpfWtvYCk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGZpbGUsIGZpbGUubmFtZSk7XG5cblxuICAgICAgaW1nVG9VcGxvYWRMaXN0LnB1c2godGhpcy5pbWdNYW5hZ2VyLnVwbG9hZEZpbGUoZm9ybURhdGEpKTtcbiAgICB9XG5cbiAgICBmb3JrSm9pbihpbWdUb1VwbG9hZExpc3QpLnN1YnNjcmliZShcbiAgICAgIChpbWc6IEltZ1BpY3R1cmVEVE9bXSkgPT4ge1xuICAgICAgICB0aGlzLm9uSW1nVXBsb2FkKGltZyksXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID1mYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgJiYgZXJyb3Iuc3RhdHVzVGV4dCAhPT0gJ0JhZCBSZXF1ZXN0Jykge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLm9wZW5BbGVydFdpdGhCYWNrZW5kUmVzcG9ucyh0aGlzLmVycm9yVXBsb2FkaW5nSW1nLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5vcGVuQWxlcnQodGhpcy5lcnJvclVwbG9hZGluZ0ltZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPWZhbHNlO1xuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRoZSBpbWcgdXBsb2FkZWQgdG8gdGhlIHRhYnMgY29tcG9uZW50cyxcbiAgICogVGhlbiB0aGUgdGFicyBjb21wb25lbnRzIGFkZCB0aGUgaW1nIHRvIHVwbG9hZCBsaXN0IGJ5IGNhbGxpbmcgdGhlIG1ldGhvZCBvbkltZ1VwbG9hZGVkIG9mIHRoZSB1cGxvYWQtbGlzdCBjb21wb25lbnRcbiAgICogQHBhcmFtIGltZ1xuICAgKi9cbiAgb25JbWdVcGxvYWQoaW1nOiBJbWdQaWN0dXJlRFRPW10pIHtcbiAgICB0aGlzLmltZ1VwbG9hZGVkLmVtaXQoaW1nKTtcbiAgfVxuXG4gIGlzRmlsZUltYWdlKGZpbGVUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZmlsZVR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2ltYWdlJztcbiAgfVxuXG4gIGlzU2l6ZVZhbGlkKGltYWdlQnl0ZXNTaXplOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW1hZ2VCeXRlc1NpemUgPCB0aGlzLk1BWF9JTUFHRV9TSVpFO1xuICB9XG5cbiAgZ2V0SW1hZ2VTaXplSW5LbyhzaXplOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzaXplIC8gMTAyNCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBzdHlsZSBvZiB0aGUgZHJhZyBhbmQgZHJvcCBib3hcbiAgICogQWZ0ZXIgYW4gaW1nIGlzIGRyb3BlZCwgdGhlIGJveCBpcyBzdGlsbCBncmV5XG4gICAqL1xuICByZW1vdmVEcmFnQW5kRHJvcFN0eWxlKCkge1xuICAgIHRoaXMuZHJhZ0FuZERyb3BCb3gubmF0aXZlRWxlbWVudC5zdHlsZSA9ICcnO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiaW1nLXVwbG9hZCBoYXMtdGV4dC1jZW50ZXJlZFwiXG4gIFtuZ0NsYXNzXT1cInsnaW1nLXVwbG9hZC0tc21hbGwnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJ31cIlxuICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICBhcHBEcmFnRHJvcFxuICAob25GaWxlRHJvcHBlZCk9XCJmaWxlc0NoYW5nZUJ5RHJhZ0FuZERyb3AoJGFueSgkZXZlbnQpKVwiXG4gICNkcmFnQW5kRHJvcEJveFxuICBbQGVhc2VJbk91dF09XCInaW4nXCJcbj5cbiAgPGlucHV0IGhpZGRlbiB0eXBlPVwiZmlsZVwiICNmaWxlSW5wdXQgKGNoYW5nZSk9XCJmaWxlc0NoYW5nZUJ5Q2xpY2soJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLypcIiBtdWx0aXBsZSA+XG4gIDxkaXYgY2xhc3M9XCJpbWctdXBsb2FkX19jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2ltZy11cGxvYWRfX2NvbnRhaW5lci0tc21hbGwnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJ31cIj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbWctdXBsb2FkX19jb250YWluZXJfX3dyYXBwZXJcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImltZy11cGxvYWRfX2NvbnRhaW5lcl9fbG9hZGVyXCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPHd6LWxvYWRlciBbc21hbGxdPVwidHJ1ZVwiIFtwb3NpdGlvbl09XCIncmVsYXRpdmUnXCI+PC93ei1sb2FkZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJsdWVDb2xvciBpbWctdXBsb2FkX19jb250YWluZXJfX2Ryb3BJbWdJY29uRGl2XCI+XG4gICAgICAgICAgPGltZyAqbmdJZj1cImFzc2V0c0ljb25cIiBbc3JjXT1cImFzc2V0c0ljb25cIiBhbHQ9XCJpY29uIHBpY3R1cmVcIiAvPlxuICAgICAgICAgIDxwPnt7ICdJbWdNYW5hZ2VyLkltZ1VwbG9hZC5kcm9wSW1nJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHAgY2xhc3M9XCJpbWctdXBsb2FkX19jb250YWluZXJfX29yXCI+e3sgJ0ltZ01hbmFnZXIuSW1nVXBsb2FkLm9yJyB8IHRyYW5zbGF0ZSB9fTwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXVwbG9hZF9fY29udGFpbmVyX190ZXh0XCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtZmlsZS11cGxvYWRcIj48L2k+e3sgJ0ltZ01hbmFnZXIuSW1nVXBsb2FkLnNlbGVjdEltZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ei1pbWctbWFuYWdlci9zcmMvbGliL2NvbXBvbmVudHMvaW1nLXVwbG9hZC9pbWctdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWctdXBsb2FkL2ltZy11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBYyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBU3ZELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjdCLFlBQ1UsVUFBNkIsRUFDN0IsWUFBMEIsRUFDMUIscUJBQThDLEVBQzlDLGdCQUFrQztRQUhsQyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXlCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFsQjVDLFVBQUssR0FBUSxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFZ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dGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWdNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltZy1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEltZ1BpY3R1cmVEVE8gfSBmcm9tICcuLi8uLi9kdG8vaW1nLW1hbmFnZXIuZHRvJztcbmltcG9ydCB7IGVhc2VJbk91dCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvZWFzZUluT3V0L2Vhc2UtaW4tb3V0LmFuaW1hdGlvbic7XG5pbXBvcnQge0ltZ01hbmFnZXJDb25maWdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29uZmlnL2V4dGVybmFsLWNvbmZpZy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBzdGF0ZURpc3BsYXllZCB9IGZyb20gJy4uLy4uL2R0by9leHBvcnQtZHRvcy5hcGknO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltZy11cGxvYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1nLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICBlYXNlSW5PdXRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbWdVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGZpbGVzOiBhbnkgPSBbXTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGFzc2V0c0ljb246IHN0cmluZztcbiAgQElucHV0KCkgc3RhdGVEaXNwbGF5ZWQ6IHN0YXRlRGlzcGxheWVkO1xuICBAT3V0cHV0KCkgaW1nVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnZHJhZ0FuZERyb3BCb3gnKSBkcmFnQW5kRHJvcEJveDogRWxlbWVudFJlZjtcblxuICBsb2FkaW5nVGV4dCA9ICdJbWdNYW5hZ2VyLkltZ1VwbG9hZC5sb2FkaW5nJztcbiAgZXJyb3JVcGxvYWRpbmdJbWcgPSAnSW1nTWFuYWdlci5JbWdVcGxvYWQuZXJyb3JVcGxvYWRpbmdJbWcnO1xuICBlcnJvck5vdEltZyA9ICdJbWdNYW5hZ2VyLkltZ1VwbG9hZC5lcnJvck5vdEltZyc7XG5cbiAgTUFYX0lNQUdFX1NJWkUgPSAxMDAwMDAwMDsgLy8gSW4gYnl0ZXNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGltZ01hbmFnZXI6IEltZ01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHRlcm5hbENvbmZpZ1NlcnZpY2U6IEltZ01hbmFnZXJDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2V0c0ljb24gPSB0aGlzLmdldEFzc2V0cygpO1xuICB9XG5cbiAgZmlsZXNDaGFuZ2VCeUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVwbG9hZEZpbGUoZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgfVxuXG4gIGdldEFzc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlcm5hbENvbmZpZ1NlcnZpY2UuZ2V0Um91dGVBc3NldHMoKSArIFwiaW1nL2ljb25fcGljdHVyZS5zdmdcIjtcbiAgfVxuXG4gIGZpbGVzQ2hhbmdlQnlEcmFnQW5kRHJvcChmaWxlc0xpc3Q6IEZpbGVMaXN0KSB7XG4gICAgY29uc29sZS5sb2coJ2ZpbGVzTGlzdCcsIGZpbGVzTGlzdCk7XG4gICAgdGhpcy5yZW1vdmVEcmFnQW5kRHJvcFN0eWxlKCk7XG4gICAgdGhpcy51cGxvYWRGaWxlKEFycmF5LmZyb20oZmlsZXNMaXN0KSk7XG4gIH1cblxuICB1cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pIHtcbiAgICBpZiAoZmlsZXMgJiYgIWZpbGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID10cnVlO1xuICAgIGNvbnN0IGltZ1RvVXBsb2FkTGlzdDogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGlmKCF0aGlzLmlzRmlsZUltYWdlKGZpbGUudHlwZSkpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uub3BlbkFsZXJ0KHRoaXMuZXJyb3JOb3RJbWcpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmlzU2l6ZVZhbGlkKGZpbGUuc2l6ZSkpIHtcbiAgICAgICAgICAvLyBJbWdNYW5hZ2VyLkltZ1VwbG9hZC5FcnJvckltZ1NpemVcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uub3BlbkFsZXJ0KFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdJbWdNYW5hZ2VyLkltZ1VwbG9hZC5FcnJvckltZ1NpemUnLCB7XG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRoaXMuZ2V0SW1hZ2VTaXplSW5LbyhmaWxlLnNpemUpLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuZ2V0SW1hZ2VTaXplSW5Lbyh0aGlzLk1BWF9JTUFHRV9TSVpFKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ltYWdlJywgZmlsZSwgZmlsZS5uYW1lKTtcblxuXG4gICAgICBpbWdUb1VwbG9hZExpc3QucHVzaCh0aGlzLmltZ01hbmFnZXIudXBsb2FkRmlsZShmb3JtRGF0YSkpO1xuICAgIH1cblxuICAgIGZvcmtKb2luKGltZ1RvVXBsb2FkTGlzdCkuc3Vic2NyaWJlKFxuICAgICAgKGltZzogSW1nUGljdHVyZURUT1tdKSA9PiB7XG4gICAgICAgIHRoaXMub25JbWdVcGxvYWQoaW1nKSxcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPWZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSAmJiBlcnJvci5zdGF0dXNUZXh0ICE9PSAnQmFkIFJlcXVlc3QnKSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uub3BlbkFsZXJ0V2l0aEJhY2tlbmRSZXNwb25zKHRoaXMuZXJyb3JVcGxvYWRpbmdJbWcsIGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLm9wZW5BbGVydCh0aGlzLmVycm9yVXBsb2FkaW5nSW1nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ZmFsc2U7XG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgdGhlIGltZyB1cGxvYWRlZCB0byB0aGUgdGFicyBjb21wb25lbnRzLFxuICAgKiBUaGVuIHRoZSB0YWJzIGNvbXBvbmVudHMgYWRkIHRoZSBpbWcgdG8gdXBsb2FkIGxpc3QgYnkgY2FsbGluZyB0aGUgbWV0aG9kIG9uSW1nVXBsb2FkZWQgb2YgdGhlIHVwbG9hZC1saXN0IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gaW1nXG4gICAqL1xuICBvbkltZ1VwbG9hZChpbWc6IEltZ1BpY3R1cmVEVE9bXSkge1xuICAgIHRoaXMuaW1nVXBsb2FkZWQuZW1pdChpbWcpO1xuICB9XG5cbiAgaXNGaWxlSW1hZ2UoZmlsZVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBmaWxlVHlwZS5zcGxpdCgnLycpWzBdID09PSAnaW1hZ2UnO1xuICB9XG5cbiAgaXNTaXplVmFsaWQoaW1hZ2VCeXRlc1NpemU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbWFnZUJ5dGVzU2l6ZSA8IHRoaXMuTUFYX0lNQUdFX1NJWkU7XG4gIH1cblxuICBnZXRJbWFnZVNpemVJbktvKHNpemU6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHNpemUgLyAxMDI0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHN0eWxlIG9mIHRoZSBkcmFnIGFuZCBkcm9wIGJveFxuICAgKiBBZnRlciBhbiBpbWcgaXMgZHJvcGVkLCB0aGUgYm94IGlzIHN0aWxsIGdyZXlcbiAgICovXG4gIHJlbW92ZURyYWdBbmREcm9wU3R5bGUoKSB7XG4gICAgdGhpcy5kcmFnQW5kRHJvcEJveC5uYXRpdmVFbGVtZW50LnN0eWxlID0gJyc7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJpbWctdXBsb2FkIGhhcy10ZXh0LWNlbnRlcmVkXCJcbiAgW25nQ2xhc3NdPVwieydpbWctdXBsb2FkLS1zbWFsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnfVwiXG4gIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gIGFwcERyYWdEcm9wXG4gIChvbkZpbGVEcm9wcGVkKT1cImZpbGVzQ2hhbmdlQnlEcmFnQW5kRHJvcCgkYW55KCRldmVudCkpXCJcbiAgI2RyYWdBbmREcm9wQm94XG4gIFtAZWFzZUluT3V0XT1cIidpbidcIlxuPlxuICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJmaWxlXCIgI2ZpbGVJbnB1dCAoY2hhbmdlKT1cImZpbGVzQ2hhbmdlQnlDbGljaygkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIG11bHRpcGxlID5cbiAgPGRpdiBjbGFzcz1cImltZy11cGxvYWRfX2NvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnaW1nLXVwbG9hZF9fY29udGFpbmVyLS1zbWFsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnfVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImltZy11cGxvYWRfX2NvbnRhaW5lcl9fd3JhcHBlclwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1nLXVwbG9hZF9fY29udGFpbmVyX19sb2FkZXJcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICA8d3otbG9hZGVyIFtzbWFsbF09XCJ0cnVlXCIgW3Bvc2l0aW9uXT1cIidyZWxhdGl2ZSdcIj48L3d6LWxvYWRlcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmx1ZUNvbG9yIGltZy11cGxvYWRfX2NvbnRhaW5lcl9fZHJvcEltZ0ljb25EaXZcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwiYXNzZXRzSWNvblwiIFtzcmNdPVwiYXNzZXRzSWNvblwiIGFsdD1cImljb24gcGljdHVyZVwiIC8+XG4gICAgICAgICAgPHA+e3sgJ0ltZ01hbmFnZXIuSW1nVXBsb2FkLmRyb3BJbWcnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cCBjbGFzcz1cImltZy11cGxvYWRfX2NvbnRhaW5lcl9fb3JcIj57eyAnSW1nTWFuYWdlci5JbWdVcGxvYWQub3InIHwgdHJhbnNsYXRlIH19PC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbWctdXBsb2FkX19jb250YWluZXJfX3RleHRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1maWxlLXVwbG9hZFwiPjwvaT57eyAnSW1nTWFuYWdlci5JbWdVcGxvYWQuc2VsZWN0SW1nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -727,10 +727,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
727
727
  }] } });
728
728
 
729
729
  class ImgUploadComponent {
730
- constructor(imgManager, alertService, externalConfigService) {
730
+ constructor(imgManager, alertService, externalConfigService, translateService) {
731
731
  this.imgManager = imgManager;
732
732
  this.alertService = alertService;
733
733
  this.externalConfigService = externalConfigService;
734
+ this.translateService = translateService;
734
735
  this.files = [];
735
736
  this.isLoading = false;
736
737
  this.imgUploaded = new EventEmitter();
@@ -766,7 +767,12 @@ class ImgUploadComponent {
766
767
  continue;
767
768
  }
768
769
  if (!this.isSizeValid(file.size)) {
769
- 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`);
770
+ // ImgManager.ImgUpload.ErrorImgSize
771
+ this.alertService.openAlert(this.translateService.instant('ImgManager.ImgUpload.ErrorImgSize', {
772
+ fileName: file.name,
773
+ fileSize: this.getImageSizeInKo(file.size),
774
+ maxFileSize: this.getImageSizeInKo(this.MAX_IMAGE_SIZE)
775
+ }));
770
776
  this.isLoading = false;
771
777
  continue;
772
778
  }
@@ -813,7 +819,7 @@ class ImgUploadComponent {
813
819
  this.dragAndDropBox.nativeElement.style = '';
814
820
  }
815
821
  }
816
- ImgUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ImgUploadComponent, deps: [{ token: ImgManagerService }, { token: AlertService }, { token: ImgManagerConfigService }], target: i0.ɵɵFactoryTarget.Component });
822
+ ImgUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ImgUploadComponent, deps: [{ token: ImgManagerService }, { token: AlertService }, { token: ImgManagerConfigService }, { token: i7.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
817
823
  ImgUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ImgUploadComponent, selector: "img-upload", inputs: { stateDisplayed: "stateDisplayed" }, outputs: { imgUploaded: "imgUploaded" }, viewQueries: [{ propertyName: "dragAndDropBox", first: true, predicate: ["dragAndDropBox"], descendants: true }], ngImport: i0, template: "<div\n class=\"img-upload has-text-centered\"\n [ngClass]=\"{'img-upload--small': stateDisplayed === 'small'}\"\n (click)=\"fileInput.click()\"\n appDragDrop\n (onFileDropped)=\"filesChangeByDragAndDrop($any($event))\"\n #dragAndDropBox\n [@easeInOut]=\"'in'\"\n>\n <input hidden type=\"file\" #fileInput (change)=\"filesChangeByClick($event)\" accept=\"image/*\" multiple >\n <div class=\"img-upload__container\" [ngClass]=\"{'img-upload__container--small': stateDisplayed === 'small'}\">\n\n <div class=\"img-upload__container__wrapper\">\n\n <div class=\"img-upload__container__loader\" *ngIf=\"isLoading\">\n <wz-loader [small]=\"true\" [position]=\"'relative'\"></wz-loader>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"blueColor img-upload__container__dropImgIconDiv\">\n <img *ngIf=\"assetsIcon\" [src]=\"assetsIcon\" alt=\"icon picture\" />\n <p>{{ 'ImgManager.ImgUpload.dropImg' | translate }}</p>\n </div>\n\n <p class=\"img-upload__container__or\">{{ 'ImgManager.ImgUpload.or' | translate }}</p>\n\n <div class=\"img-upload__container__text\">\n <i class=\"fal fa-file-upload\"></i>{{ 'ImgManager.ImgUpload.selectImg' | translate }}\n </div>\n </ng-container>\n\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoaderComponent, selector: "wz-loader", inputs: ["text", "small", "position"] }, { kind: "directive", type: DragDropDirective, selector: "[appDragDrop]", outputs: ["onFileDropped"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: [
818
824
  easeInOut
819
825
  ] });
@@ -822,7 +828,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
822
828
  args: [{ selector: 'img-upload', animations: [
823
829
  easeInOut
824
830
  ], template: "<div\n class=\"img-upload has-text-centered\"\n [ngClass]=\"{'img-upload--small': stateDisplayed === 'small'}\"\n (click)=\"fileInput.click()\"\n appDragDrop\n (onFileDropped)=\"filesChangeByDragAndDrop($any($event))\"\n #dragAndDropBox\n [@easeInOut]=\"'in'\"\n>\n <input hidden type=\"file\" #fileInput (change)=\"filesChangeByClick($event)\" accept=\"image/*\" multiple >\n <div class=\"img-upload__container\" [ngClass]=\"{'img-upload__container--small': stateDisplayed === 'small'}\">\n\n <div class=\"img-upload__container__wrapper\">\n\n <div class=\"img-upload__container__loader\" *ngIf=\"isLoading\">\n <wz-loader [small]=\"true\" [position]=\"'relative'\"></wz-loader>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"blueColor img-upload__container__dropImgIconDiv\">\n <img *ngIf=\"assetsIcon\" [src]=\"assetsIcon\" alt=\"icon picture\" />\n <p>{{ 'ImgManager.ImgUpload.dropImg' | translate }}</p>\n </div>\n\n <p class=\"img-upload__container__or\">{{ 'ImgManager.ImgUpload.or' | translate }}</p>\n\n <div class=\"img-upload__container__text\">\n <i class=\"fal fa-file-upload\"></i>{{ 'ImgManager.ImgUpload.selectImg' | translate }}\n </div>\n </ng-container>\n\n </div>\n </div>\n</div>\n" }]
825
- }], ctorParameters: function () { return [{ type: ImgManagerService }, { type: AlertService }, { type: ImgManagerConfigService }]; }, propDecorators: { stateDisplayed: [{
831
+ }], ctorParameters: function () { return [{ type: ImgManagerService }, { type: AlertService }, { type: ImgManagerConfigService }, { type: i7.TranslateService }]; }, propDecorators: { stateDisplayed: [{
826
832
  type: Input
827
833
  }], imgUploaded: [{
828
834
  type: Output