diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php index 0edeba7d807ac8e4c1be154d236bbff7c93a87b5..97909ffaa889f283d8a07c3f87be508f0c855c0a 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php +++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php @@ -63,15 +63,13 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView ); $image->setData( 'medium_image_url', - $this->_imageHelper->init($product, 'product_page_image_medium') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + $this->_imageHelper->init($product, 'product_page_image_medium_no_frame') ->setImageFile($image->getFile()) ->getUrl() ); $image->setData( 'large_image_url', - $this->_imageHelper->init($product, 'product_page_image_large') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + $this->_imageHelper->init($product, 'product_page_image_large_no_frame') ->setImageFile($image->getFile()) ->getUrl() ); diff --git a/app/code/Magento/Catalog/Helper/Image.php b/app/code/Magento/Catalog/Helper/Image.php index eb5e7142d3094f5457fde615bc4987a8df912ab1..6f13e9077f4732af3714ae2af50ca804a22f0aa2 100644 --- a/app/code/Magento/Catalog/Helper/Image.php +++ b/app/code/Magento/Catalog/Helper/Image.php @@ -195,7 +195,6 @@ class Image extends AbstractHelper protected function setImageProperties() { $this->_getModel()->setDestinationSubdir($this->getType()); - $this->_getModel()->setWidth($this->getWidth()); $this->_getModel()->setHeight($this->getHeight()); @@ -241,25 +240,25 @@ class Image extends AbstractHelper { $this->setWatermark( $this->scopeConfig->getValue( - "design/watermark/{$this->_getModel()->getDestinationSubdir()}_image", + "design/watermark/{$this->getType()}_image", \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ); $this->setWatermarkImageOpacity( $this->scopeConfig->getValue( - "design/watermark/{$this->_getModel()->getDestinationSubdir()}_imageOpacity", + "design/watermark/{$this->getType()}_imageOpacity", \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ); $this->setWatermarkPosition( $this->scopeConfig->getValue( - "design/watermark/{$this->_getModel()->getDestinationSubdir()}_position", + "design/watermark/{$this->getType()}_position", \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ); $this->setWatermarkSize( $this->scopeConfig->getValue( - "design/watermark/{$this->_getModel()->getDestinationSubdir()}_size", + "design/watermark/{$this->getType()}_size", \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ); @@ -500,10 +499,7 @@ class Image extends AbstractHelper protected function isScheduledActionsAllowed() { $model = $this->_getModel(); - if ($model->isBaseFilePlaceholder() - && $model->getNewFile() === true - || $model->isCached() - ) { + if ($model->isBaseFilePlaceholder() || $model->isCached()) { return false; } return true; diff --git a/app/code/Magento/Catalog/Model/Category/DataProvider.php b/app/code/Magento/Catalog/Model/Category/DataProvider.php index 8aa7216a6b63928ba9dcdd415b1745ed404321f1..6ce2dd98f89c6c707782ee1338e248a1f01abb77 100644 --- a/app/code/Magento/Catalog/Model/Category/DataProvider.php +++ b/app/code/Magento/Catalog/Model/Category/DataProvider.php @@ -15,6 +15,8 @@ use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\Type; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory as CategoryCollectionFactory; use Magento\Framework\Stdlib\ArrayManager; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Filesystem; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManagerInterface; use Magento\Ui\Component\Form\Field; @@ -126,6 +128,11 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider */ private $arrayManager; + /** + * @var Filesystem + */ + private $fileInfo; + /** * DataProvider constructor * @@ -483,8 +490,16 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider if ($attribute->getBackend() instanceof ImageBackendModel) { unset($categoryData[$attributeCode]); - $categoryData[$attributeCode][0]['name'] = $category->getData($attributeCode); - $categoryData[$attributeCode][0]['url'] = $category->getImageUrl($attributeCode); + $fileName = $category->getData($attributeCode); + if ($this->getFileInfo()->isExist($fileName)) { + $stat = $this->getFileInfo()->getStat($fileName); + $mime = $this->getFileInfo()->getMimeType($fileName); + + $categoryData[$attributeCode][0]['name'] = $fileName; + $categoryData[$attributeCode][0]['url'] = $category->getImageUrl($attributeCode); + $categoryData['image'][0]['size'] = isset($stat) ? $stat['size'] : 0; + $categoryData['image'][0]['type'] = $mime; + } } } @@ -605,4 +620,19 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider return $this->arrayManager; } + + /** + * Get FileInfo instance + * + * @return FileInfo + * + * @deprecated + */ + private function getFileInfo() + { + if ($this->fileInfo === null) { + $this->fileInfo = ObjectManager::getInstance()->get(FileInfo::class); + } + return $this->fileInfo; + } } diff --git a/app/code/Magento/Catalog/Model/Category/FileInfo.php b/app/code/Magento/Catalog/Model/Category/FileInfo.php new file mode 100644 index 0000000000000000000000000000000000000000..3e4d852e579afb66ac071b530494bfdad23f36e2 --- /dev/null +++ b/app/code/Magento/Catalog/Model/Category/FileInfo.php @@ -0,0 +1,107 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Model\Category; + +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\File\Mime; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; + +/** + * Class FileInfo + * + * Provides information about requested file + */ +class FileInfo +{ + /** + * Path in /pub/media directory + */ + const ENTITY_MEDIA_PATH = '/catalog/category'; + + /** + * @var Filesystem + */ + private $filesystem; + + /** + * @var Mime + */ + private $mime; + + /** + * @var WriteInterface + */ + private $mediaDirectory; + + /** + * @param Filesystem $filesystem + * @param Mime $mime + */ + public function __construct( + Filesystem $filesystem, + Mime $mime + ) { + $this->filesystem = $filesystem; + $this->mime = $mime; + } + + /** + * Get WriteInterface instance + * + * @return WriteInterface + */ + private function getMediaDirectory() + { + if ($this->mediaDirectory === null) { + $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + } + return $this->mediaDirectory; + } + + /** + * Retrieve MIME type of requested file + * + * @param string $fileName + * @return string + */ + public function getMimeType($fileName) + { + $filePath = self::ENTITY_MEDIA_PATH . '/' . ltrim($fileName, '/'); + $absoluteFilePath = $this->getMediaDirectory()->getAbsolutePath($filePath); + + $result = $this->mime->getMimeType($absoluteFilePath); + return $result; + } + + /** + * Get file statistics data + * + * @param string $fileName + * @return array + */ + public function getStat($fileName) + { + $filePath = self::ENTITY_MEDIA_PATH . '/' . ltrim($fileName, '/'); + + $result = $this->getMediaDirectory()->stat($filePath); + return $result; + } + + /** + * Check if the file exists + * + * @param string $fileName + * @return bool + */ + public function isExist($fileName) + { + $filePath = self::ENTITY_MEDIA_PATH . '/' . ltrim($fileName, '/'); + + $result = $this->getMediaDirectory()->isExist($filePath); + return $result; + } +} diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index 34e1ad30ad434add33508bb63c7b8b1a78ddc9fb..769faa682f422b569dd6673df819f05d7371aeb8 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -12,8 +12,8 @@ namespace Magento\Catalog\Model\Product; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Image as MagentoImage; -use Magento\Store\Model\Store; /** * @SuppressWarnings(PHPMD.TooManyFields) @@ -170,6 +170,21 @@ class Image extends \Magento\Framework\Model\AbstractModel */ protected $_storeManager; + /** + * @var \Magento\Catalog\Model\View\Asset\ImageFactory + */ + private $viewAssetImageFactory; + + /** + * @var \Magento\Catalog\Model\View\Asset\PlaceholderFactory + */ + private $viewAssetPlaceholderFactory; + + /** + * @var \Magento\Framework\View\Asset\LocalInterface + */ + private $imageAsset; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -207,7 +222,6 @@ class Image extends \Magento\Framework\Model\AbstractModel $this->_coreFileStorageDatabase = $coreFileStorageDatabase; parent::__construct($context, $registry, $resource, $resourceCollection, $data); $this->_mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); - $result = $this->_mediaDirectory->create($this->_catalogProductMediaConfig->getBaseMediaPath()); $this->_imageFactory = $imageFactory; $this->_assetRepo = $assetRepo; $this->_viewFileSystem = $viewFileSystem; @@ -450,85 +464,29 @@ class Image extends \Magento\Framework\Model\AbstractModel * @param string $file * @return $this * @throws \Exception - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) */ public function setBaseFile($file) { $this->_isBaseFilePlaceholder = false; - if ($file && 0 !== strpos($file, '/', 0)) { - $file = '/' . $file; - } - $baseDir = $this->_catalogProductMediaConfig->getBaseMediaPath(); - - if ('/no_selection' == $file) { - $file = null; - } - if ($file) { - if (!$this->_fileExists($baseDir . $file) || !$this->_checkMemory($baseDir . $file)) { - $file = null; - } - } - if (!$file) { + $this->imageAsset = $this->getViewAssetImageFactory()->create( + [ + 'miscParams' => $this->getMiscParams(), + 'filePath' => $file, + ] + ); + if ($file == 'no_selection' || !$this->_fileExists($this->imageAsset->getSourceFile()) + || !$this->_checkMemory($this->imageAsset->getSourceFile()) + ) { $this->_isBaseFilePlaceholder = true; - // check if placeholder defined in config - $isConfigPlaceholder = $this->_scopeConfig->getValue( - "catalog/placeholder/{$this->getDestinationSubdir()}_placeholder", - \Magento\Store\Model\ScopeInterface::SCOPE_STORE + $this->imageAsset = $this->getViewAssetPlaceholderFactory()->create( + [ + 'type' => $this->getDestinationSubdir(), + ] ); - $configPlaceholder = '/placeholder/' . $isConfigPlaceholder; - if (!empty($isConfigPlaceholder) && $this->_fileExists($baseDir . $configPlaceholder)) { - $file = $configPlaceholder; - } else { - $this->_newFile = true; - return $this; - } - } - - $baseFile = $baseDir . $file; - - if (!$file || !$this->_mediaDirectory->isFile($baseFile)) { - throw new \Exception(__('We can\'t find the image file.')); } - $this->_baseFile = $baseFile; - - // build new filename (most important params) - $path = [ - $this->_catalogProductMediaConfig->getBaseMediaPath(), - 'cache', - $this->getDestinationSubdir(), - ]; - if (!empty($this->_width) || !empty($this->_height)) { - $path[] = "{$this->_width}x{$this->_height}"; - } - - // add misk params as a hash - $miscParams = [ - ($this->_keepAspectRatio ? '' : 'non') . 'proportional', - ($this->_keepFrame ? '' : 'no') . 'frame', - ($this->_keepTransparency ? '' : 'no') . 'transparency', - ($this->_constrainOnly ? 'do' : 'not') . 'constrainonly', - $this->_rgbToString($this->_backgroundColor), - 'angle' . $this->_angle, - 'quality' . $this->_quality, - ]; - - // if has watermark add watermark params to hash - if ($this->getWatermarkFile()) { - $miscParams[] = $this->getWatermarkFile(); - $miscParams[] = $this->getWatermarkImageOpacity(); - $miscParams[] = $this->getWatermarkPosition(); - $miscParams[] = $this->getWatermarkWidth(); - $miscParams[] = $this->getWatermarkHeight(); - } - - $path[] = md5(implode('_', $miscParams)); - - // append prepared filename - $this->_newFile = implode('/', $path) . $file; - // the $file contains heading slash + $this->_baseFile = $this->imageAsset->getSourceFile(); return $this; } @@ -542,6 +500,7 @@ class Image extends \Magento\Framework\Model\AbstractModel } /** + * @deprecated * @return bool|string */ public function getNewFile() @@ -690,10 +649,10 @@ class Image extends \Magento\Framework\Model\AbstractModel */ public function saveFile() { - if ($this->_isBaseFilePlaceholder && $this->_newFile === true) { + if ($this->_isBaseFilePlaceholder) { return $this; } - $filename = $this->_mediaDirectory->getAbsolutePath($this->getNewFile()); + $filename = $this->getBaseFile() ? $this->imageAsset->getPath() : null; $this->getImageProcessor()->save($filename); $this->_coreFileStorageDatabase->saveFile($filename); return $this; @@ -704,17 +663,7 @@ class Image extends \Magento\Framework\Model\AbstractModel */ public function getUrl() { - if ($this->_newFile === true) { - $url = $this->_assetRepo->getUrl( - "Magento_Catalog::images/product/placeholder/{$this->getDestinationSubdir()}.jpg" - ); - } else { - $url = $this->_storeManager->getStore()->getBaseUrl( - \Magento\Framework\UrlInterface::URL_TYPE_MEDIA - ) . $this->_newFile; - } - - return $url; + return $this->imageAsset->getUrl(); } /** @@ -740,9 +689,7 @@ class Image extends \Magento\Framework\Model\AbstractModel */ public function isCached() { - if (is_string($this->_newFile)) { - return $this->_fileExists($this->_newFile); - } + return file_exists($this->imageAsset->getPath()); } /** @@ -939,18 +886,72 @@ class Image extends \Magento\Framework\Model\AbstractModel */ public function getResizedImageInfo() { - $fileInfo = null; - if ($this->_newFile === true) { - $asset = $this->_assetRepo->createAsset( - "Magento_Catalog::images/product/placeholder/{$this->getDestinationSubdir()}.jpg" - ); - $img = $asset->getSourceFile(); - $fileInfo = getimagesize($img); + if ($this->isBaseFilePlaceholder() == true) { + $image = $this->imageAsset->getSourceFile(); } else { - if ($this->_mediaDirectory->isFile($this->_mediaDirectory->getAbsolutePath($this->_newFile))) { - $fileInfo = getimagesize($this->_mediaDirectory->getAbsolutePath($this->_newFile)); - } + $image = $this->imageAsset->getPath(); } - return $fileInfo; + return getimagesize($image); + } + + /** + * @return \Magento\Catalog\Model\View\Asset\ImageFactory + */ + private function getViewAssetImageFactory() + { + if ($this->viewAssetImageFactory == null) { + $this->viewAssetImageFactory = ObjectManager::getInstance()->get( + \Magento\Catalog\Model\View\Asset\ImageFactory::class + ); + } + + return $this->viewAssetImageFactory; + } + + /** + * @return \Magento\Catalog\Model\View\Asset\PlaceholderFactory + */ + private function getViewAssetPlaceholderFactory() + { + if ($this->viewAssetPlaceholderFactory == null) { + $this->viewAssetPlaceholderFactory = ObjectManager::getInstance()->get( + \Magento\Catalog\Model\View\Asset\PlaceholderFactory::class + ); + } + + return $this->viewAssetPlaceholderFactory; + } + + /** + * Retrieve misc params based on all image attributes + * + * @return array + * @SuppressWarnings(PHPMD.NPathComplexity) + */ + private function getMiscParams() + { + $miscParams = [ + 'image_type' => $this->getDestinationSubdir(), + 'image_height' => $this->getHeight(), + 'image_width' => $this->getWidth(), + 'keep_aspect_ratio' => ($this->_keepAspectRatio ? '' : 'non') . 'proportional', + 'keep_frame' => ($this->_keepFrame ? '' : 'no') . 'frame', + 'keep_transparency' => ($this->_keepTransparency ? '' : 'no') . 'transparency', + 'constrain_only' => ($this->_constrainOnly ? 'do' : 'not') . 'constrainonly', + 'background' => $this->_rgbToString($this->_backgroundColor), + 'angle' => $this->_angle, + 'quality' => $this->_quality, + ]; + + // if has watermark add watermark params to hash + if ($this->getWatermarkFile()) { + $miscParams['watermark_file'] = $this->getWatermarkFile(); + $miscParams['watermark_image_opacity'] = $this->getWatermarkImageOpacity(); + $miscParams['watermark_position'] = $this->getWatermarkPosition(); + $miscParams['watermark_width'] = $this->getWatermarkWidth(); + $miscParams['watermark_height'] = $this->getWatermarkHeight(); + } + + return $miscParams; } } diff --git a/app/code/Magento/Catalog/Model/View/Asset/Image.php b/app/code/Magento/Catalog/Model/View/Asset/Image.php new file mode 100644 index 0000000000000000000000000000000000000000..31129d7d892d2a3737b4263beb127a37c6e0217b --- /dev/null +++ b/app/code/Magento/Catalog/Model/View/Asset/Image.php @@ -0,0 +1,191 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Model\View\Asset; + +use Magento\Catalog\Model\Product\Media\ConfigInterface; +use Magento\Framework\Encryption\Encryptor; +use Magento\Framework\Encryption\EncryptorInterface; +use Magento\Framework\View\Asset\ContextInterface; +use Magento\Framework\View\Asset\LocalInterface; + +/** + * A locally available image file asset that can be referred with a file path + * + * This class is a value object with lazy loading of some of its data (content, physical file path) + */ +class Image implements LocalInterface +{ + /** + * @var string + */ + private $filePath; + + /** + * @var string + */ + private $contentType = 'image'; + + /** + * @var ContextInterface + */ + private $context; + + /** + * Misc image params depend on size, transparency, quality, watermark etc. + * + * @var array + */ + private $miscParams; + + /** + * @var ConfigInterface + */ + private $mediaConfig; + + /** + * @var EncryptorInterface + */ + private $encryptor; + + /** + * Image constructor. + * + * @param ConfigInterface $mediaConfig + * @param ContextInterface $context + * @param EncryptorInterface $encryptor + * @param string $filePath + * @param array $miscParams + */ + public function __construct( + ConfigInterface $mediaConfig, + ContextInterface $context, + EncryptorInterface $encryptor, + $filePath, + array $miscParams = [] + ) { + $this->mediaConfig = $mediaConfig; + $this->context = $context; + $this->filePath = $filePath; + $this->miscParams = $miscParams; + $this->encryptor = $encryptor; + } + + /** + * {@inheritdoc} + */ + public function getUrl() + { + return $this->context->getBaseUrl() . $this->getRelativePath(DIRECTORY_SEPARATOR); + } + + /** + * {@inheritdoc} + */ + public function getContentType() + { + return $this->contentType; + } + + /** + * {@inheritdoc} + */ + public function getPath() + { + return $this->getRelativePath($this->context->getPath()); + } + + /** + * Subroutine for building path + * + * @param string $path + * @param string $item + * @return string + */ + private function join($path, $item) + { + return trim( + $path . ($item ? DIRECTORY_SEPARATOR . ltrim($item, DIRECTORY_SEPARATOR) : ''), + DIRECTORY_SEPARATOR + ); + } + + /** + * {@inheritdoc} + */ + public function getSourceFile() + { + return $this->mediaConfig->getBaseMediaPath() + . DIRECTORY_SEPARATOR . ltrim($this->filePath, DIRECTORY_SEPARATOR); + } + + /** + * Get source content type + * + * @return string + */ + public function getSourceContentType() + { + return $this->contentType; + } + + /** + * {@inheritdoc} + */ + public function getContent() + { + return null; + } + + /** + * {@inheritdoc} + */ + public function getFilePath() + { + return $this->filePath; + } + + /** + * {@inheritdoc} + * @return ContextInterface + */ + public function getContext() + { + return $this->context; + } + + /** + * {@inheritdoc} + */ + public function getModule() + { + return 'cache'; + } + + /** + * Retrieve part of path based on misc params + * + * @return string + */ + private function getMiscPath() + { + return $this->encryptor->hash(implode('_', $this->miscParams), Encryptor::HASH_VERSION_MD5); + } + + /** + * Generate relative path + * + * @param string $result + * @return string + */ + private function getRelativePath($result) + { + $result = $this->join($result, $this->getModule()); + $result = $this->join($result, $this->getMiscPath()); + $result = $this->join($result, $this->getFilePath()); + return DIRECTORY_SEPARATOR . $result; + } +} diff --git a/app/code/Magento/Catalog/Model/View/Asset/Image/Context.php b/app/code/Magento/Catalog/Model/View/Asset/Image/Context.php new file mode 100644 index 0000000000000000000000000000000000000000..33f0adb70c94113f51321ecce40cdffdee1ef769 --- /dev/null +++ b/app/code/Magento/Catalog/Model/View/Asset/Image/Context.php @@ -0,0 +1,59 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Model\View\Asset\Image; + +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\View\Asset\ContextInterface; + +/** + * A basic path context for assets that includes a directory path + */ +class Context implements ContextInterface +{ + /** + * @var \Magento\Framework\Filesystem\Directory\WriteInterface + */ + private $mediaDirectory; + + /** + * @var \Magento\Catalog\Model\Product\Media\ConfigInterface + */ + private $mediaConfig; + + /** + * @var \Magento\Framework\Filesystem + */ + private $filesystem; + + /** + */ + public function __construct( + \Magento\Catalog\Model\Product\Media\ConfigInterface $mediaConfig, + \Magento\Framework\Filesystem $filesystem + ) { + $this->mediaConfig = $mediaConfig; + $this->filesystem = $filesystem; + $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $this->mediaDirectory->create($this->mediaConfig->getBaseMediaPath()); + } + + /** + * {@inheritdoc} + */ + public function getPath() + { + return $this->mediaDirectory->getAbsolutePath($this->mediaConfig->getBaseMediaPath()); + } + + /** + * {@inheritdoc} + */ + public function getBaseUrl() + { + return $this->mediaConfig->getBaseMediaUrl(); + } +} diff --git a/app/code/Magento/Catalog/Model/View/Asset/Placeholder.php b/app/code/Magento/Catalog/Model/View/Asset/Placeholder.php new file mode 100644 index 0000000000000000000000000000000000000000..fd7dcd1c4692ec76af97bdfb782e756345985d4b --- /dev/null +++ b/app/code/Magento/Catalog/Model/View/Asset/Placeholder.php @@ -0,0 +1,181 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Model\View\Asset; + +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\View\Asset\ContextInterface; +use Magento\Framework\View\Asset\File\NotFoundException; +use Magento\Framework\View\Asset\LocalInterface; +use Magento\Framework\View\Asset\Repository; + +/** + * A locally available image placeholder file asset that can be referred with a file type + */ +class Placeholder implements LocalInterface +{ + /** + * Type of placeholder + * + * @var string + */ + private $type; + + /** + * Filevpath of placeholder + * + * @var string + */ + private $filePath; + + /** + * @var string + */ + private $contentType = 'image'; + + /** + * @var ContextInterface + */ + private $context; + + /** + * @var Repository + */ + private $assetRepo; + + /** + * Core store config + * + * @var ScopeConfigInterface + */ + private $scopeConfig; + + /** + * Placeholder constructor. + * + * @param ContextInterface $context + * @param ScopeConfigInterface $scopeConfig + * @param Repository $assetRepo + * @param string $type + */ + public function __construct( + ContextInterface $context, + ScopeConfigInterface $scopeConfig, + Repository $assetRepo, + $type + ) { + $this->context = $context; + $this->scopeConfig = $scopeConfig; + $this->assetRepo = $assetRepo; + $this->type = $type; + } + + /** + * {@inheritdoc} + */ + public function getUrl() + { + if ($this->getFilePath() !== null) { + $result = $this->context->getBaseUrl() . '/' . $this->getModule() . '/' . $this->getFilePath(); + } else { + $result = $this->assetRepo->getUrl("Magento_Catalog::images/product/placeholder/{$this->type}.jpg"); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function getContentType() + { + return $this->contentType; + } + + /** + * {@inheritdoc} + */ + public function getPath() + { + if ($this->getFilePath() !== null) { + $result = $this->getContext()->getPath() + . DIRECTORY_SEPARATOR . $this->getModule() + . DIRECTORY_SEPARATOR . $this->getFilePath(); + } else { + $defaultPlaceholder = $this->assetRepo->createAsset( + "Magento_Catalog::images/product/placeholder/{$this->type}.jpg" + ); + try { + $result = $defaultPlaceholder->getSourceFile(); + } catch (NotFoundException $e) { + $result = null; + } + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function getSourceFile() + { + return $this->getPath(); + } + + /** + * Get source content type + * + * @return string + */ + public function getSourceContentType() + { + return $this->contentType; + } + + /** + * {@inheritdoc} + */ + public function getContent() + { + return null; + } + + /** + * {@inheritdoc} + */ + public function getFilePath() + { + if ($this->filePath !== null) { + return $this->filePath; + } + // check if placeholder defined in config + $isConfigPlaceholder = $this->scopeConfig->getValue( + "catalog/placeholder/{$this->type}_placeholder", + \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ); + $this->filePath = $isConfigPlaceholder; + + return $this->filePath; + } + + /** + * {@inheritdoc} + * @return ContextInterface + */ + public function getContext() + { + return $this->context; + } + + /** + * {@inheritdoc} + */ + public function getModule() + { + return 'placeholder'; + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php index 2e3a896d956d9cdd1dd82ccee58873bcf6131460..3aee622b5e3b3a48910318157a33faf8498cfd37 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php @@ -111,8 +111,8 @@ class GalleryTest extends \PHPUnit_Framework_TestCase ->method('init') ->willReturnMap([ [$productMock, 'product_page_image_small', [], $this->imageHelper], - [$productMock, 'product_page_image_medium', [], $this->imageHelper], - [$productMock, 'product_page_image_large', [], $this->imageHelper], + [$productMock, 'product_page_image_medium_no_frame', [], $this->imageHelper], + [$productMock, 'product_page_image_large_no_frame', [], $this->imageHelper], ]) ->willReturnSelf(); $this->imageHelper->expects($this->exactly(3)) @@ -129,19 +129,6 @@ class GalleryTest extends \PHPUnit_Framework_TestCase ->method('getUrl') ->willReturn('product_page_image_large_url'); - $this->imageHelper->expects($this->exactly(2)) - ->method('constrainOnly') - ->with(true) - ->willReturnSelf(); - $this->imageHelper->expects($this->exactly(2)) - ->method('keepAspectRatio') - ->with(true) - ->willReturnSelf(); - $this->imageHelper->expects($this->exactly(2)) - ->method('keepFrame') - ->with(false) - ->willReturnSelf(); - $images = $this->model->getGalleryImages(); $this->assertInstanceOf(\Magento\Framework\Data\Collection::class, $images); } diff --git a/app/code/Magento/Catalog/Test/Unit/Helper/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Helper/ImageTest.php index 206f20bc98179db80af5fb45014b061149dec8d7..4ed3495f9e34812788baf408632e5af29d521044 100644 --- a/app/code/Magento/Catalog/Test/Unit/Helper/ImageTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Helper/ImageTest.php @@ -424,7 +424,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase * @param string $imageId * @param string $imageFile * @param string $baseFile - * @param string $newFile * @param string $destination * @param boolean $setImageFile * @param boolean $isCached @@ -436,7 +435,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase $imageId, $imageFile, $baseFile, - $newFile, $destination, $setImageFile, $isCached, @@ -477,9 +475,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase $this->image->expects($this->any()) ->method('isBaseFilePlaceholder') ->willReturn($isBaseFilePlaceholder); - $this->image->expects($this->any()) - ->method('getNewFile') - ->willReturn($newFile); $this->prepareAttributes([], $imageId); @@ -502,7 +497,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'image_id' => 'test_image_id', 'image_file' => '/path/to/test_image_id.png', 'base_file' => '/path/to/base_image.png', - 'new_file' => '/path/to/base_image.png', 'destination' => 'small_image', 'set_image_file' => true, 'is_cached' => false, @@ -516,7 +510,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'image_id' => 'test_image_id', 'image_file' => '/path/to/test_image_id.png', 'base_file' => null, - 'new_file' => true, 'destination' => 'small_image', 'set_image_file' => false, 'is_cached' => false, @@ -530,7 +523,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'image_id' => 'test_image_id', 'image_file' => '/path/to/test_image_id.png', 'base_file' => null, - 'new_file' => false, 'destination' => 'small_image', 'set_image_file' => true, 'is_cached' => false, @@ -544,7 +536,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'image_id' => 'test_image_id', 'image_file' => '/path/to/test_image_id.png', 'base_file' => null, - 'new_file' => true, 'destination' => 'small_image', 'set_image_file' => true, 'is_cached' => false, @@ -558,7 +549,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'image_id' => 'test_image_id', 'image_file' => '/path/to/test_image_id.png', 'base_file' => null, - 'new_file' => '/path/to/test_image_id.png', 'destination' => 'small_image', 'set_image_file' => true, 'is_cached' => false, diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/DataProviderTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/DataProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..4a7971afbbb5074e3338a06a0c61366353dd73b5 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/DataProviderTest.php @@ -0,0 +1,320 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Test\Unit\Model\Category; + +use Magento\Catalog\Model\Category\DataProvider; +use Magento\Catalog\Model\Category\FileInfo; +use Magento\Catalog\Model\CategoryFactory; +use Magento\Catalog\Model\ResourceModel\Category\Collection; +use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; +use Magento\Eav\Model\Config; +use Magento\Eav\Model\Entity\Type; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Registry; +use Magento\Store\Model\StoreManagerInterface; +use Magento\Ui\DataProvider\EavValidationRules; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class DataProviderTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var EavValidationRules|\PHPUnit_Framework_MockObject_MockObject + */ + private $eavValidationRules; + + /** + * @var CollectionFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $categoryCollectionFactory; + + /** + * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $storeManager; + + /** + * @var Registry|\PHPUnit_Framework_MockObject_MockObject + */ + private $registry; + + /** + * @var Config|\PHPUnit_Framework_MockObject_MockObject + */ + private $eavConfig; + + /** + * @var RequestInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $request; + + /** + * @var CategoryFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $categoryFactory; + + /** + * @var Collection|\PHPUnit_Framework_MockObject_MockObject + */ + private $collection; + + /** + * @var Type|\PHPUnit_Framework_MockObject_MockObject + */ + private $eavEntityMock; + + /** + * @var FileInfo|\PHPUnit_Framework_MockObject_MockObject + */ + private $fileInfo; + + protected function setUp() + { + $this->eavValidationRules = $this->getMockBuilder(EavValidationRules::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->collection = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + $this->collection->expects($this->any()) + ->method('addAttributeToSelect') + ->with('*') + ->willReturnSelf(); + + $this->categoryCollectionFactory = $this->getMockBuilder(CollectionFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $this->categoryCollectionFactory->expects($this->any()) + ->method('create') + ->willReturn($this->collection); + + $this->storeManager = $this->getMockBuilder(StoreManagerInterface::class) + ->getMockForAbstractClass(); + + $this->registry = $this->getMockBuilder(Registry::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->eavEntityMock = $this->getMockBuilder(Type::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->eavConfig = $this->getMockBuilder(Config::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->request = $this->getMockBuilder(RequestInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->categoryFactory = $this->getMockBuilder(CategoryFactory::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->fileInfo = $this->getMockBuilder(FileInfo::class) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @return DataProvider + */ + private function getModel() + { + $this->eavEntityMock->expects($this->any()) + ->method('getAttributeCollection') + ->willReturn([]); + + $this->eavConfig->expects($this->any()) + ->method('getEntityType') + ->with('catalog_category') + ->willReturn($this->eavEntityMock); + + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $model = $objectManager->getObject( + DataProvider::class, + [ + 'eavValidationRules' => $this->eavValidationRules, + 'categoryCollectionFactory' => $this->categoryCollectionFactory, + 'storeManager' => $this->storeManager, + 'registry' => $this->registry, + 'eavConfig' => $this->eavConfig, + 'request' => $this->request, + 'categoryFactory' => $this->categoryFactory, + ] + ); + + $objectManager->setBackwardCompatibleProperty( + $model, + 'fileInfo', + $this->fileInfo + ); + + return $model; + } + + public function testGetDataNoCategory() + { + $this->registry->expects($this->once()) + ->method('registry') + ->with('category') + ->willReturn(null); + + $model = $this->getModel(); + $this->assertNull($model->getData()); + } + + public function testGetDataNoFileExists() + { + $fileName = 'filename.ext1'; + $categoryId = 1; + + $categoryData = [ + 'image' => $fileName, + ]; + + $imageBackendMock = $this->getMockBuilder(\Magento\Catalog\Model\Category\Attribute\Backend\Image::class) + ->disableOriginalConstructor() + ->getMock(); + + $attributeMock = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) + ->disableOriginalConstructor() + ->getMock(); + $attributeMock->expects($this->once()) + ->method('getBackend') + ->willReturn($imageBackendMock); + + $categoryMock = $this->getMockBuilder(\Magento\Catalog\Model\Category::class) + ->disableOriginalConstructor() + ->getMock(); + $categoryMock->expects($this->exactly(2)) + ->method('getData') + ->willReturnMap([ + ['', null, $categoryData], + ['image', null, $categoryData['image']], + ]); + $categoryMock->expects($this->any()) + ->method('getExistsStoreValueFlag') + ->with('url_key') + ->willReturn(false); + $categoryMock->expects($this->any()) + ->method('getStoreId') + ->willReturn(\Magento\Store\Model\Store::DEFAULT_STORE_ID); + $categoryMock->expects($this->once()) + ->method('getId') + ->willReturn($categoryId); + $categoryMock->expects($this->once()) + ->method('getAttributes') + ->willReturn(['image' => $attributeMock]); + + $this->registry->expects($this->once()) + ->method('registry') + ->with('category') + ->willReturn($categoryMock); + + $this->fileInfo->expects($this->once()) + ->method('isExist') + ->with($fileName) + ->willReturn(false); + + $model = $this->getModel(); + $result = $model->getData(); + + $this->assertTrue(is_array($result)); + $this->assertArrayHasKey($categoryId, $result); + $this->assertArrayNotHasKey('image', $result[$categoryId]); + } + + public function testGetData() + { + $fileName = 'filename.png'; + $mime = 'image/png'; + $size = 1; + + $categoryId = 1; + $categoryUrl = 'category_url'; + + $categoryData = [ + 'image' => $fileName, + ]; + + $expects = [ + [ + 'name' => $fileName, + 'url' => $categoryUrl, + 'size' => $size, + 'type' => $mime, + ], + ]; + + $imageBackendMock = $this->getMockBuilder(\Magento\Catalog\Model\Category\Attribute\Backend\Image::class) + ->disableOriginalConstructor() + ->getMock(); + + $attributeMock = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) + ->disableOriginalConstructor() + ->getMock(); + $attributeMock->expects($this->once()) + ->method('getBackend') + ->willReturn($imageBackendMock); + + $categoryMock = $this->getMockBuilder(\Magento\Catalog\Model\Category::class) + ->disableOriginalConstructor() + ->getMock(); + $categoryMock->expects($this->exactly(2)) + ->method('getData') + ->willReturnMap([ + ['', null, $categoryData], + ['image', null, $categoryData['image']], + ]); + $categoryMock->expects($this->any()) + ->method('getExistsStoreValueFlag') + ->with('url_key') + ->willReturn(false); + $categoryMock->expects($this->any()) + ->method('getStoreId') + ->willReturn(\Magento\Store\Model\Store::DEFAULT_STORE_ID); + $categoryMock->expects($this->once()) + ->method('getId') + ->willReturn($categoryId); + $categoryMock->expects($this->once()) + ->method('getAttributes') + ->willReturn(['image' => $attributeMock]); + $categoryMock->expects($this->once()) + ->method('getImageUrl') + ->willReturn($categoryUrl); + + $this->registry->expects($this->once()) + ->method('registry') + ->with('category') + ->willReturn($categoryMock); + + $this->fileInfo->expects($this->once()) + ->method('isExist') + ->with($fileName) + ->willReturn(true); + $this->fileInfo->expects($this->once()) + ->method('getStat') + ->with($fileName) + ->willReturn(['size' => $size]); + $this->fileInfo->expects($this->once()) + ->method('getMimeType') + ->with($fileName) + ->willReturn($mime); + + $model = $this->getModel(); + $result = $model->getData(); + + $this->assertTrue(is_array($result)); + $this->assertArrayHasKey($categoryId, $result); + $this->assertArrayHasKey('image', $result[$categoryId]); + + $this->assertEquals($expects, $result[$categoryId]['image']); + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/FileInfoTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/FileInfoTest.php new file mode 100644 index 0000000000000000000000000000000000000000..abc07425a079a21741e4b4474bca45d907cb10f7 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/FileInfoTest.php @@ -0,0 +1,114 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Test\Unit\Model\Category; + +use Magento\Catalog\Model\Category\FileInfo; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\File\Mime; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; + +class FileInfoTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject + */ + private $filesystem; + + /** + * @var Mime|\PHPUnit_Framework_MockObject_MockObject + */ + private $mime; + + /** + * @var WriteInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $mediaDirectory; + + /** + * @var FileInfo + */ + private $model; + + protected function setUp() + { + $this->mediaDirectory = $this->getMockBuilder(WriteInterface::class) + ->getMockForAbstractClass(); + + $this->filesystem = $this->getMockBuilder(Filesystem::class) + ->disableOriginalConstructor() + ->getMock(); + $this->filesystem->expects($this->any()) + ->method('getDirectoryWrite') + ->with(DirectoryList::MEDIA) + ->willReturn($this->mediaDirectory); + + $this->mime = $this->getMockBuilder(Mime::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->model = new FileInfo( + $this->filesystem, + $this->mime + ); + } + + public function testGetMimeType() + { + $mediaPath = '/catalog/category'; + + $fileName = '/filename.ext1'; + $absoluteFilePath = '/absolute_path/catalog/category/filename.ext1'; + + $expected = 'ext1'; + + $this->mediaDirectory->expects($this->once()) + ->method('getAbsolutePath') + ->with($mediaPath. '/' . ltrim($fileName, '/')) + ->willReturn($absoluteFilePath); + + $this->mime->expects($this->once()) + ->method('getMimeType') + ->with($absoluteFilePath) + ->willReturn($expected); + + $this->assertEquals($expected, $this->model->getMimeType($fileName)); + } + + public function testGetStat() + { + $mediaPath = '/catalog/category'; + + $fileName = '/filename.ext1'; + + $expected = ['size' => 1]; + + $this->mediaDirectory->expects($this->once()) + ->method('stat') + ->with($mediaPath . $fileName) + ->willReturn($expected); + + $result = $this->model->getStat($fileName); + + $this->assertTrue(is_array($result)); + $this->assertArrayHasKey('size', $result); + $this->assertEquals(1, $result['size']); + } + + public function testIsExist() + { + $mediaPath = '/catalog/category'; + + $fileName = '/filename.ext1'; + + $this->mediaDirectory->expects($this->once()) + ->method('isExist') + ->with($mediaPath . $fileName) + ->willReturn(true); + + $this->assertTrue($this->model->isExist($fileName)); + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php index 44f7f87cc2c62afc2c09d262bbd2721683fcfea3..8ee875dad17b1c8fb09a99449c039825f9e1344c 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php @@ -6,12 +6,17 @@ namespace Magento\Catalog\Test\Unit\Model\Product; +use Magento\Catalog\Model\View\Asset\Image\ContextFactory; +use Magento\Catalog\Model\View\Asset\ImageFactory; +use Magento\Catalog\Model\View\Asset\PlaceholderFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\View\Asset\ContextInterface; /** * Class ImageTest * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.TooManyFields) */ class ImageTest extends \PHPUnit_Framework_TestCase { @@ -75,6 +80,21 @@ class ImageTest extends \PHPUnit_Framework_TestCase */ protected $mediaDirectory; + /** + * @var \Magento\Framework\View\Asset\LocalInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $imageAsset; + + /** + * @var ImageFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $viewAssetImageFactory; + + /** + * @var PlaceholderFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $viewAssetPlaceholderFactory; + protected function setUp() { $this->context = $this->getMock(\Magento\Framework\Model\Context::class, [], [], '', false); @@ -99,7 +119,6 @@ class ImageTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods(['create', 'isFile', 'isExist', 'getAbsolutePath']) ->getMock(); - $this->mediaDirectory->expects($this->once())->method('create')->will($this->returnValue(true)); $this->filesystem = $this->getMock(\Magento\Framework\Filesystem::class, [], [], '', false); $this->filesystem->expects($this->once())->method('getDirectoryWrite') @@ -110,20 +129,49 @@ class ImageTest extends \PHPUnit_Framework_TestCase $this->fileSystem = $this->getMock(\Magento\Framework\View\FileSystem::class, [], [], '', false); $this->scopeConfigInterface = $this->getMock(\Magento\Framework\App\Config\ScopeConfigInterface::class); + $context = $this->getMockBuilder(\Magento\Framework\Model\Context::class) + ->disableOriginalConstructor() + ->getMock(); + $this->image = new \Magento\Catalog\Model\Product\Image( + $context, + $this->registry, + $this->storeManager, + $this->config, + $this->coreFileHelper, + $this->filesystem, + $this->factory, + $this->repository, + $this->fileSystem, + $this->scopeConfigInterface + ); + //Settings for backward compatible property $objectManagerHelper = new ObjectManagerHelper($this); - $this->image = $objectManagerHelper->getObject( - \Magento\Catalog\Model\Product\Image::class, - [ - 'registry' => $this->registry, - 'storeManager' => $this->storeManager, - 'catalogProductMediaConfig' => $this->config, - 'coreFileStorageDatabase' => $this->coreFileHelper, - 'filesystem' => $this->filesystem, - 'imageFactory' => $this->factory, - 'assetRepo' => $this->repository, - 'viewFileSystem' => $this->fileSystem, - 'scopeConfig' => $this->scopeConfigInterface - ] + $this->imageAsset = $this->getMockBuilder(\Magento\Framework\View\Asset\LocalInterface::class) + ->getMockForAbstractClass(); + $objectManagerHelper->setBackwardCompatibleProperty( + $this->image, + 'imageAsset', + $this->imageAsset + ); + + $this->viewAssetImageFactory = $this->getMockBuilder(ImageFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $objectManagerHelper->setBackwardCompatibleProperty( + $this->image, + 'viewAssetImageFactory', + $this->viewAssetImageFactory + ); + + $this->viewAssetPlaceholderFactory = $this->getMockBuilder(PlaceholderFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $objectManagerHelper->setBackwardCompatibleProperty( + $this->image, + 'viewAssetPlaceholderFactory', + $this->viewAssetPlaceholderFactory ); } @@ -177,18 +225,39 @@ class ImageTest extends \PHPUnit_Framework_TestCase $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/somefile.png'; $this->mediaDirectory->expects($this->any())->method('getAbsolutePath') ->will($this->returnValue($absolutePath)); + $this->viewAssetImageFactory->expects($this->any()) + ->method('create') + ->with( + [ + 'miscParams' => [ + 'image_type' => null, + 'image_height' => null, + 'image_width' => null, + 'keep_aspect_ratio' => 'proportional', + 'keep_frame' => 'frame', + 'keep_transparency' => 'transparency', + 'constrain_only' => 'doconstrainonly', + 'background' => 'ffffff', + 'angle' => null, + 'quality' => 80, + ], + 'filePath' => '/somefile.png', + ] + ) + ->willReturn($this->imageAsset); + $this->viewAssetPlaceholderFactory->expects($this->never())->method('create'); + + $this->imageAsset->expects($this->any())->method('getSourceFile')->willReturn('catalog/product/somefile.png'); $this->image->setBaseFile('/somefile.png'); $this->assertEquals('catalog/product/somefile.png', $this->image->getBaseFile()); - $this->assertEquals( - 'catalog/product/cache//beff4985b56e3afdbeabfc89641a4582/somefile.png', - $this->image->getNewFile() - ); } public function testSetBaseNoSelectionFile() { - $this->image->setBaseFile('/no_selection'); - $this->assertTrue($this->image->getNewFile()); + $this->viewAssetPlaceholderFactory->expects($this->once())->method('create')->willReturn($this->imageAsset); + $this->imageAsset->expects($this->any())->method('getSourceFile')->willReturn('Default Placeholder Path'); + $this->image->setBaseFile('no_selection'); + $this->assertEquals('Default Placeholder Path', $this->image->getBaseFile()); } public function testSetGetImageProcessor() @@ -284,45 +353,45 @@ class ImageTest extends \PHPUnit_Framework_TestCase )->disableOriginalConstructor()->getMock(); $this->image->setImageProcessor($imageProcessor); $this->coreFileHelper->expects($this->once())->method('saveFile')->will($this->returnValue(true)); - $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/somefile.png'; - $this->mediaDirectory->expects($this->once())->method('getAbsolutePath') - ->will($this->returnValue($absolutePath)); $this->image->saveFile(); } public function testSaveFileNoSelection() { - $this->testSetBaseNoSelectionFile(); + $imageProcessor = $this->getMockBuilder( + \Magento\Framework\Image::class + )->disableOriginalConstructor()->getMock(); + $this->image->setImageProcessor($imageProcessor); $this->assertSame($this->image, $this->image->saveFile()); } public function testGetUrl() { $this->testSetGetBaseFile(); - $url = $this->image->getUrl(); - $this->assertEquals( - 'http://magento.com/media/catalog/product/cache//beff4985b56e3afdbeabfc89641a4582/somefile.png', - $url - ); + $this->imageAsset->expects($this->any())->method('getUrl')->will($this->returnValue('url of exist image')); + $this->assertEquals('url of exist image', $this->image->getUrl()); } public function testGetUrlNoSelection() { - $this->testSetBaseNoSelectionFile(); - $this->repository->expects($this->once())->method('getUrl')->will($this->returnValue('someurl')); - $this->assertEquals('someurl', $this->image->getUrl()); + $this->viewAssetPlaceholderFactory->expects($this->once())->method('create')->willReturn($this->imageAsset); + $this->imageAsset->expects($this->any())->method('getUrl')->will($this->returnValue('Default Placeholder URL')); + $this->image->setBaseFile('no_selection'); + $this->assertEquals('Default Placeholder URL', $this->image->getUrl()); } public function testSetGetDestinationSubdir() { - $this->image->setDestinationSubdir('somesubdir'); - $this->assertEquals('somesubdir', $this->image->getDestinationSubdir()); + $this->image->setDestinationSubdir('image_type'); + $this->assertEquals('image_type', $this->image->getDestinationSubdir()); } public function testIsCached() { $this->testSetGetBaseFile(); + $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/watermark/somefile.png'; + $this->imageAsset->expects($this->any())->method('getPath')->willReturn($absolutePath); $this->assertTrue($this->image->isCached()); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/Image/ContextTest.php b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/Image/ContextTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cdc1296486eef202a6410b6a3fd3a1d738ca60f9 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/Image/ContextTest.php @@ -0,0 +1,76 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Test\Unit\Model\View\Asset\Image; + +use Magento\Catalog\Model\Product\Media\ConfigInterface; +use Magento\Catalog\Model\View\Asset\Image\Context; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; + +/** + * Class ContextTest + */ +class ContextTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Context + */ + protected $model; + + /** + * @var WriteInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $mediaDirectory; + + /** + * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $mediaConfig; + + /** + * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject + */ + protected $filesystem; + + protected function setUp() + { + $this->mediaConfig = $this->getMockBuilder(ConfigInterface::class)->getMockForAbstractClass(); + $this->mediaConfig->expects($this->any())->method('getBaseMediaPath')->willReturn('catalog/product'); + $this->mediaDirectory = $this->getMockBuilder(WriteInterface::class)->getMockForAbstractClass(); + $this->mediaDirectory->expects($this->once())->method('create')->with('catalog/product'); + $this->filesystem = $this->getMockBuilder(Filesystem::class) + ->disableOriginalConstructor() + ->getMock(); + $this->filesystem->expects($this->once()) + ->method('getDirectoryWrite') + ->with(DirectoryList::MEDIA) + ->willReturn($this->mediaDirectory); + $this->model = new Context( + $this->mediaConfig, + $this->filesystem + ); + } + + public function testGetPath() + { + $path = '/var/www/html/magento2ce/pub/media/catalog/product'; + $this->mediaDirectory->expects($this->once()) + ->method('getAbsolutePath') + ->with('catalog/product') + ->willReturn($path); + + $this->assertEquals($path, $this->model->getPath()); + } + + public function testGetUrl() + { + $baseUrl = 'http://localhost/pub/media/catalog/product'; + $this->mediaConfig->expects($this->once())->method('getBaseMediaUrl')->willReturn($baseUrl); + + $this->assertEquals($baseUrl, $this->model->getBaseUrl()); + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/ImageTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5e96cdb1c3395182049e78ae29cd3b44bd0baf17 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/ImageTest.php @@ -0,0 +1,148 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Test\Unit\Model\View\Asset; + +use Magento\Catalog\Model\Product\Media\ConfigInterface; +use Magento\Catalog\Model\View\Asset\Image; +use Magento\Framework\Encryption\EncryptorInterface; +use Magento\Framework\View\Asset\ContextInterface; + +/** + * Class ImageTest + */ +class ImageTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Catalog\Model\View\Asset\Image + */ + protected $model; + + /** + * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $mediaConfig; + + /** + * @var EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $encryptor; + + /** + * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $imageContext; + + protected function setUp() + { + $this->mediaConfig = $this->getMockBuilder(ConfigInterface::class)->getMockForAbstractClass(); + $this->encryptor = $this->getMockBuilder(EncryptorInterface::class)->getMockForAbstractClass(); + $this->imageContext = $this->getMockBuilder(ContextInterface::class)->getMockForAbstractClass(); + $this->model = new Image( + $this->mediaConfig, + $this->imageContext, + $this->encryptor, + '/somefile.png' + ); + } + + public function testModuleAndContentAndContentType() + { + $contentType = 'image'; + $this->assertEquals($contentType, $this->model->getContentType()); + $this->assertEquals($contentType, $this->model->getSourceContentType()); + $this->assertNull($this->model->getContent()); + $this->assertEquals('cache', $this->model->getModule()); + } + + public function testGetFilePath() + { + $this->assertEquals('/somefile.png', $this->model->getFilePath()); + } + + public function testGetSoureFile() + { + $this->mediaConfig->expects($this->once())->method('getBaseMediaPath')->willReturn('catalog/product'); + $this->assertEquals('catalog/product/somefile.png', $this->model->getSourceFile()); + } + + public function testGetContext() + { + $this->assertInstanceOf(ContextInterface::class, $this->model->getContext()); + } + + /** + * @param string $filePath + * @param array $miscParams + * @dataProvider getPathDataProvider + */ + public function testGetPath($filePath, $miscParams) + { + $imageModel = new Image( + $this->mediaConfig, + $this->imageContext, + $this->encryptor, + $filePath, + $miscParams + ); + $absolutePath = '/var/www/html/magento2ce/pub/media/catalog/product'; + $hashPath = md5(implode('_', $miscParams)); + $this->imageContext->expects($this->once())->method('getPath')->willReturn($absolutePath); + $this->encryptor->expects($this->once())->method('hash')->willReturn($hashPath); + $this->assertEquals( + $absolutePath . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . $hashPath . $filePath, + $imageModel->getPath() + ); + } + + /** + * @param string $filePath + * @param array $miscParams + * @dataProvider getPathDataProvider + */ + public function testGetUrl($filePath, $miscParams) + { + $imageModel = new Image( + $this->mediaConfig, + $this->imageContext, + $this->encryptor, + $filePath, + $miscParams + ); + $absolutePath = 'http://localhost/pub/media/catalog/product'; + $hashPath = md5(implode('_', $miscParams)); + $this->imageContext->expects($this->once())->method('getBaseUrl')->willReturn($absolutePath); + $this->encryptor->expects($this->once())->method('hash')->willReturn($hashPath); + $this->assertEquals( + $absolutePath . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . $hashPath . $filePath, + $imageModel->getUrl() + ); + } + + public function getPathDataProvider() + { + return [ + [ + '/some_file.png', + [], //default value for miscParams + ], + [ + '/some_file_2.png', + [ + 'image_type' => 'thumbnail', + 'image_height' => 75, + 'image_width' => 75, + 'keep_aspect_ratio' => 'proportional', + 'keep_frame' => 'frame', + 'keep_transparency' => 'transparency', + 'constrain_only' => 'doconstrainonly', + 'background' => 'ffffff', + 'angle' => null, + 'quality' => 80, + ], + ] + ]; + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/PlaceholderTest.php b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/PlaceholderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..38d5ceb16e6b5b17e8e7cbaa1171513d68027e3c --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/View/Asset/PlaceholderTest.php @@ -0,0 +1,163 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Test\Unit\Model\View\Asset; + +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Catalog\Model\View\Asset\Placeholder; +use Magento\Framework\View\Asset\ContextInterface; +use Magento\Framework\View\Asset\Repository; + +/** + * Class PlaceholderTest + */ +class PlaceholderTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Catalog\Model\View\Asset\Placeholder + */ + protected $model; + + /** + * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $scopeConfig; + + /** + * @var Repository|\PHPUnit_Framework_MockObject_MockObject + */ + protected $repository; + + /** + * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $imageContext; + + protected function setUp() + { + $this->scopeConfig = $this->getMockBuilder(ScopeConfigInterface::class)->getMockForAbstractClass(); + $this->imageContext = $this->getMockBuilder(ContextInterface::class)->getMockForAbstractClass(); + $this->repository = $this->getMockBuilder(Repository::class)->disableOriginalConstructor()->getMock(); + $this->model = new Placeholder( + $this->imageContext, + $this->scopeConfig, + $this->repository, + 'thumbnail' + ); + } + + public function testModuleAndContentAndContentType() + { + $contentType = 'image'; + $this->assertEquals($contentType, $this->model->getContentType()); + $this->assertEquals($contentType, $this->model->getSourceContentType()); + $this->assertNull($this->model->getContent()); + $this->assertEquals('placeholder', $this->model->getModule()); + } + + public function testGetFilePath() + { + $this->assertNull($this->model->getFilePath()); + $this->scopeConfig->expects($this->once())->method('getValue')->willReturn('default/thumbnail.jpg'); + $this->assertEquals('default/thumbnail.jpg', $this->model->getFilePath()); + } + + public function testGetContext() + { + $this->assertInstanceOf(ContextInterface::class, $this->model->getContext()); + } + + /** + * @param string $imageType + * @param string $placeholderPath + * @dataProvider getPathDataProvider + */ + public function testGetPathAndGetSourceFile($imageType, $placeholderPath) + { + $imageModel = new Placeholder( + $this->imageContext, + $this->scopeConfig, + $this->repository, + $imageType + ); + $absolutePath = '/var/www/html/magento2ce/pub/media/catalog/product'; + + $this->scopeConfig->expects($this->any()) + ->method('getValue') + ->with( + "catalog/placeholder/{$imageType}_placeholder", + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + null + )->willReturn($placeholderPath); + + if ($placeholderPath == null) { + $this->imageContext->expects($this->never())->method('getPath'); + $assetMock = $this->getMockBuilder(\Magento\Framework\View\Asset\MergeableInterface::class) + ->getMockForAbstractClass(); + $expectedResult = 'path/to_default/placeholder/by_type'; + $assetMock->expects($this->any())->method('getSourceFile')->willReturn($expectedResult); + $this->repository->expects($this->any())->method('createAsset')->willReturn($assetMock); + } else { + $this->imageContext->expects($this->any())->method('getPath')->willReturn($absolutePath); + $expectedResult = $absolutePath + . DIRECTORY_SEPARATOR . $imageModel->getModule() + . DIRECTORY_SEPARATOR . $placeholderPath; + } + + $this->assertEquals($expectedResult, $imageModel->getPath()); + $this->assertEquals($expectedResult, $imageModel->getSourceFile()); + } + + /** + * @param string $imageType + * @param string $placeholderPath + * @dataProvider getPathDataProvider + */ + public function testGetUrl($imageType, $placeholderPath) + { + $imageModel = new Placeholder( + $this->imageContext, + $this->scopeConfig, + $this->repository, + $imageType + ); + + $this->scopeConfig->expects($this->any()) + ->method('getValue') + ->with( + "catalog/placeholder/{$imageType}_placeholder", + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + null + )->willReturn($placeholderPath); + + if ($placeholderPath == null) { + $this->imageContext->expects($this->never())->method('getBaseUrl'); + $expectedResult = 'http://localhost/pub/media/catalog/product/to_default/placeholder/by_type'; + $this->repository->expects($this->any())->method('getUrl')->willReturn($expectedResult); + } else { + $baseUrl = 'http://localhost/pub/media/catalog/product'; + $this->imageContext->expects($this->any())->method('getBaseUrl')->willReturn($baseUrl); + $expectedResult = $baseUrl + . DIRECTORY_SEPARATOR . $imageModel->getModule() + . DIRECTORY_SEPARATOR . $placeholderPath; + } + + $this->assertEquals($expectedResult, $imageModel->getUrl()); + } + + public function getPathDataProvider() + { + return [ + [ + 'thumbnail', + 'default/thumbnail.jpg', + ], + [ + 'non_exist', + null, + ], + ]; + } +} diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index 047c3f2fc7cabb19974f7d20fdc77952f06ebcd6..27b9a19065e99f22fccf4f2f42076c69d0f1e0c2 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -49,6 +49,8 @@ <preference for="Magento\Catalog\Model\Config\Source\ProductPriceOptionsInterface" type="Magento\Catalog\Model\Config\Source\Product\Options\Price"/> <preference for="Magento\Catalog\Model\Indexer\Product\Flat\Table\BuilderInterface" type="Magento\Catalog\Model\Indexer\Product\Flat\Table\Builder"/> <preference for="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface" type="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver"/> + <preference for="Magento\Catalog\Model\Product\Media\ConfigInterface" type="Magento\Catalog\Model\Product\Media\Config"/> + <preference for="Magento\Framework\View\Asset\ContextInterface" type="Magento\Catalog\Model\View\Asset\Image\Context"/> <type name="Magento\Customer\Model\ResourceModel\Visitor"> <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" /> </type> diff --git a/app/code/Magento/Catalog/view/adminhtml/web/template/image-preview.html b/app/code/Magento/Catalog/view/adminhtml/web/template/image-preview.html index fa8a4fec7cc78c6211194558421400c49660914a..3bc6e0a359c5ea710fdb7605a931464d7c26af17 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/template/image-preview.html +++ b/app/code/Magento/Catalog/view/adminhtml/web/template/image-preview.html @@ -31,5 +31,6 @@ <div class="file-uploader-filename" text="$file.name"/> <div class="file-uploader-meta"> <text args="$file.previewWidth"/>x<text args="$file.previewHeight"/> + <text args="$parent.formatSize($file.size)"/> </div> </div> diff --git a/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php b/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php index e7686e4bea58b3a5f4db81e1b11f2e17770744c8..bbb2c69cc39027ee962a64917c46131d65f7a278 100644 --- a/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php +++ b/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php @@ -23,6 +23,8 @@ class AttributeMerger 'textarea' => 'Magento_Ui/js/form/element/textarea', 'multiline' => 'Magento_Ui/js/form/components/group', 'multiselect' => 'Magento_Ui/js/form/element/multiselect', + 'image' => 'Magento_Ui/js/form/element/media', + 'file' => 'Magento_Ui/js/form/element/media', ]; /** @@ -32,6 +34,7 @@ class AttributeMerger */ protected $templateMap = [ 'image' => 'media', + 'file' => 'media', ]; /** diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php index 079aee7b23750bbb08d01ecae4c672c50bf1eeb2..4c1370b1a0d7aed1c786d318c3c65382277e2afe 100644 --- a/app/code/Magento/ConfigurableProduct/Helper/Data.php +++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php @@ -50,15 +50,13 @@ class Data ); $image->setData( 'medium_image_url', - $this->imageHelper->init($product, 'product_page_image_medium') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + $this->imageHelper->init($product, 'product_page_image_medium_no_frame') ->setImageFile($image->getFile()) ->getUrl() ); $image->setData( 'large_image_url', - $this->imageHelper->init($product, 'product_page_image_large') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + $this->imageHelper->init($product, 'product_page_image_large_no_frame') ->setImageFile($image->getFile()) ->getUrl() ); diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php index be1f4c76a4f45e3051c4d39f87c4619ffac1de3a..efb11e6b13a1d63d4fb9fbb37b5d5a89f5a8f511 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php @@ -35,7 +35,7 @@ class DataTest extends \PHPUnit_Framework_TestCase public function testGetAllowAttributes() { - $typeInstanceMock = $this->getMock( + $typeInstanceMock = $this->getMock( \Magento\ConfigurableProduct\Model\Product\Type\Configurable::class, [], [], '', false ); $typeInstanceMock->expects($this->once()) @@ -91,7 +91,7 @@ class DataTest extends \PHPUnit_Framework_TestCase */ public function getOptionsDataProvider() { - $currentProductMock = $this->getMock( + $currentProductMock = $this->getMock( \Magento\Catalog\Model\Product::class, ['getTypeInstance', '__wakeup'], [], '', false ); $provider = []; @@ -106,10 +106,10 @@ class DataTest extends \PHPUnit_Framework_TestCase $attributesCount = 3; $attributes = []; for ($i = 1; $i < $attributesCount; $i++) { - $attribute = $this->getMock( + $attribute = $this->getMock( \Magento\Framework\DataObject::class, ['getProductAttribute'], [], '', false ); - $productAttribute = $this->getMock( + $productAttribute = $this->getMock( \Magento\Framework\DataObject::class, ['getId', 'getAttributeCode'], [], @@ -127,7 +127,7 @@ class DataTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($productAttribute)); $attributes[] = $attribute; } - $typeInstanceMock = $this->getMock( + $typeInstanceMock = $this->getMock( \Magento\ConfigurableProduct\Model\Product\Type\Configurable::class, [], [], '', false ); $typeInstanceMock->expects($this->any()) @@ -138,7 +138,7 @@ class DataTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($typeInstanceMock)); $allowedProducts = []; for ($i = 1; $i <= 2; $i++) { - $productMock = $this->getMock( + $productMock = $this->getMock( \Magento\Catalog\Model\Product::class, ['getData', 'getImage', 'getId', '__wakeup', 'getMediaGalleryImages'], [], '', false ); $productMock->expects($this->any()) @@ -195,4 +195,64 @@ class DataTest extends \PHPUnit_Framework_TestCase } return $map[$key]; } + + public function testGetGalleryImages() + { + $productMock = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductInterface::class) + ->setMethods(['getMediaGalleryImages']) + ->getMockForAbstractClass(); + $productMock->expects($this->once()) + ->method('getMediaGalleryImages') + ->willReturn($this->getImagesCollection()); + + $this->_imageHelperMock->expects($this->exactly(3)) + ->method('init') + ->willReturnMap([ + [$productMock, 'product_page_image_small', [], $this->_imageHelperMock], + [$productMock, 'product_page_image_medium_no_frame', [], $this->_imageHelperMock], + [$productMock, 'product_page_image_large_no_frame', [], $this->_imageHelperMock], + ]) + ->willReturnSelf(); + $this->_imageHelperMock->expects($this->exactly(3)) + ->method('setImageFile') + ->with('test_file') + ->willReturnSelf(); + $this->_imageHelperMock->expects($this->at(0)) + ->method('getUrl') + ->willReturn('product_page_image_small_url'); + $this->_imageHelperMock->expects($this->at(1)) + ->method('getUrl') + ->willReturn('product_page_image_medium_url'); + $this->_imageHelperMock->expects($this->at(2)) + ->method('getUrl') + ->willReturn('product_page_image_large_url'); + + $this->assertInstanceOf( + \Magento\Framework\Data\Collection::class, + $this->_model->getGalleryImages($productMock) + ); + + } + + /** + * @return \Magento\Framework\Data\Collection + */ + private function getImagesCollection() + { + $collectionMock = $this->getMockBuilder(\Magento\Framework\Data\Collection::class) + ->disableOriginalConstructor() + ->getMock(); + + $items = [ + new \Magento\Framework\DataObject([ + 'file' => 'test_file' + ]), + ]; + + $collectionMock->expects($this->any()) + ->method('getIterator') + ->willReturn(new \ArrayIterator($items)); + + return $collectionMock; + } } diff --git a/app/code/Magento/Customer/Model/Customer/DataProvider.php b/app/code/Magento/Customer/Model/Customer/DataProvider.php index 2f46459a794eca284e91c1dddf3c2e39def0cd9f..b01b8b7d833e278d8d8f157910f9056e20099222 100644 --- a/app/code/Magento/Customer/Model/Customer/DataProvider.php +++ b/app/code/Magento/Customer/Model/Customer/DataProvider.php @@ -271,23 +271,18 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider ) { $stat = $fileProcessor->getStat($file); $viewUrl = $fileProcessor->getViewUrl($file, $attribute->getFrontendInput()); - } - - $fileName = $file; - if (strrpos($fileName, '/') !== false) { - $fileName = substr($fileName, strrpos($fileName, '/') + 1); - } - if (!empty($file)) { return [ [ 'file' => $file, 'size' => isset($stat) ? $stat['size'] : 0, 'url' => isset($viewUrl) ? $viewUrl : '', - 'name' => $fileName, + 'name' => basename($file), + 'type' => $fileProcessor->getMimeType($file), ], ]; } + return []; } diff --git a/app/code/Magento/Customer/Model/FileProcessor.php b/app/code/Magento/Customer/Model/FileProcessor.php index c98a85cc18463306b3360982b336a945ed63de3c..3e0ae375fcff132cb90d85ddfff0b71b04aa66e4 100644 --- a/app/code/Magento/Customer/Model/FileProcessor.php +++ b/app/code/Magento/Customer/Model/FileProcessor.php @@ -5,17 +5,6 @@ */ namespace Magento\Customer\Model; -use Magento\Customer\Api\AddressMetadataInterface; -use Magento\Customer\Api\CustomerMetadataInterface; -use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Exception\LocalizedException; -use Magento\Framework\Filesystem; -use Magento\Framework\Filesystem\Directory\WriteInterface; -use Magento\Framework\Url\EncoderInterface; -use Magento\Framework\UrlInterface; -use Magento\MediaStorage\Model\File\Uploader; -use Magento\MediaStorage\Model\File\UploaderFactory; - class FileProcessor { /** @@ -24,22 +13,22 @@ class FileProcessor const TMP_DIR = 'tmp'; /** - * @var WriteInterface + * @var \Magento\Framework\Filesystem\Directory\WriteInterface */ private $mediaDirectory; /** - * @var UploaderFactory + * @var \Magento\MediaStorage\Model\File\UploaderFactory */ private $uploaderFactory; /** - * @var UrlInterface + * @var \Magento\Framework\UrlInterface */ private $urlBuilder; /** - * @var EncoderInterface + * @var \Magento\Framework\Url\EncoderInterface */ private $urlEncoder; @@ -54,26 +43,34 @@ class FileProcessor private $allowedExtensions = []; /** - * @param Filesystem $filesystem - * @param UploaderFactory $uploaderFactory - * @param UrlInterface $urlBuilder - * @param EncoderInterface $urlEncoder + * @var \Magento\Framework\File\Mime + */ + private $mime; + + /** + * @param \Magento\Framework\Filesystem $filesystem + * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory + * @param \Magento\Framework\UrlInterface $urlBuilder + * @param \Magento\Framework\Url\EncoderInterface $urlEncoder * @param string $entityTypeCode + * @param \Magento\Framework\File\Mime $mime * @param array $allowedExtensions */ public function __construct( - Filesystem $filesystem, - UploaderFactory $uploaderFactory, - UrlInterface $urlBuilder, - EncoderInterface $urlEncoder, + \Magento\Framework\Filesystem $filesystem, + \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory, + \Magento\Framework\UrlInterface $urlBuilder, + \Magento\Framework\Url\EncoderInterface $urlEncoder, $entityTypeCode, + \Magento\Framework\File\Mime $mime, array $allowedExtensions = [] ) { - $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $this->mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA); $this->uploaderFactory = $uploaderFactory; $this->urlBuilder = $urlBuilder; $this->urlEncoder = $urlEncoder; $this->entityTypeCode = $entityTypeCode; + $this->mime = $mime; $this->allowedExtensions = $allowedExtensions; } @@ -107,6 +104,21 @@ class FileProcessor return $result; } + /** + * Retrieve MIME type of requested file + * + * @param string $fileName + * @return string + */ + public function getMimeType($fileName) + { + $filePath = $this->entityTypeCode . '/' . ltrim($fileName, '/'); + $absoluteFilePath = $this->mediaDirectory->getAbsolutePath($filePath); + + $result = $this->mime->getMimeType($absoluteFilePath); + return $result; + } + /** * Check if the file exists * @@ -132,13 +144,13 @@ class FileProcessor { $viewUrl = ''; - if ($this->entityTypeCode == AddressMetadataInterface::ENTITY_TYPE_ADDRESS) { + if ($this->entityTypeCode == \Magento\Customer\Api\AddressMetadataInterface::ENTITY_TYPE_ADDRESS) { $filePath = $this->entityTypeCode . '/' . ltrim($filePath, '/'); - $viewUrl = $this->urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]) + $viewUrl = $this->urlBuilder->getBaseUrl(['_type' => \Magento\Framework\UrlInterface::URL_TYPE_MEDIA]) . $this->mediaDirectory->getRelativePath($filePath); } - if ($this->entityTypeCode == CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER) { + if ($this->entityTypeCode == \Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER) { $viewUrl = $this->urlBuilder->getUrl( 'customer/index/viewfile', [$type => $this->urlEncoder->encode(ltrim($filePath, '/'))] @@ -153,11 +165,11 @@ class FileProcessor * * @param string $fileId * @return \string[] - * @throws LocalizedException + * @throws \Magento\Framework\Exception\LocalizedException */ public function saveTemporaryFile($fileId) { - /** @var Uploader $uploader */ + /** @var \Magento\MediaStorage\Model\File\Uploader $uploader */ $uploader = $this->uploaderFactory->create(['fileId' => $fileId]); $uploader->setFilesDispersion(false); $uploader->setFilenamesCaseSensitivity(false); @@ -170,7 +182,9 @@ class FileProcessor $result = $uploader->save($path); if (!$result) { - throw new LocalizedException(__('File can not be saved to the destination folder.')); + throw new \Magento\Framework\Exception\LocalizedException( + __('File can not be saved to the destination folder.') + ); } return $result; @@ -181,28 +195,28 @@ class FileProcessor * * @param string $fileName * @return string - * @throws LocalizedException + * @throws \Magento\Framework\Exception\LocalizedException */ public function moveTemporaryFile($fileName) { $fileName = ltrim($fileName, '/'); - $dispersionPath = Uploader::getDispretionPath($fileName); + $dispersionPath = \Magento\MediaStorage\Model\File\Uploader::getDispretionPath($fileName); $destinationPath = $this->entityTypeCode . $dispersionPath; if (!$this->mediaDirectory->create($destinationPath)) { - throw new LocalizedException( + throw new \Magento\Framework\Exception\LocalizedException( __('Unable to create directory %1.', $destinationPath) ); } if (!$this->mediaDirectory->isWritable($destinationPath)) { - throw new LocalizedException( + throw new \Magento\Framework\Exception\LocalizedException( __('Destination folder is not writable or does not exists.') ); } - $destinationFileName = Uploader::getNewFileName( + $destinationFileName = \Magento\MediaStorage\Model\File\Uploader::getNewFileName( $this->mediaDirectory->getAbsolutePath($destinationPath) . '/' . $fileName ); @@ -212,7 +226,7 @@ class FileProcessor $destinationPath . '/' . $destinationFileName ); } catch (\Exception $e) { - throw new LocalizedException( + throw new \Magento\Framework\Exception\LocalizedException( __('Something went wrong while saving the file.') ); } diff --git a/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php index e594432b5bd66358a2ed13f3d93d41f26f73a7bd..1077736bd44651d470591141fd1cdb230de8cb1e 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php @@ -688,6 +688,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase $filename = '/filename.ext1'; $viewUrl = 'viewUrl'; + $mime = 'image/png'; $expectedData = [ $customerId => [ @@ -699,6 +700,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase 'size' => 1, 'url' => $viewUrl, 'name' => 'filename.ext1', + 'type' => $mime, ], ], ], @@ -778,6 +780,10 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase ->method('getViewUrl') ->with('/filename.ext1', 'image') ->willReturn($viewUrl); + $this->fileProcessor->expects($this->once()) + ->method('getMimeType') + ->with($filename) + ->willReturn($mime); $objectManager = new ObjectManager($this); $dataProvider = $objectManager->getObject( diff --git a/app/code/Magento/Customer/Test/Unit/Model/FileProcessorTest.php b/app/code/Magento/Customer/Test/Unit/Model/FileProcessorTest.php index 69064dbc1a420106a26bc6daba0a35db4b82800d..8a0cacf02baa2d20d9187acb9240d28a39b1a374 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/FileProcessorTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/FileProcessorTest.php @@ -37,6 +37,11 @@ class FileProcessorTest extends \PHPUnit_Framework_TestCase */ private $mediaDirectory; + /** + * @var \Magento\Framework\File\Mime|\PHPUnit_Framework_MockObject_MockObject + */ + private $mime; + protected function setUp() { $this->mediaDirectory = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\WriteInterface::class) @@ -60,6 +65,10 @@ class FileProcessorTest extends \PHPUnit_Framework_TestCase $this->urlEncoder = $this->getMockBuilder(\Magento\Framework\Url\EncoderInterface::class) ->getMockForAbstractClass(); + + $this->mime = $this->getMockBuilder(\Magento\Framework\File\Mime::class) + ->disableOriginalConstructor() + ->getMock(); } private function getModel($entityTypeCode, array $allowedExtensions = []) @@ -70,6 +79,7 @@ class FileProcessorTest extends \PHPUnit_Framework_TestCase $this->urlBuilder, $this->urlEncoder, $entityTypeCode, + $this->mime, $allowedExtensions ); return $model; @@ -376,4 +386,26 @@ class FileProcessorTest extends \PHPUnit_Framework_TestCase $model = $this->getModel(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER); $model->moveTemporaryFile($filePath); } + + public function testGetMimeType() + { + $fileName = '/filename.ext1'; + $absoluteFilePath = '/absolute_path/customer/filename.ext1'; + + $expected = 'ext1'; + + $this->mediaDirectory->expects($this->once()) + ->method('getAbsolutePath') + ->with(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER . '/' . ltrim($fileName, '/')) + ->willReturn($absoluteFilePath); + + $this->mime->expects($this->once()) + ->method('getMimeType') + ->with($absoluteFilePath) + ->willReturn($expected); + + $model = $this->getModel(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER); + + $this->assertEquals($expected, $model->getMimeType($fileName)); + } } diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AccountLockTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AccountLockTest.php index c72cf9fddd0b7043759b0c1706e3018f51bce174..c6f113d56c38f587ffa10c0d21f3d6fe8a5c2ac2 100644 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AccountLockTest.php +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AccountLockTest.php @@ -46,27 +46,9 @@ class AccountLockTest extends \PHPUnit_Framework_TestCase */ public function testPrepareDataSource($lockExpirationDate, $expectedResult) { - $dataSource = [ - 'data' => [ - 'items' => [ - [ - 'lock_expires' => $lockExpirationDate - ], - ] - ] - ]; - $expectedDataSource = [ - 'data' => [ - 'items' => [ - [ - 'lock_expires' => $expectedResult, - ], - ] - ] - ]; - $dataSource = $this->component->prepareDataSource($dataSource); + $dataSource = $this->component->prepareDataSource($lockExpirationDate); - $this->assertEquals($expectedDataSource, $dataSource); + $this->assertEquals($expectedResult, $dataSource); } /** @@ -76,13 +58,77 @@ class AccountLockTest extends \PHPUnit_Framework_TestCase { return [ [ - 'lockExpirationDate' => date("F j, Y", strtotime('-1 days')), - 'expectedResult' => new \Magento\Framework\Phrase('Unlocked') + 'lockExpirationDate' => [ + 'data' => [ + 'items' => [['lock_expires' => null]], + ] + ], + 'expectedResult' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => new \Magento\Framework\Phrase('Unlocked') + ], + ] + ] + ] ], [ - 'lockExpirationDate' => date("F j, Y", strtotime('+1 days')), - 'expectedResult' => new \Magento\Framework\Phrase('Locked') - ] + 'lockExpirationDate' => [ + 'data' => [ + 'items' => [[]]//Non exist lock_expires data + ] + ], + 'expectedResult' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => new \Magento\Framework\Phrase('Unlocked') + ], + ] + ] + ] + ], + [ + 'lockExpirationDate' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => date("F j, Y", strtotime('-1 days')) + ], + ] + ] + ], + 'expectedResult' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => new \Magento\Framework\Phrase('Unlocked') + ], + ] + ] + ] + ], + [ + 'lockExpirationDate' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => date("F j, Y", strtotime('+1 days')) + ], + ] + ] + ], + 'expectedResult' => [ + 'data' => [ + 'items' => [ + [ + 'lock_expires' => new \Magento\Framework\Phrase('Locked') + ], + ] + ] + ] + ], ]; } } diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Column/AccountLock.php b/app/code/Magento/Customer/Ui/Component/Listing/Column/AccountLock.php index 5e2e92e1c933e070c04b26713c067c51d14397e5..3622829f53f0cfd74c82820d32f56f6a11bb91ee 100644 --- a/app/code/Magento/Customer/Ui/Component/Listing/Column/AccountLock.php +++ b/app/code/Magento/Customer/Ui/Component/Listing/Column/AccountLock.php @@ -41,9 +41,13 @@ class AccountLock extends Column { if (isset($dataSource['data']['items'])) { foreach ($dataSource['data']['items'] as & $item) { - $lockExpires = new \DateTime($item['lock_expires']); - if ($lockExpires > new \DateTime()) { - $item['lock_expires'] = __('Locked'); + if (array_key_exists('lock_expires', $item)) { + $lockExpires = new \DateTime($item['lock_expires']); + if ($lockExpires > new \DateTime()) { + $item['lock_expires'] = __('Locked'); + } else { + $item['lock_expires'] = __('Unlocked'); + } } else { $item['lock_expires'] = __('Unlocked'); } diff --git a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php index 3fdb20165d4bea912e42c94e14c5c0b3e01cdf8e..7d3f63e257e5e23ecf49c3845d34aad0ced2287f 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php @@ -253,7 +253,7 @@ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\Ab if (count($options) > 0) { array_unshift( $options, - ['title' => null, 'value' => null, 'label' => __('Please select a region, state or province.')] + ['title' => '', 'value' => '', 'label' => __('Please select a region, state or province.')] ); } return $options; diff --git a/app/code/Magento/Downloadable/view/adminhtml/web/template/components/file-uploader.html b/app/code/Magento/Downloadable/view/adminhtml/web/template/components/file-uploader.html index 907c184dfce575c9ed1e9eb8a1be9de3c042f8f0..8cbe03034aa4408d3a84335dce6395e78427faae 100644 --- a/app/code/Magento/Downloadable/view/adminhtml/web/template/components/file-uploader.html +++ b/app/code/Magento/Downloadable/view/adminhtml/web/template/components/file-uploader.html @@ -1,3 +1,10 @@ +<!-- +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> + <div class="admin__field-control"> <div class="file-uploader" data-role="drop-zone" css="_loading: isLoading"> <each args="data: value, as: '$file'"> @@ -16,4 +23,4 @@ <span class="file-uploader-spinner"/> </div> </div> -</div> \ No newline at end of file +</div> diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php index 12375a5a6ca07404fbcf813c56dc76f3a404c5d3..b25677846622bf175fb6c80ae632132d2fb43e2d 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php @@ -80,13 +80,13 @@ class Queue extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subscriberIds ); - $usedIds = $connection->fetchCol($select); + $usedIds = array_flip($connection->fetchCol($select)); + $subscriberIds = array_flip($subscriberIds); + $newIds = array_diff_key($subscriberIds, $usedIds); + $connection->beginTransaction(); try { - foreach ($subscriberIds as $subscriberId) { - if (in_array($subscriberId, $usedIds)) { - continue; - } + foreach (array_keys($newIds) as $subscriberId) { $data = []; $data['queue_id'] = $queue->getId(); $data['subscriber_id'] = $subscriberId; diff --git a/app/code/Magento/Swatches/Helper/Data.php b/app/code/Magento/Swatches/Helper/Data.php index a973a822c4101671faa0fe57925a0e9b0c5b2f2a..d80aaaf73ccf016bc1d571254cfc90a7f0452c3d 100644 --- a/app/code/Magento/Swatches/Helper/Data.php +++ b/app/code/Magento/Swatches/Helper/Data.php @@ -328,12 +328,10 @@ class Data private function getAllSizeImages(ModelProduct $product, $imageFile) { return [ - 'large' => $this->imageHelper->init($product, 'product_page_image_large') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + 'large' => $this->imageHelper->init($product, 'product_page_image_large_no_frame') ->setImageFile($imageFile) ->getUrl(), - 'medium' => $this->imageHelper->init($product, 'product_page_image_medium') - ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + 'medium' => $this->imageHelper->init($product, 'product_page_image_medium_no_frame') ->setImageFile($imageFile) ->getUrl(), 'small' => $this->imageHelper->init($product, 'product_page_image_small') diff --git a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php index e5f2f887836eff5ad73ca95602d4d7aec411150e..10f26acfc2594499adb80cd6df5bfee1fc277f88 100644 --- a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php +++ b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php @@ -340,8 +340,8 @@ class DataTest extends \PHPUnit_Framework_TestCase $this->imageHelperMock->expects($this->any()) ->method('init') ->willReturnMap([ - [$this->productMock, 'product_page_image_large', [], $this->imageHelperMock], - [$this->productMock, 'product_page_image_medium', [], $this->imageHelperMock], + [$this->productMock, 'product_page_image_large_no_frame', [], $this->imageHelperMock], + [$this->productMock, 'product_page_image_medium_no_frame', [], $this->imageHelperMock], [$this->productMock, 'product_page_image_small', [], $this->imageHelperMock], ]); @@ -349,15 +349,6 @@ class DataTest extends \PHPUnit_Framework_TestCase ->method('setImageFile') ->with($image) ->willReturnSelf(); - $this->imageHelperMock->expects($this->any()) - ->method('constrainOnly') - ->willReturnSelf(); - $this->imageHelperMock->expects($this->any()) - ->method('keepAspectRatio') - ->willReturnSelf(); - $this->imageHelperMock->expects($this->any()) - ->method('keepFrame') - ->willReturnSelf(); $this->imageHelperMock->expects($this->any()) ->method('getUrl') ->willReturn('http://full_path_to_image/magento1.png'); diff --git a/app/code/Magento/Theme/Model/Design/Backend/File.php b/app/code/Magento/Theme/Model/Design/Backend/File.php index e788c6892f4c89e20f89b454f7a6061f30d08b0b..0d93352f041ac6af29abb16e4ffcb7d837ad5634 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/File.php +++ b/app/code/Magento/Theme/Model/Design/Backend/File.php @@ -9,8 +9,10 @@ use Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface; use Magento\Config\Model\Config\Backend\File as BackendFile; use Magento\Framework\App\Cache\TypeListInterface; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Data\Collection\AbstractDb; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\File\Mime; use Magento\Framework\Filesystem; use Magento\Framework\Model\Context; use Magento\Framework\Model\ResourceModel\AbstractResource; @@ -29,6 +31,11 @@ class File extends BackendFile */ protected $urlBuilder; + /** + * @var Mime + */ + private $mime; + /** * @param Context $context * @param Registry $registry @@ -125,7 +132,9 @@ class File extends BackendFile 'url' => $url, 'file' => $value, 'size' => is_array($stat) ? $stat['size'] : 0, - 'exists' => true + 'name' => basename($value), + 'type' => $this->getMimeType($fileName), + 'exists' => true, ] ]; } @@ -192,4 +201,33 @@ class File extends BackendFile { return 'tmp/' . FileProcessor::FILE_DIR . '/' . $filename; } + + /** + * Retrieve MIME type of requested file + * + * @param string $fileName + * @return string + */ + private function getMimeType($fileName) + { + $absoluteFilePath = $this->_mediaDirectory->getAbsolutePath($fileName); + + $result = $this->getMime()->getMimeType($absoluteFilePath); + return $result; + } + + /** + * Get Mime instance + * + * @return Mime + * + * @deprecated + */ + private function getMime() + { + if ($this->mime === null) { + $this->mime = ObjectManager::getInstance()->get(Mime::class); + } + return $this->mime; + } } diff --git a/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php index 5a132b0250079123694a23addaea3935d53cb685..786a1820aa5b3f53bbb55aa5f3e0693be2b1776f 100644 --- a/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php @@ -135,7 +135,6 @@ class FileProcessor */ protected function save($fileId, $destination) { - $result = ['file' => '', 'size' => '']; /** @var File $backendModel */ $backendModel = $this->getBackendModel($fileId); $uploader = $this->uploaderFactory->create(['fileId' => $fileId]); @@ -143,7 +142,9 @@ class FileProcessor $uploader->setFilesDispersion(false); $uploader->setAllowedExtensions($backendModel->getAllowedExtensions()); $uploader->addValidateCallback('size', $backendModel, 'validateMaxSize'); - return array_intersect_key($uploader->save($destination), $result); + + $result = $uploader->save($destination); + return $result; } /** diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php index 7dd8b636210fc6ca6ab86398e2ceb12bd590529f..7038edebac0204ee945e67bbd6e0db2d7b5bbac0 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php @@ -23,6 +23,11 @@ class FileTest extends \PHPUnit_Framework_TestCase /** @var File */ protected $fileBackend; + /** + * @var \Magento\Framework\File\Mime|\PHPUnit_Framework_MockObject_MockObject + */ + private $mime; + public function setUp() { $context = $this->getMockObject(\Magento\Framework\Model\Context::class); @@ -46,6 +51,10 @@ class FileTest extends \PHPUnit_Framework_TestCase $this->urlBuilder = $this->getMockBuilder(\Magento\Framework\UrlInterface::class) ->getMockForAbstractClass(); + $this->mime = $this->getMockBuilder(\Magento\Framework\File\Mime::class) + ->disableOriginalConstructor() + ->getMock(); + $this->fileBackend = new File( $context, $registry, @@ -56,6 +65,13 @@ class FileTest extends \PHPUnit_Framework_TestCase $filesystem, $this->urlBuilder ); + + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $objectManager->setBackwardCompatibleProperty( + $this->fileBackend, + 'mime', + $this->mime + ); } public function tearDown() @@ -91,6 +107,10 @@ class FileTest extends \PHPUnit_Framework_TestCase public function testAfterLoad() { $value = 'filename.jpg'; + $mime = 'image/jpg'; + + $absoluteFilePath = '/absolute_path/' . $value; + $this->fileBackend->setValue($value); $this->fileBackend->setFieldConfig( [ @@ -109,6 +129,11 @@ class FileTest extends \PHPUnit_Framework_TestCase ->method('isExist') ->with('value/' . $value) ->willReturn(true); + $this->mediaDirectory->expects($this->once()) + ->method('getAbsolutePath') + ->with('value/' . $value) + ->willReturn($absoluteFilePath); + $this->urlBuilder->expects($this->once()) ->method('getBaseUrl') ->with(['_type' => UrlInterface::URL_TYPE_MEDIA]) @@ -122,6 +147,11 @@ class FileTest extends \PHPUnit_Framework_TestCase ->with('value/' . $value) ->willReturn(['size' => 234234]); + $this->mime->expects($this->once()) + ->method('getMimeType') + ->with($absoluteFilePath) + ->willReturn($mime); + $this->fileBackend->afterLoad(); $this->assertEquals( [ @@ -130,6 +160,8 @@ class FileTest extends \PHPUnit_Framework_TestCase 'file' => $value, 'size' => 234234, 'exists' => true, + 'name' => $value, + 'type' => $mime, ] ], $this->fileBackend->getValue() diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php index 1cd1072ce69f12110936e4a518990dd854713fd7..61e510ec25cea949a28042c69331d02861891d7b 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php @@ -135,11 +135,18 @@ class FileProcessorTest extends \PHPUnit_Framework_TestCase $this->uploader->expects($this->once()) ->method('save') ->with('absolute/path/to/tmp/media') - ->willReturn(['file' => 'file.jpg', 'size' => '234234']); + ->willReturn([ + 'file' => 'file.jpg', + 'size' => '234234', + 'type' => 'image/jpg', + 'name' => 'file.jpg', + ]); $this->assertEquals( [ 'file' => 'file.jpg', + 'name' => 'file.jpg', 'size' => '234234', + 'type' => 'image/jpg', 'url' => 'http://magento2.com/pub/media/tmp/' . FileProcessor::FILE_DIR . '/file.jpg' ], $this->fileProcessor->saveToTmp($fieldCode) diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/country.js b/app/code/Magento/Ui/view/base/web/js/form/element/country.js index c72d02c595bb8d8d4185f8bc9969cfa3a3bc5940..cd611a04a1569d45f7edb0668f0fee75833e396d 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/country.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/country.js @@ -42,6 +42,7 @@ define([ }); this.setOptions(result); + this.reset(); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/file-uploader.js b/app/code/Magento/Ui/view/base/web/js/form/element/file-uploader.js index 32ebd40f75346afb4d2d06cd6f9c4db16950fd4a..a695102bfdfa69e68bf664847c3cb31f4d563cb5 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/file-uploader.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/file-uploader.js @@ -18,6 +18,7 @@ define([ value: [], maxFileSize: false, isMultipleFiles: false, + placeholderType: 'document', // 'image', 'video' allowedExtensions: false, previewTmpl: 'ui/form/element/uploader/preview', dropZone: '[data-role=drop-zone]', @@ -158,6 +159,8 @@ define([ * @returns {Object} Modified file object. */ processFile: function (file) { + file.previewType = this.getFilePreviewType(file); + this.observe.call(file, true, [ 'previewWidth', 'previewHeight' @@ -235,6 +238,24 @@ define([ return validator('validate-file-type', file.name, this.allowedExtensions); }, + /** + * Get simplified file type. + * + * @param {Object} file - File to be checked. + * @returns {String} + */ + getFilePreviewType: function (file) { + var type; + + if (!file.type) { + return 'document'; + } + + type = file.type.split('/')[0]; + + return type !== 'image' && type !== 'video' ? 'document' : type; + }, + /** * Checks if size of provided file exceeds * defined in configuration size limits. diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/preview.html b/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/preview.html index 91c2eb1bcd0dce2c7aba7e195a2364015f2470c9..45493b83d8f58222dd39a683a6db0effaa7d2464 100644 --- a/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/preview.html +++ b/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/preview.html @@ -6,9 +6,11 @@ --> <div class="file-uploader-summary"> <div class="file-uploader-preview"> - <a attr="href: $parent.getFilePreview($file)" target="_blank"> + <a class="preview-link" + css="'preview-' + $file.previewType" + attr="href: $parent.getFilePreview($file), title: $file.name" target="_blank"> <img - class="preview-image" + if="$file.previewType === 'image'" tabindex="0" event="load: $parent.onPreviewLoad.bind($parent)" attr=" @@ -29,8 +31,11 @@ </div> <div class="file-uploader-filename" text="$file.name"/> + <div class="file-uploader-meta"> - <text args="$file.previewWidth"/>x<text args="$file.previewHeight"/>, + <span if="$file.previewType === 'image'"> + <text args="$file.previewWidth"/>x<text args="$file.previewHeight"/>, + </span> <text args="$parent.formatSize($file.size)"/> </div> </div> diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/uploader.html b/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/uploader.html index ab309026c9ffeb3a8e56816c19994b33d34d4116..f0f80efdb16d61745aa3624519c371634eba6130 100644 --- a/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/uploader.html +++ b/app/code/Magento/Ui/view/base/web/templates/form/element/uploader/uploader.html @@ -4,6 +4,7 @@ * See COPYING.txt for license details. */ --> + <div class="admin__field" visible="visible" css="$data.additionalClasses"> <label class="admin__field-label" if="$data.label" attr="for: uid"> <span translate="label" attr="'data-config-scope': $data.scopeLabel"/> @@ -28,6 +29,15 @@ <label class="admin__field-error" if="error" attr="for: uid" text="error"/> <each args="data: value, as: '$file'" render="$parent.getPreviewTmpl($file)"/> + + <div if="isMultipleFiles" class="file-uploader-summary"> + <label attr="for: uid" + class="file-uploader-placeholder" + css="'placeholder-' + placeholderType"> + <span class="file-uploader-placeholder-text" + translate="'Click here or drag and drop to add files.'"/> + </label> + </div> </div> <render args="$data.service.template" if="$data.hasService()"/> </div> diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-uploader.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-uploader.less index 7637e64d830d1ea3f7b8a36404bf8c14b661d656..e0639704f4583f1fb7dee0cd1bc0af73687ecaa1 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-uploader.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-uploader.less @@ -15,6 +15,17 @@ @file-uploader-preview__background-color: @color-white; @file-uploader-preview-focus__color: @color-blue2; +@file-uploader-document-icon__color: @color-gray80; +@file-uploader-document-icon__size: 7rem; +@file-uploader-document-icon__z-index: @data-grid-file-uploader-image__z-index + 1; + +@file-uploader-video-icon__color: @color-gray80; +@file-uploader-video-icon__size: 4rem; +@file-uploader-video-icon__z-index: @data-grid-file-uploader-image__z-index + 1; + +@file-uploader-placeholder-icon__color: @color-gray80; +@file-uploader-placeholder-icon__z-index: @data-grid-file-uploader-image__z-index + 1; + @file-uploader-delete-icon__color: @color-brownie; @file-uploader-delete-icon__hover__color: @color-brownie-vanilla; @file-uploader-delete-icon__font-size: 2rem; @@ -48,7 +59,6 @@ // --------------------------------------------- .file-uploader-area { - margin-bottom: @indent__xs; position: relative; input[type='file'] { @@ -66,6 +76,11 @@ } } +.file-uploader-summary { + display: inline-block; + vertical-align: top; +} + .file-uploader-button { cursor: pointer; display: inline-block; @@ -89,17 +104,6 @@ } .file-uploader-preview { - background: @file-uploader-preview__background-color; - border: 1px solid @file-uploader-preview__border-color; - box-sizing: border-box; - cursor: pointer; - height: @file-uploader-preview__height; - line-height: 1; - margin-bottom: @indent__s; - overflow: hidden; - position: relative; - width: @file-uploader-preview__width; - .action-remove { &:extend(.abs-action-reset all); .lib-icon-font ( @@ -123,12 +127,18 @@ } &:hover { - .preview-image { + .preview-image img, + .preview-link:before { opacity: @file-uploader-preview__opacity; } } - .preview-image { + .preview-link { + display: block; + height: 100%; + } + + .preview-image img { bottom: 0; left: 0; margin: auto; @@ -139,6 +149,59 @@ top: 0; z-index: 1; } + + .preview-video { + .lib-icon-font( + @icon-video__content, + @_icon-font: @icons-admin__font-name, + @_icon-font-size: @file-uploader-video-icon__size, + @_icon-font-color: @file-uploader-video-icon__color, + @_icon-font-color-hover: @file-uploader-video-icon__color + ); + + &:before { + left: 0; + margin-top: -@file-uploader-video-icon__size / 2; + position: absolute; + right: 0; + top: 50%; + z-index: @file-uploader-video-icon__z-index; + } + } + + .preview-document { + .lib-icon-font( + @icon-document__content, + @_icon-font: @icons-admin__font-name, + @_icon-font-size: @file-uploader-document-icon__size, + @_icon-font-color: @file-uploader-document-icon__color, + @_icon-font-color-hover: @file-uploader-document-icon__color + ); + + &:before { + left: 0; + margin-top: -@file-uploader-document-icon__size / 2; + position: absolute; + right: 0; + top: 50%; + z-index: @file-uploader-document-icon__z-index; + } + } +} + +.file-uploader-preview, +.file-uploader-placeholder { + background: @file-uploader-preview__background-color; + border: 1px solid @file-uploader-preview__border-color; + box-sizing: border-box; + cursor: pointer; + display: block; + height: @file-uploader-preview__height; + line-height: 1; + margin: @indent__s @indent__m @indent__s 0; + overflow: hidden; + position: relative; + width: @file-uploader-preview__width; } .file-uploader { @@ -154,6 +217,8 @@ } .file-uploader-filename { + .lib-text-overflow(); + max-width: @file-uploader-preview__width; word-break: break-all; &:first-child { @@ -176,6 +241,76 @@ } } +// Placeholder for multiple uploader +.file-uploader-placeholder { + &.placeholder-document { + .lib-icon-font( + @icon-document__content, + @_icon-font: @icons-admin__font-name, + @_icon-font-size: 5rem, + @_icon-font-color: @file-uploader-placeholder-icon__color, + @_icon-font-color-hover: @file-uploader-placeholder-icon__color + ); + + &:before { + left: 0; + position: absolute; + right: 0; + top: 20px; + z-index: @file-uploader-placeholder-icon__z-index; + } + } + + &.placeholder-image { + .lib-icon-font( + @icon-camera__content, + @_icon-font: @icons-admin__font-name, + @_icon-font-size: 5rem, + @_icon-font-color: @file-uploader-placeholder-icon__color, + @_icon-font-color-hover: @file-uploader-placeholder-icon__color + ); + + &:before { + left: 0; + position: absolute; + right: 0; + top: 20px; + z-index: @file-uploader-placeholder-icon__z-index; + } + } + + &.placeholder-video { + .lib-icon-font( + @icon-video__content, + @_icon-font: @icons-admin__font-name, + @_icon-font-size: 3rem, + @_icon-font-color: @file-uploader-placeholder-icon__color, + @_icon-font-color-hover: @file-uploader-placeholder-icon__color + ); + + &:before { + left: 0; + position: absolute; + right: 0; + top: 30px; + z-index: @file-uploader-placeholder-icon__z-index; + } + } +} + +.file-uploader-placeholder-text { + bottom: 0; + color: @color-blue-dodger; + font-size: 1.1rem; + left: 0; + line-height: @line-height__base; + margin-bottom: 15%; + padding: 0 @indent__base; + position: absolute; + right: 0; + text-align: center; +} + // // Grid image uploader // --------------------------------------------- diff --git a/app/design/adminhtml/Magento/backend/web/css/source/variables/_icons.less b/app/design/adminhtml/Magento/backend/web/css/source/variables/_icons.less index 53433d3c75703f626e9ef86e721988b92e3836a4..ec1d4709213f3e1ea59ed53eda33fbc4f3741998 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/variables/_icons.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/variables/_icons.less @@ -80,3 +80,4 @@ @icon-clip__content: '\e643'; @icon-module__content: '\e647'; @icon-alert-round__content: '\e648'; +@icon-document__content: '\e649'; diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.eot b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.eot index 5bc0bee548c35b205925ca3b46c99706d05c8d66..9587f3997440e0dd93da7e02e72423d2655e3533 100755 Binary files a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.eot and b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.eot differ diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.svg b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.svg index 4478010abc66d68dbfbae79368128878031350d4..2904f02b748e481e18d92eb7c347c17e18bb37ba 100755 --- a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.svg +++ b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.svg @@ -1 +1 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" ><svg xmlns="http://www.w3.org/2000/svg"><defs><font id="icomoon" horiz-adv-x="1024"><font-face units-per-em="1024" ascent="960" descent="-64" /><missing-glyph horiz-adv-x="1024" /><glyph unicode=" " horiz-adv-x="512" d="" /><glyph unicode="" glyph-name="account" horiz-adv-x="1090" d="M709.921 801.306c8.139-32.295 8.927-34.974 8.192-68.162-0.263-12.813-7.772-71.943-5.724-90.112 1.628-14.966 5.461-16.174 11.448-28.514 10.398-21.425 6.984-51.095 2.941-72.678-2.206-11.868-6.827-28.725-13.916-38.387-7.667-10.66-23.211-10.713-30.142-23.158-9.872-17.854-4.306-43.008-10.503-62.385-7.142-21.898-25.101-23.421-26.466-52.145 8.822-1.155 17.592-2.468 26.466-3.623 8.822-18.59 25.049-55.874 41.59-67.059 13.863-3.728 27.727-7.457 41.59-11.185 48.627-19.64 102.558-43.061 151.237-63.33 44.373-18.432 97.411-24.996 113.48-70.84 0-31.035 2.941-104.501 2.153-145.25h-965.553c-0.893 40.697 2.153 114.215 2.153 145.25 15.964 45.844 69.002 52.408 113.375 70.84 48.679 20.27 102.61 43.691 151.237 63.33 13.811 3.728 27.674 7.457 41.59 11.185 16.489 11.185 32.715 48.522 41.538 67.059l19.692 4.621c-4.464 24.576-19.85 26.466-26.256 43.743-2.521 26.099-5.041 52.145-7.509 78.192 0.053-1.155-18.117 3.361-20.48 4.779-25.731 15.806-26.204 80.24-28.725 107.021-1.103 12.183 16.174 22.265 11.343 44.636-28.094 131.44 12.183 192.88 75.881 213.307 44.216 17.749 126.871 50.465 203.855 3.728l19.167-17.487 30.93-5.251c15.491-8.77 25.416-38.124 25.416-38.124z" /><glyph unicode="" glyph-name="arrowdown" horiz-adv-x="1085" d="M529.203 73.86l-468.465 628.209h936.931l-468.465-628.209z" /><glyph unicode="" glyph-name="cms" horiz-adv-x="1034" d="M976.793-22.006h-910.388v910.388h910.388v-910.388zM912.622 824.211h-782.046v-782.088h782.046v782.088zM221.432 137.2h152.876v372.033h-152.876v-372.033zM466.323 139.766h350.932v366.53h-350.932v-366.53zM221.432 599.511h595.865v147.125h-595.865v-147.125z" /><glyph unicode="" glyph-name="customers" horiz-adv-x="489" d="M264.319 651.169c75.685 0 136.98 61.259 136.98 136.944 0 75.649-61.295 136.98-136.98 136.98s-137.017-61.331-137.017-136.98c0-75.649 61.331-136.944 137.017-136.944zM448.929 589.149c-28.962 28.926-63.325 46.252-187.655 46.252s-157.859-18.776-185.335-46.252c-27.44-27.44-18.196-320.43-18.196-320.43l60.824 144.411 38.241-430.334 110.23 220.278 102.907-220.278 36.393 430.334 60.824-144.411c-0.036 0 10.693 291.468-18.233 320.43z" /><glyph unicode="" glyph-name="dashboard" horiz-adv-x="1376" d="M680.975 886.272c-337.523 0-610.976-273.515-611.038-610.976 0.122-37.72 1.039-251.812 1.039-251.812h1219.997c0 0 0.978 239.219 1.039 251.812-0.183 337.523-273.637 610.976-611.038 610.976zM737.708 762.169c31.117-3.607 61.379-10.271 90.418-19.624l-19.93-61.685c-25.004 8.070-51.169 13.939-78.191 16.995l7.703 64.313zM270.091 286.85h-64.864c0 31.423 3.118 62.235 8.803 92.007l63.702-12.349c-5.135-25.799-7.642-52.392-7.642-79.658zM305.855 455.581l-59.178 26.288c12.655 28.489 28 55.449 45.79 80.636l52.942-37.475c-15.284-21.825-28.611-45.056-39.554-69.449zM407.46 594.845l-43.405 48.113c22.925 20.541 47.807 39.187 74.462 54.96l33.318-55.571c-22.987-13.755-44.567-29.65-64.374-47.501zM536.943 742.545c29.039 9.292 59.178 16.017 90.418 19.624l7.581-64.313c-26.838-3.057-53.003-8.926-78.13-16.995l-19.869 61.685zM761.673 158.468l-152.897-27.205-38.881 150.452 395.172 404.22-203.394-527.467zM1019.476 525.029l52.942 37.414c17.79-25.187 33.257-52.148 45.851-80.636l-59.178-26.288c-10.943 24.454-24.209 47.685-39.615 69.51zM1094.916 286.85c0 27.266-2.69 53.859-7.703 79.658l63.702 12.349c5.808-29.834 8.803-60.645 8.803-92.007h-64.802zM646.006 189.341c26.777-17.056 62.174-9.415 79.291 17.24 17.118 26.593 9.292 62.051-17.301 79.108-26.655 17.24-62.051 9.354-79.23-17.362-17.118-26.349-9.476-61.99 17.24-78.986z" /><glyph unicode="" glyph-name="filter" d="M24.097 846.535h972.827v-111.922l-410.504-412.792v-238.366l-171.447-87.505v325.871l-390.875 415.877v108.837z" /><glyph unicode="" glyph-name="logo" horiz-adv-x="903" d="M454.495 911.101l-402.697-240.513v-457.026l104.632-60.727v457.049l298.157 178.728 299.698-179.142-0.138-455.922 103.528 60.013v457.026l-403.18 240.513zM507.766 629.72v-534.344l-53.271-32.124-53.34 32.262v533.792l-138.090-83.853v-456.934l191.453-115.516 193.087 116.322v456.451l-139.839 83.945z" /><glyph unicode="" glyph-name="notification-02" horiz-adv-x="989" d="M870.821 228.163c-64.195 65.89-78.231 188.772-91.738 283.159-20.074 139.937-24.259 297.089-226.008 317.693v25.318c0 25.424-39.195 46.028-64.937 46.028s-62.024-20.551-62.024-46.028v-25.371c-200.054-20.816-206.993-177.914-226.855-317.693-13.453-94.439-27.331-217.268-91.049-283.264-12.818-13.348-16.473-32.998-9.11-49.947 7.362-16.843 24.153-27.913 42.797-27.913h695.343c18.75 0 35.593 11.070 42.903 28.019s3.655 36.653-9.322 50zM489.569-3.883c51.060 0 92.373 40.837 92.373 91.367h-184.694c-0.053-50.53 41.314-91.367 92.32-91.367z" /><glyph unicode="" glyph-name="product" horiz-adv-x="954" d="M252.137 806.772l-160.070-92.393 378.042-218.205 160.023 92.393-377.996 218.205zM845.638 712.937l-377.996 218.252-145.222-83.828 377.996-218.205 145.222 83.782zM502.784 433.85v-433.664l376.832 217.507v433.711l-376.832-217.553zM55.668 217.74l376.785-217.507v436.503l-376.785 217.46v-436.457z" /><glyph unicode="" glyph-name="promotions" horiz-adv-x="1170" d="M59.153 425.818l164.053-38.141v303.902l-164.053-38.141v-227.621zM1122.198 900.847l-837.712-194.959v-335.978l140.328-376.832 151.712 57.45-104.049 279.113 649.668-151.18v722.385z" /><glyph unicode="" glyph-name="reports" horiz-adv-x="991" d="M736.707-21.234h207.134v322.703h-207.134v-322.703zM399.646-21.234h207.134v946.793h-207.134v-946.793zM62.673-21.19h207.134v634.704h-207.134v-634.704z" /><glyph unicode="" glyph-name="sales" horiz-adv-x="659" d="M426.502 347.483c-15.866 13.512-42.796 25.753-80.79 36.723v-198.774c11.535 1.459 23.729 4.331 36.299 8.851 12.618 4.426 23.87 10.829 33.804 19.068 9.981 8.427 18.173 18.55 24.529 30.649 6.638 12.006 9.651 26.365 9.651 42.89 0.047 26.836-7.721 47.222-23.493 60.593zM576.736 223.144c-7.109-23.117-19.774-45.762-38.135-67.749-18.503-22.175-43.079-41.855-74.010-58.992-30.885-17.373-70.432-27.683-118.878-31.12v-88.088h-57.014v88.088c-72.080 5.603-128.483 29.237-169.113 71.374-40.536 42.090-63.935 104.095-70.432 185.544h136.251c-0.753-39.359 8.992-70.479 28.86-93.266 20.15-22.74 44.774-37.335 74.434-43.455v216.523c-3.060 1.318-7.486 2.919-12.994 4.567-5.508 1.789-11.393 3.343-17.938 4.708-23.776 6.827-47.175 15.019-70.291 24.294-23.493 9.369-44.114 21.704-62.523 37.335-18.456 15.584-33.098 34.84-43.879 57.956-11.111 23.211-16.478 51.977-16.478 86.487 0 35.31 6.168 66.336 18.785 93.313 12.665 26.836 29.143 49.529 49.858 67.702 20.621 18.314 44.303 32.58 71.468 42.419 27.071 10.122 55.037 16.149 83.992 18.314v79.66h57.014v-79.66c29.143-3.531 56.308-10.169 81.638-20.292 25.423-10.028 47.787-23.729 67.137-41.478 19.585-17.514 35.357-39.453 47.457-65.771 12.288-26.13 19.35-57.109 21.28-93.172h-137.287c-0.518 27.636-8.616 51.082-23.917 70.432-15.725 19.303-34.275 29.002-56.308 29.002v-183.331c7.862-2.072 15.631-4.143 23.729-6.12 8.098-2.072 16.525-4.567 25.565-7.297 47.645-13.983 84.415-31.12 110.168-51.318 25.8-20.292 44.726-41.666 56.92-63.653 12.335-22.175 19.633-44.256 21.704-66.336 2.448-22.081 3.531-41.713 3.531-59.039 0.047-15.207-3.531-34.416-10.593-57.579zM228.905 696.585c-8.38-7.156-15.113-16.196-19.962-26.883-4.802-10.781-7.062-23.352-7.062-37.759 0-22.834 6.733-40.536 20.103-52.824 13.653-12.618 35.734-22.552 66.713-30.131v168.831c-10.829 0-21.516-1.695-31.826-5.226-10.216-3.437-19.633-8.851-27.966-16.007z" /><glyph unicode="" glyph-name="search" horiz-adv-x="1109" d="M555.139 938.358c-218.775 71.601-457.062-40.29-532.231-250.028-75.227-209.681 41.211-437.665 259.928-509.208 218.717-71.601 457.004 40.348 532.231 250.028s-41.211 437.665-259.928 509.208zM320.076 282.955c-158.915 52.089-243.467 217.681-188.903 369.978 54.679 152.296 227.754 233.625 386.669 181.593s243.409-217.624 188.788-369.92c-54.622-152.296-227.696-233.567-386.554-181.65zM638.482 274.206l358.927-349.602 24.807 69.241 24.865 69.241-310.348 302.29z" /><glyph unicode="" glyph-name="stores" horiz-adv-x="1280" d="M1098.281 874.55c19.777 3.723 34.901 21.232 34.901 42.347-0.058 23.791-19.196 43.103-42.812 43.103h-900.508c-23.675 0-42.754-19.312-42.754-43.103 0-21.057 15.007-38.566 34.843-42.347l-181.951-354.421v-68.988c0-30.946 32.516-56.016 72.594-56.016 13.437 0 26.001 2.908 36.821 7.795v-466.919h1061.286v466.919c10.878-4.944 23.326-7.795 36.879-7.795 40.078 0 72.594 25.071 72.594 56.016v68.988l-181.893 354.421zM214.758 395.125c-38.217 0-69.221 25.071-69.221 56.016v6.457h-0.349v62.531l137.162 353.665h109.648l-107.961-353.665v-68.988c0 0 0 0 0 0 0-30.946-31.004-56.016-69.279-56.016zM498.447 395.125c-38.217 0-69.221 25.071-69.221 56.016v68.988l57.354 353.665h109.241l-28.095-353.665v-68.93c-0.058-31.004-31.004-56.075-69.279-56.075zM782.077 395.125c-38.217 0-69.162 25.071-69.162 56.016v68.988l-28.154 353.665h108.892l57.296-353.665v-68.988c0-0.931 0.175-1.92 0.233-2.792-1.803-29.666-32.051-53.224-69.104-53.224zM1134.637 451.141c0-30.946-31.004-56.016-69.221-56.016s-69.162 25.071-69.162 56.016v68.988l-108.019 353.665h109.59l137.22-353.665v-62.473h-0.349v-6.515h-0.058z" /><glyph unicode="" glyph-name="views" horiz-adv-x="1890" d="M944.97 630.958c-97.861 0-177.522-79.581-177.522-177.443 0-97.94 79.66-177.679 177.522-177.679 98.019 0 177.679 79.739 177.679 177.679 0 97.861-79.66 177.443-177.679 177.443zM944.97 960c-470.712 0-944.97-512-944.97-512s474.258-512 944.97-512c470.949 0 945.128 512 945.128 512s-474.179 512-945.128 512zM944.97 91.144c-200.057 0-362.292 162.078-362.292 362.45 0 200.057 162.236 362.292 362.292 362.292 200.214 0 362.45-162.236 362.45-362.292 0-200.451-162.236-362.45-362.45-362.45z" /><glyph unicode="" glyph-name="system-config" d="M1020.032 394.445v116.045l-16.41 5.376-124.237 40.525-33.152 80.102 63.718 134.784-82.048 82.125-15.411-7.808-116.531-59.213-80.077 33.178-50.278 140.442h-116.096l-45.875-140.698-80-33.126-134.963 63.744-82.022-82.074 7.834-15.334 59.162-116.608-33.126-80.026-140.518-50.253v-116.147l16.435-5.325 124.288-40.576 33.075-80-63.693-134.886 82.048-82.099 131.942 66.97 80.026-33.152 50.304-140.39h116.096l5.35 16.41 40.55 124.237 80.077 33.178 134.886-63.718 82.074 82.074-7.834 15.386-59.213 116.582 33.203 80.026 140.416 50.253zM510.003 287.411c-89.754 0-162.509 72.832-162.509 162.611 0 89.754 72.755 162.483 162.509 162.483 89.83 0 162.509-72.73 162.509-162.483 0.026-89.805-72.653-162.611-162.509-162.611z" /><glyph unicode="" glyph-name="home" d="M509.978 905.574l-509.978-509.926 95.949-95.949 414.106 413.978 413.875-413.978 95.949 95.898-509.901 509.978zM146.253 271.437v-335.437h259.917v304.819h207.514v-304.819h259.917v335.488l-363.622 363.597-363.725-363.648z" /><glyph unicode="" glyph-name="lego" d="M0 223.59l498.278-287.59v421.402l-498.278 287.667v-421.478zM894.464 735.514v-44.262c0-32.819-62.797-59.418-140.365-59.418-77.466 0-140.262 26.598-140.262 59.418v73.216h0.435c4.71-30.925 65.408-55.475 139.853-55.475 77.568 0 140.365 26.624 140.365 59.29 0 32.845-62.797 59.366-140.365 59.366-6.195 0-12.262-0.205-18.202-0.563l-90.317 52.147v-55.706c0-32.819-62.72-59.392-140.262-59.392-48.691 0-91.597 10.496-116.813 26.47-3.584 3.712-7.987 7.245-13.312 10.598-6.579 6.861-10.24 14.387-10.24 22.323v53.939l-87.322-50.381c-6.272 0.307-12.646 0.614-19.123 0.614-77.491 0-140.314-26.522-140.314-59.366 0-32.691 62.822-59.29 140.314-59.29 74.445 0 135.219 24.525 139.93 55.475h0.384v-73.216c0-32.819-62.746-59.418-140.314-59.418-77.491 0-140.314 26.598-140.314 59.418v43.622l-108.083-62.31 499.994-288.563 496.691 286.694-112.358 64.768zM646.784 551.987c0-32.794-62.874-59.315-140.365-59.315s-140.339 26.522-140.339 59.315v73.267h0.41c4.762-30.95 65.459-55.475 139.93-55.475s135.142 24.525 139.904 55.475h0.486v-73.267zM525.645 353.766v-417.766l498.355 287.718v417.766l-498.355-287.718zM505.318 841.344c77.542 0 140.262 26.547 140.262 59.315s-62.72 59.315-140.262 59.315c-77.491 0-140.339-26.573-140.339-59.315-0.026-32.768 62.822-59.315 140.339-59.315z" /><glyph unicode="" glyph-name="tool" d="M287.002 478.336c0.205-0.23 0.461-0.486 0.691-0.717l103.347-103.373 36.045 36.045-56.55 56.499 90.266 90.189 11.904-1.28c3.046-0.307 6.093-0.538 9.19-0.538 6.246 0 12.314 0.768 18.253 2.125l-66.381 66.381c-1.357 1.382-2.765 2.611-4.173 3.814 20.454 73.6 1.766 155.725-56.038 213.555-57.421 57.421-138.803 76.237-211.968 56.525l123.955-123.981-32.563-121.446-121.395-32.589-124.032 124.006c-19.712-73.19-0.896-154.573 56.525-212.019 60.262-60.288 147.021-77.952 222.925-53.197zM653.235 404.198c-1.997-8.909-2.509-18.202-1.459-27.546l1.306-11.93-90.189-90.189-56.55 56.55-36.070-36.122 327.219-327.194c20.198-20.173 46.618-30.259 73.062-30.259s52.915 10.086 73.037 30.259c40.346 40.32 40.346 105.728 0 146.074l-290.355 290.355zM905.907 1.638l-51.866-13.875-42.112 42.112 13.901 51.891 51.866 13.926 42.112-42.138-13.901-51.917zM506.701 365.901l56.576-56.576 64.128 64.154c-3.482 31.334 6.707 63.821 30.669 87.808 24.013 23.962 56.474 34.176 87.808 30.72l280.397 280.346-157.056 157.056-280.448-280.397c3.482-31.258-6.682-63.821-30.669-87.782-24.013-23.987-56.525-34.176-87.808-30.643l-64.102-64.205 56.499-56.422-277.043-277.12-10.138 10.138-53.248-42.829-89.421-141.312 22.835-22.835 141.312 89.421 42.803 53.222-10.138 10.138 277.043 277.12z" /><glyph unicode="" glyph-name="upgrade" d="M1023.932 454.895c-3.717 282.692-236.1 508.826-518.793 505.003-282.658-3.775-508.826-236.066-505.071-518.827 3.772-282.556 236.1-508.826 518.793-505.003 282.658 3.768 508.826 236.066 505.071 518.827zM623.991 478.696v-298.633h-223.983v298.633h-186.621l298.633 298.633 298.667-298.633h-186.679z" /><glyph unicode="" glyph-name="expand-close" d="M512.794 960c-283.187 0-512.794-229.581-512.794-512.794 0-283.187 229.606-512.794 512.794-512.794s512.794 229.632 512.794 512.794c0 283.213-229.581 512.794-512.794 512.794zM512.794-11.213c-253.158 0-458.394 205.261-458.394 458.368 0 253.158 205.261 458.394 458.394 458.394 253.184 0 458.394-205.235 458.394-458.394 0.026-253.107-205.21-458.368-458.394-458.368zM760.013 334.387l30.387 38.4-265.6 206.413-20.787 1.613-259.226-208.026 28.826-39.987 236.8 177.613z" /><glyph unicode="" glyph-name="expand-open" d="M512.794 960c-283.187 0-512.794-229.581-512.794-512.794 0-283.187 229.606-512.794 512.794-512.794s512.794 229.606 512.794 512.794c0 283.213-229.581 512.794-512.794 512.794zM512.794-11.213c-253.158 0-458.394 205.261-458.394 458.394 0 253.158 205.261 458.394 458.394 458.394 253.184 0 458.394-205.235 458.394-458.394 0.026-253.133-205.21-458.394-458.394-458.394zM265.6 505.6l-30.387-38.4 265.574-206.387 20.813-1.613 259.2 208-28.8 39.987-236.8-177.587z" /><glyph unicode="" glyph-name="gripper" d="M259.2 960h214.323v-214.323h-214.323v214.323zM259.2 690.125h214.323v-214.349h-214.323v214.349zM259.2 420.224h214.323v-214.349h-214.323v214.349zM259.2 150.349h214.323v-214.349h-214.323v214.349zM549.325 960h214.323v-214.323h-214.323v214.323zM549.325 690.125h214.323v-214.349h-214.323v214.349zM549.325 420.224h214.323v-214.349h-214.323v214.349zM549.325 150.349h214.323v-214.349h-214.323v214.349z" /><glyph unicode="" glyph-name="forward" d="M860.058 774.938v-272l-430.029 269.158-1.894-253.491-424.371 249.754-3.763-647.834 426.24 241.28-5.606-239.437 439.424 252.16v-259.635h163.942v660.045z" /><glyph unicode="" glyph-name="backward" d="M163.942 114.893v271.974l430.029-269.133 1.894 253.491 424.397-249.754 3.738 647.834-426.24-241.28 5.606 239.437-439.424-252.16v259.635h-163.942v-660.045z" /><glyph unicode="" glyph-name="info" d="M505.704 919.002c-260.096-3.489-468.158-217.202-464.706-477.336 3.489-259.982 217.202-468.12 477.298-464.631s468.158 217.202 464.706 477.336c-3.413 260.058-217.202 468.12-477.298 464.631zM557.928 762.027c47.863 0 62.009-27.762 62.009-59.544 0-39.671-31.782-76.383-86.016-76.383-45.359 0-66.901 22.831-65.65 60.53 0 31.782 26.624 75.435 89.657 75.435zM435.162 153.619c-32.73 0-56.661 19.873-33.792 107.217l37.547 154.814c6.485 24.841 7.585 34.778 0 34.778-9.785 0-52.262-17.143-77.407-34.057l-16.346 26.776c79.607 66.446 171.16 105.472 210.375 105.472 32.73 0 38.153-38.722 21.807-98.266l-43.008-162.816c-7.585-28.786-4.286-38.722 3.262-38.722 9.785 0 41.984 11.871 73.614 36.75l18.47-24.841c-77.369-77.369-161.792-107.179-194.56-107.179z" /><glyph unicode="" glyph-name="lock" d="M591.986 511.981h-16.005v192.019c0 105.851-86.13 192.019-192.019 192.019h-128c-105.851 0-192.019-86.13-192.019-192.019v-192.019h-16.005c-26.396 0-48.014-21.618-48.014-48.014v-479.991c0-26.396 21.618-48.014 48.014-48.014h544.009c26.396 0 48.014 21.618 48.014 48.014v479.991c0 26.396-21.618 48.014-48.014 48.014zM384 64h-128l27.838 139.188c-16.801 11.529-27.838 30.872-27.838 52.793 0 35.347 28.672 64.019 64.019 64.019s64.019-28.672 64.019-64.019c0-21.921-11.036-41.263-27.838-52.793l27.838-139.188zM448.019 511.981h-256v192.019c0 35.271 28.71 64.019 64.019 64.019h128c35.271 0 64.019-28.71 64.019-64.019v-192.019z" /><glyph unicode="" glyph-name="loop" d="M870.4 642.56h-194.56v-143.36h153.6v-215.040h-634.88v215.040h215.040v-112.64l204.8 184.32-204.8 184.32v-112.64h-256c-56.51 0-102.4-45.815-102.4-102.4v-296.96c0-56.51 45.89-102.4 102.4-102.4h716.8c56.585 0 102.4 45.89 102.4 102.4v296.96c0 56.585-45.815 102.4-102.4 102.4z" /><glyph unicode="" glyph-name="plus" d="M991.991 576h-351.991v351.991c0 17.673-14.336 32.009-32.009 32.009h-192.019c-17.673 0-32.009-14.336-32.009-32.009v-351.991h-351.991c-17.673 0-32.009-14.336-32.009-32.009v-192.019c0-17.673 14.336-32.009 32.009-32.009h351.991v-351.991c0-17.673 14.336-32.009 32.009-32.009h192.019c17.673 0 32.009 14.336 32.009 32.009v351.991h351.991c17.673 0 32.009 14.336 32.009 32.009v192.019c0 17.673-14.336 32.009-32.009 32.009z" /><glyph unicode="" glyph-name="recover" d="M505.704 919.002c-260.096-3.489-468.158-217.126-464.706-477.298 3.489-260.21 217.202-468.158 477.298-464.744 260.134 3.489 468.233 217.202 464.706 477.298-3.489 260.21-217.202 468.233-477.298 464.744zM506.577 857.6c70.163 0.986 136.382-15.853 194.56-46.118l-63.374-105.662c-38.002 18.47-80.631 28.937-125.762 28.937-45.056 0-87.723-10.43-125.687-28.975l-63.336 105.624c54.993 28.672 117.343 45.321 183.599 46.232zM254.255 322.313l-105.586-63.298c-28.672 54.955-45.321 117.305-46.194 183.486-0.986 70.201 15.853 136.457 46.118 194.56l105.624-63.45c-18.546-37.926-28.975-80.555-28.975-125.649 0-45.056 10.43-87.723 28.975-125.687zM517.461 38.438c-70.163-0.986-136.457 15.853-194.56 46.118l63.374 105.662c38.002-18.546 80.631-28.975 125.687-28.975 45.094 0 87.761 10.392 125.687 28.937l63.336-105.586c-54.993-28.634-117.305-45.246-183.561-46.194zM512 222.758c-124.397 0-225.242 100.883-225.242 225.242 0 124.397 100.883 225.28 225.242 225.28 124.473 0 225.28-100.883 225.28-225.28s-100.807-225.242-225.28-225.242zM769.745 322.313c18.546 38.002 28.975 80.631 28.975 125.687 0 45.094-10.43 87.723-28.975 125.687l105.586 63.374c28.672-54.993 45.359-117.305 46.232-183.561 0.91-70.201-15.929-136.457-46.194-194.56l-105.624 63.336z" /><glyph unicode="" glyph-name="refresh" horiz-adv-x="1176" d="M906.126 824.187v0c-91.174 75.89-202.487 113.171-312.548 113.057-127.014 0.038-253.611-49.683-348.16-145.636l-95.004 79.265-1.593-305.342 300.184 56.282-99.442 82.944c67.546 64.247 155.269 97.204 244.015 97.28 79.948-0.038 159.782-26.7 226.114-81.806 84.347-70.125 127.659-170.629 127.772-272.46-0.038-14.715-0.948-29.431-2.769-44.070l137.519 26.283c0.19 5.954 0.303 11.871 0.303 17.787 0.152 140.098-60.151 279.78-176.431 376.415zM839.035 193.024c-67.736-65.498-156.255-99.025-245.912-99.1-79.986 0.038-159.82 26.738-226.114 81.806-84.347 70.125-127.697 170.629-127.772 272.498 0 16.839 1.252 33.716 3.679 50.366l-138.164-25.941c-0.379-8.116-0.683-16.346-0.683-24.462-0.114-140.174 60.226-279.817 176.545-376.491 91.136-75.852 202.411-113.057 312.51-112.981h0.341c127.924 0 255.241 50.441 349.943 147.759l90.795-75.207 0.569 305.38-299.956-57.344 104.183-86.281z" /><glyph unicode="" glyph-name="remove-small" horiz-adv-x="1176" d="M593.351 938.268c-270.753 0-490.268-219.477-490.268-490.231s219.515-490.268 490.268-490.268 490.231 219.515 490.231 490.268c0 270.753-219.477 490.231-490.231 490.231zM828.947 276.347l-72.363-72.363-162.095 162.133-164.902-164.902-73.121 73.121 164.902 164.902-161.678 161.678 72.363 72.325 161.602-161.678 165.774 165.736 73.121-73.083-165.774-165.736 162.171-162.133z" /><glyph unicode="" glyph-name="retweet" d="M254.976 284.16v267.264h103.424l-179.2 203.776-179.2-203.776h103.424v-308.224c0-56.51 45.815-102.4 102.4-102.4h459.776l-131.186 143.36h-279.438zM920.538 344.576v308.224c0 56.51-45.89 102.4-102.4 102.4h-459.738l131.11-143.36h279.514v-267.264h-103.424l179.2-203.776 179.2 203.776h-103.462z" /><glyph unicode="" glyph-name="unlocked" d="M768 895.981h-128c-105.851 0-192.019-86.13-192.019-192.019v-192.019h-400.005c-26.396 0-48.014-21.618-48.014-48.014v-479.991c0-26.396 21.618-48.014 48.014-48.014h544.009c26.396 0 48.014 21.618 48.014 48.014v479.991c0 26.396-21.618 48.014-48.014 48.014h-16.005v192.019c0 35.271 28.71 64.019 64.019 64.019h128c35.271 0 64.019-28.71 64.019-64.019v-192.019h128v192.019c0 105.851-86.13 192.019-192.019 192.019zM384 64h-128l27.838 139.188c-16.801 11.529-27.838 30.872-27.838 52.793 0 35.347 28.672 64.019 64.019 64.019s64.019-28.672 64.019-64.019c0-21.921-11.036-41.263-27.838-52.793l27.838-139.188z" /><glyph unicode="" glyph-name="warning" horiz-adv-x="1176" d="M593.351 960l-593.351-1023.962h1186.74l-593.351 1023.962zM653.236 60.549h-125.421v121.211h125.421v-121.211zM622.175 231.671h-62.502l-34.816 288.313v156.748h131.3v-156.748l-33.982-288.313z" /><glyph unicode="" glyph-name="arrow-left" d="M0 448l512-512v320.019h512v384h-512v320.019z" /><glyph unicode="" glyph-name="arrow-right" d="M1024 448l-512 512v-320.019h-512v-384h512v-320.019z" /><glyph unicode="" glyph-name="back-arrow" d="M402.735 813.265l-320.019-320.019c-24.993-24.993-24.993-65.498 0-90.491l320.019-320.019c24.993-24.993 65.498-24.993 90.491 0s24.993 65.498 0 90.491l-210.754 210.754h613.49c35.347 0 64.019 28.634 64.019 64.019s-28.672 64.019-64.019 64.019h-613.49l210.754 210.754c12.478 12.478 18.735 28.862 18.735 45.246s-6.258 32.768-18.735 45.246c-24.993 24.993-65.498 24.993-90.491 0z" /><glyph unicode="" glyph-name="calendar" horiz-adv-x="1176" d="M507.259 381.478h-102.059v-101.717h102.059v101.717zM650.885 245.286h-101.945v-101.717h101.945v101.717zM507.259 245.286h-102.059v-101.717h102.059v101.717zM507.259 517.67h-102.059v-101.679h102.059v101.679zM843.131 715.909c23.4 0 42.287 18.887 42.287 42.174v145.408c0 23.324-18.887 42.174-42.287 42.174s-42.325-18.849-42.325-42.174v-145.408c0.038-23.324 18.925-42.174 42.325-42.174zM343.419 715.909c23.362 0 42.249 18.887 42.249 42.174v145.408c0 23.324-18.887 42.174-42.249 42.174-23.4 0-42.325-18.849-42.325-42.174v-145.408c0-23.324 18.925-42.174 42.325-42.174zM363.444 381.478h-102.059v-101.717h102.059v101.717zM363.444 245.286h-102.059v-101.717h102.059v101.717zM650.885 381.478h-101.945v-101.717h101.945v101.717zM938.325 381.478h-102.059v-101.717h102.059v101.717zM938.325 517.67h-102.059v-101.679h102.059v101.679zM899.337 875.615v-46.914c17.598-15.474 28.71-38.153 28.71-63.412 0-46.801-37.964-84.764-84.916-84.764s-84.954 37.964-84.954 84.764c0 25.259 11.15 47.938 28.71 63.412v46.914h-387.262v-46.914c17.56-15.474 28.71-38.153 28.71-63.412 0-46.801-38.002-84.764-84.916-84.764s-84.954 37.964-84.954 84.764c0 25.259 11.15 47.938 28.71 63.412v46.914h-192.322v-925.279h997.035v925.279h-192.512zM999.234 44.696h-809.832v589.938h809.832v-589.938zM650.885 517.67h-101.945v-101.679h101.945v101.679zM794.624 517.67h-101.983v-101.679h101.983v101.679zM794.624 245.286h-101.983v-101.717h101.983v101.717zM794.624 381.478h-101.983v-101.717h101.983v101.717z" /><glyph unicode="" glyph-name="caret-down" d="M132.21 673.242c-13.881 13.729-36.295 13.729-50.138 0-13.805-13.653-13.805-35.878 0-49.607l404.897-400.877c13.881-13.729 36.257-13.729 50.138 0l404.897 400.877c13.805 13.729 13.881 35.878 0 49.607s-36.371 13.729-50.138 0.038l-379.866-365.606-379.79 365.568z" /><glyph unicode="" glyph-name="caret-left" d="M737.242 68.21c13.729-13.881 13.729-36.257 0-50.138s-35.878-13.881-49.607 0l-400.877 404.821c-13.729 13.881-13.729 36.295 0 50.138l400.877 404.897c13.729 13.881 35.878 13.881 49.607 0s13.729-36.257 0-50.138l-365.568-379.79 365.568-379.79z" /><glyph unicode="" glyph-name="caret-right" d="M286.72 68.21c-13.729-13.881-13.729-36.257 0-50.138s35.878-13.881 49.607 0l400.877 404.821c13.729 13.881 13.729 36.295 0 50.138l-400.915 404.897c-13.729 13.881-35.878 13.881-49.607 0s-13.729-36.257 0-50.138l365.568-379.79-365.568-379.79z" /><glyph unicode="" glyph-name="caret-up" d="M891.79 222.758c13.881-13.729 36.295-13.729 50.138 0 13.881 13.729 13.881 35.878 0 49.607l-404.897 400.877c-13.805 13.729-36.257 13.729-50.062 0l-404.897-400.877c-13.805-13.729-13.881-35.878 0-49.607s36.257-13.729 50.138 0l379.79 365.606 379.79-365.606z" /><glyph unicode="" glyph-name="ccw" d="M574.767 867.84c-227.593 0-412.672-182.386-418.247-409.335h-125.8l188.378-209.92 188.302 209.92h-146.242c5.537 168.998 143.777 304.393 313.609 304.393 173.397 0 313.913-140.971 313.913-314.899s-140.478-314.861-313.913-314.861c-69.48 0-133.689 22.718-185.685 61.099l-71.983-76.99c70.997-55.751 160.465-89.050 257.707-89.050 231.159 0 418.551 187.961 418.551 419.84-0.038 231.879-187.43 419.84-418.551 419.84z" /><glyph unicode="" glyph-name="check-mage" horiz-adv-x="1176" d="M996.617 833.214l-513.555-513.555-256.796 256.834-128.379-128.417 385.214-385.252 641.896 642.010z" /><glyph unicode="" glyph-name="clock" d="M512 919.040c-260.134 0-471.040-210.944-471.040-471.040 0-260.134 210.906-471.040 471.040-471.040s471.040 210.906 471.040 471.040c0 260.134-210.906 471.040-471.040 471.040zM512 79.36c-203.624 0-368.64 165.054-368.64 368.64s165.016 368.64 368.64 368.64 368.64-165.054 368.64-368.64-165.016-368.64-368.64-368.64zM547.84 714.24h-71.68v-281.069l174.345-174.345 50.669 50.707-153.335 153.335z" /><glyph unicode="" glyph-name="close-mage" horiz-adv-x="1176" d="M1094.391 882.29l-77.71 77.71-423.329-423.347-423.33 423.347-77.71-77.672 423.35-423.368-423.312-423.329 77.672-77.71 423.338 423.338 423.283-423.3 77.671 77.71-423.263 423.281z" /><glyph unicode="" glyph-name="delete" horiz-adv-x="1176" d="M337.541-61.004h513.024l64.512 645.916h-639.128l61.592-645.916zM737.394 805.831v116.508c0 19.191-15.398 34.702-34.361 34.702h-217.847c-19.001 0-34.361-15.55-34.361-34.702v-114.574c-73.576-8.382-150.149-24.614-226.494-52.338v-106.989h738.001v109.833c0 0-90.074 31.403-224.977 47.559zM668.937 812.241c-47.749 3.224-99.252 4.096-153.297 0.986v61.44c0 9.519 7.623 17.332 17.143 17.332h118.936c9.519 0 17.218-7.813 17.218-17.332v-62.426z" /><glyph unicode="" glyph-name="edit" horiz-adv-x="1176" d="M928.503 933.111l-111.502-112.109 156.065-156.9 111.502 112.071-156.065 156.937zM215.002 215.59l156.065-156.9 535.211 538.093-156.065 156.9-535.211-538.093zM103.917-47.161l188.985 49.873-139.302 140.098-49.683-190.009z" /><glyph unicode="" glyph-name="error" d="M1014.67 137.349c0 0 0 0 0 0l-310.651 310.651 310.651 310.651c0 0 0 0 0 0 3.337 3.337 5.765 7.244 7.32 11.416 4.248 11.378 1.82 24.69-7.32 33.83l-146.735 146.735c-9.14 9.14-22.452 11.567-33.83 7.32-4.172-1.555-8.078-3.982-11.416-7.32 0 0 0 0 0 0l-310.651-310.651-310.651 310.651c0 0 0 0 0 0-3.337 3.337-7.244 5.765-11.416 7.32-11.378 4.248-24.69 1.82-33.83-7.32l-146.735-146.735c-9.14-9.14-11.567-22.452-7.32-33.83 1.555-4.172 3.982-8.078 7.32-11.416 0 0 0 0 0 0l310.651-310.651-310.651-310.651c0 0 0 0 0 0-3.337-3.337-5.765-7.244-7.32-11.416-4.248-11.378-1.82-24.69 7.32-33.83l146.735-146.735c9.14-9.14 22.452-11.567 33.83-7.32 4.172 1.555 8.078 3.982 11.416 7.32 0 0 0 0 0 0l310.651 310.651 310.651-310.651c0 0 0 0 0 0 3.337-3.337 7.244-5.765 11.416-7.32 11.378-4.248 24.69-1.82 33.83 7.32l146.735 146.735c9.14 9.14 11.567 22.452 7.32 33.83-1.555 4.172-3.982 8.078-7.32 11.416z" /><glyph unicode="" glyph-name="help" horiz-adv-x="1176" d="M593.351 937.434c-270.336 0-489.434-219.098-489.434-489.358s219.098-489.434 489.434-489.434 489.434 219.136 489.434 489.434-219.136 489.358-489.434 489.358zM635.752 133.404c-11.985-11.719-26.396-17.636-43.16-17.636-8.154 0-15.967 1.517-23.4 4.589-7.358 3.034-13.843 7.168-19.456 12.174-5.613 5.158-10.126 11.226-13.388 18.356-3.337 7.13-4.968 14.753-4.968 22.945 0 16.308 5.992 30.303 17.977 42.060 11.947 11.681 26.396 17.598 43.198 17.598 16.308 0 30.606-5.689 42.78-16.801 12.25-11.188 18.318-24.993 18.318-41.339-0.038-16.384-5.992-30.303-17.939-41.984zM778.923 577.327c-3.982-13.767-9.747-26.396-17.18-37.774-7.471-11.454-16.498-22.49-27.079-33.071s-22.49-21.618-35.65-33.033c-11.454-9.785-20.783-18.318-27.913-25.79-7.168-7.396-12.895-14.867-17.218-22.338-4.286-7.433-7.282-15.398-9.026-24.007-1.707-8.609-2.617-49.721-2.617-62.35v-22.338h-101.376v32.616c0 13.729 0.986 56.661 3.034 67.584s5.158 21.125 9.481 30.872 10.012 19.228 17.18 28.369c7.168 9.14 16.232 18.887 27.079 29.203l38.647 36.902c10.847 9.747 20.177 20.632 27.951 32.616 7.737 12.060 11.529 26.7 11.529 43.88 0 22.3-6.978 41.036-21.011 56.206-14.071 15.17-33.944 22.793-59.695 22.793-13.16 0-25.069-2.389-35.65-7.282-10.619-4.817-19.797-11.454-27.496-19.759-7.737-8.344-13.577-17.901-17.598-28.786-3.982-10.847-6.334-21.997-6.865-33.527l-105.624 9.444c3.413 27.496 10.733 51.959 21.921 73.463 11.112 21.466 25.562 39.595 43.311 54.575 17.711 14.829 38.078 26.169 61.023 33.944 22.869 7.699 47.521 11.605 73.842 11.605 24.614 0 47.976-3.603 70.049-10.771 21.959-7.168 41.491-17.711 58.406-31.782 16.839-14.033 30.227-31.365 39.936-51.959 9.709-20.632 14.564-44.411 14.564-71.263 0-18.356-2.010-34.475-5.992-48.166z" /><glyph unicode="" glyph-name="history" d="M574.805 867.84c-227.631 0-412.71-182.386-418.247-409.335h-125.838l188.378-209.958 188.302 209.958h-146.242c5.537 168.998 143.777 304.393 313.647 304.393 173.359 0 313.875-140.971 313.875-314.899s-140.478-314.861-313.875-314.861c-69.518 0-133.727 22.718-185.761 61.099l-71.983-76.99c71.073-55.751 160.503-89.050 257.745-89.050 231.121 0 418.513 187.961 418.513 419.84-0.038 231.879-187.43 419.84-418.513 419.84zM537.6 673.28v-240.109l153.865-153.865 50.669 50.669-132.855 132.855v210.413h-71.68z" /><glyph unicode="" glyph-name="export" d="M383.462 382.49h255.693v213.043h127.795l-255.642 255.667-255.642-255.667h127.795zM852.173 382.49v-170.394h-681.754v170.394h-170.419v-340.89h1022.618v340.89z" /><glyph unicode="" glyph-name="import" d="M639.155 851.2h-255.693v-213.043h-127.795l255.667-255.667 255.616 255.667h-127.795zM852.173 382.49v-170.394h-681.754v170.394h-170.419v-340.89h1022.618v340.89z" /><glyph unicode="" glyph-name="dot" d="M505.139 959.915c-282.658-3.775-508.826-236.066-505.071-518.827 3.772-282.556 236.1-508.826 518.793-505.003 282.658 3.768 508.826 236.066 505.071 518.827-3.717 282.658-236.1 508.826-518.793 505.003z" /><glyph unicode="" glyph-name="not-installed" d="M510.413 960c-281.907 0-510.413-228.582-510.413-510.413 0-281.933 228.506-510.464 510.413-510.464s510.387 228.557 510.387 510.464c0 281.83-228.48 510.413-510.387 510.413zM865.843 449.587c0-69.99-20.506-135.27-55.578-190.285l-490.163 490.163c55.091 35.021 120.32 55.475 190.31 55.475 195.942 0 355.43-159.411 355.43-355.354zM154.957 449.587c0 69.939 20.506 135.245 55.578 190.31l490.189-490.189c-55.066-35.072-120.371-55.501-190.31-55.501-195.942-0.026-355.456 159.437-355.456 355.379z" /><glyph unicode="" glyph-name="disabled" d="M511.77 960c-282.778 0-512.102-229.222-512.102-512.179 0-282.829 229.325-512.102 512.102-512.102 282.931-0.026 512.23 229.248 512.23 512.102 0 282.957-229.299 512.179-512.23 512.179zM143.718 540.032h736.205v-184.269h-736.205v184.269z" /><glyph unicode="" glyph-name="menu-item" horiz-adv-x="903" d="M857.675 670.587l-403.18 240.514-402.726-240.514v-457.026l403.18-240.515 402.726 240.514v457.027zM454.857 95.535l-298.427 178.383v335.966l298.157 178.729 298.428-178.383v-335.966l-298.158-178.729z" /><glyph unicode="" glyph-name="tag" d="M904.192 959.973l-307.234-0.116-596.89-596.958 426.906-426.906 596.958 596.958-0.113 305.596-119.603 121.426zM858.679 646.663c-39.997-40.001-104.854-40.001-144.794 0-40.001 40.001-40.001 104.796 0 144.794 39.939 40.001 104.796 40.001 144.794 0 39.997-39.997 39.997-104.793 0-144.794z" /><glyph unicode="" glyph-name="camera" d="M982.767 728.098h-250.095l-59.255 121.364c0 0-11.827 25.201-42.11 25.201-23.375 0-169.366 0-235.25 0-32.969 0-44.001-25.027-44.001-25.027l-57.484-121.539h-253.406c-22.74 0-41.131-18.459-41.131-41.267v-624.333c0-22.743 18.401-41.199 41.131-41.199h941.636c22.74 0 41.199 18.459 41.199 41.199v624.299c0 22.798-18.456 41.267-41.199 41.267zM512 136.090c-138.793 0-251.597 113.015-251.597 251.931 0 138.912 112.845 251.87 251.597 251.87 138.68 0 251.597-112.981 251.597-251.87 0-138.909-112.913-251.931-251.597-251.931zM512 539.068c-83.255 0-150.972-67.714-150.972-150.972 0-83.197 67.71-150.903 150.972-150.903 83.258 0 150.903 67.714 150.903 150.903 0 83.255-67.652 150.972-150.903 150.972z" /><glyph unicode="" glyph-name="grid" d="M0.010 959.628h279.074v-279.074h-279.074zM372.77 959.628h279.074v-279.074h-279.074zM744.892 959.628h279.074v-279.074h-279.074zM0.010 587.503h279.074v-279.074h-279.074zM372.77 587.503h279.074v-279.074h-279.074zM744.892 587.503h279.074v-279.074h-279.074zM0.010 215.415h279.074v-279.074h-279.074zM372.77 215.415h279.074v-279.074h-279.074zM744.892 215.415h279.074v-279.074h-279.074z" /><glyph unicode="" glyph-name="list-menu" d="M0.010 771.516h1023.966v-136.509h-1023.966zM0.010 517.53h1023.966v-136.506h-1023.966zM0.010 260.983h1023.966v-136.513h-1023.966z" /><glyph unicode="" glyph-name="cart" d="M771.001 183.263c-55.445 0-100.448-44.754-100.448-100.2s44.879-100.324 100.448-100.324 100.448 44.879 100.448 100.324-45.003 100.2-100.448 100.2zM771.001 41.293c-23.123 0-41.77 18.648-41.77 41.771s18.647 41.77 41.77 41.77c23.247 0 41.895-18.648 41.895-41.77s-18.648-41.771-41.895-41.771zM469.532 183.263c-55.445 0-100.449-44.754-100.449-100.2s45.003-100.324 100.449-100.324c55.445 0 100.448 44.879 100.448 100.324s-45.003 100.2-100.448 100.2zM469.532 41.293c-23.123 0-41.771 18.648-41.771 41.771s18.648 41.77 41.771 41.77 41.77-18.648 41.77-41.77-18.648-41.771-41.77-41.771zM823.587 465.588c-130.036 0-238.441 91.622-264.547 213.825h-207.237l-136.749 198.162v1.865h-207.237v-83.541h169.942l78.693-117.729 83.417-412.857h581.183l49.23 243.786c-42.268-27.474-92.616-43.511-146.694-43.511zM1023.862 710.244v45.376l-55.073 18.026-12.929 31.204 24.863 52.71-31.95 32.074-5.967-2.984-45.5-23.123-31.328 12.929-19.642 54.948h-45.376l-2.114-6.464-15.912-48.608-31.203-12.929-52.835 24.863-32.074-31.95 3.108-5.967 23.247-45.624-13.053-31.328-54.948-19.766v-45.376l6.34-2.113 48.732-15.788 12.929-31.204-24.863-52.71 32.074-32.074 6.092 3.108 45.376 22.999 31.328-12.929 19.642-54.824h45.376l2.113 6.464 15.913 48.359 31.203 12.929 52.71-24.988 32.198 32.074-3.108 6.092-23.247 45.624 12.929 31.203 54.948 19.766zM824.582 668.473c-35.057 0-63.65 28.469-63.65 63.526 0 35.182 28.469 63.526 63.65 63.526s63.526-28.469 63.526-63.526c-0.124-35.182-28.469-63.526-63.526-63.526z" /><glyph unicode="" glyph-name="screen" horiz-adv-x="1159" d="M723.661 70.399c-2.404 10.843-4.034 21.47-5.282 31.583h-277.528c-2.458-20.233-6.917-43.087-14.646-64.305-7.79-21.277-18.796-40.54-33.824-54.15-15.028-13.552-33.689-22.104-59.788-22.158v-25.369h494.020v25.369c-26.142 0.058-44.737 8.61-59.838 22.158-22.44 20.307-35.961 53.91-43.114 86.873zM1126.214 960h-1093.209c-18.22 0-33.005-15.024-33.005-33.596v-731.259c0-18.576 14.785-33.623 33.005-33.623h1093.209c18.224 0 33.067 15.051 33.067 33.623v731.259c0 18.572-14.843 33.596-33.067 33.596zM1079.193 243.078h-999.234v635.394h999.234v-635.394z" /><glyph unicode="" glyph-name="video" horiz-adv-x="2041" d="M2041.366 958.898v-1021.449h-175.926l-411.263 409.297v204.59l411.263 407.568h175.926zM1305.997-29.076c0-19.377-15.608-34.924-34.856-34.924h-1236.279c-19.255 0-34.863 15.547-34.863 34.924v954.275c0 19.248 15.608 34.801 34.863 34.801h1236.279c19.248 0 34.856-15.553 34.856-34.801v-954.275z" /><glyph unicode="" glyph-name="revert" horiz-adv-x="1404" d="M1042.226 660.151h-598.393v299.849l-443.833-384.316 443.833-384.403v299.859h598.393c106.478 0 192.801-86.318 192.801-192.801s-86.318-192.796-192.801-192.796v-0.483l-452.707-0.005c-46.695-0.005-84.53-37.845-84.53-84.535 0-46.68 37.84-84.525 84.535-84.525 0.377 0 0.744 0.053 1.121 0.058h451.581c199.964 0 362.044 162.085 362.044 362.039 0 199.964-162.080 362.059-362.044 362.059z" /><glyph unicode="" glyph-name="clip" d="M939.616 811.616c112.512-112.448 112.512-294.816 0-407.264l-350.944-350.976c-12.512-12.544-32.736-12.544-45.248 0-12.576 12.512-12.576 32.704 0 45.248l346.432 346.464c87.488 87.488 87.488 229.248-0.064 316.768-87.36 87.488-229.248 87.488-316.736 0l-462.304-456.864c-62.496-62.464-62.496-163.776 0-226.24 62.496-62.496 163.744-62.496 226.24 0l466.88 461.344c37.44 37.44 37.44 98.336 0 135.776-37.44 37.408-98.304 37.408-135.744 0l-351.008-351.008c-12.512-12.512-32.736-12.512-45.248 0-12.512 12.544-12.512 32.736 0 45.28l350.976 350.976c62.432 62.464 163.744 62.464 226.24 0 62.496-62.496 62.496-163.776 0-226.272l-466.88-461.376c-87.296-87.328-229.408-87.328-316.736 0s-87.328 229.472 0 316.8l466.88 461.344c112.448 112.512 294.816 112.512 407.264 0z" /><glyph unicode="" glyph-name="module" horiz-adv-x="883" d="M793.271 737.4l-192.695 83.055v-80.482c-2.517-31.926-83.182-57.618-182.582-57.618-99.309 0-180.126 25.692-182.398 57.618h-0.318l-0.465 80.482-197.709-83.055 381.218-167.697 374.95 167.697zM265.959 841.886l-1.104-0.428c32.596-16.331 89.086-27.124 153.551-27.124 64.726 0 121.621 10.94 153.996 27.355l-1.168 0.512c18.811 9.3 29.664 20.34 29.664 32.264 0 32.713-81.606 59.114-182.492 59.114-100.759 0-182.806-26.401-182.806-59.114-0.003-12.007 11.295-23.218 30.36-32.579zM418.418 497.564l-418.418 191.009v-563.335l418.321-189.238 418.321 189.238v563.733l-418.224-191.407z" /><glyph unicode="" glyph-name="alert-round" d="M1023.959 454.912c-3.717 282.665-236.121 508.842-518.817 505.040-282.689-3.772-508.866-236.091-505.094-518.868 3.772-282.58 236.121-508.842 518.813-505.040 282.689 3.772 508.866 236.067 505.098 518.868zM580.086 55.641h-136.149v136.163h136.149v-136.163zM597.168 666.258l-44.103-388.928h-83.113l-43.099 388.928v171.575h170.318v-171.575z" /></font></defs></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg"><metadata>Generated by IcoMoon</metadata><defs><font id="icomoon" horiz-adv-x="1024"><font-face units-per-em="1024" ascent="960" descent="-64"/><missing-glyph horiz-adv-x="1024"/><glyph unicode=" " horiz-adv-x="512" d=""/><glyph unicode="" glyph-name="account" horiz-adv-x="1090" d="M709.921 801.306c8.139-32.295 8.927-34.974 8.192-68.162-0.263-12.813-7.772-71.943-5.724-90.112 1.628-14.966 5.461-16.174 11.448-28.514 10.398-21.425 6.984-51.095 2.941-72.678-2.206-11.868-6.827-28.725-13.916-38.387-7.667-10.66-23.211-10.713-30.142-23.158-9.872-17.854-4.306-43.008-10.503-62.385-7.142-21.898-25.101-23.421-26.466-52.145 8.822-1.155 17.592-2.468 26.466-3.623 8.822-18.59 25.049-55.874 41.59-67.059 13.863-3.728 27.727-7.457 41.59-11.185 48.627-19.64 102.558-43.061 151.237-63.33 44.373-18.432 97.411-24.996 113.48-70.84 0-31.035 2.941-104.501 2.153-145.25h-965.553c-0.893 40.697 2.153 114.215 2.153 145.25 15.964 45.844 69.002 52.408 113.375 70.84 48.679 20.27 102.61 43.691 151.237 63.33 13.811 3.728 27.674 7.457 41.59 11.185 16.489 11.185 32.715 48.522 41.538 67.059l19.692 4.621c-4.464 24.576-19.85 26.466-26.256 43.743-2.521 26.099-5.041 52.145-7.509 78.192 0.053-1.155-18.117 3.361-20.48 4.779-25.731 15.806-26.204 80.24-28.725 107.021-1.103 12.183 16.174 22.265 11.343 44.636-28.094 131.44 12.183 192.88 75.881 213.307 44.216 17.749 126.871 50.465 203.855 3.728l19.167-17.487 30.93-5.251c15.491-8.77 25.416-38.124 25.416-38.124z"/><glyph unicode="" glyph-name="arrowdown" horiz-adv-x="1085" d="M529.203 73.86l-468.465 628.209h936.931l-468.465-628.209z"/><glyph unicode="" glyph-name="cms" horiz-adv-x="1034" d="M976.793-22.006h-910.388v910.388h910.388v-910.388zM912.622 824.211h-782.046v-782.088h782.046v782.088zM221.432 137.2h152.876v372.033h-152.876v-372.033zM466.323 139.766h350.932v366.53h-350.932v-366.53zM221.432 599.511h595.865v147.125h-595.865v-147.125z"/><glyph unicode="" glyph-name="customers" horiz-adv-x="489" d="M264.319 651.169c75.685 0 136.98 61.259 136.98 136.944 0 75.649-61.295 136.98-136.98 136.98s-137.017-61.331-137.017-136.98c0-75.649 61.331-136.944 137.017-136.944zM448.929 589.149c-28.962 28.926-63.325 46.252-187.655 46.252s-157.859-18.776-185.335-46.252c-27.44-27.44-18.196-320.43-18.196-320.43l60.824 144.411 38.241-430.334 110.23 220.278 102.907-220.278 36.393 430.334 60.824-144.411c-0.036 0 10.693 291.468-18.233 320.43z"/><glyph unicode="" glyph-name="dashboard" horiz-adv-x="1376" d="M680.975 886.272c-337.523 0-610.976-273.515-611.038-610.976 0.122-37.72 1.039-251.812 1.039-251.812h1219.997c0 0 0.978 239.219 1.039 251.812-0.183 337.523-273.637 610.976-611.038 610.976zM737.708 762.169c31.117-3.607 61.379-10.271 90.418-19.624l-19.93-61.685c-25.004 8.070-51.169 13.939-78.191 16.995l7.703 64.313zM270.091 286.85h-64.864c0 31.423 3.118 62.235 8.803 92.007l63.702-12.349c-5.135-25.799-7.642-52.392-7.642-79.658zM305.855 455.581l-59.178 26.288c12.655 28.489 28 55.449 45.79 80.636l52.942-37.475c-15.284-21.825-28.611-45.056-39.554-69.449zM407.46 594.845l-43.405 48.113c22.925 20.541 47.807 39.187 74.462 54.96l33.318-55.571c-22.987-13.755-44.567-29.65-64.374-47.501zM536.943 742.545c29.039 9.292 59.178 16.017 90.418 19.624l7.581-64.313c-26.838-3.057-53.003-8.926-78.13-16.995l-19.869 61.685zM761.673 158.468l-152.897-27.205-38.881 150.452 395.172 404.22-203.394-527.467zM1019.476 525.029l52.942 37.414c17.79-25.187 33.257-52.148 45.851-80.636l-59.178-26.288c-10.943 24.454-24.209 47.685-39.615 69.51zM1094.916 286.85c0 27.266-2.69 53.859-7.703 79.658l63.702 12.349c5.808-29.834 8.803-60.645 8.803-92.007h-64.802zM646.006 189.341c26.777-17.056 62.174-9.415 79.291 17.24 17.118 26.593 9.292 62.051-17.301 79.108-26.655 17.24-62.051 9.354-79.23-17.362-17.118-26.349-9.476-61.99 17.24-78.986z"/><glyph unicode="" glyph-name="filter" d="M24.097 846.535h972.827v-111.922l-410.504-412.792v-238.366l-171.447-87.505v325.871l-390.875 415.877v108.837z"/><glyph unicode="" glyph-name="logo" horiz-adv-x="903" d="M454.495 911.101l-402.697-240.513v-457.026l104.632-60.727v457.049l298.157 178.728 299.698-179.142-0.138-455.922 103.528 60.013v457.026l-403.18 240.513zM507.766 629.72v-534.344l-53.271-32.124-53.34 32.262v533.792l-138.090-83.853v-456.934l191.453-115.516 193.087 116.322v456.451l-139.839 83.945z"/><glyph unicode="" glyph-name="notification-02" horiz-adv-x="989" d="M870.821 228.163c-64.195 65.89-78.231 188.772-91.738 283.159-20.074 139.937-24.259 297.089-226.008 317.693v25.318c0 25.424-39.195 46.028-64.937 46.028s-62.024-20.551-62.024-46.028v-25.371c-200.054-20.816-206.993-177.914-226.855-317.693-13.453-94.439-27.331-217.268-91.049-283.264-12.818-13.348-16.473-32.998-9.11-49.947 7.362-16.843 24.153-27.913 42.797-27.913h695.343c18.75 0 35.593 11.070 42.903 28.019s3.655 36.653-9.322 50zM489.569-3.883c51.060 0 92.373 40.837 92.373 91.367h-184.694c-0.053-50.53 41.314-91.367 92.32-91.367z"/><glyph unicode="" glyph-name="product" horiz-adv-x="954" d="M252.137 806.772l-160.070-92.393 378.042-218.205 160.023 92.393-377.996 218.205zM845.638 712.937l-377.996 218.252-145.222-83.828 377.996-218.205 145.222 83.782zM502.784 433.85v-433.664l376.832 217.507v433.711l-376.832-217.553zM55.668 217.74l376.785-217.507v436.503l-376.785 217.46v-436.457z"/><glyph unicode="" glyph-name="promotions" horiz-adv-x="1170" d="M59.153 425.818l164.053-38.141v303.902l-164.053-38.141v-227.621zM1122.198 900.847l-837.712-194.959v-335.978l140.328-376.832 151.712 57.45-104.049 279.113 649.668-151.18v722.385z"/><glyph unicode="" glyph-name="reports" horiz-adv-x="991" d="M736.707-21.234h207.134v322.703h-207.134v-322.703zM399.646-21.234h207.134v946.793h-207.134v-946.793zM62.673-21.19h207.134v634.704h-207.134v-634.704z"/><glyph unicode="" glyph-name="sales" horiz-adv-x="659" d="M426.502 347.483c-15.866 13.512-42.796 25.753-80.79 36.723v-198.774c11.535 1.459 23.729 4.331 36.299 8.851 12.618 4.426 23.87 10.829 33.804 19.068 9.981 8.427 18.173 18.55 24.529 30.649 6.638 12.006 9.651 26.365 9.651 42.89 0.047 26.836-7.721 47.222-23.493 60.593zM576.736 223.144c-7.109-23.117-19.774-45.762-38.135-67.749-18.503-22.175-43.079-41.855-74.010-58.992-30.885-17.373-70.432-27.683-118.878-31.12v-88.088h-57.014v88.088c-72.080 5.603-128.483 29.237-169.113 71.374-40.536 42.090-63.935 104.095-70.432 185.544h136.251c-0.753-39.359 8.992-70.479 28.86-93.266 20.15-22.74 44.774-37.335 74.434-43.455v216.523c-3.060 1.318-7.486 2.919-12.994 4.567-5.508 1.789-11.393 3.343-17.938 4.708-23.776 6.827-47.175 15.019-70.291 24.294-23.493 9.369-44.114 21.704-62.523 37.335-18.456 15.584-33.098 34.84-43.879 57.956-11.111 23.211-16.478 51.977-16.478 86.487 0 35.31 6.168 66.336 18.785 93.313 12.665 26.836 29.143 49.529 49.858 67.702 20.621 18.314 44.303 32.58 71.468 42.419 27.071 10.122 55.037 16.149 83.992 18.314v79.66h57.014v-79.66c29.143-3.531 56.308-10.169 81.638-20.292 25.423-10.028 47.787-23.729 67.137-41.478 19.585-17.514 35.357-39.453 47.457-65.771 12.288-26.13 19.35-57.109 21.28-93.172h-137.287c-0.518 27.636-8.616 51.082-23.917 70.432-15.725 19.303-34.275 29.002-56.308 29.002v-183.331c7.862-2.072 15.631-4.143 23.729-6.12 8.098-2.072 16.525-4.567 25.565-7.297 47.645-13.983 84.415-31.12 110.168-51.318 25.8-20.292 44.726-41.666 56.92-63.653 12.335-22.175 19.633-44.256 21.704-66.336 2.448-22.081 3.531-41.713 3.531-59.039 0.047-15.207-3.531-34.416-10.593-57.579zM228.905 696.585c-8.38-7.156-15.113-16.196-19.962-26.883-4.802-10.781-7.062-23.352-7.062-37.759 0-22.834 6.733-40.536 20.103-52.824 13.653-12.618 35.734-22.552 66.713-30.131v168.831c-10.829 0-21.516-1.695-31.826-5.226-10.216-3.437-19.633-8.851-27.966-16.007z"/><glyph unicode="" glyph-name="search" horiz-adv-x="1109" d="M555.139 938.358c-218.775 71.601-457.062-40.29-532.231-250.028-75.227-209.681 41.211-437.665 259.928-509.208 218.717-71.601 457.004 40.348 532.231 250.028s-41.211 437.665-259.928 509.208zM320.076 282.955c-158.915 52.089-243.467 217.681-188.903 369.978 54.679 152.296 227.754 233.625 386.669 181.593s243.409-217.624 188.788-369.92c-54.622-152.296-227.696-233.567-386.554-181.65zM638.482 274.206l358.927-349.602 24.807 69.241 24.865 69.241-310.348 302.29z"/><glyph unicode="" glyph-name="stores" horiz-adv-x="1280" d="M1098.281 874.55c19.777 3.723 34.901 21.232 34.901 42.347-0.058 23.791-19.196 43.103-42.812 43.103h-900.508c-23.675 0-42.754-19.312-42.754-43.103 0-21.057 15.007-38.566 34.843-42.347l-181.951-354.421v-68.988c0-30.946 32.516-56.016 72.594-56.016 13.437 0 26.001 2.908 36.821 7.795v-466.919h1061.286v466.919c10.878-4.944 23.326-7.795 36.879-7.795 40.078 0 72.594 25.071 72.594 56.016v68.988l-181.893 354.421zM214.758 395.125c-38.217 0-69.221 25.071-69.221 56.016v6.457h-0.349v62.531l137.162 353.665h109.648l-107.961-353.665v-68.988c0 0 0 0 0 0 0-30.946-31.004-56.016-69.279-56.016zM498.447 395.125c-38.217 0-69.221 25.071-69.221 56.016v68.988l57.354 353.665h109.241l-28.095-353.665v-68.93c-0.058-31.004-31.004-56.075-69.279-56.075zM782.077 395.125c-38.217 0-69.162 25.071-69.162 56.016v68.988l-28.154 353.665h108.892l57.296-353.665v-68.988c0-0.931 0.175-1.92 0.233-2.792-1.803-29.666-32.051-53.224-69.104-53.224zM1134.637 451.141c0-30.946-31.004-56.016-69.221-56.016s-69.162 25.071-69.162 56.016v68.988l-108.019 353.665h109.59l137.22-353.665v-62.473h-0.349v-6.515h-0.058z"/><glyph unicode="" glyph-name="views" horiz-adv-x="1890" d="M944.97 630.958c-97.861 0-177.522-79.581-177.522-177.443 0-97.94 79.66-177.679 177.522-177.679 98.019 0 177.679 79.739 177.679 177.679 0 97.861-79.66 177.443-177.679 177.443zM944.97 960c-470.712 0-944.97-512-944.97-512s474.258-512 944.97-512c470.949 0 945.128 512 945.128 512s-474.179 512-945.128 512zM944.97 91.144c-200.057 0-362.292 162.078-362.292 362.45 0 200.057 162.236 362.292 362.292 362.292 200.214 0 362.45-162.236 362.45-362.292 0-200.451-162.236-362.45-362.45-362.45z"/><glyph unicode="" glyph-name="system-config" d="M1020.032 394.445v116.045l-16.41 5.376-124.237 40.525-33.152 80.102 63.718 134.784-82.048 82.125-15.411-7.808-116.531-59.213-80.077 33.178-50.278 140.442h-116.096l-45.875-140.698-80-33.126-134.963 63.744-82.022-82.074 7.834-15.334 59.162-116.608-33.126-80.026-140.518-50.253v-116.147l16.435-5.325 124.288-40.576 33.075-80-63.693-134.886 82.048-82.099 131.942 66.97 80.026-33.152 50.304-140.39h116.096l5.35 16.41 40.55 124.237 80.077 33.178 134.886-63.718 82.074 82.074-7.834 15.386-59.213 116.582 33.203 80.026 140.416 50.253zM510.003 287.411c-89.754 0-162.509 72.832-162.509 162.611 0 89.754 72.755 162.483 162.509 162.483 89.83 0 162.509-72.73 162.509-162.483 0.026-89.805-72.653-162.611-162.509-162.611z"/><glyph unicode="" glyph-name="home" d="M509.978 905.574l-509.978-509.926 95.949-95.949 414.106 413.978 413.875-413.978 95.949 95.898-509.901 509.978zM146.253 271.437v-335.437h259.917v304.819h207.514v-304.819h259.917v335.488l-363.622 363.597-363.725-363.648z"/><glyph unicode="" glyph-name="lego" d="M0 223.59l498.278-287.59v421.402l-498.278 287.667v-421.478zM894.464 735.514v-44.262c0-32.819-62.797-59.418-140.365-59.418-77.466 0-140.262 26.598-140.262 59.418v73.216h0.435c4.71-30.925 65.408-55.475 139.853-55.475 77.568 0 140.365 26.624 140.365 59.29 0 32.845-62.797 59.366-140.365 59.366-6.195 0-12.262-0.205-18.202-0.563l-90.317 52.147v-55.706c0-32.819-62.72-59.392-140.262-59.392-48.691 0-91.597 10.496-116.813 26.47-3.584 3.712-7.987 7.245-13.312 10.598-6.579 6.861-10.24 14.387-10.24 22.323v53.939l-87.322-50.381c-6.272 0.307-12.646 0.614-19.123 0.614-77.491 0-140.314-26.522-140.314-59.366 0-32.691 62.822-59.29 140.314-59.29 74.445 0 135.219 24.525 139.93 55.475h0.384v-73.216c0-32.819-62.746-59.418-140.314-59.418-77.491 0-140.314 26.598-140.314 59.418v43.622l-108.083-62.31 499.994-288.563 496.691 286.694-112.358 64.768zM646.784 551.987c0-32.794-62.874-59.315-140.365-59.315s-140.339 26.522-140.339 59.315v73.267h0.41c4.762-30.95 65.459-55.475 139.93-55.475s135.142 24.525 139.904 55.475h0.486v-73.267zM525.645 353.766v-417.766l498.355 287.718v417.766l-498.355-287.718zM505.318 841.344c77.542 0 140.262 26.547 140.262 59.315s-62.72 59.315-140.262 59.315c-77.491 0-140.339-26.573-140.339-59.315-0.026-32.768 62.822-59.315 140.339-59.315z"/><glyph unicode="" glyph-name="tool" d="M287.002 478.336c0.205-0.23 0.461-0.486 0.691-0.717l103.347-103.373 36.045 36.045-56.55 56.499 90.266 90.189 11.904-1.28c3.046-0.307 6.093-0.538 9.19-0.538 6.246 0 12.314 0.768 18.253 2.125l-66.381 66.381c-1.357 1.382-2.765 2.611-4.173 3.814 20.454 73.6 1.766 155.725-56.038 213.555-57.421 57.421-138.803 76.237-211.968 56.525l123.955-123.981-32.563-121.446-121.395-32.589-124.032 124.006c-19.712-73.19-0.896-154.573 56.525-212.019 60.262-60.288 147.021-77.952 222.925-53.197zM653.235 404.198c-1.997-8.909-2.509-18.202-1.459-27.546l1.306-11.93-90.189-90.189-56.55 56.55-36.070-36.122 327.219-327.194c20.198-20.173 46.618-30.259 73.062-30.259s52.915 10.086 73.037 30.259c40.346 40.32 40.346 105.728 0 146.074l-290.355 290.355zM905.907 1.638l-51.866-13.875-42.112 42.112 13.901 51.891 51.866 13.926 42.112-42.138-13.901-51.917zM506.701 365.901l56.576-56.576 64.128 64.154c-3.482 31.334 6.707 63.821 30.669 87.808 24.013 23.962 56.474 34.176 87.808 30.72l280.397 280.346-157.056 157.056-280.448-280.397c3.482-31.258-6.682-63.821-30.669-87.782-24.013-23.987-56.525-34.176-87.808-30.643l-64.102-64.205 56.499-56.422-277.043-277.12-10.138 10.138-53.248-42.829-89.421-141.312 22.835-22.835 141.312 89.421 42.803 53.222-10.138 10.138 277.043 277.12z"/><glyph unicode="" glyph-name="upgrade" d="M1023.932 454.895c-3.717 282.692-236.1 508.826-518.793 505.003-282.658-3.775-508.826-236.066-505.071-518.827 3.772-282.556 236.1-508.826 518.793-505.003 282.658 3.768 508.826 236.066 505.071 518.827zM623.991 478.696v-298.633h-223.983v298.633h-186.621l298.633 298.633 298.667-298.633h-186.679z"/><glyph unicode="" glyph-name="expand-close" d="M512.794 960c-283.187 0-512.794-229.581-512.794-512.794 0-283.187 229.606-512.794 512.794-512.794s512.794 229.632 512.794 512.794c0 283.213-229.581 512.794-512.794 512.794zM512.794-11.213c-253.158 0-458.394 205.261-458.394 458.368 0 253.158 205.261 458.394 458.394 458.394 253.184 0 458.394-205.235 458.394-458.394 0.026-253.107-205.21-458.368-458.394-458.368zM760.013 334.387l30.387 38.4-265.6 206.413-20.787 1.613-259.226-208.026 28.826-39.987 236.8 177.613z"/><glyph unicode="" glyph-name="expand-open" d="M512.794 960c-283.187 0-512.794-229.581-512.794-512.794 0-283.187 229.606-512.794 512.794-512.794s512.794 229.606 512.794 512.794c0 283.213-229.581 512.794-512.794 512.794zM512.794-11.213c-253.158 0-458.394 205.261-458.394 458.394 0 253.158 205.261 458.394 458.394 458.394 253.184 0 458.394-205.235 458.394-458.394 0.026-253.133-205.21-458.394-458.394-458.394zM265.6 505.6l-30.387-38.4 265.574-206.387 20.813-1.613 259.2 208-28.8 39.987-236.8-177.587z"/><glyph unicode="" glyph-name="gripper" d="M259.2 960h214.323v-214.323h-214.323v214.323zM259.2 690.125h214.323v-214.349h-214.323v214.349zM259.2 420.224h214.323v-214.349h-214.323v214.349zM259.2 150.349h214.323v-214.349h-214.323v214.349zM549.325 960h214.323v-214.323h-214.323v214.323zM549.325 690.125h214.323v-214.349h-214.323v214.349zM549.325 420.224h214.323v-214.349h-214.323v214.349zM549.325 150.349h214.323v-214.349h-214.323v214.349z"/><glyph unicode="" glyph-name="forward" d="M860.058 774.938v-272l-430.029 269.158-1.894-253.491-424.371 249.754-3.763-647.834 426.24 241.28-5.606-239.437 439.424 252.16v-259.635h163.942v660.045z"/><glyph unicode="" glyph-name="backward" d="M163.942 114.893v271.974l430.029-269.133 1.894 253.491 424.397-249.754 3.738 647.834-426.24-241.28 5.606 239.437-439.424-252.16v259.635h-163.942v-660.045z"/><glyph unicode="" glyph-name="info" d="M505.704 919.002c-260.096-3.489-468.158-217.202-464.706-477.336 3.489-259.982 217.202-468.12 477.298-464.631s468.158 217.202 464.706 477.336c-3.413 260.058-217.202 468.12-477.298 464.631zM557.928 762.027c47.863 0 62.009-27.762 62.009-59.544 0-39.671-31.782-76.383-86.016-76.383-45.359 0-66.901 22.831-65.65 60.53 0 31.782 26.624 75.435 89.657 75.435zM435.162 153.619c-32.73 0-56.661 19.873-33.792 107.217l37.547 154.814c6.485 24.841 7.585 34.778 0 34.778-9.785 0-52.262-17.143-77.407-34.057l-16.346 26.776c79.607 66.446 171.16 105.472 210.375 105.472 32.73 0 38.153-38.722 21.807-98.266l-43.008-162.816c-7.585-28.786-4.286-38.722 3.262-38.722 9.785 0 41.984 11.871 73.614 36.75l18.47-24.841c-77.369-77.369-161.792-107.179-194.56-107.179z"/><glyph unicode="" glyph-name="lock" d="M591.986 511.981h-16.005v192.019c0 105.851-86.13 192.019-192.019 192.019h-128c-105.851 0-192.019-86.13-192.019-192.019v-192.019h-16.005c-26.396 0-48.014-21.618-48.014-48.014v-479.991c0-26.396 21.618-48.014 48.014-48.014h544.009c26.396 0 48.014 21.618 48.014 48.014v479.991c0 26.396-21.618 48.014-48.014 48.014zM384 64h-128l27.838 139.188c-16.801 11.529-27.838 30.872-27.838 52.793 0 35.347 28.672 64.019 64.019 64.019s64.019-28.672 64.019-64.019c0-21.921-11.036-41.263-27.838-52.793l27.838-139.188zM448.019 511.981h-256v192.019c0 35.271 28.71 64.019 64.019 64.019h128c35.271 0 64.019-28.71 64.019-64.019v-192.019z"/><glyph unicode="" glyph-name="loop" d="M870.4 642.56h-194.56v-143.36h153.6v-215.040h-634.88v215.040h215.040v-112.64l204.8 184.32-204.8 184.32v-112.64h-256c-56.51 0-102.4-45.815-102.4-102.4v-296.96c0-56.51 45.89-102.4 102.4-102.4h716.8c56.585 0 102.4 45.89 102.4 102.4v296.96c0 56.585-45.815 102.4-102.4 102.4z"/><glyph unicode="" glyph-name="plus" d="M991.991 576h-351.991v351.991c0 17.673-14.336 32.009-32.009 32.009h-192.019c-17.673 0-32.009-14.336-32.009-32.009v-351.991h-351.991c-17.673 0-32.009-14.336-32.009-32.009v-192.019c0-17.673 14.336-32.009 32.009-32.009h351.991v-351.991c0-17.673 14.336-32.009 32.009-32.009h192.019c17.673 0 32.009 14.336 32.009 32.009v351.991h351.991c17.673 0 32.009 14.336 32.009 32.009v192.019c0 17.673-14.336 32.009-32.009 32.009z"/><glyph unicode="" glyph-name="recover" d="M505.704 919.002c-260.096-3.489-468.158-217.126-464.706-477.298 3.489-260.21 217.202-468.158 477.298-464.744 260.134 3.489 468.233 217.202 464.706 477.298-3.489 260.21-217.202 468.233-477.298 464.744zM506.577 857.6c70.163 0.986 136.382-15.853 194.56-46.118l-63.374-105.662c-38.002 18.47-80.631 28.937-125.762 28.937-45.056 0-87.723-10.43-125.687-28.975l-63.336 105.624c54.993 28.672 117.343 45.321 183.599 46.232zM254.255 322.313l-105.586-63.298c-28.672 54.955-45.321 117.305-46.194 183.486-0.986 70.201 15.853 136.457 46.118 194.56l105.624-63.45c-18.546-37.926-28.975-80.555-28.975-125.649 0-45.056 10.43-87.723 28.975-125.687zM517.461 38.438c-70.163-0.986-136.457 15.853-194.56 46.118l63.374 105.662c38.002-18.546 80.631-28.975 125.687-28.975 45.094 0 87.761 10.392 125.687 28.937l63.336-105.586c-54.993-28.634-117.305-45.246-183.561-46.194zM512 222.758c-124.397 0-225.242 100.883-225.242 225.242 0 124.397 100.883 225.28 225.242 225.28 124.473 0 225.28-100.883 225.28-225.28s-100.807-225.242-225.28-225.242zM769.745 322.313c18.546 38.002 28.975 80.631 28.975 125.687 0 45.094-10.43 87.723-28.975 125.687l105.586 63.374c28.672-54.993 45.359-117.305 46.232-183.561 0.91-70.201-15.929-136.457-46.194-194.56l-105.624 63.336z"/><glyph unicode="" glyph-name="refresh" horiz-adv-x="1176" d="M906.126 824.187v0c-91.174 75.89-202.487 113.171-312.548 113.057-127.014 0.038-253.611-49.683-348.16-145.636l-95.004 79.265-1.593-305.342 300.184 56.282-99.442 82.944c67.546 64.247 155.269 97.204 244.015 97.28 79.948-0.038 159.782-26.7 226.114-81.806 84.347-70.125 127.659-170.629 127.772-272.46-0.038-14.715-0.948-29.431-2.769-44.070l137.519 26.283c0.19 5.954 0.303 11.871 0.303 17.787 0.152 140.098-60.151 279.78-176.431 376.415zM839.035 193.024c-67.736-65.498-156.255-99.025-245.912-99.1-79.986 0.038-159.82 26.738-226.114 81.806-84.347 70.125-127.697 170.629-127.772 272.498 0 16.839 1.252 33.716 3.679 50.366l-138.164-25.941c-0.379-8.116-0.683-16.346-0.683-24.462-0.114-140.174 60.226-279.817 176.545-376.491 91.136-75.852 202.411-113.057 312.51-112.981h0.341c127.924 0 255.241 50.441 349.943 147.759l90.795-75.207 0.569 305.38-299.956-57.344 104.183-86.281z"/><glyph unicode="" glyph-name="remove-small" horiz-adv-x="1176" d="M593.351 938.268c-270.753 0-490.268-219.477-490.268-490.231s219.515-490.268 490.268-490.268 490.231 219.515 490.231 490.268c0 270.753-219.477 490.231-490.231 490.231zM828.947 276.347l-72.363-72.363-162.095 162.133-164.902-164.902-73.121 73.121 164.902 164.902-161.678 161.678 72.363 72.325 161.602-161.678 165.774 165.736 73.121-73.083-165.774-165.736 162.171-162.133z"/><glyph unicode="" glyph-name="retweet" d="M254.976 284.16v267.264h103.424l-179.2 203.776-179.2-203.776h103.424v-308.224c0-56.51 45.815-102.4 102.4-102.4h459.776l-131.186 143.36h-279.438zM920.538 344.576v308.224c0 56.51-45.89 102.4-102.4 102.4h-459.738l131.11-143.36h279.514v-267.264h-103.424l179.2-203.776 179.2 203.776h-103.462z"/><glyph unicode="" glyph-name="unlocked" d="M768 895.981h-128c-105.851 0-192.019-86.13-192.019-192.019v-192.019h-400.005c-26.396 0-48.014-21.618-48.014-48.014v-479.991c0-26.396 21.618-48.014 48.014-48.014h544.009c26.396 0 48.014 21.618 48.014 48.014v479.991c0 26.396-21.618 48.014-48.014 48.014h-16.005v192.019c0 35.271 28.71 64.019 64.019 64.019h128c35.271 0 64.019-28.71 64.019-64.019v-192.019h128v192.019c0 105.851-86.13 192.019-192.019 192.019zM384 64h-128l27.838 139.188c-16.801 11.529-27.838 30.872-27.838 52.793 0 35.347 28.672 64.019 64.019 64.019s64.019-28.672 64.019-64.019c0-21.921-11.036-41.263-27.838-52.793l27.838-139.188z"/><glyph unicode="" glyph-name="warning" horiz-adv-x="1176" d="M593.351 960l-593.351-1023.962h1186.74l-593.351 1023.962zM653.236 60.549h-125.421v121.211h125.421v-121.211zM622.175 231.671h-62.502l-34.816 288.313v156.748h131.3v-156.748l-33.982-288.313z"/><glyph unicode="" glyph-name="arrow-left" d="M0 448l512-512v320.019h512v384h-512v320.019z"/><glyph unicode="" glyph-name="arrow-right" d="M1024 448l-512 512v-320.019h-512v-384h512v-320.019z"/><glyph unicode="" glyph-name="back-arrow" d="M402.735 813.265l-320.019-320.019c-24.993-24.993-24.993-65.498 0-90.491l320.019-320.019c24.993-24.993 65.498-24.993 90.491 0s24.993 65.498 0 90.491l-210.754 210.754h613.49c35.347 0 64.019 28.634 64.019 64.019s-28.672 64.019-64.019 64.019h-613.49l210.754 210.754c12.478 12.478 18.735 28.862 18.735 45.246s-6.258 32.768-18.735 45.246c-24.993 24.993-65.498 24.993-90.491 0z"/><glyph unicode="" glyph-name="calendar" horiz-adv-x="1176" d="M507.259 381.478h-102.059v-101.717h102.059v101.717zM650.885 245.286h-101.945v-101.717h101.945v101.717zM507.259 245.286h-102.059v-101.717h102.059v101.717zM507.259 517.67h-102.059v-101.679h102.059v101.679zM843.131 715.909c23.4 0 42.287 18.887 42.287 42.174v145.408c0 23.324-18.887 42.174-42.287 42.174s-42.325-18.849-42.325-42.174v-145.408c0.038-23.324 18.925-42.174 42.325-42.174zM343.419 715.909c23.362 0 42.249 18.887 42.249 42.174v145.408c0 23.324-18.887 42.174-42.249 42.174-23.4 0-42.325-18.849-42.325-42.174v-145.408c0-23.324 18.925-42.174 42.325-42.174zM363.444 381.478h-102.059v-101.717h102.059v101.717zM363.444 245.286h-102.059v-101.717h102.059v101.717zM650.885 381.478h-101.945v-101.717h101.945v101.717zM938.325 381.478h-102.059v-101.717h102.059v101.717zM938.325 517.67h-102.059v-101.679h102.059v101.679zM899.337 875.615v-46.914c17.598-15.474 28.71-38.153 28.71-63.412 0-46.801-37.964-84.764-84.916-84.764s-84.954 37.964-84.954 84.764c0 25.259 11.15 47.938 28.71 63.412v46.914h-387.262v-46.914c17.56-15.474 28.71-38.153 28.71-63.412 0-46.801-38.002-84.764-84.916-84.764s-84.954 37.964-84.954 84.764c0 25.259 11.15 47.938 28.71 63.412v46.914h-192.322v-925.279h997.035v925.279h-192.512zM999.234 44.696h-809.832v589.938h809.832v-589.938zM650.885 517.67h-101.945v-101.679h101.945v101.679zM794.624 517.67h-101.983v-101.679h101.983v101.679zM794.624 245.286h-101.983v-101.717h101.983v101.717zM794.624 381.478h-101.983v-101.717h101.983v101.717z"/><glyph unicode="" glyph-name="caret-down" d="M132.21 673.242c-13.881 13.729-36.295 13.729-50.138 0-13.805-13.653-13.805-35.878 0-49.607l404.897-400.877c13.881-13.729 36.257-13.729 50.138 0l404.897 400.877c13.805 13.729 13.881 35.878 0 49.607s-36.371 13.729-50.138 0.038l-379.866-365.606-379.79 365.568z"/><glyph unicode="" glyph-name="caret-left" d="M737.242 68.21c13.729-13.881 13.729-36.257 0-50.138s-35.878-13.881-49.607 0l-400.877 404.821c-13.729 13.881-13.729 36.295 0 50.138l400.877 404.897c13.729 13.881 35.878 13.881 49.607 0s13.729-36.257 0-50.138l-365.568-379.79 365.568-379.79z"/><glyph unicode="" glyph-name="caret-right" d="M286.72 68.21c-13.729-13.881-13.729-36.257 0-50.138s35.878-13.881 49.607 0l400.877 404.821c13.729 13.881 13.729 36.295 0 50.138l-400.915 404.897c-13.729 13.881-35.878 13.881-49.607 0s-13.729-36.257 0-50.138l365.568-379.79-365.568-379.79z"/><glyph unicode="" glyph-name="caret-up" d="M891.79 222.758c13.881-13.729 36.295-13.729 50.138 0 13.881 13.729 13.881 35.878 0 49.607l-404.897 400.877c-13.805 13.729-36.257 13.729-50.062 0l-404.897-400.877c-13.805-13.729-13.881-35.878 0-49.607s36.257-13.729 50.138 0l379.79 365.606 379.79-365.606z"/><glyph unicode="" glyph-name="ccw" d="M574.767 867.84c-227.593 0-412.672-182.386-418.247-409.335h-125.8l188.378-209.92 188.302 209.92h-146.242c5.537 168.998 143.777 304.393 313.609 304.393 173.397 0 313.913-140.971 313.913-314.899s-140.478-314.861-313.913-314.861c-69.48 0-133.689 22.718-185.685 61.099l-71.983-76.99c70.997-55.751 160.465-89.050 257.707-89.050 231.159 0 418.551 187.961 418.551 419.84-0.038 231.879-187.43 419.84-418.551 419.84z"/><glyph unicode="" glyph-name="check-mage" horiz-adv-x="1176" d="M996.617 833.214l-513.555-513.555-256.796 256.834-128.379-128.417 385.214-385.252 641.896 642.010z"/><glyph unicode="" glyph-name="clock" d="M512 919.040c-260.134 0-471.040-210.944-471.040-471.040 0-260.134 210.906-471.040 471.040-471.040s471.040 210.906 471.040 471.040c0 260.134-210.906 471.040-471.040 471.040zM512 79.36c-203.624 0-368.64 165.054-368.64 368.64s165.016 368.64 368.64 368.64 368.64-165.054 368.64-368.64-165.016-368.64-368.64-368.64zM547.84 714.24h-71.68v-281.069l174.345-174.345 50.669 50.707-153.335 153.335z"/><glyph unicode="" glyph-name="close-mage" horiz-adv-x="1176" d="M1094.391 882.29l-77.71 77.71-423.329-423.347-423.33 423.347-77.71-77.672 423.35-423.368-423.312-423.329 77.672-77.71 423.338 423.338 423.283-423.3 77.671 77.71-423.263 423.281z"/><glyph unicode="" glyph-name="delete" horiz-adv-x="1176" d="M337.541-61.004h513.024l64.512 645.916h-639.128l61.592-645.916zM737.394 805.831v116.508c0 19.191-15.398 34.702-34.361 34.702h-217.847c-19.001 0-34.361-15.55-34.361-34.702v-114.574c-73.576-8.382-150.149-24.614-226.494-52.338v-106.989h738.001v109.833c0 0-90.074 31.403-224.977 47.559zM668.937 812.241c-47.749 3.224-99.252 4.096-153.297 0.986v61.44c0 9.519 7.623 17.332 17.143 17.332h118.936c9.519 0 17.218-7.813 17.218-17.332v-62.426z"/><glyph unicode="" glyph-name="edit" horiz-adv-x="1176" d="M928.503 933.111l-111.502-112.109 156.065-156.9 111.502 112.071-156.065 156.937zM215.002 215.59l156.065-156.9 535.211 538.093-156.065 156.9-535.211-538.093zM103.917-47.161l188.985 49.873-139.302 140.098-49.683-190.009z"/><glyph unicode="" glyph-name="error" d="M1014.67 137.349c0 0 0 0 0 0l-310.651 310.651 310.651 310.651c0 0 0 0 0 0 3.337 3.337 5.765 7.244 7.32 11.416 4.248 11.378 1.82 24.69-7.32 33.83l-146.735 146.735c-9.14 9.14-22.452 11.567-33.83 7.32-4.172-1.555-8.078-3.982-11.416-7.32 0 0 0 0 0 0l-310.651-310.651-310.651 310.651c0 0 0 0 0 0-3.337 3.337-7.244 5.765-11.416 7.32-11.378 4.248-24.69 1.82-33.83-7.32l-146.735-146.735c-9.14-9.14-11.567-22.452-7.32-33.83 1.555-4.172 3.982-8.078 7.32-11.416 0 0 0 0 0 0l310.651-310.651-310.651-310.651c0 0 0 0 0 0-3.337-3.337-5.765-7.244-7.32-11.416-4.248-11.378-1.82-24.69 7.32-33.83l146.735-146.735c9.14-9.14 22.452-11.567 33.83-7.32 4.172 1.555 8.078 3.982 11.416 7.32 0 0 0 0 0 0l310.651 310.651 310.651-310.651c0 0 0 0 0 0 3.337-3.337 7.244-5.765 11.416-7.32 11.378-4.248 24.69-1.82 33.83 7.32l146.735 146.735c9.14 9.14 11.567 22.452 7.32 33.83-1.555 4.172-3.982 8.078-7.32 11.416z"/><glyph unicode="" glyph-name="help" horiz-adv-x="1176" d="M593.351 937.434c-270.336 0-489.434-219.098-489.434-489.358s219.098-489.434 489.434-489.434 489.434 219.136 489.434 489.434-219.136 489.358-489.434 489.358zM635.752 133.404c-11.985-11.719-26.396-17.636-43.16-17.636-8.154 0-15.967 1.517-23.4 4.589-7.358 3.034-13.843 7.168-19.456 12.174-5.613 5.158-10.126 11.226-13.388 18.356-3.337 7.13-4.968 14.753-4.968 22.945 0 16.308 5.992 30.303 17.977 42.060 11.947 11.681 26.396 17.598 43.198 17.598 16.308 0 30.606-5.689 42.78-16.801 12.25-11.188 18.318-24.993 18.318-41.339-0.038-16.384-5.992-30.303-17.939-41.984zM778.923 577.327c-3.982-13.767-9.747-26.396-17.18-37.774-7.471-11.454-16.498-22.49-27.079-33.071s-22.49-21.618-35.65-33.033c-11.454-9.785-20.783-18.318-27.913-25.79-7.168-7.396-12.895-14.867-17.218-22.338-4.286-7.433-7.282-15.398-9.026-24.007-1.707-8.609-2.617-49.721-2.617-62.35v-22.338h-101.376v32.616c0 13.729 0.986 56.661 3.034 67.584s5.158 21.125 9.481 30.872 10.012 19.228 17.18 28.369c7.168 9.14 16.232 18.887 27.079 29.203l38.647 36.902c10.847 9.747 20.177 20.632 27.951 32.616 7.737 12.060 11.529 26.7 11.529 43.88 0 22.3-6.978 41.036-21.011 56.206-14.071 15.17-33.944 22.793-59.695 22.793-13.16 0-25.069-2.389-35.65-7.282-10.619-4.817-19.797-11.454-27.496-19.759-7.737-8.344-13.577-17.901-17.598-28.786-3.982-10.847-6.334-21.997-6.865-33.527l-105.624 9.444c3.413 27.496 10.733 51.959 21.921 73.463 11.112 21.466 25.562 39.595 43.311 54.575 17.711 14.829 38.078 26.169 61.023 33.944 22.869 7.699 47.521 11.605 73.842 11.605 24.614 0 47.976-3.603 70.049-10.771 21.959-7.168 41.491-17.711 58.406-31.782 16.839-14.033 30.227-31.365 39.936-51.959 9.709-20.632 14.564-44.411 14.564-71.263 0-18.356-2.010-34.475-5.992-48.166z"/><glyph unicode="" glyph-name="history" d="M574.805 867.84c-227.631 0-412.71-182.386-418.247-409.335h-125.838l188.378-209.958 188.302 209.958h-146.242c5.537 168.998 143.777 304.393 313.647 304.393 173.359 0 313.875-140.971 313.875-314.899s-140.478-314.861-313.875-314.861c-69.518 0-133.727 22.718-185.761 61.099l-71.983-76.99c71.073-55.751 160.503-89.050 257.745-89.050 231.121 0 418.513 187.961 418.513 419.84-0.038 231.879-187.43 419.84-418.513 419.84zM537.6 673.28v-240.109l153.865-153.865 50.669 50.669-132.855 132.855v210.413h-71.68z"/><glyph unicode="" glyph-name="export" d="M383.462 382.49h255.693v213.043h127.795l-255.642 255.667-255.642-255.667h127.795zM852.173 382.49v-170.394h-681.754v170.394h-170.419v-340.89h1022.618v340.89z"/><glyph unicode="" glyph-name="import" d="M639.155 851.2h-255.693v-213.043h-127.795l255.667-255.667 255.616 255.667h-127.795zM852.173 382.49v-170.394h-681.754v170.394h-170.419v-340.89h1022.618v340.89z"/><glyph unicode="" glyph-name="dot" d="M505.139 959.915c-282.658-3.775-508.826-236.066-505.071-518.827 3.772-282.556 236.1-508.826 518.793-505.003 282.658 3.768 508.826 236.066 505.071 518.827-3.717 282.658-236.1 508.826-518.793 505.003z"/><glyph unicode="" glyph-name="not-installed" d="M510.413 960c-281.907 0-510.413-228.582-510.413-510.413 0-281.933 228.506-510.464 510.413-510.464s510.387 228.557 510.387 510.464c0 281.83-228.48 510.413-510.387 510.413zM865.843 449.587c0-69.99-20.506-135.27-55.578-190.285l-490.163 490.163c55.091 35.021 120.32 55.475 190.31 55.475 195.942 0 355.43-159.411 355.43-355.354zM154.957 449.587c0 69.939 20.506 135.245 55.578 190.31l490.189-490.189c-55.066-35.072-120.371-55.501-190.31-55.501-195.942-0.026-355.456 159.437-355.456 355.379z"/><glyph unicode="" glyph-name="disabled" d="M511.77 960c-282.778 0-512.102-229.222-512.102-512.179 0-282.829 229.325-512.102 512.102-512.102 282.931-0.026 512.23 229.248 512.23 512.102 0 282.957-229.299 512.179-512.23 512.179zM143.718 540.032h736.205v-184.269h-736.205v184.269z"/><glyph unicode="" glyph-name="menu-item" horiz-adv-x="903" d="M857.675 670.587l-403.18 240.514-402.726-240.514v-457.026l403.18-240.515 402.726 240.514v457.027zM454.857 95.535l-298.427 178.383v335.966l298.157 178.729 298.428-178.383v-335.966l-298.158-178.729z"/><glyph unicode="" glyph-name="tag" d="M904.192 959.973l-307.234-0.116-596.89-596.958 426.906-426.906 596.958 596.958-0.113 305.596-119.603 121.426zM858.679 646.663c-39.997-40.001-104.854-40.001-144.794 0-40.001 40.001-40.001 104.796 0 144.794 39.939 40.001 104.796 40.001 144.794 0 39.997-39.997 39.997-104.793 0-144.794z"/><glyph unicode="" glyph-name="camera" d="M982.767 728.098h-250.095l-59.255 121.364c0 0-11.827 25.201-42.11 25.201-23.375 0-169.366 0-235.25 0-32.969 0-44.001-25.027-44.001-25.027l-57.484-121.539h-253.406c-22.74 0-41.131-18.459-41.131-41.267v-624.333c0-22.743 18.401-41.199 41.131-41.199h941.636c22.74 0 41.199 18.459 41.199 41.199v624.299c0 22.798-18.456 41.267-41.199 41.267zM512 136.090c-138.793 0-251.597 113.015-251.597 251.931 0 138.912 112.845 251.87 251.597 251.87 138.68 0 251.597-112.981 251.597-251.87 0-138.909-112.913-251.931-251.597-251.931zM512 539.068c-83.255 0-150.972-67.714-150.972-150.972 0-83.197 67.71-150.903 150.972-150.903 83.258 0 150.903 67.714 150.903 150.903 0 83.255-67.652 150.972-150.903 150.972z"/><glyph unicode="" glyph-name="grid" d="M0.010 959.628h279.074v-279.074h-279.074zM372.77 959.628h279.074v-279.074h-279.074zM744.892 959.628h279.074v-279.074h-279.074zM0.010 587.503h279.074v-279.074h-279.074zM372.77 587.503h279.074v-279.074h-279.074zM744.892 587.503h279.074v-279.074h-279.074zM0.010 215.415h279.074v-279.074h-279.074zM372.77 215.415h279.074v-279.074h-279.074zM744.892 215.415h279.074v-279.074h-279.074z"/><glyph unicode="" glyph-name="list-menu" d="M0.010 771.516h1023.966v-136.509h-1023.966zM0.010 517.53h1023.966v-136.506h-1023.966zM0.010 260.983h1023.966v-136.513h-1023.966z"/><glyph unicode="" glyph-name="cart" d="M771.001 183.263c-55.445 0-100.448-44.754-100.448-100.2s44.879-100.324 100.448-100.324 100.448 44.879 100.448 100.324-45.003 100.2-100.448 100.2zM771.001 41.293c-23.123 0-41.77 18.648-41.77 41.771s18.647 41.77 41.77 41.77c23.247 0 41.895-18.648 41.895-41.77s-18.648-41.771-41.895-41.771zM469.532 183.263c-55.445 0-100.449-44.754-100.449-100.2s45.003-100.324 100.449-100.324c55.445 0 100.448 44.879 100.448 100.324s-45.003 100.2-100.448 100.2zM469.532 41.293c-23.123 0-41.771 18.648-41.771 41.771s18.648 41.77 41.771 41.77 41.77-18.648 41.77-41.77-18.648-41.771-41.77-41.771zM823.587 465.588c-130.036 0-238.441 91.622-264.547 213.825h-207.237l-136.749 198.162v1.865h-207.237v-83.541h169.942l78.693-117.729 83.417-412.857h581.183l49.23 243.786c-42.268-27.474-92.616-43.511-146.694-43.511zM1023.862 710.244v45.376l-55.073 18.026-12.929 31.204 24.863 52.71-31.95 32.074-5.967-2.984-45.5-23.123-31.328 12.929-19.642 54.948h-45.376l-2.114-6.464-15.912-48.608-31.203-12.929-52.835 24.863-32.074-31.95 3.108-5.967 23.247-45.624-13.053-31.328-54.948-19.766v-45.376l6.34-2.113 48.732-15.788 12.929-31.204-24.863-52.71 32.074-32.074 6.092 3.108 45.376 22.999 31.328-12.929 19.642-54.824h45.376l2.113 6.464 15.913 48.359 31.203 12.929 52.71-24.988 32.198 32.074-3.108 6.092-23.247 45.624 12.929 31.203 54.948 19.766zM824.582 668.473c-35.057 0-63.65 28.469-63.65 63.526 0 35.182 28.469 63.526 63.65 63.526s63.526-28.469 63.526-63.526c-0.124-35.182-28.469-63.526-63.526-63.526z"/><glyph unicode="" glyph-name="screen" horiz-adv-x="1159" d="M723.661 70.399c-2.404 10.843-4.034 21.47-5.282 31.583h-277.528c-2.458-20.233-6.917-43.087-14.646-64.305-7.79-21.277-18.796-40.54-33.824-54.15-15.028-13.552-33.689-22.104-59.788-22.158v-25.369h494.020v25.369c-26.142 0.058-44.737 8.61-59.838 22.158-22.44 20.307-35.961 53.91-43.114 86.873zM1126.214 960h-1093.209c-18.22 0-33.005-15.024-33.005-33.596v-731.259c0-18.576 14.785-33.623 33.005-33.623h1093.209c18.224 0 33.067 15.051 33.067 33.623v731.259c0 18.572-14.843 33.596-33.067 33.596zM1079.193 243.078h-999.234v635.394h999.234v-635.394z"/><glyph unicode="" glyph-name="video" horiz-adv-x="2041" d="M2041.366 958.898v-1021.449h-175.926l-411.263 409.297v204.59l411.263 407.568h175.926zM1305.997-29.076c0-19.377-15.608-34.924-34.856-34.924h-1236.279c-19.255 0-34.863 15.547-34.863 34.924v954.275c0 19.248 15.608 34.801 34.863 34.801h1236.279c19.248 0 34.856-15.553 34.856-34.801v-954.275z"/><glyph unicode="" glyph-name="revert" horiz-adv-x="1404" d="M1042.226 660.151h-598.393v299.849l-443.833-384.316 443.833-384.403v299.859h598.393c106.478 0 192.801-86.318 192.801-192.801s-86.318-192.796-192.801-192.796v-0.483l-452.707-0.005c-46.695-0.005-84.53-37.845-84.53-84.535 0-46.68 37.84-84.525 84.535-84.525 0.377 0 0.744 0.053 1.121 0.058h451.581c199.964 0 362.044 162.085 362.044 362.039 0 199.964-162.080 362.059-362.044 362.059z"/><glyph unicode="" glyph-name="clip" d="M939.616 811.616c112.512-112.448 112.512-294.816 0-407.264l-350.944-350.976c-12.512-12.544-32.736-12.544-45.248 0-12.576 12.512-12.576 32.704 0 45.248l346.432 346.464c87.488 87.488 87.488 229.248-0.064 316.768-87.36 87.488-229.248 87.488-316.736 0l-462.304-456.864c-62.496-62.464-62.496-163.776 0-226.24 62.496-62.496 163.744-62.496 226.24 0l466.88 461.344c37.44 37.44 37.44 98.336 0 135.776-37.44 37.408-98.304 37.408-135.744 0l-351.008-351.008c-12.512-12.512-32.736-12.512-45.248 0-12.512 12.544-12.512 32.736 0 45.28l350.976 350.976c62.432 62.464 163.744 62.464 226.24 0 62.496-62.496 62.496-163.776 0-226.272l-466.88-461.376c-87.296-87.328-229.408-87.328-316.736 0s-87.328 229.472 0 316.8l466.88 461.344c112.448 112.512 294.816 112.512 407.264 0z"/><glyph unicode="" glyph-name="module" horiz-adv-x="883" d="M793.271 737.4l-192.695 83.055v-80.482c-2.517-31.926-83.182-57.618-182.582-57.618-99.309 0-180.126 25.692-182.398 57.618h-0.318l-0.465 80.482-197.709-83.055 381.218-167.697 374.95 167.697zM265.959 841.886l-1.104-0.428c32.596-16.331 89.086-27.124 153.551-27.124 64.726 0 121.621 10.94 153.996 27.355l-1.168 0.512c18.811 9.3 29.664 20.34 29.664 32.264 0 32.713-81.606 59.114-182.492 59.114-100.759 0-182.806-26.401-182.806-59.114-0.003-12.007 11.295-23.218 30.36-32.579zM418.418 497.564l-418.418 191.009v-563.335l418.321-189.238 418.321 189.238v563.733l-418.224-191.407z"/><glyph unicode="" glyph-name="alert-round" d="M1023.959 454.912c-3.717 282.665-236.121 508.842-518.817 505.040-282.689-3.772-508.866-236.091-505.094-518.868 3.772-282.58 236.121-508.842 518.813-505.040 282.689 3.772 508.866 236.067 505.098 518.868zM580.086 55.641h-136.149v136.163h136.149v-136.163zM597.168 666.258l-44.103-388.928h-83.113l-43.099 388.928v171.575h170.318v-171.575z"/><glyph unicode="" glyph-name="document" horiz-adv-x="793" d="M0 448v-512h793.43v771.052l-42.045 36.62c-23.735 19.666-46.114 39.332-50.183 43.401-4.069 3.391-16.275 14.241-27.126 23.735s-53.574 46.792-94.94 83.412l-75.952 65.78h-503.184v-512zM465.886 746.384c0.678-56.286 1.356-105.791 2.034-109.86 0-6.781 25.77-8.816 107.147-8.816h107.147v-287.534c-0.678-252.27-1.356-288.212-10.85-290.246-5.425-1.356-133.595-2.034-284.821-2.034l-274.649 0.678-1.356 392.646c-0.678 216.328-0.678 396.715 0.678 400.106 1.356 4.069 67.136 6.781 177.674 6.781h175.64l1.356-101.722z"/></font></defs></svg> \ No newline at end of file diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.ttf b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.ttf index bc3eddf307438029d440be39f85fe2bfe398afc8..2d896e8b3dba067a0b772b262be35c066160a7d8 100755 Binary files a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.ttf and b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.ttf differ diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff index bd9560bf583279cb79ec485a741272b9a73e89bd..7cd73320aed862466a210b9d8455f19bca9b0cd9 100755 Binary files a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff and b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff differ diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff2 b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff2 index 25c1c88c0bff8958c62084729d9b618f97646fde..a26908a3b1e6992cf5a27638e38871b2eac07b13 100755 Binary files a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff2 and b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/admin-icons.woff2 differ diff --git a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/selection.json b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/selection.json index c1733d650bcd283ce794e7989a555bc0cb87f438..f639e5bb413f1976b46a371e28bb6a7ceec528cb 100755 --- a/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/selection.json +++ b/app/design/adminhtml/Magento/backend/web/fonts/admin-icons/selection.json @@ -1,2326 +1,2356 @@ { - "IcoMoonType": "selection", - "icons": [ - { - "icon": { - "paths": [ - "M2041.366 1.102v1021.449h-175.926l-411.263-409.297v-204.59l411.263-407.568h175.926z", - "M1305.997 989.076c0 19.377-15.608 34.924-34.856 34.924h-1236.279c-19.255 0-34.863-15.547-34.863-34.924v-954.275c0-19.248 15.608-34.801 34.863-34.801h1236.279c19.248 0 34.856 15.553 34.856 34.801v954.275z" - ], - "width": 2041, - "attrs": [], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "video" - ], - "grid": 0 - }, - "attrs": [], - "properties": { - "order": 127, - "id": 0, - "prevSize": 32, - "code": 58945, - "name": "video" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 0 - }, - { - "icon": { - "paths": [ - "M723.661 889.601c-2.404-10.843-4.034-21.47-5.282-31.583h-277.528c-2.458 20.233-6.917 43.087-14.646 64.305-7.79 21.277-18.796 40.54-33.824 54.15-15.028 13.552-33.689 22.104-59.788 22.158v25.369h494.020v-25.369c-26.142-0.058-44.737-8.61-59.838-22.158-22.44-20.307-35.961-53.91-43.114-86.873zM1126.214 0h-1093.209c-18.22 0-33.005 15.024-33.005 33.596v731.259c0 18.576 14.785 33.623 33.005 33.623h1093.209c18.224 0 33.067-15.051 33.067-33.623v-731.259c0-18.572-14.843-33.596-33.067-33.596zM1079.193 716.922h-999.234v-635.394h999.234v635.394z" - ], - "width": 1159, - "attrs": [], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "screen" - ], - "grid": 0 - }, - "attrs": [], - "properties": { - "order": 72, - "id": 1, - "prevSize": 32, - "code": 58944, - "name": "screen" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 1 - }, - { - "icon": { - "paths": [ - "M771.001 776.737c-55.445 0-100.448 44.754-100.448 100.2s44.879 100.324 100.448 100.324 100.448-44.879 100.448-100.324-45.003-100.2-100.448-100.2zM771.001 918.707c-23.123 0-41.77-18.648-41.77-41.771s18.647-41.77 41.77-41.77c23.247 0 41.895 18.648 41.895 41.77s-18.648 41.771-41.895 41.771z", - "M469.532 776.737c-55.445 0-100.449 44.754-100.449 100.2s45.003 100.324 100.449 100.324c55.445 0 100.448-44.879 100.448-100.324s-45.003-100.2-100.448-100.2zM469.532 918.707c-23.123 0-41.771-18.648-41.771-41.771s18.648-41.77 41.771-41.77 41.77 18.648 41.77 41.77-18.648 41.771-41.77 41.771z", - "M823.587 494.412c-130.036 0-238.441-91.622-264.547-213.825h-207.237l-136.749-198.162v-1.865h-207.237v83.541h169.942l78.693 117.729 83.417 412.857h581.183l49.23-243.786c-42.268 27.474-92.616 43.511-146.694 43.511z", - "M1023.862 249.756v-45.376l-55.073-18.026-12.929-31.204 24.863-52.71-31.95-32.074-5.967 2.984-45.5 23.123-31.328-12.929-19.642-54.948h-45.376l-2.114 6.464-15.912 48.608-31.203 12.929-52.835-24.863-32.074 31.95 3.108 5.967 23.247 45.624-13.053 31.328-54.948 19.766v45.376l6.34 2.113 48.732 15.788 12.929 31.204-24.863 52.71 32.074 32.074 6.092-3.108 45.376-22.999 31.328 12.929 19.642 54.824h45.376l2.113-6.464 15.913-48.359 31.203-12.929 52.71 24.988 32.198-32.074-3.108-6.092-23.247-45.624 12.929-31.203 54.948-19.766zM824.582 291.527c-35.057 0-63.65-28.469-63.65-63.526 0-35.182 28.469-63.526 63.65-63.526s63.526 28.469 63.526 63.526c-0.124 35.182-28.469 63.526-63.526 63.526z" - ], - "attrs": [], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "cart" - ], - "grid": 0 - }, - "attrs": [], - "properties": { - "order": 71, - "id": 2, - "prevSize": 32, - "code": 58943, - "name": "cart" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 2 - }, - { - "icon": { - "paths": [ - "M0.010 188.484h1023.966v136.509h-1023.966z", - "M0.010 442.47h1023.966v136.506h-1023.966z", - "M0.010 699.017h1023.966v136.513h-1023.966z" - ], - "attrs": [ - {}, - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "list-menu" - ], - "grid": 0 - }, - "attrs": [ - {}, - {}, - {} - ], - "properties": { - "order": 61, - "id": 3, - "prevSize": 32, - "code": 58942, - "name": "list-menu" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 3 - }, - { - "icon": { - "paths": [ - "M0.010 0.372h279.074v279.074h-279.074z", - "M372.77 0.372h279.074v279.074h-279.074z", - "M744.892 0.372h279.074v279.074h-279.074z", - "M0.010 372.497h279.074v279.074h-279.074z", - "M372.77 372.497h279.074v279.074h-279.074z", - "M744.892 372.497h279.074v279.074h-279.074z", - "M0.010 744.585h279.074v279.074h-279.074z", - "M372.77 744.585h279.074v279.074h-279.074z", - "M744.892 744.585h279.074v279.074h-279.074z" - ], - "attrs": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "grid" - ], - "grid": 0 - }, - "attrs": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} - ], - "properties": { - "order": 112, - "id": 4, - "prevSize": 32, - "code": 58941, - "name": "grid" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 4 - }, - { - "icon": { - "paths": [ - "M982.767 231.902h-250.095l-59.255-121.364c0 0-11.827-25.201-42.11-25.201-23.375 0-169.366 0-235.25 0-32.969 0-44.001 25.027-44.001 25.027l-57.484 121.539h-253.406c-22.74 0-41.131 18.459-41.131 41.267v624.333c0 22.743 18.401 41.199 41.131 41.199h941.636c22.74 0 41.199-18.459 41.199-41.199v-624.299c0-22.798-18.456-41.267-41.199-41.267zM512 823.91c-138.793 0-251.597-113.015-251.597-251.931 0-138.912 112.845-251.87 251.597-251.87 138.68 0 251.597 112.981 251.597 251.87 0 138.909-112.913 251.931-251.597 251.931z", - "M512 420.932c-83.255 0-150.972 67.714-150.972 150.972 0 83.197 67.71 150.903 150.972 150.903 83.258 0 150.903-67.714 150.903-150.903 0-83.255-67.652-150.972-150.903-150.972z" - ], - "attrs": [ - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "camera" - ], - "grid": 0 - }, - "attrs": [ - {}, - {} - ], - "properties": { - "order": 121, - "id": 5, - "prevSize": 32, - "code": 58940, - "name": "camera" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 5 - }, - { - "icon": { - "paths": [ - "M904.192 0.027l-307.234 0.116-596.89 596.958 426.906 426.906 596.958-596.958-0.113-305.596-119.603-121.426zM858.679 313.337c-39.997 40.001-104.854 40.001-144.794 0-40.001-40.001-40.001-104.796 0-144.794 39.939-40.001 104.796-40.001 144.794 0 39.997 39.997 39.997 104.793 0 144.794z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "tag" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 111, - "id": 6, - "prevSize": 32, - "code": 58939, - "name": "tag" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 6 - }, - { - "icon": { - "paths": [ - "M1094.391 77.71l-77.71-77.71-423.329 423.347-423.33-423.347-77.71 77.672 423.35 423.368-423.312 423.329 77.672 77.71 423.338-423.338 423.283 423.3 77.671-77.71-423.263-423.281z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "colorPermutations": { - "6868681": [ - { - "f": 0 - } - ] - }, - "tags": [ - "close-mage" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 110, - "id": 7, - "prevSize": 32, - "code": 58927, - "name": "close-mage" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 7 - }, - { - "icon": { - "paths": [ - "M857.675 289.413l-403.18-240.514-402.726 240.514v457.026l403.18 240.515 402.726-240.514v-457.027zM454.857 864.465l-298.427-178.383v-335.966l298.157-178.729 298.428 178.383v335.966l-298.158 178.729z" - ], - "width": 903, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "colorPermutations": { - "6868681": [ - { - "f": 0 - } - ] - }, - "tags": [ - "menu-item" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 109, - "id": 8, - "prevSize": 32, - "code": 58938, - "name": "menu-item" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 8 - }, - { - "icon": { - "paths": [ - "M505.704 40.998c-260.096 3.489-468.158 217.202-464.706 477.336 3.489 259.982 217.202 468.12 477.298 464.631s468.158-217.202 464.706-477.336c-3.413-260.058-217.202-468.12-477.298-464.631zM557.928 197.973c47.863 0 62.009 27.762 62.009 59.544 0 39.671-31.782 76.383-86.016 76.383-45.359 0-66.901-22.831-65.65-60.53 0-31.782 26.624-75.435 89.657-75.435zM435.162 806.381c-32.73 0-56.661-19.873-33.792-107.217l37.547-154.814c6.485-24.841 7.585-34.778 0-34.778-9.785 0-52.262 17.143-77.407 34.057l-16.346-26.776c79.607-66.446 171.16-105.472 210.375-105.472 32.73 0 38.153 38.722 21.807 98.266l-43.008 162.816c-7.585 28.786-4.286 38.722 3.262 38.722 9.785 0 41.984-11.871 73.614-36.75l18.47 24.841c-77.369 77.369-161.792 107.179-194.56 107.179z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "info" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 108, - "id": 9, - "prevSize": 32, - "code": 58906, - "name": "info" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 9 - }, - { - "icon": { - "paths": [ - "M591.986 448.019h-16.005v-192.019c0-105.851-86.13-192.019-192.019-192.019h-128c-105.851 0-192.019 86.13-192.019 192.019v192.019h-16.005c-26.396 0-48.014 21.618-48.014 48.014v479.991c0 26.396 21.618 48.014 48.014 48.014h544.009c26.396 0 48.014-21.618 48.014-48.014v-479.991c0-26.396-21.618-48.014-48.014-48.014zM384 896h-128l27.838-139.188c-16.801-11.529-27.838-30.872-27.838-52.793 0-35.347 28.672-64.019 64.019-64.019s64.019 28.672 64.019 64.019c0 21.921-11.036 41.263-27.838 52.793l27.838 139.188zM448.019 448.019h-256v-192.019c0-35.271 28.71-64.019 64.019-64.019h128c35.271 0 64.019 28.71 64.019 64.019v192.019z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "lock" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 107, - "id": 10, - "prevSize": 32, - "code": 58907, - "name": "lock" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 10 - }, - { - "icon": { - "paths": [ - "M870.4 317.44h-194.56v143.36h153.6v215.040h-634.88v-215.040h215.040v112.64l204.8-184.32-204.8-184.32v112.64h-256c-56.51 0-102.4 45.815-102.4 102.4v296.96c0 56.51 45.89 102.4 102.4 102.4h716.8c56.585 0 102.4-45.89 102.4-102.4v-296.96c0-56.585-45.815-102.4-102.4-102.4z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "loop" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 106, - "id": 11, - "prevSize": 32, - "code": 58908, - "name": "loop" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 11 - }, - { - "icon": { - "paths": [ - "M991.991 384h-351.991v-351.991c0-17.673-14.336-32.009-32.009-32.009h-192.019c-17.673 0-32.009 14.336-32.009 32.009v351.991h-351.991c-17.673 0-32.009 14.336-32.009 32.009v192.019c0 17.673 14.336 32.009 32.009 32.009h351.991v351.991c0 17.673 14.336 32.009 32.009 32.009h192.019c17.673 0 32.009-14.336 32.009-32.009v-351.991h351.991c17.673 0 32.009-14.336 32.009-32.009v-192.019c0-17.673-14.336-32.009-32.009-32.009z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "plus" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 105, - "id": 12, - "prevSize": 32, - "code": 58909, - "name": "plus" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 12 - }, - { - "icon": { - "paths": [ - "M505.704 40.998c-260.096 3.489-468.158 217.126-464.706 477.298 3.489 260.21 217.202 468.158 477.298 464.744 260.134-3.489 468.233-217.202 464.706-477.298-3.489-260.21-217.202-468.233-477.298-464.744zM506.577 102.4c70.163-0.986 136.382 15.853 194.56 46.118l-63.374 105.662c-38.002-18.47-80.631-28.937-125.762-28.937-45.056 0-87.723 10.43-125.687 28.975l-63.336-105.624c54.993-28.672 117.343-45.321 183.599-46.232zM254.255 637.687l-105.586 63.298c-28.672-54.955-45.321-117.305-46.194-183.486-0.986-70.201 15.853-136.457 46.118-194.56l105.624 63.45c-18.546 37.926-28.975 80.555-28.975 125.649 0 45.056 10.43 87.723 28.975 125.687zM517.461 921.562c-70.163 0.986-136.457-15.853-194.56-46.118l63.374-105.662c38.002 18.546 80.631 28.975 125.687 28.975 45.094 0 87.761-10.392 125.687-28.937l63.336 105.586c-54.993 28.634-117.305 45.246-183.561 46.194zM512 737.242c-124.397 0-225.242-100.883-225.242-225.242 0-124.397 100.883-225.28 225.242-225.28 124.473 0 225.28 100.883 225.28 225.28s-100.807 225.242-225.28 225.242zM769.745 637.687c18.546-38.002 28.975-80.631 28.975-125.687 0-45.094-10.43-87.723-28.975-125.687l105.586-63.374c28.672 54.993 45.359 117.305 46.232 183.561 0.91 70.201-15.929 136.457-46.194 194.56l-105.624-63.336z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "recover" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 104, - "id": 13, - "prevSize": 32, - "code": 58910, - "name": "recover" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 13 - }, - { - "icon": { - "paths": [ - "M906.126 135.813v0c-91.174-75.89-202.487-113.171-312.548-113.057-127.014-0.038-253.611 49.683-348.16 145.636l-95.004-79.265-1.593 305.342 300.184-56.282-99.442-82.944c67.546-64.247 155.269-97.204 244.015-97.28 79.948 0.038 159.782 26.7 226.114 81.806 84.347 70.125 127.659 170.629 127.772 272.46-0.038 14.715-0.948 29.431-2.769 44.070l137.519-26.283c0.19-5.954 0.303-11.871 0.303-17.787 0.152-140.098-60.151-279.78-176.431-376.415zM839.035 766.976c-67.736 65.498-156.255 99.025-245.912 99.1-79.986-0.038-159.82-26.738-226.114-81.806-84.347-70.125-127.697-170.629-127.772-272.498 0-16.839 1.252-33.716 3.679-50.366l-138.164 25.941c-0.379 8.116-0.683 16.346-0.683 24.462-0.114 140.174 60.226 279.817 176.545 376.491 91.136 75.852 202.411 113.057 312.51 112.981h0.341c127.924 0 255.241-50.441 349.943-147.759l90.795 75.207 0.569-305.38-299.956 57.344 104.183 86.281z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "refresh" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 113, - "id": 14, - "prevSize": 32, - "code": 58911, - "name": "refresh" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 14 - }, - { - "icon": { - "paths": [ - "M593.351 21.732c-270.753 0-490.268 219.477-490.268 490.231s219.515 490.268 490.268 490.268 490.231-219.515 490.231-490.268c0-270.753-219.477-490.231-490.231-490.231zM828.947 683.653l-72.363 72.363-162.095-162.133-164.902 164.902-73.121-73.121 164.902-164.902-161.678-161.678 72.363-72.325 161.602 161.678 165.774-165.736 73.121 73.083-165.774 165.736 162.171 162.133z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "remove-small" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 114, - "id": 15, - "prevSize": 32, - "code": 58912, - "name": "remove-small" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 15 - }, - { - "icon": { - "paths": [ - "M254.976 675.84v-267.264h103.424l-179.2-203.776-179.2 203.776h103.424v308.224c0 56.51 45.815 102.4 102.4 102.4h459.776l-131.186-143.36h-279.438zM920.538 615.424v-308.224c0-56.51-45.89-102.4-102.4-102.4h-459.738l131.11 143.36h279.514v267.264h-103.424l179.2 203.776 179.2-203.776h-103.462z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "retweet" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 117, - "id": 16, - "prevSize": 32, - "code": 58913, - "name": "retweet" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 16 - }, - { - "icon": { - "paths": [ - "M768 64.019h-128c-105.851 0-192.019 86.13-192.019 192.019v192.019h-400.005c-26.396 0-48.014 21.618-48.014 48.014v479.991c0 26.396 21.618 48.014 48.014 48.014h544.009c26.396 0 48.014-21.618 48.014-48.014v-479.991c0-26.396-21.618-48.014-48.014-48.014h-16.005v-192.019c0-35.271 28.71-64.019 64.019-64.019h128c35.271 0 64.019 28.71 64.019 64.019v192.019h128v-192.019c0-105.851-86.13-192.019-192.019-192.019zM384 896h-128l27.838-139.188c-16.801-11.529-27.838-30.872-27.838-52.793 0-35.347 28.672-64.019 64.019-64.019s64.019 28.672 64.019 64.019c0 21.921-11.036 41.263-27.838 52.793l27.838 139.188z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "unlocked" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 36, - "id": 17, - "prevSize": 32, - "code": 58914, - "name": "unlocked" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 17 - }, - { - "icon": { - "paths": [ - "M593.351 0l-593.351 1023.962h1186.74l-593.351-1023.962zM653.236 899.451h-125.421v-121.211h125.421v121.211zM622.175 728.329h-62.502l-34.816-288.313v-156.748h131.3v156.748l-33.982 288.313z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "warning" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 37, - "id": 18, - "prevSize": 32, - "code": 58915, - "name": "warning" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 18 - }, - { - "icon": { - "paths": [ - "M0 512l512 512v-320.019h512v-384h-512v-320.019z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "arrow-left" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 38, - "id": 19, - "prevSize": 32, - "code": 58916, - "name": "arrow-left" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 19 - }, - { - "icon": { - "paths": [ - "M1024 512l-512-512v320.019h-512v384h512v320.019z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "arrow-right" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 39, - "id": 20, - "prevSize": 32, - "code": 58917, - "name": "arrow-right" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 20 - }, - { - "icon": { - "paths": [ - "M402.735 146.735l-320.019 320.019c-24.993 24.993-24.993 65.498 0 90.491l320.019 320.019c24.993 24.993 65.498 24.993 90.491 0s24.993-65.498 0-90.491l-210.754-210.754h613.49c35.347 0 64.019-28.634 64.019-64.019s-28.672-64.019-64.019-64.019h-613.49l210.754-210.754c12.478-12.478 18.735-28.862 18.735-45.246s-6.258-32.768-18.735-45.246c-24.993-24.993-65.498-24.993-90.491 0z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "back-arrow" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 103, - "id": 21, - "prevSize": 32, - "code": 58918, - "name": "back-arrow" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 21 - }, - { - "icon": { - "paths": [ - "M507.259 578.522h-102.059v101.717h102.059v-101.717zM650.885 714.714h-101.945v101.717h101.945v-101.717zM507.259 714.714h-102.059v101.717h102.059v-101.717zM507.259 442.33h-102.059v101.679h102.059v-101.679zM843.131 244.091c23.4 0 42.287-18.887 42.287-42.174v-145.408c0-23.324-18.887-42.174-42.287-42.174s-42.325 18.849-42.325 42.174v145.408c0.038 23.324 18.925 42.174 42.325 42.174zM343.419 244.091c23.362 0 42.249-18.887 42.249-42.174v-145.408c0-23.324-18.887-42.174-42.249-42.174-23.4 0-42.325 18.849-42.325 42.174v145.408c0 23.324 18.925 42.174 42.325 42.174zM363.444 578.522h-102.059v101.717h102.059v-101.717zM363.444 714.714h-102.059v101.717h102.059v-101.717zM650.885 578.522h-101.945v101.717h101.945v-101.717zM938.325 578.522h-102.059v101.717h102.059v-101.717zM938.325 442.33h-102.059v101.679h102.059v-101.679zM899.337 84.385v46.914c17.598 15.474 28.71 38.153 28.71 63.412 0 46.801-37.964 84.764-84.916 84.764s-84.954-37.964-84.954-84.764c0-25.259 11.15-47.938 28.71-63.412v-46.914h-387.262v46.914c17.56 15.474 28.71 38.153 28.71 63.412 0 46.801-38.002 84.764-84.916 84.764s-84.954-37.964-84.954-84.764c0-25.259 11.15-47.938 28.71-63.412v-46.914h-192.322v925.279h997.035v-925.279h-192.512zM999.234 915.304h-809.832v-589.938h809.832v589.938zM650.885 442.33h-101.945v101.679h101.945v-101.679zM794.624 442.33h-101.983v101.679h101.983v-101.679zM794.624 714.714h-101.983v101.717h101.983v-101.717zM794.624 578.522h-101.983v101.717h101.983v-101.717z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "calendar" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 102, - "id": 22, - "prevSize": 32, - "code": 58919, - "name": "calendar" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 22 - }, - { - "icon": { - "paths": [ - "M132.21 286.758c-13.881-13.729-36.295-13.729-50.138 0-13.805 13.653-13.805 35.878 0 49.607l404.897 400.877c13.881 13.729 36.257 13.729 50.138 0l404.897-400.877c13.805-13.729 13.881-35.878 0-49.607s-36.371-13.729-50.138-0.038l-379.866 365.606-379.79-365.568z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "caret-down" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 101, - "id": 23, - "prevSize": 32, - "code": 58920, - "name": "caret-down" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 23 - }, - { - "icon": { - "paths": [ - "M737.242 891.79c13.729 13.881 13.729 36.257 0 50.138s-35.878 13.881-49.607 0l-400.877-404.821c-13.729-13.881-13.729-36.295 0-50.138l400.877-404.897c13.729-13.881 35.878-13.881 49.607 0s13.729 36.257 0 50.138l-365.568 379.79 365.568 379.79z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "caret-left" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 100, - "id": 24, - "prevSize": 32, - "code": 58921, - "name": "caret-left" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 24 - }, - { - "icon": { - "paths": [ - "M286.72 891.79c-13.729 13.881-13.729 36.257 0 50.138s35.878 13.881 49.607 0l400.877-404.821c13.729-13.881 13.729-36.295 0-50.138l-400.915-404.897c-13.729-13.881-35.878-13.881-49.607 0s-13.729 36.257 0 50.138l365.568 379.79-365.568 379.79z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "caret-right" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 99, - "id": 25, - "prevSize": 32, - "code": 58922, - "name": "caret-right" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 25 - }, - { - "icon": { - "paths": [ - "M891.79 737.242c13.881 13.729 36.295 13.729 50.138 0 13.881-13.729 13.881-35.878 0-49.607l-404.897-400.877c-13.805-13.729-36.257-13.729-50.062 0l-404.897 400.877c-13.805 13.729-13.881 35.878 0 49.607s36.257 13.729 50.138 0l379.79-365.606 379.79 365.606z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "caret-up" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 98, - "id": 26, - "prevSize": 32, - "code": 58923, - "name": "caret-up" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 26 - }, - { - "icon": { - "paths": [ - "M574.767 92.16c-227.593 0-412.672 182.386-418.247 409.335h-125.8l188.378 209.92 188.302-209.92h-146.242c5.537-168.998 143.777-304.393 313.609-304.393 173.397 0 313.913 140.971 313.913 314.899s-140.478 314.861-313.913 314.861c-69.48 0-133.689-22.718-185.685-61.099l-71.983 76.99c70.997 55.751 160.465 89.050 257.707 89.050 231.159 0 418.551-187.961 418.551-419.84-0.038-231.879-187.43-419.84-418.551-419.84z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "ccw" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 97, - "id": 27, - "prevSize": 32, - "code": 58924, - "name": "ccw" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 27 - }, - { - "icon": { - "paths": [ - "M996.617 126.786l-513.555 513.555-256.796-256.834-128.379 128.417 385.214 385.252 641.896-642.010z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "check-mage" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 96, - "id": 28, - "prevSize": 32, - "code": 58925, - "name": "check-mage" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 28 - }, - { - "icon": { - "paths": [ - "M512 40.96c-260.134 0-471.040 210.944-471.040 471.040 0 260.134 210.906 471.040 471.040 471.040s471.040-210.906 471.040-471.040c0-260.134-210.906-471.040-471.040-471.040zM512 880.64c-203.624 0-368.64-165.054-368.64-368.64s165.016-368.64 368.64-368.64 368.64 165.054 368.64 368.64-165.016 368.64-368.64 368.64zM547.84 245.76h-71.68v281.069l174.345 174.345 50.669-50.707-153.335-153.335z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "clock" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 95, - "id": 29, - "prevSize": 32, - "code": 58926, - "name": "clock" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 29 - }, - { - "icon": { - "paths": [ - "M337.541 1021.004h513.024l64.512-645.916h-639.128l61.592 645.916zM737.394 154.169v-116.508c0-19.191-15.398-34.702-34.361-34.702h-217.847c-19.001 0-34.361 15.55-34.361 34.702v114.574c-73.576 8.382-150.149 24.614-226.494 52.338v106.989h738.001v-109.833c0 0-90.074-31.403-224.977-47.559zM668.937 147.759c-47.749-3.224-99.252-4.096-153.297-0.986v-61.44c0-9.519 7.623-17.332 17.143-17.332h118.936c9.519 0 17.218 7.813 17.218 17.332v62.426z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "delete" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 94, - "id": 30, - "prevSize": 32, - "code": 58928, - "name": "delete" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 30 - }, - { - "icon": { - "paths": [ - "M928.503 26.889l-111.502 112.109 156.065 156.9 111.502-112.071-156.065-156.937zM215.002 744.41l156.065 156.9 535.211-538.093-156.065-156.9-535.211 538.093zM103.917 1007.161l188.985-49.873-139.302-140.098-49.683 190.009z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "edit" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 115, - "id": 31, - "prevSize": 32, - "code": 58929, - "name": "edit" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 31 - }, - { - "icon": { - "paths": [ - "M1014.67 822.651c0 0 0 0 0 0l-310.651-310.651 310.651-310.651c0 0 0 0 0 0 3.337-3.337 5.765-7.244 7.32-11.416 4.248-11.378 1.82-24.69-7.32-33.83l-146.735-146.735c-9.14-9.14-22.452-11.567-33.83-7.32-4.172 1.555-8.078 3.982-11.416 7.32 0 0 0 0 0 0l-310.651 310.651-310.651-310.651c0 0 0 0 0 0-3.337-3.337-7.244-5.765-11.416-7.32-11.378-4.248-24.69-1.82-33.83 7.32l-146.735 146.735c-9.14 9.14-11.567 22.452-7.32 33.83 1.555 4.172 3.982 8.078 7.32 11.416 0 0 0 0 0 0l310.651 310.651-310.651 310.651c0 0 0 0 0 0-3.337 3.337-5.765 7.244-7.32 11.416-4.248 11.378-1.82 24.69 7.32 33.83l146.735 146.735c9.14 9.14 22.452 11.567 33.83 7.32 4.172-1.555 8.078-3.982 11.416-7.32 0 0 0 0 0 0l310.651-310.651 310.651 310.651c0 0 0 0 0 0 3.337 3.337 7.244 5.765 11.416 7.32 11.378 4.248 24.69 1.82 33.83-7.32l146.735-146.735c9.14-9.14 11.567-22.452 7.32-33.83-1.555-4.172-3.982-8.078-7.32-11.416z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "error" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 122, - "id": 32, - "prevSize": 32, - "code": 58930, - "name": "error" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 32 - }, - { - "icon": { - "paths": [ - "M593.351 22.566c-270.336 0-489.434 219.098-489.434 489.358s219.098 489.434 489.434 489.434 489.434-219.136 489.434-489.434-219.136-489.358-489.434-489.358zM635.752 826.596c-11.985 11.719-26.396 17.636-43.16 17.636-8.154 0-15.967-1.517-23.4-4.589-7.358-3.034-13.843-7.168-19.456-12.174-5.613-5.158-10.126-11.226-13.388-18.356-3.337-7.13-4.968-14.753-4.968-22.945 0-16.308 5.992-30.303 17.977-42.060 11.947-11.681 26.396-17.598 43.198-17.598 16.308 0 30.606 5.689 42.78 16.801 12.25 11.188 18.318 24.993 18.318 41.339-0.038 16.384-5.992 30.303-17.939 41.984zM778.923 382.673c-3.982 13.767-9.747 26.396-17.18 37.774-7.471 11.454-16.498 22.49-27.079 33.071s-22.49 21.618-35.65 33.033c-11.454 9.785-20.783 18.318-27.913 25.79-7.168 7.396-12.895 14.867-17.218 22.338-4.286 7.433-7.282 15.398-9.026 24.007-1.707 8.609-2.617 49.721-2.617 62.35v22.338h-101.376v-32.616c0-13.729 0.986-56.661 3.034-67.584s5.158-21.125 9.481-30.872 10.012-19.228 17.18-28.369c7.168-9.14 16.232-18.887 27.079-29.203l38.647-36.902c10.847-9.747 20.177-20.632 27.951-32.616 7.737-12.060 11.529-26.7 11.529-43.88 0-22.3-6.978-41.036-21.011-56.206-14.071-15.17-33.944-22.793-59.695-22.793-13.16 0-25.069 2.389-35.65 7.282-10.619 4.817-19.797 11.454-27.496 19.759-7.737 8.344-13.577 17.901-17.598 28.786-3.982 10.847-6.334 21.997-6.865 33.527l-105.624-9.444c3.413-27.496 10.733-51.959 21.921-73.463 11.112-21.466 25.562-39.595 43.311-54.575 17.711-14.829 38.078-26.169 61.023-33.944 22.869-7.699 47.521-11.605 73.842-11.605 24.614 0 47.976 3.603 70.049 10.771 21.959 7.168 41.491 17.711 58.406 31.782 16.839 14.033 30.227 31.365 39.936 51.959 9.709 20.632 14.564 44.411 14.564 71.263 0 18.356-2.010 34.475-5.992 48.166z" - ], - "width": 1176, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "help" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 124, - "id": 33, - "prevSize": 32, - "code": 58931, - "name": "help" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 33 - }, - { - "icon": { - "paths": [ - "M574.805 92.16c-227.631 0-412.71 182.386-418.247 409.335h-125.838l188.378 209.958 188.302-209.958h-146.242c5.537-168.998 143.777-304.393 313.647-304.393 173.359 0 313.875 140.971 313.875 314.899s-140.478 314.861-313.875 314.861c-69.518 0-133.727-22.718-185.761-61.099l-71.983 76.99c71.073 55.751 160.503 89.050 257.745 89.050 231.121 0 418.513-187.961 418.513-419.84-0.038-231.879-187.43-419.84-418.513-419.84zM537.6 286.72v240.109l153.865 153.865 50.669-50.669-132.855-132.855v-210.413h-71.68z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "history" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 45, - "id": 34, - "prevSize": 32, - "code": 58932, - "name": "history" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 34 - }, - { - "icon": { - "paths": [ - "M510.413 0c-281.907 0-510.413 228.582-510.413 510.413 0 281.933 228.506 510.464 510.413 510.464s510.387-228.557 510.387-510.464c0-281.83-228.48-510.413-510.387-510.413zM865.843 510.413c0 69.99-20.506 135.27-55.578 190.285l-490.163-490.163c55.091-35.021 120.32-55.475 190.31-55.475 195.942 0 355.43 159.411 355.43 355.354zM154.957 510.413c0-69.939 20.506-135.245 55.578-190.31l490.189 490.189c-55.066 35.072-120.371 55.501-190.31 55.501-195.942 0.026-355.456-159.437-355.456-355.379z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "not-installed" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 58, - "id": 35, - "prevSize": 32, - "code": 58936, - "name": "not-installed" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 35 - }, - { - "icon": { - "paths": [ - "M511.77 0c-282.778 0-512.102 229.222-512.102 512.179 0 282.829 229.325 512.102 512.102 512.102 282.931 0.026 512.23-229.248 512.23-512.102 0-282.957-229.299-512.179-512.23-512.179zM143.718 419.968h736.205v184.269h-736.205v-184.269z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "disabled" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 57, - "id": 36, - "prevSize": 32, - "code": 58937, - "name": "disabled" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 36 - }, - { - "icon": { - "paths": [ - "M505.139 0.085c-282.658 3.775-508.826 236.066-505.071 518.827 3.772 282.556 236.1 508.826 518.793 505.003 282.658-3.768 508.826-236.066 505.071-518.827-3.717-282.658-236.1-508.826-518.793-505.003z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "dot" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 56, - "id": 37, - "prevSize": 32, - "code": 58935, - "name": "dot" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 37 - }, - { - "icon": { - "paths": [ - "M383.462 577.51h255.693v-213.043h127.795l-255.642-255.667-255.642 255.667h127.795z", - "M852.173 577.51v170.394h-681.754v-170.394h-170.419v340.89h1022.618v-340.89z" - ], - "attrs": [ - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "export" - ], - "grid": 0 - }, - "attrs": [ - {}, - {} - ], - "properties": { - "order": 93, - "id": 38, - "prevSize": 32, - "code": 58933, - "name": "export" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 38 - }, - { - "icon": { - "paths": [ - "M639.155 108.8h-255.693v213.043h-127.795l255.667 255.667 255.616-255.667h-127.795z", - "M852.173 577.51v170.394h-681.754v-170.394h-170.419v340.89h1022.618v-340.89z" - ], - "attrs": [ - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "import" - ], - "grid": 0 - }, - "attrs": [ - {}, - {} - ], - "properties": { - "order": 92, - "id": 39, - "prevSize": 32, - "code": 58934, - "name": "import" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 39 - }, - { - "icon": { - "paths": [ - "M259.2 0h214.323v214.323h-214.323v-214.323z", - "M259.2 269.875h214.323v214.349h-214.323v-214.349z", - "M259.2 539.776h214.323v214.349h-214.323v-214.349z", - "M259.2 809.651h214.323v214.349h-214.323v-214.349z", - "M549.325 0h214.323v214.323h-214.323v-214.323z", - "M549.325 269.875h214.323v214.349h-214.323v-214.349z", - "M549.325 539.776h214.323v214.349h-214.323v-214.349z", - "M549.325 809.651h214.323v214.349h-214.323v-214.349z" - ], - "attrs": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "gripper" - ], - "grid": 0 - }, - "attrs": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} - ], - "properties": { - "order": 91, - "id": 40, - "prevSize": 32, - "code": 58903, - "name": "gripper" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 40 - }, - { - "icon": { - "paths": [ - "M860.058 185.062v272l-430.029-269.158-1.894 253.491-424.371-249.754-3.763 647.834 426.24-241.28-5.606 239.437 439.424-252.16v259.635h163.942v-660.045z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "forward" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 90, - "id": 41, - "prevSize": 32, - "code": 58904, - "name": "forward" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 41 - }, - { - "icon": { - "paths": [ - "M163.942 845.107v-271.974l430.029 269.133 1.894-253.491 424.397 249.754 3.738-647.834-426.24 241.28 5.606-239.437-439.424 252.16v-259.635h-163.942v660.045z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "backward" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 89, - "id": 42, - "prevSize": 32, - "code": 58905, - "name": "backward", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 42 - }, - { - "icon": { - "paths": [ - "M512.794 0c-283.187 0-512.794 229.581-512.794 512.794 0 283.187 229.606 512.794 512.794 512.794s512.794-229.632 512.794-512.794c0-283.213-229.581-512.794-512.794-512.794zM512.794 971.213c-253.158 0-458.394-205.261-458.394-458.368 0-253.158 205.261-458.394 458.394-458.394 253.184 0 458.394 205.235 458.394 458.394 0.026 253.107-205.21 458.368-458.394 458.368z", - "M760.013 625.613l30.387-38.4-265.6-206.413-20.787-1.613-259.226 208.026 28.826 39.987 236.8-177.613z" - ], - "attrs": [ - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "expand-close" - ], - "grid": 0 - }, - "attrs": [ - {}, - {} - ], - "properties": { - "order": 88, - "id": 43, - "prevSize": 32, - "code": 58901, - "name": "expand-close" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 43 - }, - { - "icon": { - "paths": [ - "M512.794 0c-283.187 0-512.794 229.581-512.794 512.794 0 283.187 229.606 512.794 512.794 512.794s512.794-229.606 512.794-512.794c0-283.213-229.581-512.794-512.794-512.794zM512.794 971.213c-253.158 0-458.394-205.261-458.394-458.394 0-253.158 205.261-458.394 458.394-458.394 253.184 0 458.394 205.235 458.394 458.394 0.026 253.133-205.21 458.394-458.394 458.394z", - "M265.6 454.4l-30.387 38.4 265.574 206.387 20.813 1.613 259.2-208-28.8-39.987-236.8 177.587z" - ], - "attrs": [ - {}, - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "expand-open" - ], - "grid": 0 - }, - "attrs": [ - {}, - {} - ], - "properties": { - "order": 87, - "id": 44, - "prevSize": 32, - "code": 58902, - "name": "expand-open" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 44 - }, - { - "icon": { - "paths": [ - "M1020.032 565.555v-116.045l-16.41-5.376-124.237-40.525-33.152-80.102 63.718-134.784-82.048-82.125-15.411 7.808-116.531 59.213-80.077-33.178-50.278-140.442h-116.096l-45.875 140.698-80 33.126-134.963-63.744-82.022 82.074 7.834 15.334 59.162 116.608-33.126 80.026-140.518 50.253v116.147l16.435 5.325 124.288 40.576 33.075 80-63.693 134.886 82.048 82.099 131.942-66.97 80.026 33.152 50.304 140.39h116.096l5.35-16.41 40.55-124.237 80.077-33.178 134.886 63.718 82.074-82.074-7.834-15.386-59.213-116.582 33.203-80.026 140.416-50.253zM510.003 672.589c-89.754 0-162.509-72.832-162.509-162.611 0-89.754 72.755-162.483 162.509-162.483 89.83 0 162.509 72.73 162.509 162.483 0.026 89.805-72.653 162.611-162.509 162.611z" - ], - "attrs": [ - { - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "system-config" - ], - "grid": 0 - }, - "attrs": [ - { - "visibility": false - } - ], - "properties": { - "order": 86, - "id": 45, - "prevSize": 32, - "code": 58896, - "name": "system-config" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 45 - }, - { - "icon": { - "paths": [ - "M509.978 54.426l-509.978 509.926 95.949 95.949 414.106-413.978 413.875 413.978 95.949-95.898-509.901-509.978zM146.253 688.563v335.437h259.917v-304.819h207.514v304.819h259.917v-335.488l-363.622-363.597-363.725 363.648z" - ], - "attrs": [ - { - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "home" - ], - "grid": 0 - }, - "attrs": [ - { - "visibility": false - } - ], - "properties": { - "order": 85, - "id": 46, - "prevSize": 32, - "code": 58897, - "name": "home" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 46 - }, - { - "icon": { - "paths": [ - "M0 736.41l498.278 287.59v-421.402l-498.278-287.667v421.478zM894.464 224.486v44.262c0 32.819-62.797 59.418-140.365 59.418-77.466 0-140.262-26.598-140.262-59.418v-73.216h0.435c4.71 30.925 65.408 55.475 139.853 55.475 77.568 0 140.365-26.624 140.365-59.29 0-32.845-62.797-59.366-140.365-59.366-6.195 0-12.262 0.205-18.202 0.563l-90.317-52.147v55.706c0 32.819-62.72 59.392-140.262 59.392-48.691 0-91.597-10.496-116.813-26.47-3.584-3.712-7.987-7.245-13.312-10.598-6.579-6.861-10.24-14.387-10.24-22.323v-53.939l-87.322 50.381c-6.272-0.307-12.646-0.614-19.123-0.614-77.491 0-140.314 26.522-140.314 59.366 0 32.691 62.822 59.29 140.314 59.29 74.445 0 135.219-24.525 139.93-55.475h0.384v73.216c0 32.819-62.746 59.418-140.314 59.418-77.491 0-140.314-26.598-140.314-59.418v-43.622l-108.083 62.31 499.994 288.563 496.691-286.694-112.358-64.768zM646.784 408.013c0 32.794-62.874 59.315-140.365 59.315s-140.339-26.522-140.339-59.315v-73.267h0.41c4.762 30.95 65.459 55.475 139.93 55.475s135.142-24.525 139.904-55.475h0.486v73.267zM525.645 606.234v417.766l498.355-287.718v-417.766l-498.355 287.718zM505.318 118.656c77.542 0 140.262-26.547 140.262-59.315s-62.72-59.315-140.262-59.315c-77.491 0-140.339 26.573-140.339 59.315-0.026 32.768 62.822 59.315 140.339 59.315z" - ], - "attrs": [ - { - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "lego" - ], - "grid": 0 - }, - "attrs": [ - { - "visibility": false - } - ], - "properties": { - "order": 84, - "id": 47, - "prevSize": 32, - "code": 58898, - "name": "lego" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 47 - }, - { - "icon": { - "paths": [ - "M287.002 481.664c0.205 0.23 0.461 0.486 0.691 0.717l103.347 103.373 36.045-36.045-56.55-56.499 90.266-90.189 11.904 1.28c3.046 0.307 6.093 0.538 9.19 0.538 6.246 0 12.314-0.768 18.253-2.125l-66.381-66.381c-1.357-1.382-2.765-2.611-4.173-3.814 20.454-73.6 1.766-155.725-56.038-213.555-57.421-57.421-138.803-76.237-211.968-56.525l123.955 123.981-32.563 121.446-121.395 32.589-124.032-124.006c-19.712 73.19-0.896 154.573 56.525 212.019 60.262 60.288 147.021 77.952 222.925 53.197zM653.235 555.802c-1.997 8.909-2.509 18.202-1.459 27.546l1.306 11.93-90.189 90.189-56.55-56.55-36.070 36.122 327.219 327.194c20.198 20.173 46.618 30.259 73.062 30.259s52.915-10.086 73.037-30.259c40.346-40.32 40.346-105.728 0-146.074l-290.355-290.355zM905.907 958.362l-51.866 13.875-42.112-42.112 13.901-51.891 51.866-13.926 42.112 42.138-13.901 51.917zM506.701 594.099l56.576 56.576 64.128-64.154c-3.482-31.334 6.707-63.821 30.669-87.808 24.013-23.962 56.474-34.176 87.808-30.72l280.397-280.346-157.056-157.056-280.448 280.397c3.482 31.258-6.682 63.821-30.669 87.782-24.013 23.987-56.525 34.176-87.808 30.643l-64.102 64.205 56.499 56.422-277.043 277.12-10.138-10.138-53.248 42.829-89.421 141.312 22.835 22.835 141.312-89.421 42.803-53.222-10.138-10.138 277.043-277.12z" - ], - "attrs": [ - { - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "tool" - ], - "grid": 0 - }, - "attrs": [ - { - "visibility": false - } - ], - "properties": { - "order": 120, - "id": 48, - "prevSize": 32, - "code": 58899, - "name": "tool" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 48 - }, - { - "icon": { - "paths": [ - "M1023.932 505.105c-3.717-282.692-236.1-508.826-518.793-505.003-282.658 3.775-508.826 236.066-505.071 518.827 3.772 282.556 236.1 508.826 518.793 505.003 282.658-3.768 508.826-236.066 505.071-518.827zM623.991 481.304v298.633h-223.983v-298.633h-186.621l298.633-298.633 298.667 298.633h-186.679z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "upgrade" - ], - "grid": 0 - }, - "attrs": [ - {} - ], - "properties": { - "order": 125, - "id": 49, - "prevSize": 32, - "code": 58900, - "name": "upgrade" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 49 - }, - { - "icon": { - "paths": [ - "M870.821 731.837c-64.195-65.89-78.231-188.772-91.738-283.159-20.074-139.937-24.259-297.089-226.008-317.693v-25.318c0-25.424-39.195-46.028-64.937-46.028s-62.024 20.551-62.024 46.028v25.371c-200.054 20.816-206.993 177.914-226.855 317.693-13.453 94.439-27.331 217.268-91.049 283.264-12.818 13.348-16.473 32.998-9.11 49.947 7.362 16.843 24.153 27.913 42.797 27.913h695.343c18.75 0 35.593-11.070 42.903-28.019s3.655-36.653-9.322-50z", - "M489.569 963.883c51.060 0 92.373-40.837 92.373-91.367h-184.694c-0.053 50.53 41.314 91.367 92.32 91.367z" - ], - "width": 989, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "notification-02" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 123, - "id": 50, - "prevSize": 32, - "code": 58887, - "name": "notification-02" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 50 - }, - { - "icon": { - "paths": [ - "M252.137 153.228l-160.070 92.393 378.042 218.205 160.023-92.393-377.996-218.205zM845.638 247.063l-377.996-218.252-145.222 83.828 377.996 218.205 145.222-83.782zM502.784 526.15v433.664l376.832-217.507v-433.711l-376.832 217.553zM55.668 742.26l376.785 217.507v-436.503l-376.785-217.46v436.457z" - ], - "width": 954, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "product" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 7, - "id": 51, - "prevSize": 32, - "code": 58888, - "name": "product", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 51 - }, - { - "icon": { - "paths": [ - "M454.495 48.899l-402.697 240.513v457.026l104.632 60.727v-457.049l298.157-178.728 299.698 179.142-0.138 455.922 103.528-60.013v-457.026l-403.18-240.513zM507.766 330.28v534.344l-53.271 32.124-53.34-32.262v-533.792l-138.090 83.853v456.934l191.453 115.516 193.087-116.322v-456.451l-139.839-83.945z" - ], - "width": 903, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "logo" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 17, - "id": 52, - "prevSize": 32, - "code": 58886, - "name": "logo", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 52 - }, - { - "icon": { - "paths": [ - "M709.921 158.694c8.139 32.295 8.927 34.974 8.192 68.162-0.263 12.813-7.772 71.943-5.724 90.112 1.628 14.966 5.461 16.174 11.448 28.514 10.398 21.425 6.984 51.095 2.941 72.678-2.206 11.868-6.827 28.725-13.916 38.387-7.667 10.66-23.211 10.713-30.142 23.158-9.872 17.854-4.306 43.008-10.503 62.385-7.142 21.898-25.101 23.421-26.466 52.145 8.822 1.155 17.592 2.468 26.466 3.623 8.822 18.59 25.049 55.874 41.59 67.059 13.863 3.728 27.727 7.457 41.59 11.185 48.627 19.64 102.558 43.061 151.237 63.33 44.373 18.432 97.411 24.996 113.48 70.84 0 31.035 2.941 104.501 2.153 145.25h-965.553c-0.893-40.697 2.153-114.215 2.153-145.25 15.964-45.844 69.002-52.408 113.375-70.84 48.679-20.27 102.61-43.691 151.237-63.33 13.811-3.728 27.674-7.457 41.59-11.185 16.489-11.185 32.715-48.522 41.538-67.059l19.692-4.621c-4.464-24.576-19.85-26.466-26.256-43.743-2.521-26.099-5.041-52.145-7.509-78.192 0.053 1.155-18.117-3.361-20.48-4.779-25.731-15.806-26.204-80.24-28.725-107.021-1.103-12.183 16.174-22.265 11.343-44.636-28.094-131.44 12.183-192.88 75.881-213.307 44.216-17.749 126.871-50.465 203.855-3.728l19.167 17.487 30.93 5.251c15.491 8.77 25.416 38.124 25.416 38.124z" - ], - "width": 1090, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "account" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 9, - "id": 53, - "prevSize": 32, - "code": 58880, - "name": "account", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 53 - }, - { - "icon": { - "paths": [ - "M529.203 886.14l-468.465-628.209h936.931l-468.465 628.209z" - ], - "width": 1085, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "arrowdown" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 10, - "id": 54, - "prevSize": 32, - "code": 58881, - "name": "arrowdown", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 54 - }, - { - "icon": { - "paths": [ - "M976.793 982.006h-910.388v-910.388h910.388v910.388zM912.622 135.789h-782.046v782.088h782.046v-782.088z", - "M221.432 822.8h152.876v-372.033h-152.876v372.033z", - "M466.323 820.234h350.932v-366.53h-350.932v366.53z", - "M221.432 360.489h595.865v-147.125h-595.865v147.125z" - ], - "width": 1034, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "cms" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 83, - "id": 55, - "prevSize": 32, - "code": 58882, - "name": "cms", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 55 - }, - { - "icon": { - "paths": [ - "M264.319 308.831c75.685 0 136.98-61.259 136.98-136.944 0-75.649-61.295-136.98-136.98-136.98s-137.017 61.331-137.017 136.98c0 75.649 61.331 136.944 137.017 136.944zM448.929 370.851c-28.962-28.926-63.325-46.252-187.655-46.252s-157.859 18.776-185.335 46.252c-27.44 27.44-18.196 320.43-18.196 320.43l60.824-144.411 38.241 430.334 110.23-220.278 102.907 220.278 36.393-430.334 60.824 144.411c-0.036 0 10.693-291.468-18.233-320.43z" - ], - "width": 489, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "customers" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 82, - "id": 56, - "prevSize": 32, - "code": 58883, - "name": "customers", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 56 - }, - { - "icon": { - "paths": [ - "M680.975 73.728c-337.523 0-610.976 273.515-611.038 610.976 0.122 37.72 1.039 251.812 1.039 251.812h1219.997c0 0 0.978-239.219 1.039-251.812-0.183-337.523-273.637-610.976-611.038-610.976zM737.708 197.831c31.117 3.607 61.379 10.271 90.418 19.624l-19.93 61.685c-25.004-8.070-51.169-13.939-78.191-16.995l7.703-64.313zM270.091 673.15h-64.864c0-31.423 3.118-62.235 8.803-92.007l63.702 12.349c-5.135 25.799-7.642 52.392-7.642 79.658zM305.855 504.419l-59.178-26.288c12.655-28.489 28-55.449 45.79-80.636l52.942 37.475c-15.284 21.825-28.611 45.056-39.554 69.449zM407.46 365.155l-43.405-48.113c22.925-20.541 47.807-39.187 74.462-54.96l33.318 55.571c-22.987 13.755-44.567 29.65-64.374 47.501zM536.943 217.455c29.039-9.292 59.178-16.017 90.418-19.624l7.581 64.313c-26.838 3.057-53.003 8.926-78.13 16.995l-19.869-61.685zM761.673 801.532l-152.897 27.205-38.881-150.452 395.172-404.22-203.394 527.467zM1019.476 434.971l52.942-37.414c17.79 25.187 33.257 52.148 45.851 80.636l-59.178 26.288c-10.943-24.454-24.209-47.685-39.615-69.51zM1094.916 673.15c0-27.266-2.69-53.859-7.703-79.658l63.702-12.349c5.808 29.834 8.803 60.645 8.803 92.007h-64.802zM646.006 770.659c26.777 17.056 62.174 9.415 79.291-17.24 17.118-26.593 9.292-62.051-17.301-79.108-26.655-17.24-62.051-9.354-79.23 17.362-17.118 26.349-9.476 61.99 17.24 78.986z" - ], - "width": 1376, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "dashboard" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 81, - "id": 57, - "prevSize": 32, - "code": 58884, - "name": "dashboard", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 57 - }, - { - "icon": { - "paths": [ - "M24.097 113.465h972.827v111.922l-410.504 412.792v238.366l-171.447 87.505v-325.871l-390.875-415.877v-108.837z" - ], - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "filter" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 80, - "id": 58, - "prevSize": 32, - "code": 58885, - "name": "filter", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 58 - }, - { - "icon": { - "paths": [ - "M59.153 534.182l164.053 38.141v-303.902l-164.053 38.141v227.621zM1122.198 59.153l-837.712 194.959v335.978l140.328 376.832 151.712-57.45-104.049-279.113 649.668 151.18v-722.385z" - ], - "width": 1170, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "promotions" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 79, - "id": 59, - "prevSize": 32, - "code": 58889, - "name": "promotions", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 59 - }, - { - "icon": { - "paths": [ - "M736.707 981.234h207.134v-322.703h-207.134v322.703zM399.646 981.234h207.134v-946.793h-207.134v946.793zM62.673 981.19h207.134v-634.704h-207.134v634.704z" - ], - "width": 991, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "reports" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 78, - "id": 60, - "prevSize": 32, - "code": 58890, - "name": "reports", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 60 - }, - { - "icon": { - "paths": [ - "M426.502 612.517c-15.866-13.512-42.796-25.753-80.79-36.723v198.774c11.535-1.459 23.729-4.331 36.299-8.851 12.618-4.426 23.87-10.829 33.804-19.068 9.981-8.427 18.173-18.55 24.529-30.649 6.638-12.006 9.651-26.365 9.651-42.89 0.047-26.836-7.721-47.222-23.493-60.593zM576.736 736.856c-7.109 23.117-19.774 45.762-38.135 67.749-18.503 22.175-43.079 41.855-74.010 58.992-30.885 17.373-70.432 27.683-118.878 31.12v88.088h-57.014v-88.088c-72.080-5.603-128.483-29.237-169.113-71.374-40.536-42.090-63.935-104.095-70.432-185.544h136.251c-0.753 39.359 8.992 70.479 28.86 93.266 20.15 22.74 44.774 37.335 74.434 43.455v-216.523c-3.060-1.318-7.486-2.919-12.994-4.567-5.508-1.789-11.393-3.343-17.938-4.708-23.776-6.827-47.175-15.019-70.291-24.294-23.493-9.369-44.114-21.704-62.523-37.335-18.456-15.584-33.098-34.84-43.879-57.956-11.111-23.211-16.478-51.977-16.478-86.487 0-35.31 6.168-66.336 18.785-93.313 12.665-26.836 29.143-49.529 49.858-67.702 20.621-18.314 44.303-32.58 71.468-42.419 27.071-10.122 55.037-16.149 83.992-18.314v-79.66h57.014v79.66c29.143 3.531 56.308 10.169 81.638 20.292 25.423 10.028 47.787 23.729 67.137 41.478 19.585 17.514 35.357 39.453 47.457 65.771 12.288 26.13 19.35 57.109 21.28 93.172h-137.287c-0.518-27.636-8.616-51.082-23.917-70.432-15.725-19.303-34.275-29.002-56.308-29.002v183.331c7.862 2.072 15.631 4.143 23.729 6.12 8.098 2.072 16.525 4.567 25.565 7.297 47.645 13.983 84.415 31.12 110.168 51.318 25.8 20.292 44.726 41.666 56.92 63.653 12.335 22.175 19.633 44.256 21.704 66.336 2.448 22.081 3.531 41.713 3.531 59.039 0.047 15.207-3.531 34.416-10.593 57.579zM228.905 263.415c-8.38 7.156-15.113 16.196-19.962 26.883-4.802 10.781-7.062 23.352-7.062 37.759 0 22.834 6.733 40.536 20.103 52.824 13.653 12.618 35.734 22.552 66.713 30.131v-168.831c-10.829 0-21.516 1.695-31.826 5.226-10.216 3.437-19.633 8.851-27.966 16.007z" - ], - "width": 659, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "sales" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 77, - "id": 61, - "prevSize": 32, - "code": 58891, - "name": "sales", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 61 - }, - { - "icon": { - "paths": [ - "M555.139 21.642c-218.775-71.601-457.062 40.29-532.231 250.028-75.227 209.681 41.211 437.665 259.928 509.208 218.717 71.601 457.004-40.348 532.231-250.028s-41.211-437.665-259.928-509.208zM320.076 677.045c-158.915-52.089-243.467-217.681-188.903-369.978 54.679-152.296 227.754-233.625 386.669-181.593s243.409 217.624 188.788 369.92c-54.622 152.296-227.696 233.567-386.554 181.65z", - "M638.482 685.794l358.927 349.602 24.807-69.241 24.865-69.241-310.348-302.29z" - ], - "width": 1109, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "search" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - }, - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 76, - "id": 62, - "prevSize": 32, - "code": 58892, - "name": "search", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 62 - }, - { - "icon": { - "paths": [ - "M1098.281 85.45c19.777-3.723 34.901-21.232 34.901-42.347-0.058-23.791-19.196-43.103-42.812-43.103h-900.508c-23.675 0-42.754 19.312-42.754 43.103 0 21.057 15.007 38.566 34.843 42.347l-181.951 354.421v68.988c0 30.946 32.516 56.016 72.594 56.016 13.437 0 26.001-2.908 36.821-7.795v466.919h1061.286v-466.919c10.878 4.944 23.326 7.795 36.879 7.795 40.078 0 72.594-25.071 72.594-56.016v-68.988l-181.893-354.421zM214.758 564.875c-38.217 0-69.221-25.071-69.221-56.016v-6.457h-0.349v-62.531l137.162-353.665h109.648l-107.961 353.665v68.988c0 0 0 0 0 0 0 30.946-31.004 56.016-69.279 56.016zM498.447 564.875c-38.217 0-69.221-25.071-69.221-56.016v-68.988l57.354-353.665h109.241l-28.095 353.665v68.93c-0.058 31.004-31.004 56.075-69.279 56.075zM782.077 564.875c-38.217 0-69.162-25.071-69.162-56.016v-68.988l-28.154-353.665h108.892l57.296 353.665v68.988c0 0.931 0.175 1.92 0.233 2.792-1.803 29.666-32.051 53.224-69.104 53.224zM1134.637 508.859c0 30.946-31.004 56.016-69.221 56.016s-69.162-25.071-69.162-56.016v-68.988l-108.019-353.665h109.59l137.22 353.665v62.473h-0.349v6.515h-0.058z" - ], - "width": 1280, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "stores" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 75, - "id": 63, - "prevSize": 32, - "code": 58893, - "name": "stores", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 63 - }, - { - "icon": { - "paths": [ - "M944.97 329.042c-97.861 0-177.522 79.581-177.522 177.443 0 97.94 79.66 177.679 177.522 177.679 98.019 0 177.679-79.739 177.679-177.679 0-97.861-79.66-177.443-177.679-177.443zM944.97-0c-470.712 0-944.97 512-944.97 512s474.258 512 944.97 512c470.949 0 945.128-512 945.128-512s-474.179-512-945.128-512zM944.97 868.856c-200.057 0-362.292-162.078-362.292-362.45 0-200.057 162.236-362.292 362.292-362.292 200.214 0 362.45 162.236 362.45 362.292 0 200.451-162.236 362.45-362.45 362.45z" - ], - "width": 1890, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "views" - ], - "grid": 0 - }, - "attrs": [ - { - "opacity": 1, - "visibility": false - } - ], - "properties": { - "order": 73, - "id": 64, - "prevSize": 32, - "code": 58895, - "name": "views", - "ligatures": "" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 64 - }, - { - "icon": { - "paths": [ - "M1042.226 299.849h-598.393v-299.849l-443.833 384.316 443.833 384.403v-299.859h598.393c106.478 0 192.801 86.318 192.801 192.801s-86.318 192.796-192.801 192.796v0.483l-452.707 0.005c-46.695 0.005-84.53 37.845-84.53 84.535 0 46.68 37.84 84.525 84.535 84.525 0.377 0 0.744-0.053 1.121-0.058h451.581c199.964 0 362.044-162.085 362.044-362.039 0-199.964-162.080-362.059-362.044-362.059z" - ], - "width": 1404, - "attrs": [], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "revert" - ], - "grid": 0 - }, - "attrs": [], - "properties": { - "order": 129, - "id": 65, - "prevSize": 32, - "code": 58946, - "name": "revert" - }, - "setIdx": 0, - "setId": 7, - "iconIdx": 65 - }, - { - "icon": { - "paths": [ - "M1023.959 505.088c-3.717-282.665-236.121-508.842-518.817-505.040-282.689 3.772-508.866 236.091-505.094 518.868 3.772 282.58 236.121 508.842 518.813 505.040 282.689-3.772 508.866-236.067 505.098-518.868zM580.086 904.359h-136.149v-136.163h136.149v136.163zM597.168 293.742l-44.103 388.928h-83.113l-43.099-388.928v-171.575h170.318v171.575z" - ], - "attrs": [ - { - "fill": "rgb(100, 97, 96)" - } - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "alert-round" - ], - "grid": 32 - }, - "attrs": [ - { - "fill": "rgb(100, 97, 96)" - } - ], - "properties": { - "order": 132, - "id": 0, - "name": "alert-round", - "prevSize": 32, - "code": 58952 - }, - "setIdx": 1, - "setId": 6, - "iconIdx": 0 - }, - { - "icon": { - "paths": [ - "M793.271 222.6l-192.695-83.055v80.482c-2.517 31.926-83.182 57.618-182.582 57.618-99.309 0-180.126-25.692-182.398-57.618h-0.318l-0.465-80.482-197.709 83.055 381.218 167.697 374.95-167.697zM265.959 118.114l-1.104 0.428c32.596 16.331 89.086 27.124 153.551 27.124 64.726 0 121.621-10.94 153.996-27.355l-1.168-0.512c18.811-9.3 29.664-20.34 29.664-32.264 0-32.713-81.606-59.114-182.492-59.114-100.759 0-182.806 26.401-182.806 59.114-0.003 12.007 11.295 23.218 30.36 32.579zM418.418 462.436l-418.418-191.009v563.335l418.321 189.238 418.321-189.238v-563.733l-418.224 191.407z" - ], - "width": 883, - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "module" - ], - "grid": 32 - }, - "attrs": [ - {} - ], - "properties": { - "order": 131, - "id": 1, - "name": "module", - "prevSize": 32, - "code": 58951 - }, - "setIdx": 1, - "setId": 6, - "iconIdx": 1 - }, - { - "icon": { - "paths": [ - "M939.616 148.384c112.512 112.448 112.512 294.816 0 407.264l-350.944 350.976c-12.512 12.544-32.736 12.544-45.248 0-12.576-12.512-12.576-32.704 0-45.248l346.432-346.464c87.488-87.488 87.488-229.248-0.064-316.768-87.36-87.488-229.248-87.488-316.736 0l-462.304 456.864c-62.496 62.464-62.496 163.776 0 226.24 62.496 62.496 163.744 62.496 226.24 0l466.88-461.344c37.44-37.44 37.44-98.336 0-135.776-37.44-37.408-98.304-37.408-135.744 0l-351.008 351.008c-12.512 12.512-32.736 12.512-45.248 0-12.512-12.544-12.512-32.736 0-45.28l350.976-350.976c62.432-62.464 163.744-62.464 226.24 0 62.496 62.496 62.496 163.776 0 226.272l-466.88 461.376c-87.296 87.328-229.408 87.328-316.736 0-87.328-87.328-87.328-229.472 0-316.8l466.88-461.344c112.448-112.512 294.816-112.512 407.264 0z" - ], - "attrs": [], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "clip", - "paperclip", - "attachment" - ], - "grid": 32 - }, - "attrs": [], - "properties": { - "id": 2, - "order": 130, - "prevSize": 32, - "code": 58947, - "name": "clip" - }, - "setIdx": 1, - "setId": 6, - "iconIdx": 2 + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M0 512v512h793.43v-771.052l-42.045-36.62c-23.735-19.666-46.114-39.332-50.183-43.401-4.069-3.391-16.275-14.241-27.126-23.735s-53.574-46.792-94.94-83.412l-75.952-65.78h-503.184v512zM465.886 213.616c0.678 56.286 1.356 105.791 2.034 109.86 0 6.781 25.77 8.816 107.147 8.816h107.147v287.534c-0.678 252.27-1.356 288.212-10.85 290.246-5.425 1.356-133.595 2.034-284.821 2.034l-274.649-0.678-1.356-392.646c-0.678-216.328-0.678-396.715 0.678-400.106 1.356-4.069 67.136-6.781 177.674-6.781h175.64l1.356 101.722z" + ], + "attrs": [ + {} + ], + "width": 793, + "isMulticolor": false, + "isMulticolor2": false, + "grid": 32, + "tags": [ + "document" + ] + }, + "attrs": [ + {} + ], + "properties": { + "order": 133, + "id": 0, + "name": "document", + "prevSize": 32, + "code": 58953 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M1023.959 505.088c-3.717-282.665-236.121-508.842-518.817-505.040-282.689 3.772-508.866 236.091-505.094 518.868 3.772 282.58 236.121 508.842 518.813 505.040 282.689-3.772 508.866-236.067 505.098-518.868zM580.086 904.359h-136.149v-136.163h136.149v136.163zM597.168 293.742l-44.103 388.928h-83.113l-43.099-388.928v-171.575h170.318v171.575z" + ], + "attrs": [ + { + "fill": "rgb(100, 97, 96)" + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "alert-round" + ], + "grid": 32 + }, + "attrs": [ + { + "fill": "rgb(100, 97, 96)" } - ], - "height": 1024, - "metadata": { - "name": "icomoon" - }, - "preferences": { - "showGlyphs": true, - "showQuickUse": true, - "showQuickUse2": true, - "showSVGs": true, - "fontPref": { - "prefix": "icon-", - "metadata": { - "fontFamily": "icomoon", - "majorVersion": 1, - "minorVersion": 0 - }, - "metrics": { - "emSize": 1024, - "baseline": 6.25, - "whitespace": 50 - }, - "resetPoint": 58880, - "showVersion": true, - "showSelector": false, - "showMetrics": false, - "showMetadata": false, - "embed": false - }, - "imagePref": { - "prefix": "icon-", - "png": true, - "useClassSelector": true, - "classSelector": ".icon" - }, - "historySize": 100, - "showCodes": true, - "search": "", - "gridSize": 16, - "showLiga": false + ], + "properties": { + "order": 132, + "id": 0, + "name": "alert-round", + "prevSize": 32, + "code": 58952 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 66 + }, + { + "icon": { + "paths": [ + "M793.271 222.6l-192.695-83.055v80.482c-2.517 31.926-83.182 57.618-182.582 57.618-99.309 0-180.126-25.692-182.398-57.618h-0.318l-0.465-80.482-197.709 83.055 381.218 167.697 374.95-167.697zM265.959 118.114l-1.104 0.428c32.596 16.331 89.086 27.124 153.551 27.124 64.726 0 121.621-10.94 153.996-27.355l-1.168-0.512c18.811-9.3 29.664-20.34 29.664-32.264 0-32.713-81.606-59.114-182.492-59.114-100.759 0-182.806 26.401-182.806 59.114-0.003 12.007 11.295 23.218 30.36 32.579zM418.418 462.436l-418.418-191.009v563.335l418.321 189.238 418.321-189.238v-563.733l-418.224 191.407z" + ], + "width": 883, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "module" + ], + "grid": 32 + }, + "attrs": [ + {} + ], + "properties": { + "order": 131, + "id": 1, + "name": "module", + "prevSize": 32, + "code": 58951 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 67 + }, + { + "icon": { + "paths": [ + "M939.616 148.384c112.512 112.448 112.512 294.816 0 407.264l-350.944 350.976c-12.512 12.544-32.736 12.544-45.248 0-12.576-12.512-12.576-32.704 0-45.248l346.432-346.464c87.488-87.488 87.488-229.248-0.064-316.768-87.36-87.488-229.248-87.488-316.736 0l-462.304 456.864c-62.496 62.464-62.496 163.776 0 226.24 62.496 62.496 163.744 62.496 226.24 0l466.88-461.344c37.44-37.44 37.44-98.336 0-135.776-37.44-37.408-98.304-37.408-135.744 0l-351.008 351.008c-12.512 12.512-32.736 12.512-45.248 0-12.512-12.544-12.512-32.736 0-45.28l350.976-350.976c62.432-62.464 163.744-62.464 226.24 0 62.496 62.496 62.496 163.776 0 226.272l-466.88 461.376c-87.296 87.328-229.408 87.328-316.736 0-87.328-87.328-87.328-229.472 0-316.8l466.88-461.344c112.448-112.512 294.816-112.512 407.264 0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clip", + "paperclip", + "attachment" + ], + "grid": 32 + }, + "attrs": [], + "properties": { + "id": 2, + "order": 130, + "prevSize": 32, + "code": 58947, + "name": "clip" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 68 + }, + { + "icon": { + "paths": [ + "M2041.366 1.102v1021.449h-175.926l-411.263-409.297v-204.59l411.263-407.568h175.926z", + "M1305.997 989.076c0 19.377-15.608 34.924-34.856 34.924h-1236.279c-19.255 0-34.863-15.547-34.863-34.924v-954.275c0-19.248 15.608-34.801 34.863-34.801h1236.279c19.248 0 34.856 15.553 34.856 34.801v954.275z" + ], + "width": 2041, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "video" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 127, + "id": 0, + "prevSize": 32, + "code": 58945, + "name": "video" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M723.661 889.601c-2.404-10.843-4.034-21.47-5.282-31.583h-277.528c-2.458 20.233-6.917 43.087-14.646 64.305-7.79 21.277-18.796 40.54-33.824 54.15-15.028 13.552-33.689 22.104-59.788 22.158v25.369h494.020v-25.369c-26.142-0.058-44.737-8.61-59.838-22.158-22.44-20.307-35.961-53.91-43.114-86.873zM1126.214 0h-1093.209c-18.22 0-33.005 15.024-33.005 33.596v731.259c0 18.576 14.785 33.623 33.005 33.623h1093.209c18.224 0 33.067-15.051 33.067-33.623v-731.259c0-18.572-14.843-33.596-33.067-33.596zM1079.193 716.922h-999.234v-635.394h999.234v635.394z" + ], + "width": 1159, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "screen" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 72, + "id": 1, + "prevSize": 32, + "code": 58944, + "name": "screen" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 1 + }, + { + "icon": { + "paths": [ + "M771.001 776.737c-55.445 0-100.448 44.754-100.448 100.2s44.879 100.324 100.448 100.324 100.448-44.879 100.448-100.324-45.003-100.2-100.448-100.2zM771.001 918.707c-23.123 0-41.77-18.648-41.77-41.771s18.647-41.77 41.77-41.77c23.247 0 41.895 18.648 41.895 41.77s-18.648 41.771-41.895 41.771z", + "M469.532 776.737c-55.445 0-100.449 44.754-100.449 100.2s45.003 100.324 100.449 100.324c55.445 0 100.448-44.879 100.448-100.324s-45.003-100.2-100.448-100.2zM469.532 918.707c-23.123 0-41.771-18.648-41.771-41.771s18.648-41.77 41.771-41.77 41.77 18.648 41.77 41.77-18.648 41.771-41.77 41.771z", + "M823.587 494.412c-130.036 0-238.441-91.622-264.547-213.825h-207.237l-136.749-198.162v-1.865h-207.237v83.541h169.942l78.693 117.729 83.417 412.857h581.183l49.23-243.786c-42.268 27.474-92.616 43.511-146.694 43.511z", + "M1023.862 249.756v-45.376l-55.073-18.026-12.929-31.204 24.863-52.71-31.95-32.074-5.967 2.984-45.5 23.123-31.328-12.929-19.642-54.948h-45.376l-2.114 6.464-15.912 48.608-31.203 12.929-52.835-24.863-32.074 31.95 3.108 5.967 23.247 45.624-13.053 31.328-54.948 19.766v45.376l6.34 2.113 48.732 15.788 12.929 31.204-24.863 52.71 32.074 32.074 6.092-3.108 45.376-22.999 31.328 12.929 19.642 54.824h45.376l2.113-6.464 15.913-48.359 31.203-12.929 52.71 24.988 32.198-32.074-3.108-6.092-23.247-45.624 12.929-31.203 54.948-19.766zM824.582 291.527c-35.057 0-63.65-28.469-63.65-63.526 0-35.182 28.469-63.526 63.65-63.526s63.526 28.469 63.526 63.526c-0.124 35.182-28.469 63.526-63.526 63.526z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cart" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 71, + "id": 2, + "prevSize": 32, + "code": 58943, + "name": "cart" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M0.010 188.484h1023.966v136.509h-1023.966z", + "M0.010 442.47h1023.966v136.506h-1023.966z", + "M0.010 699.017h1023.966v136.513h-1023.966z" + ], + "attrs": [ + {}, + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "list-menu" + ], + "grid": 0 + }, + "attrs": [ + {}, + {}, + {} + ], + "properties": { + "order": 61, + "id": 3, + "prevSize": 32, + "code": 58942, + "name": "list-menu" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 3 + }, + { + "icon": { + "paths": [ + "M0.010 0.372h279.074v279.074h-279.074z", + "M372.77 0.372h279.074v279.074h-279.074z", + "M744.892 0.372h279.074v279.074h-279.074z", + "M0.010 372.497h279.074v279.074h-279.074z", + "M372.77 372.497h279.074v279.074h-279.074z", + "M744.892 372.497h279.074v279.074h-279.074z", + "M0.010 744.585h279.074v279.074h-279.074z", + "M372.77 744.585h279.074v279.074h-279.074z", + "M744.892 744.585h279.074v279.074h-279.074z" + ], + "attrs": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "grid" + ], + "grid": 0 + }, + "attrs": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "properties": { + "order": 112, + "id": 4, + "prevSize": 32, + "code": 58941, + "name": "grid" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 4 + }, + { + "icon": { + "paths": [ + "M982.767 231.902h-250.095l-59.255-121.364c0 0-11.827-25.201-42.11-25.201-23.375 0-169.366 0-235.25 0-32.969 0-44.001 25.027-44.001 25.027l-57.484 121.539h-253.406c-22.74 0-41.131 18.459-41.131 41.267v624.333c0 22.743 18.401 41.199 41.131 41.199h941.636c22.74 0 41.199-18.459 41.199-41.199v-624.299c0-22.798-18.456-41.267-41.199-41.267zM512 823.91c-138.793 0-251.597-113.015-251.597-251.931 0-138.912 112.845-251.87 251.597-251.87 138.68 0 251.597 112.981 251.597 251.87 0 138.909-112.913 251.931-251.597 251.931z", + "M512 420.932c-83.255 0-150.972 67.714-150.972 150.972 0 83.197 67.71 150.903 150.972 150.903 83.258 0 150.903-67.714 150.903-150.903 0-83.255-67.652-150.972-150.903-150.972z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "camera" + ], + "grid": 0 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 121, + "id": 5, + "prevSize": 32, + "code": 58940, + "name": "camera" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 5 + }, + { + "icon": { + "paths": [ + "M904.192 0.027l-307.234 0.116-596.89 596.958 426.906 426.906 596.958-596.958-0.113-305.596-119.603-121.426zM858.679 313.337c-39.997 40.001-104.854 40.001-144.794 0-40.001-40.001-40.001-104.796 0-144.794 39.939-40.001 104.796-40.001 144.794 0 39.997 39.997 39.997 104.793 0 144.794z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tag" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 111, + "id": 6, + "prevSize": 32, + "code": 58939, + "name": "tag" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M1094.391 77.71l-77.71-77.71-423.329 423.347-423.33-423.347-77.71 77.672 423.35 423.368-423.312 423.329 77.672 77.71 423.338-423.338 423.283 423.3 77.671-77.71-423.263-423.281z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "colorPermutations": { + "6868681": [ + { + "f": 0 + } + ] + }, + "tags": [ + "close-mage" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 110, + "id": 7, + "prevSize": 32, + "code": 58927, + "name": "close-mage" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 7 + }, + { + "icon": { + "paths": [ + "M857.675 289.413l-403.18-240.514-402.726 240.514v457.026l403.18 240.515 402.726-240.514v-457.027zM454.857 864.465l-298.427-178.383v-335.966l298.157-178.729 298.428 178.383v335.966l-298.158 178.729z" + ], + "width": 903, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "colorPermutations": { + "6868681": [ + { + "f": 0 + } + ] + }, + "tags": [ + "menu-item" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 109, + "id": 8, + "prevSize": 32, + "code": 58938, + "name": "menu-item" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 8 + }, + { + "icon": { + "paths": [ + "M505.704 40.998c-260.096 3.489-468.158 217.202-464.706 477.336 3.489 259.982 217.202 468.12 477.298 464.631s468.158-217.202 464.706-477.336c-3.413-260.058-217.202-468.12-477.298-464.631zM557.928 197.973c47.863 0 62.009 27.762 62.009 59.544 0 39.671-31.782 76.383-86.016 76.383-45.359 0-66.901-22.831-65.65-60.53 0-31.782 26.624-75.435 89.657-75.435zM435.162 806.381c-32.73 0-56.661-19.873-33.792-107.217l37.547-154.814c6.485-24.841 7.585-34.778 0-34.778-9.785 0-52.262 17.143-77.407 34.057l-16.346-26.776c79.607-66.446 171.16-105.472 210.375-105.472 32.73 0 38.153 38.722 21.807 98.266l-43.008 162.816c-7.585 28.786-4.286 38.722 3.262 38.722 9.785 0 41.984-11.871 73.614-36.75l18.47 24.841c-77.369 77.369-161.792 107.179-194.56 107.179z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "info" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 108, + "id": 9, + "prevSize": 32, + "code": 58906, + "name": "info" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 9 + }, + { + "icon": { + "paths": [ + "M591.986 448.019h-16.005v-192.019c0-105.851-86.13-192.019-192.019-192.019h-128c-105.851 0-192.019 86.13-192.019 192.019v192.019h-16.005c-26.396 0-48.014 21.618-48.014 48.014v479.991c0 26.396 21.618 48.014 48.014 48.014h544.009c26.396 0 48.014-21.618 48.014-48.014v-479.991c0-26.396-21.618-48.014-48.014-48.014zM384 896h-128l27.838-139.188c-16.801-11.529-27.838-30.872-27.838-52.793 0-35.347 28.672-64.019 64.019-64.019s64.019 28.672 64.019 64.019c0 21.921-11.036 41.263-27.838 52.793l27.838 139.188zM448.019 448.019h-256v-192.019c0-35.271 28.71-64.019 64.019-64.019h128c35.271 0 64.019 28.71 64.019 64.019v192.019z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lock" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 107, + "id": 10, + "prevSize": 32, + "code": 58907, + "name": "lock" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 10 + }, + { + "icon": { + "paths": [ + "M870.4 317.44h-194.56v143.36h153.6v215.040h-634.88v-215.040h215.040v112.64l204.8-184.32-204.8-184.32v112.64h-256c-56.51 0-102.4 45.815-102.4 102.4v296.96c0 56.51 45.89 102.4 102.4 102.4h716.8c56.585 0 102.4-45.89 102.4-102.4v-296.96c0-56.585-45.815-102.4-102.4-102.4z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "loop" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 106, + "id": 11, + "prevSize": 32, + "code": 58908, + "name": "loop" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 11 + }, + { + "icon": { + "paths": [ + "M991.991 384h-351.991v-351.991c0-17.673-14.336-32.009-32.009-32.009h-192.019c-17.673 0-32.009 14.336-32.009 32.009v351.991h-351.991c-17.673 0-32.009 14.336-32.009 32.009v192.019c0 17.673 14.336 32.009 32.009 32.009h351.991v351.991c0 17.673 14.336 32.009 32.009 32.009h192.019c17.673 0 32.009-14.336 32.009-32.009v-351.991h351.991c17.673 0 32.009-14.336 32.009-32.009v-192.019c0-17.673-14.336-32.009-32.009-32.009z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "plus" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 105, + "id": 12, + "prevSize": 32, + "code": 58909, + "name": "plus" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 12 + }, + { + "icon": { + "paths": [ + "M505.704 40.998c-260.096 3.489-468.158 217.126-464.706 477.298 3.489 260.21 217.202 468.158 477.298 464.744 260.134-3.489 468.233-217.202 464.706-477.298-3.489-260.21-217.202-468.233-477.298-464.744zM506.577 102.4c70.163-0.986 136.382 15.853 194.56 46.118l-63.374 105.662c-38.002-18.47-80.631-28.937-125.762-28.937-45.056 0-87.723 10.43-125.687 28.975l-63.336-105.624c54.993-28.672 117.343-45.321 183.599-46.232zM254.255 637.687l-105.586 63.298c-28.672-54.955-45.321-117.305-46.194-183.486-0.986-70.201 15.853-136.457 46.118-194.56l105.624 63.45c-18.546 37.926-28.975 80.555-28.975 125.649 0 45.056 10.43 87.723 28.975 125.687zM517.461 921.562c-70.163 0.986-136.457-15.853-194.56-46.118l63.374-105.662c38.002 18.546 80.631 28.975 125.687 28.975 45.094 0 87.761-10.392 125.687-28.937l63.336 105.586c-54.993 28.634-117.305 45.246-183.561 46.194zM512 737.242c-124.397 0-225.242-100.883-225.242-225.242 0-124.397 100.883-225.28 225.242-225.28 124.473 0 225.28 100.883 225.28 225.28s-100.807 225.242-225.28 225.242zM769.745 637.687c18.546-38.002 28.975-80.631 28.975-125.687 0-45.094-10.43-87.723-28.975-125.687l105.586-63.374c28.672 54.993 45.359 117.305 46.232 183.561 0.91 70.201-15.929 136.457-46.194 194.56l-105.624-63.336z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "recover" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 104, + "id": 13, + "prevSize": 32, + "code": 58910, + "name": "recover" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M906.126 135.813v0c-91.174-75.89-202.487-113.171-312.548-113.057-127.014-0.038-253.611 49.683-348.16 145.636l-95.004-79.265-1.593 305.342 300.184-56.282-99.442-82.944c67.546-64.247 155.269-97.204 244.015-97.28 79.948 0.038 159.782 26.7 226.114 81.806 84.347 70.125 127.659 170.629 127.772 272.46-0.038 14.715-0.948 29.431-2.769 44.070l137.519-26.283c0.19-5.954 0.303-11.871 0.303-17.787 0.152-140.098-60.151-279.78-176.431-376.415zM839.035 766.976c-67.736 65.498-156.255 99.025-245.912 99.1-79.986-0.038-159.82-26.738-226.114-81.806-84.347-70.125-127.697-170.629-127.772-272.498 0-16.839 1.252-33.716 3.679-50.366l-138.164 25.941c-0.379 8.116-0.683 16.346-0.683 24.462-0.114 140.174 60.226 279.817 176.545 376.491 91.136 75.852 202.411 113.057 312.51 112.981h0.341c127.924 0 255.241-50.441 349.943-147.759l90.795 75.207 0.569-305.38-299.956 57.344 104.183 86.281z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "refresh" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 113, + "id": 14, + "prevSize": 32, + "code": 58911, + "name": "refresh" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 14 + }, + { + "icon": { + "paths": [ + "M593.351 21.732c-270.753 0-490.268 219.477-490.268 490.231s219.515 490.268 490.268 490.268 490.231-219.515 490.231-490.268c0-270.753-219.477-490.231-490.231-490.231zM828.947 683.653l-72.363 72.363-162.095-162.133-164.902 164.902-73.121-73.121 164.902-164.902-161.678-161.678 72.363-72.325 161.602 161.678 165.774-165.736 73.121 73.083-165.774 165.736 162.171 162.133z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "remove-small" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 114, + "id": 15, + "prevSize": 32, + "code": 58912, + "name": "remove-small" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 15 + }, + { + "icon": { + "paths": [ + "M254.976 675.84v-267.264h103.424l-179.2-203.776-179.2 203.776h103.424v308.224c0 56.51 45.815 102.4 102.4 102.4h459.776l-131.186-143.36h-279.438zM920.538 615.424v-308.224c0-56.51-45.89-102.4-102.4-102.4h-459.738l131.11 143.36h279.514v267.264h-103.424l179.2 203.776 179.2-203.776h-103.462z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "retweet" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 117, + "id": 16, + "prevSize": 32, + "code": 58913, + "name": "retweet" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 16 + }, + { + "icon": { + "paths": [ + "M768 64.019h-128c-105.851 0-192.019 86.13-192.019 192.019v192.019h-400.005c-26.396 0-48.014 21.618-48.014 48.014v479.991c0 26.396 21.618 48.014 48.014 48.014h544.009c26.396 0 48.014-21.618 48.014-48.014v-479.991c0-26.396-21.618-48.014-48.014-48.014h-16.005v-192.019c0-35.271 28.71-64.019 64.019-64.019h128c35.271 0 64.019 28.71 64.019 64.019v192.019h128v-192.019c0-105.851-86.13-192.019-192.019-192.019zM384 896h-128l27.838-139.188c-16.801-11.529-27.838-30.872-27.838-52.793 0-35.347 28.672-64.019 64.019-64.019s64.019 28.672 64.019 64.019c0 21.921-11.036 41.263-27.838 52.793l27.838 139.188z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "unlocked" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 36, + "id": 17, + "prevSize": 32, + "code": 58914, + "name": "unlocked" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 17 + }, + { + "icon": { + "paths": [ + "M593.351 0l-593.351 1023.962h1186.74l-593.351-1023.962zM653.236 899.451h-125.421v-121.211h125.421v121.211zM622.175 728.329h-62.502l-34.816-288.313v-156.748h131.3v156.748l-33.982 288.313z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "warning" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 37, + "id": 18, + "prevSize": 32, + "code": 58915, + "name": "warning" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 18 + }, + { + "icon": { + "paths": [ + "M0 512l512 512v-320.019h512v-384h-512v-320.019z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-left" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 38, + "id": 19, + "prevSize": 32, + "code": 58916, + "name": "arrow-left" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 19 + }, + { + "icon": { + "paths": [ + "M1024 512l-512-512v320.019h-512v384h512v320.019z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-right" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 39, + "id": 20, + "prevSize": 32, + "code": 58917, + "name": "arrow-right" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 20 + }, + { + "icon": { + "paths": [ + "M402.735 146.735l-320.019 320.019c-24.993 24.993-24.993 65.498 0 90.491l320.019 320.019c24.993 24.993 65.498 24.993 90.491 0s24.993-65.498 0-90.491l-210.754-210.754h613.49c35.347 0 64.019-28.634 64.019-64.019s-28.672-64.019-64.019-64.019h-613.49l210.754-210.754c12.478-12.478 18.735-28.862 18.735-45.246s-6.258-32.768-18.735-45.246c-24.993-24.993-65.498-24.993-90.491 0z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "back-arrow" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 103, + "id": 21, + "prevSize": 32, + "code": 58918, + "name": "back-arrow" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 21 + }, + { + "icon": { + "paths": [ + "M507.259 578.522h-102.059v101.717h102.059v-101.717zM650.885 714.714h-101.945v101.717h101.945v-101.717zM507.259 714.714h-102.059v101.717h102.059v-101.717zM507.259 442.33h-102.059v101.679h102.059v-101.679zM843.131 244.091c23.4 0 42.287-18.887 42.287-42.174v-145.408c0-23.324-18.887-42.174-42.287-42.174s-42.325 18.849-42.325 42.174v145.408c0.038 23.324 18.925 42.174 42.325 42.174zM343.419 244.091c23.362 0 42.249-18.887 42.249-42.174v-145.408c0-23.324-18.887-42.174-42.249-42.174-23.4 0-42.325 18.849-42.325 42.174v145.408c0 23.324 18.925 42.174 42.325 42.174zM363.444 578.522h-102.059v101.717h102.059v-101.717zM363.444 714.714h-102.059v101.717h102.059v-101.717zM650.885 578.522h-101.945v101.717h101.945v-101.717zM938.325 578.522h-102.059v101.717h102.059v-101.717zM938.325 442.33h-102.059v101.679h102.059v-101.679zM899.337 84.385v46.914c17.598 15.474 28.71 38.153 28.71 63.412 0 46.801-37.964 84.764-84.916 84.764s-84.954-37.964-84.954-84.764c0-25.259 11.15-47.938 28.71-63.412v-46.914h-387.262v46.914c17.56 15.474 28.71 38.153 28.71 63.412 0 46.801-38.002 84.764-84.916 84.764s-84.954-37.964-84.954-84.764c0-25.259 11.15-47.938 28.71-63.412v-46.914h-192.322v925.279h997.035v-925.279h-192.512zM999.234 915.304h-809.832v-589.938h809.832v589.938zM650.885 442.33h-101.945v101.679h101.945v-101.679zM794.624 442.33h-101.983v101.679h101.983v-101.679zM794.624 714.714h-101.983v101.717h101.983v-101.717zM794.624 578.522h-101.983v101.717h101.983v-101.717z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "calendar" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 102, + "id": 22, + "prevSize": 32, + "code": 58919, + "name": "calendar" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 22 + }, + { + "icon": { + "paths": [ + "M132.21 286.758c-13.881-13.729-36.295-13.729-50.138 0-13.805 13.653-13.805 35.878 0 49.607l404.897 400.877c13.881 13.729 36.257 13.729 50.138 0l404.897-400.877c13.805-13.729 13.881-35.878 0-49.607s-36.371-13.729-50.138-0.038l-379.866 365.606-379.79-365.568z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "caret-down" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 101, + "id": 23, + "prevSize": 32, + "code": 58920, + "name": "caret-down" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 23 + }, + { + "icon": { + "paths": [ + "M737.242 891.79c13.729 13.881 13.729 36.257 0 50.138s-35.878 13.881-49.607 0l-400.877-404.821c-13.729-13.881-13.729-36.295 0-50.138l400.877-404.897c13.729-13.881 35.878-13.881 49.607 0s13.729 36.257 0 50.138l-365.568 379.79 365.568 379.79z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "caret-left" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 100, + "id": 24, + "prevSize": 32, + "code": 58921, + "name": "caret-left" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 24 + }, + { + "icon": { + "paths": [ + "M286.72 891.79c-13.729 13.881-13.729 36.257 0 50.138s35.878 13.881 49.607 0l400.877-404.821c13.729-13.881 13.729-36.295 0-50.138l-400.915-404.897c-13.729-13.881-35.878-13.881-49.607 0s-13.729 36.257 0 50.138l365.568 379.79-365.568 379.79z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "caret-right" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 99, + "id": 25, + "prevSize": 32, + "code": 58922, + "name": "caret-right" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 25 + }, + { + "icon": { + "paths": [ + "M891.79 737.242c13.881 13.729 36.295 13.729 50.138 0 13.881-13.729 13.881-35.878 0-49.607l-404.897-400.877c-13.805-13.729-36.257-13.729-50.062 0l-404.897 400.877c-13.805 13.729-13.881 35.878 0 49.607s36.257 13.729 50.138 0l379.79-365.606 379.79 365.606z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "caret-up" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 98, + "id": 26, + "prevSize": 32, + "code": 58923, + "name": "caret-up" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 26 + }, + { + "icon": { + "paths": [ + "M574.767 92.16c-227.593 0-412.672 182.386-418.247 409.335h-125.8l188.378 209.92 188.302-209.92h-146.242c5.537-168.998 143.777-304.393 313.609-304.393 173.397 0 313.913 140.971 313.913 314.899s-140.478 314.861-313.913 314.861c-69.48 0-133.689-22.718-185.685-61.099l-71.983 76.99c70.997 55.751 160.465 89.050 257.707 89.050 231.159 0 418.551-187.961 418.551-419.84-0.038-231.879-187.43-419.84-418.551-419.84z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ccw" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 97, + "id": 27, + "prevSize": 32, + "code": 58924, + "name": "ccw" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 27 + }, + { + "icon": { + "paths": [ + "M996.617 126.786l-513.555 513.555-256.796-256.834-128.379 128.417 385.214 385.252 641.896-642.010z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "check-mage" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 96, + "id": 28, + "prevSize": 32, + "code": 58925, + "name": "check-mage" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 28 + }, + { + "icon": { + "paths": [ + "M512 40.96c-260.134 0-471.040 210.944-471.040 471.040 0 260.134 210.906 471.040 471.040 471.040s471.040-210.906 471.040-471.040c0-260.134-210.906-471.040-471.040-471.040zM512 880.64c-203.624 0-368.64-165.054-368.64-368.64s165.016-368.64 368.64-368.64 368.64 165.054 368.64 368.64-165.016 368.64-368.64 368.64zM547.84 245.76h-71.68v281.069l174.345 174.345 50.669-50.707-153.335-153.335z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clock" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 95, + "id": 29, + "prevSize": 32, + "code": 58926, + "name": "clock" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 29 + }, + { + "icon": { + "paths": [ + "M337.541 1021.004h513.024l64.512-645.916h-639.128l61.592 645.916zM737.394 154.169v-116.508c0-19.191-15.398-34.702-34.361-34.702h-217.847c-19.001 0-34.361 15.55-34.361 34.702v114.574c-73.576 8.382-150.149 24.614-226.494 52.338v106.989h738.001v-109.833c0 0-90.074-31.403-224.977-47.559zM668.937 147.759c-47.749-3.224-99.252-4.096-153.297-0.986v-61.44c0-9.519 7.623-17.332 17.143-17.332h118.936c9.519 0 17.218 7.813 17.218 17.332v62.426z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "delete" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 94, + "id": 30, + "prevSize": 32, + "code": 58928, + "name": "delete" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 30 + }, + { + "icon": { + "paths": [ + "M928.503 26.889l-111.502 112.109 156.065 156.9 111.502-112.071-156.065-156.937zM215.002 744.41l156.065 156.9 535.211-538.093-156.065-156.9-535.211 538.093zM103.917 1007.161l188.985-49.873-139.302-140.098-49.683 190.009z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "edit" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 115, + "id": 31, + "prevSize": 32, + "code": 58929, + "name": "edit" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 31 + }, + { + "icon": { + "paths": [ + "M1014.67 822.651c0 0 0 0 0 0l-310.651-310.651 310.651-310.651c0 0 0 0 0 0 3.337-3.337 5.765-7.244 7.32-11.416 4.248-11.378 1.82-24.69-7.32-33.83l-146.735-146.735c-9.14-9.14-22.452-11.567-33.83-7.32-4.172 1.555-8.078 3.982-11.416 7.32 0 0 0 0 0 0l-310.651 310.651-310.651-310.651c0 0 0 0 0 0-3.337-3.337-7.244-5.765-11.416-7.32-11.378-4.248-24.69-1.82-33.83 7.32l-146.735 146.735c-9.14 9.14-11.567 22.452-7.32 33.83 1.555 4.172 3.982 8.078 7.32 11.416 0 0 0 0 0 0l310.651 310.651-310.651 310.651c0 0 0 0 0 0-3.337 3.337-5.765 7.244-7.32 11.416-4.248 11.378-1.82 24.69 7.32 33.83l146.735 146.735c9.14 9.14 22.452 11.567 33.83 7.32 4.172-1.555 8.078-3.982 11.416-7.32 0 0 0 0 0 0l310.651-310.651 310.651 310.651c0 0 0 0 0 0 3.337 3.337 7.244 5.765 11.416 7.32 11.378 4.248 24.69 1.82 33.83-7.32l146.735-146.735c9.14-9.14 11.567-22.452 7.32-33.83-1.555-4.172-3.982-8.078-7.32-11.416z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "error" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 122, + "id": 32, + "prevSize": 32, + "code": 58930, + "name": "error" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 32 + }, + { + "icon": { + "paths": [ + "M593.351 22.566c-270.336 0-489.434 219.098-489.434 489.358s219.098 489.434 489.434 489.434 489.434-219.136 489.434-489.434-219.136-489.358-489.434-489.358zM635.752 826.596c-11.985 11.719-26.396 17.636-43.16 17.636-8.154 0-15.967-1.517-23.4-4.589-7.358-3.034-13.843-7.168-19.456-12.174-5.613-5.158-10.126-11.226-13.388-18.356-3.337-7.13-4.968-14.753-4.968-22.945 0-16.308 5.992-30.303 17.977-42.060 11.947-11.681 26.396-17.598 43.198-17.598 16.308 0 30.606 5.689 42.78 16.801 12.25 11.188 18.318 24.993 18.318 41.339-0.038 16.384-5.992 30.303-17.939 41.984zM778.923 382.673c-3.982 13.767-9.747 26.396-17.18 37.774-7.471 11.454-16.498 22.49-27.079 33.071s-22.49 21.618-35.65 33.033c-11.454 9.785-20.783 18.318-27.913 25.79-7.168 7.396-12.895 14.867-17.218 22.338-4.286 7.433-7.282 15.398-9.026 24.007-1.707 8.609-2.617 49.721-2.617 62.35v22.338h-101.376v-32.616c0-13.729 0.986-56.661 3.034-67.584s5.158-21.125 9.481-30.872 10.012-19.228 17.18-28.369c7.168-9.14 16.232-18.887 27.079-29.203l38.647-36.902c10.847-9.747 20.177-20.632 27.951-32.616 7.737-12.060 11.529-26.7 11.529-43.88 0-22.3-6.978-41.036-21.011-56.206-14.071-15.17-33.944-22.793-59.695-22.793-13.16 0-25.069 2.389-35.65 7.282-10.619 4.817-19.797 11.454-27.496 19.759-7.737 8.344-13.577 17.901-17.598 28.786-3.982 10.847-6.334 21.997-6.865 33.527l-105.624-9.444c3.413-27.496 10.733-51.959 21.921-73.463 11.112-21.466 25.562-39.595 43.311-54.575 17.711-14.829 38.078-26.169 61.023-33.944 22.869-7.699 47.521-11.605 73.842-11.605 24.614 0 47.976 3.603 70.049 10.771 21.959 7.168 41.491 17.711 58.406 31.782 16.839 14.033 30.227 31.365 39.936 51.959 9.709 20.632 14.564 44.411 14.564 71.263 0 18.356-2.010 34.475-5.992 48.166z" + ], + "width": 1176, + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "help" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 124, + "id": 33, + "prevSize": 32, + "code": 58931, + "name": "help" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 33 + }, + { + "icon": { + "paths": [ + "M574.805 92.16c-227.631 0-412.71 182.386-418.247 409.335h-125.838l188.378 209.958 188.302-209.958h-146.242c5.537-168.998 143.777-304.393 313.647-304.393 173.359 0 313.875 140.971 313.875 314.899s-140.478 314.861-313.875 314.861c-69.518 0-133.727-22.718-185.761-61.099l-71.983 76.99c71.073 55.751 160.503 89.050 257.745 89.050 231.121 0 418.513-187.961 418.513-419.84-0.038-231.879-187.43-419.84-418.513-419.84zM537.6 286.72v240.109l153.865 153.865 50.669-50.669-132.855-132.855v-210.413h-71.68z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "history" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 45, + "id": 34, + "prevSize": 32, + "code": 58932, + "name": "history" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 34 + }, + { + "icon": { + "paths": [ + "M510.413 0c-281.907 0-510.413 228.582-510.413 510.413 0 281.933 228.506 510.464 510.413 510.464s510.387-228.557 510.387-510.464c0-281.83-228.48-510.413-510.387-510.413zM865.843 510.413c0 69.99-20.506 135.27-55.578 190.285l-490.163-490.163c55.091-35.021 120.32-55.475 190.31-55.475 195.942 0 355.43 159.411 355.43 355.354zM154.957 510.413c0-69.939 20.506-135.245 55.578-190.31l490.189 490.189c-55.066 35.072-120.371 55.501-190.31 55.501-195.942 0.026-355.456-159.437-355.456-355.379z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "not-installed" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 58, + "id": 35, + "prevSize": 32, + "code": 58936, + "name": "not-installed" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 35 + }, + { + "icon": { + "paths": [ + "M511.77 0c-282.778 0-512.102 229.222-512.102 512.179 0 282.829 229.325 512.102 512.102 512.102 282.931 0.026 512.23-229.248 512.23-512.102 0-282.957-229.299-512.179-512.23-512.179zM143.718 419.968h736.205v184.269h-736.205v-184.269z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "disabled" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 57, + "id": 36, + "prevSize": 32, + "code": 58937, + "name": "disabled" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 36 + }, + { + "icon": { + "paths": [ + "M505.139 0.085c-282.658 3.775-508.826 236.066-505.071 518.827 3.772 282.556 236.1 508.826 518.793 505.003 282.658-3.768 508.826-236.066 505.071-518.827-3.717-282.658-236.1-508.826-518.793-505.003z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "dot" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 56, + "id": 37, + "prevSize": 32, + "code": 58935, + "name": "dot" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 37 + }, + { + "icon": { + "paths": [ + "M383.462 577.51h255.693v-213.043h127.795l-255.642-255.667-255.642 255.667h127.795z", + "M852.173 577.51v170.394h-681.754v-170.394h-170.419v340.89h1022.618v-340.89z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "export" + ], + "grid": 0 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 93, + "id": 38, + "prevSize": 32, + "code": 58933, + "name": "export" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 38 + }, + { + "icon": { + "paths": [ + "M639.155 108.8h-255.693v213.043h-127.795l255.667 255.667 255.616-255.667h-127.795z", + "M852.173 577.51v170.394h-681.754v-170.394h-170.419v340.89h1022.618v-340.89z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "import" + ], + "grid": 0 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 92, + "id": 39, + "prevSize": 32, + "code": 58934, + "name": "import" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 39 + }, + { + "icon": { + "paths": [ + "M259.2 0h214.323v214.323h-214.323v-214.323z", + "M259.2 269.875h214.323v214.349h-214.323v-214.349z", + "M259.2 539.776h214.323v214.349h-214.323v-214.349z", + "M259.2 809.651h214.323v214.349h-214.323v-214.349z", + "M549.325 0h214.323v214.323h-214.323v-214.323z", + "M549.325 269.875h214.323v214.349h-214.323v-214.349z", + "M549.325 539.776h214.323v214.349h-214.323v-214.349z", + "M549.325 809.651h214.323v214.349h-214.323v-214.349z" + ], + "attrs": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "gripper" + ], + "grid": 0 + }, + "attrs": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "properties": { + "order": 91, + "id": 40, + "prevSize": 32, + "code": 58903, + "name": "gripper" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 40 + }, + { + "icon": { + "paths": [ + "M860.058 185.062v272l-430.029-269.158-1.894 253.491-424.371-249.754-3.763 647.834 426.24-241.28-5.606 239.437 439.424-252.16v259.635h163.942v-660.045z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "forward" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 90, + "id": 41, + "prevSize": 32, + "code": 58904, + "name": "forward" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 41 + }, + { + "icon": { + "paths": [ + "M163.942 845.107v-271.974l430.029 269.133 1.894-253.491 424.397 249.754 3.738-647.834-426.24 241.28 5.606-239.437-439.424 252.16v-259.635h-163.942v660.045z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "backward" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 89, + "id": 42, + "prevSize": 32, + "code": 58905, + "name": "backward", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 42 + }, + { + "icon": { + "paths": [ + "M512.794 0c-283.187 0-512.794 229.581-512.794 512.794 0 283.187 229.606 512.794 512.794 512.794s512.794-229.632 512.794-512.794c0-283.213-229.581-512.794-512.794-512.794zM512.794 971.213c-253.158 0-458.394-205.261-458.394-458.368 0-253.158 205.261-458.394 458.394-458.394 253.184 0 458.394 205.235 458.394 458.394 0.026 253.107-205.21 458.368-458.394 458.368z", + "M760.013 625.613l30.387-38.4-265.6-206.413-20.787-1.613-259.226 208.026 28.826 39.987 236.8-177.613z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "expand-close" + ], + "grid": 0 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 88, + "id": 43, + "prevSize": 32, + "code": 58901, + "name": "expand-close" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 43 + }, + { + "icon": { + "paths": [ + "M512.794 0c-283.187 0-512.794 229.581-512.794 512.794 0 283.187 229.606 512.794 512.794 512.794s512.794-229.606 512.794-512.794c0-283.213-229.581-512.794-512.794-512.794zM512.794 971.213c-253.158 0-458.394-205.261-458.394-458.394 0-253.158 205.261-458.394 458.394-458.394 253.184 0 458.394 205.235 458.394 458.394 0.026 253.133-205.21 458.394-458.394 458.394z", + "M265.6 454.4l-30.387 38.4 265.574 206.387 20.813 1.613 259.2-208-28.8-39.987-236.8 177.587z" + ], + "attrs": [ + {}, + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "expand-open" + ], + "grid": 0 + }, + "attrs": [ + {}, + {} + ], + "properties": { + "order": 87, + "id": 44, + "prevSize": 32, + "code": 58902, + "name": "expand-open" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 44 + }, + { + "icon": { + "paths": [ + "M1020.032 565.555v-116.045l-16.41-5.376-124.237-40.525-33.152-80.102 63.718-134.784-82.048-82.125-15.411 7.808-116.531 59.213-80.077-33.178-50.278-140.442h-116.096l-45.875 140.698-80 33.126-134.963-63.744-82.022 82.074 7.834 15.334 59.162 116.608-33.126 80.026-140.518 50.253v116.147l16.435 5.325 124.288 40.576 33.075 80-63.693 134.886 82.048 82.099 131.942-66.97 80.026 33.152 50.304 140.39h116.096l5.35-16.41 40.55-124.237 80.077-33.178 134.886 63.718 82.074-82.074-7.834-15.386-59.213-116.582 33.203-80.026 140.416-50.253zM510.003 672.589c-89.754 0-162.509-72.832-162.509-162.611 0-89.754 72.755-162.483 162.509-162.483 89.83 0 162.509 72.73 162.509 162.483 0.026 89.805-72.653 162.611-162.509 162.611z" + ], + "attrs": [ + { + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "system-config" + ], + "grid": 0 + }, + "attrs": [ + { + "visibility": false + } + ], + "properties": { + "order": 86, + "id": 45, + "prevSize": 32, + "code": 58896, + "name": "system-config" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 45 + }, + { + "icon": { + "paths": [ + "M509.978 54.426l-509.978 509.926 95.949 95.949 414.106-413.978 413.875 413.978 95.949-95.898-509.901-509.978zM146.253 688.563v335.437h259.917v-304.819h207.514v304.819h259.917v-335.488l-363.622-363.597-363.725 363.648z" + ], + "attrs": [ + { + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "home" + ], + "grid": 0 + }, + "attrs": [ + { + "visibility": false + } + ], + "properties": { + "order": 85, + "id": 46, + "prevSize": 32, + "code": 58897, + "name": "home" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 46 + }, + { + "icon": { + "paths": [ + "M0 736.41l498.278 287.59v-421.402l-498.278-287.667v421.478zM894.464 224.486v44.262c0 32.819-62.797 59.418-140.365 59.418-77.466 0-140.262-26.598-140.262-59.418v-73.216h0.435c4.71 30.925 65.408 55.475 139.853 55.475 77.568 0 140.365-26.624 140.365-59.29 0-32.845-62.797-59.366-140.365-59.366-6.195 0-12.262 0.205-18.202 0.563l-90.317-52.147v55.706c0 32.819-62.72 59.392-140.262 59.392-48.691 0-91.597-10.496-116.813-26.47-3.584-3.712-7.987-7.245-13.312-10.598-6.579-6.861-10.24-14.387-10.24-22.323v-53.939l-87.322 50.381c-6.272-0.307-12.646-0.614-19.123-0.614-77.491 0-140.314 26.522-140.314 59.366 0 32.691 62.822 59.29 140.314 59.29 74.445 0 135.219-24.525 139.93-55.475h0.384v73.216c0 32.819-62.746 59.418-140.314 59.418-77.491 0-140.314-26.598-140.314-59.418v-43.622l-108.083 62.31 499.994 288.563 496.691-286.694-112.358-64.768zM646.784 408.013c0 32.794-62.874 59.315-140.365 59.315s-140.339-26.522-140.339-59.315v-73.267h0.41c4.762 30.95 65.459 55.475 139.93 55.475s135.142-24.525 139.904-55.475h0.486v73.267zM525.645 606.234v417.766l498.355-287.718v-417.766l-498.355 287.718zM505.318 118.656c77.542 0 140.262-26.547 140.262-59.315s-62.72-59.315-140.262-59.315c-77.491 0-140.339 26.573-140.339 59.315-0.026 32.768 62.822 59.315 140.339 59.315z" + ], + "attrs": [ + { + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lego" + ], + "grid": 0 + }, + "attrs": [ + { + "visibility": false + } + ], + "properties": { + "order": 84, + "id": 47, + "prevSize": 32, + "code": 58898, + "name": "lego" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 47 + }, + { + "icon": { + "paths": [ + "M287.002 481.664c0.205 0.23 0.461 0.486 0.691 0.717l103.347 103.373 36.045-36.045-56.55-56.499 90.266-90.189 11.904 1.28c3.046 0.307 6.093 0.538 9.19 0.538 6.246 0 12.314-0.768 18.253-2.125l-66.381-66.381c-1.357-1.382-2.765-2.611-4.173-3.814 20.454-73.6 1.766-155.725-56.038-213.555-57.421-57.421-138.803-76.237-211.968-56.525l123.955 123.981-32.563 121.446-121.395 32.589-124.032-124.006c-19.712 73.19-0.896 154.573 56.525 212.019 60.262 60.288 147.021 77.952 222.925 53.197zM653.235 555.802c-1.997 8.909-2.509 18.202-1.459 27.546l1.306 11.93-90.189 90.189-56.55-56.55-36.070 36.122 327.219 327.194c20.198 20.173 46.618 30.259 73.062 30.259s52.915-10.086 73.037-30.259c40.346-40.32 40.346-105.728 0-146.074l-290.355-290.355zM905.907 958.362l-51.866 13.875-42.112-42.112 13.901-51.891 51.866-13.926 42.112 42.138-13.901 51.917zM506.701 594.099l56.576 56.576 64.128-64.154c-3.482-31.334 6.707-63.821 30.669-87.808 24.013-23.962 56.474-34.176 87.808-30.72l280.397-280.346-157.056-157.056-280.448 280.397c3.482 31.258-6.682 63.821-30.669 87.782-24.013 23.987-56.525 34.176-87.808 30.643l-64.102 64.205 56.499 56.422-277.043 277.12-10.138-10.138-53.248 42.829-89.421 141.312 22.835 22.835 141.312-89.421 42.803-53.222-10.138-10.138 277.043-277.12z" + ], + "attrs": [ + { + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tool" + ], + "grid": 0 + }, + "attrs": [ + { + "visibility": false + } + ], + "properties": { + "order": 120, + "id": 48, + "prevSize": 32, + "code": 58899, + "name": "tool" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 48 + }, + { + "icon": { + "paths": [ + "M1023.932 505.105c-3.717-282.692-236.1-508.826-518.793-505.003-282.658 3.775-508.826 236.066-505.071 518.827 3.772 282.556 236.1 508.826 518.793 505.003 282.658-3.768 508.826-236.066 505.071-518.827zM623.991 481.304v298.633h-223.983v-298.633h-186.621l298.633-298.633 298.667 298.633h-186.679z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "upgrade" + ], + "grid": 0 + }, + "attrs": [ + {} + ], + "properties": { + "order": 125, + "id": 49, + "prevSize": 32, + "code": 58900, + "name": "upgrade" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 49 + }, + { + "icon": { + "paths": [ + "M870.821 731.837c-64.195-65.89-78.231-188.772-91.738-283.159-20.074-139.937-24.259-297.089-226.008-317.693v-25.318c0-25.424-39.195-46.028-64.937-46.028s-62.024 20.551-62.024 46.028v25.371c-200.054 20.816-206.993 177.914-226.855 317.693-13.453 94.439-27.331 217.268-91.049 283.264-12.818 13.348-16.473 32.998-9.11 49.947 7.362 16.843 24.153 27.913 42.797 27.913h695.343c18.75 0 35.593-11.070 42.903-28.019s3.655-36.653-9.322-50z", + "M489.569 963.883c51.060 0 92.373-40.837 92.373-91.367h-184.694c-0.053 50.53 41.314 91.367 92.32 91.367z" + ], + "width": 989, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "notification-02" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 123, + "id": 50, + "prevSize": 32, + "code": 58887, + "name": "notification-02" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 50 + }, + { + "icon": { + "paths": [ + "M252.137 153.228l-160.070 92.393 378.042 218.205 160.023-92.393-377.996-218.205zM845.638 247.063l-377.996-218.252-145.222 83.828 377.996 218.205 145.222-83.782zM502.784 526.15v433.664l376.832-217.507v-433.711l-376.832 217.553zM55.668 742.26l376.785 217.507v-436.503l-376.785-217.46v436.457z" + ], + "width": 954, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "product" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 7, + "id": 51, + "prevSize": 32, + "code": 58888, + "name": "product", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 51 + }, + { + "icon": { + "paths": [ + "M454.495 48.899l-402.697 240.513v457.026l104.632 60.727v-457.049l298.157-178.728 299.698 179.142-0.138 455.922 103.528-60.013v-457.026l-403.18-240.513zM507.766 330.28v534.344l-53.271 32.124-53.34-32.262v-533.792l-138.090 83.853v456.934l191.453 115.516 193.087-116.322v-456.451l-139.839-83.945z" + ], + "width": 903, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "logo" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 17, + "id": 52, + "prevSize": 32, + "code": 58886, + "name": "logo", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 52 + }, + { + "icon": { + "paths": [ + "M709.921 158.694c8.139 32.295 8.927 34.974 8.192 68.162-0.263 12.813-7.772 71.943-5.724 90.112 1.628 14.966 5.461 16.174 11.448 28.514 10.398 21.425 6.984 51.095 2.941 72.678-2.206 11.868-6.827 28.725-13.916 38.387-7.667 10.66-23.211 10.713-30.142 23.158-9.872 17.854-4.306 43.008-10.503 62.385-7.142 21.898-25.101 23.421-26.466 52.145 8.822 1.155 17.592 2.468 26.466 3.623 8.822 18.59 25.049 55.874 41.59 67.059 13.863 3.728 27.727 7.457 41.59 11.185 48.627 19.64 102.558 43.061 151.237 63.33 44.373 18.432 97.411 24.996 113.48 70.84 0 31.035 2.941 104.501 2.153 145.25h-965.553c-0.893-40.697 2.153-114.215 2.153-145.25 15.964-45.844 69.002-52.408 113.375-70.84 48.679-20.27 102.61-43.691 151.237-63.33 13.811-3.728 27.674-7.457 41.59-11.185 16.489-11.185 32.715-48.522 41.538-67.059l19.692-4.621c-4.464-24.576-19.85-26.466-26.256-43.743-2.521-26.099-5.041-52.145-7.509-78.192 0.053 1.155-18.117-3.361-20.48-4.779-25.731-15.806-26.204-80.24-28.725-107.021-1.103-12.183 16.174-22.265 11.343-44.636-28.094-131.44 12.183-192.88 75.881-213.307 44.216-17.749 126.871-50.465 203.855-3.728l19.167 17.487 30.93 5.251c15.491 8.77 25.416 38.124 25.416 38.124z" + ], + "width": 1090, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "account" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 9, + "id": 53, + "prevSize": 32, + "code": 58880, + "name": "account", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 53 + }, + { + "icon": { + "paths": [ + "M529.203 886.14l-468.465-628.209h936.931l-468.465 628.209z" + ], + "width": 1085, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrowdown" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 10, + "id": 54, + "prevSize": 32, + "code": 58881, + "name": "arrowdown", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 54 + }, + { + "icon": { + "paths": [ + "M976.793 982.006h-910.388v-910.388h910.388v910.388zM912.622 135.789h-782.046v782.088h782.046v-782.088z", + "M221.432 822.8h152.876v-372.033h-152.876v372.033z", + "M466.323 820.234h350.932v-366.53h-350.932v366.53z", + "M221.432 360.489h595.865v-147.125h-595.865v147.125z" + ], + "width": 1034, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cms" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 83, + "id": 55, + "prevSize": 32, + "code": 58882, + "name": "cms", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 55 + }, + { + "icon": { + "paths": [ + "M264.319 308.831c75.685 0 136.98-61.259 136.98-136.944 0-75.649-61.295-136.98-136.98-136.98s-137.017 61.331-137.017 136.98c0 75.649 61.331 136.944 137.017 136.944zM448.929 370.851c-28.962-28.926-63.325-46.252-187.655-46.252s-157.859 18.776-185.335 46.252c-27.44 27.44-18.196 320.43-18.196 320.43l60.824-144.411 38.241 430.334 110.23-220.278 102.907 220.278 36.393-430.334 60.824 144.411c-0.036 0 10.693-291.468-18.233-320.43z" + ], + "width": 489, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "customers" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 82, + "id": 56, + "prevSize": 32, + "code": 58883, + "name": "customers", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 56 + }, + { + "icon": { + "paths": [ + "M680.975 73.728c-337.523 0-610.976 273.515-611.038 610.976 0.122 37.72 1.039 251.812 1.039 251.812h1219.997c0 0 0.978-239.219 1.039-251.812-0.183-337.523-273.637-610.976-611.038-610.976zM737.708 197.831c31.117 3.607 61.379 10.271 90.418 19.624l-19.93 61.685c-25.004-8.070-51.169-13.939-78.191-16.995l7.703-64.313zM270.091 673.15h-64.864c0-31.423 3.118-62.235 8.803-92.007l63.702 12.349c-5.135 25.799-7.642 52.392-7.642 79.658zM305.855 504.419l-59.178-26.288c12.655-28.489 28-55.449 45.79-80.636l52.942 37.475c-15.284 21.825-28.611 45.056-39.554 69.449zM407.46 365.155l-43.405-48.113c22.925-20.541 47.807-39.187 74.462-54.96l33.318 55.571c-22.987 13.755-44.567 29.65-64.374 47.501zM536.943 217.455c29.039-9.292 59.178-16.017 90.418-19.624l7.581 64.313c-26.838 3.057-53.003 8.926-78.13 16.995l-19.869-61.685zM761.673 801.532l-152.897 27.205-38.881-150.452 395.172-404.22-203.394 527.467zM1019.476 434.971l52.942-37.414c17.79 25.187 33.257 52.148 45.851 80.636l-59.178 26.288c-10.943-24.454-24.209-47.685-39.615-69.51zM1094.916 673.15c0-27.266-2.69-53.859-7.703-79.658l63.702-12.349c5.808 29.834 8.803 60.645 8.803 92.007h-64.802zM646.006 770.659c26.777 17.056 62.174 9.415 79.291-17.24 17.118-26.593 9.292-62.051-17.301-79.108-26.655-17.24-62.051-9.354-79.23 17.362-17.118 26.349-9.476 61.99 17.24 78.986z" + ], + "width": 1376, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "dashboard" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 81, + "id": 57, + "prevSize": 32, + "code": 58884, + "name": "dashboard", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 57 + }, + { + "icon": { + "paths": [ + "M24.097 113.465h972.827v111.922l-410.504 412.792v238.366l-171.447 87.505v-325.871l-390.875-415.877v-108.837z" + ], + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "filter" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 80, + "id": 58, + "prevSize": 32, + "code": 58885, + "name": "filter", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 58 + }, + { + "icon": { + "paths": [ + "M59.153 534.182l164.053 38.141v-303.902l-164.053 38.141v227.621zM1122.198 59.153l-837.712 194.959v335.978l140.328 376.832 151.712-57.45-104.049-279.113 649.668 151.18v-722.385z" + ], + "width": 1170, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "promotions" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 79, + "id": 59, + "prevSize": 32, + "code": 58889, + "name": "promotions", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 59 + }, + { + "icon": { + "paths": [ + "M736.707 981.234h207.134v-322.703h-207.134v322.703zM399.646 981.234h207.134v-946.793h-207.134v946.793zM62.673 981.19h207.134v-634.704h-207.134v634.704z" + ], + "width": 991, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "reports" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 78, + "id": 60, + "prevSize": 32, + "code": 58890, + "name": "reports", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 60 + }, + { + "icon": { + "paths": [ + "M426.502 612.517c-15.866-13.512-42.796-25.753-80.79-36.723v198.774c11.535-1.459 23.729-4.331 36.299-8.851 12.618-4.426 23.87-10.829 33.804-19.068 9.981-8.427 18.173-18.55 24.529-30.649 6.638-12.006 9.651-26.365 9.651-42.89 0.047-26.836-7.721-47.222-23.493-60.593zM576.736 736.856c-7.109 23.117-19.774 45.762-38.135 67.749-18.503 22.175-43.079 41.855-74.010 58.992-30.885 17.373-70.432 27.683-118.878 31.12v88.088h-57.014v-88.088c-72.080-5.603-128.483-29.237-169.113-71.374-40.536-42.090-63.935-104.095-70.432-185.544h136.251c-0.753 39.359 8.992 70.479 28.86 93.266 20.15 22.74 44.774 37.335 74.434 43.455v-216.523c-3.060-1.318-7.486-2.919-12.994-4.567-5.508-1.789-11.393-3.343-17.938-4.708-23.776-6.827-47.175-15.019-70.291-24.294-23.493-9.369-44.114-21.704-62.523-37.335-18.456-15.584-33.098-34.84-43.879-57.956-11.111-23.211-16.478-51.977-16.478-86.487 0-35.31 6.168-66.336 18.785-93.313 12.665-26.836 29.143-49.529 49.858-67.702 20.621-18.314 44.303-32.58 71.468-42.419 27.071-10.122 55.037-16.149 83.992-18.314v-79.66h57.014v79.66c29.143 3.531 56.308 10.169 81.638 20.292 25.423 10.028 47.787 23.729 67.137 41.478 19.585 17.514 35.357 39.453 47.457 65.771 12.288 26.13 19.35 57.109 21.28 93.172h-137.287c-0.518-27.636-8.616-51.082-23.917-70.432-15.725-19.303-34.275-29.002-56.308-29.002v183.331c7.862 2.072 15.631 4.143 23.729 6.12 8.098 2.072 16.525 4.567 25.565 7.297 47.645 13.983 84.415 31.12 110.168 51.318 25.8 20.292 44.726 41.666 56.92 63.653 12.335 22.175 19.633 44.256 21.704 66.336 2.448 22.081 3.531 41.713 3.531 59.039 0.047 15.207-3.531 34.416-10.593 57.579zM228.905 263.415c-8.38 7.156-15.113 16.196-19.962 26.883-4.802 10.781-7.062 23.352-7.062 37.759 0 22.834 6.733 40.536 20.103 52.824 13.653 12.618 35.734 22.552 66.713 30.131v-168.831c-10.829 0-21.516 1.695-31.826 5.226-10.216 3.437-19.633 8.851-27.966 16.007z" + ], + "width": 659, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sales" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 77, + "id": 61, + "prevSize": 32, + "code": 58891, + "name": "sales", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 61 + }, + { + "icon": { + "paths": [ + "M555.139 21.642c-218.775-71.601-457.062 40.29-532.231 250.028-75.227 209.681 41.211 437.665 259.928 509.208 218.717 71.601 457.004-40.348 532.231-250.028s-41.211-437.665-259.928-509.208zM320.076 677.045c-158.915-52.089-243.467-217.681-188.903-369.978 54.679-152.296 227.754-233.625 386.669-181.593s243.409 217.624 188.788 369.92c-54.622 152.296-227.696 233.567-386.554 181.65z", + "M638.482 685.794l358.927 349.602 24.807-69.241 24.865-69.241-310.348-302.29z" + ], + "width": 1109, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "search" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + }, + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 76, + "id": 62, + "prevSize": 32, + "code": 58892, + "name": "search", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 62 + }, + { + "icon": { + "paths": [ + "M1098.281 85.45c19.777-3.723 34.901-21.232 34.901-42.347-0.058-23.791-19.196-43.103-42.812-43.103h-900.508c-23.675 0-42.754 19.312-42.754 43.103 0 21.057 15.007 38.566 34.843 42.347l-181.951 354.421v68.988c0 30.946 32.516 56.016 72.594 56.016 13.437 0 26.001-2.908 36.821-7.795v466.919h1061.286v-466.919c10.878 4.944 23.326 7.795 36.879 7.795 40.078 0 72.594-25.071 72.594-56.016v-68.988l-181.893-354.421zM214.758 564.875c-38.217 0-69.221-25.071-69.221-56.016v-6.457h-0.349v-62.531l137.162-353.665h109.648l-107.961 353.665v68.988c0 0 0 0 0 0 0 30.946-31.004 56.016-69.279 56.016zM498.447 564.875c-38.217 0-69.221-25.071-69.221-56.016v-68.988l57.354-353.665h109.241l-28.095 353.665v68.93c-0.058 31.004-31.004 56.075-69.279 56.075zM782.077 564.875c-38.217 0-69.162-25.071-69.162-56.016v-68.988l-28.154-353.665h108.892l57.296 353.665v68.988c0 0.931 0.175 1.92 0.233 2.792-1.803 29.666-32.051 53.224-69.104 53.224zM1134.637 508.859c0 30.946-31.004 56.016-69.221 56.016s-69.162-25.071-69.162-56.016v-68.988l-108.019-353.665h109.59l137.22 353.665v62.473h-0.349v6.515h-0.058z" + ], + "width": 1280, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stores" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 75, + "id": 63, + "prevSize": 32, + "code": 58893, + "name": "stores", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 63 + }, + { + "icon": { + "paths": [ + "M944.97 329.042c-97.861 0-177.522 79.581-177.522 177.443 0 97.94 79.66 177.679 177.522 177.679 98.019 0 177.679-79.739 177.679-177.679 0-97.861-79.66-177.443-177.679-177.443zM944.97-0c-470.712 0-944.97 512-944.97 512s474.258 512 944.97 512c470.949 0 945.128-512 945.128-512s-474.179-512-945.128-512zM944.97 868.856c-200.057 0-362.292-162.078-362.292-362.45 0-200.057 162.236-362.292 362.292-362.292 200.214 0 362.45 162.236 362.45 362.292 0 200.451-162.236 362.45-362.45 362.45z" + ], + "width": 1890, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "views" + ], + "grid": 0 + }, + "attrs": [ + { + "opacity": 1, + "visibility": false + } + ], + "properties": { + "order": 73, + "id": 64, + "prevSize": 32, + "code": 58895, + "name": "views", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 64 + }, + { + "icon": { + "paths": [ + "M1042.226 299.849h-598.393v-299.849l-443.833 384.316 443.833 384.403v-299.859h598.393c106.478 0 192.801 86.318 192.801 192.801s-86.318 192.796-192.801 192.796v0.483l-452.707 0.005c-46.695 0.005-84.53 37.845-84.53 84.535 0 46.68 37.84 84.525 84.535 84.525 0.377 0 0.744-0.053 1.121-0.058h451.581c199.964 0 362.044-162.085 362.044-362.039 0-199.964-162.080-362.059-362.044-362.059z" + ], + "width": 1404, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "revert" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 129, + "id": 65, + "prevSize": 32, + "code": 58946, + "name": "revert" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 65 } + ], + "height": 1024, + "metadata": { + "name": "icomoon" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "icomoon", + "majorVersion": 1, + "minorVersion": 0 + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "resetPoint": 58880, + "showVersion": true, + "showSelector": false, + "showMetrics": false, + "showMetadata": false, + "embed": false + }, + "imagePref": { + "prefix": "icon-", + "png": true, + "useClassSelector": true, + "classSelector": ".icon" + }, + "historySize": 100, + "showCodes": true, + "search": "", + "gridSize": 16, + "showLiga": false + } } \ No newline at end of file diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml index 6c53a8613f09ca1f91c9e024b8e2cec723f0b309..3bf5fc6fc77af5a67becb60920343c6f6ce48db8 100644 --- a/app/design/frontend/Magento/blank/etc/view.xml +++ b/app/design/frontend/Magento/blank/etc/view.xml @@ -73,10 +73,18 @@ <height>140</height> </image> <image id="product_page_image_large" type="image"/> + <image id="product_page_image_large_no_frame" type="image"> + <frame>false</frame> + </image> <image id="product_page_image_medium" type="image"> <width>700</width> <height>700</height> </image> + <image id="product_page_image_medium_no_frame" type="image"> + <width>700</width> + <height>700</height> + <frame>false</frame> + </image> <image id="product_page_image_small" type="thumbnail"> <width>90</width> <height>90</height> diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml index 12a51ee065edba43c9afde39ce31c2aace3d00a8..33fc64af977c557f17fd7e9db0779a881fa77e08 100644 --- a/app/design/frontend/Magento/luma/etc/view.xml +++ b/app/design/frontend/Magento/luma/etc/view.xml @@ -77,10 +77,18 @@ <height>140</height> </image> <image id="product_page_image_large" type="image"/> + <image id="product_page_image_large_no_frame" type="image"> + <frame>false</frame> + </image> <image id="product_page_image_medium" type="image"> <width>700</width> <height>560</height> </image> + <image id="product_page_image_medium_no_frame" type="image"> + <width>700</width> + <height>700</height> + <frame>false</frame> + </image> <image id="product_page_image_small" type="thumbnail"> <width>88</width> <height>110</height> diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php index 88fd7797e768fb5fb227a8fc888ad481794d4347..8b0d1b393f467641bd87bc65fb425dbe8000bff6 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php @@ -23,8 +23,15 @@ class ImageTest extends \PHPUnit_Framework_TestCase $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( \Magento\Catalog\Model\Product\Image::class ); - $model->setDestinationSubdir('image')->setBaseFile(''); - $this->assertEmpty($model->getBaseFile()); + /** @var \Magento\Catalog\Model\View\Asset\Placeholder $defualtPlaceholder */ + $defualtPlaceholder = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create(\Magento\Catalog\Model\View\Asset\Placeholder::class, + ['type' => 'image'] + ); + + $model->setDestinationSubdir('image'); + $model->setBaseFile(''); + $this->assertEquals($defualtPlaceholder->getSourceFile(), $model->getBaseFile()); return $model; } diff --git a/lib/internal/Magento/Framework/File/Mime.php b/lib/internal/Magento/Framework/File/Mime.php index c8fe56eaa9e68ee9e61c9bcec7cf038b29fbff34..d698f9cced06ff7b3761ebfd226fa4cfca3b39f2 100644 --- a/lib/internal/Magento/Framework/File/Mime.php +++ b/lib/internal/Magento/Framework/File/Mime.php @@ -71,7 +71,7 @@ class Mime throw new \InvalidArgumentException("File '$file' doesn't exist"); } - $extension = pathinfo($file, PATHINFO_EXTENSION); + $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if (isset($this->mimeTypes[$extension])) { $result = $this->mimeTypes[$extension]; } diff --git a/lib/internal/Magento/Framework/File/Test/Unit/MimeTest.php b/lib/internal/Magento/Framework/File/Test/Unit/MimeTest.php index 7c2a1d71279c440953ba8bea4ef101412a53f5e6..90b970b7f8d8a1471c3f36fe5466838b11c49c97 100644 --- a/lib/internal/Magento/Framework/File/Test/Unit/MimeTest.php +++ b/lib/internal/Magento/Framework/File/Test/Unit/MimeTest.php @@ -47,6 +47,7 @@ class MimeTest extends \PHPUnit_Framework_TestCase return [ 'javascript' => [__DIR__ . '/_files/javascript.js', 'application/javascript'], 'weird extension' => [__DIR__ . '/_files/file.weird', 'application/octet-stream'], + 'weird uppercase extension' => [__DIR__ . '/_files/UPPERCASE.WEIRD', 'application/octet-stream'], ]; } } diff --git a/lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD b/lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/web/mage/calendar.js b/lib/web/mage/calendar.js index 984274575aa3ab0af08faee6bf1f653f73782adb..5893b95f4bd38b21e17628353489c37af758848e 100644 --- a/lib/web/mage/calendar.js +++ b/lib/web/mage/calendar.js @@ -552,7 +552,7 @@ //Set date/time according to timezone offset $(el).datepicker('setTimezoneDate') // To ensure that user can re-select date field without clicking outside it first. - .blur(); + .blur().trigger('change'); }; return {