mirror of https://github.com/iconify/api.git
Major rewrite, no more separate CDN
This commit is contained in:
parent
fdc00aaa8a
commit
ccfc7e6d31
|
|
@ -5,4 +5,5 @@ package-lock.json
|
|||
region.txt
|
||||
.reload
|
||||
*.log
|
||||
_debug*.*
|
||||
.ssl/ssl.*
|
||||
|
|
@ -4,3 +4,5 @@
|
|||
node_modules
|
||||
npm-debug.log
|
||||
tests
|
||||
debug
|
||||
_debug*.*
|
||||
|
|
|
|||
227
app.js
227
app.js
|
|
@ -11,14 +11,19 @@
|
|||
// True if server should include default icons set
|
||||
const serveDefaultIcons = true;
|
||||
|
||||
// Directory with json files for custom icon sets
|
||||
// Directories with json files for custom icon sets
|
||||
// Use simple-svg-tools package to create json collections
|
||||
const customIconsDirectory = 'json';
|
||||
const customIconDirectories = ['json'];
|
||||
|
||||
// HTTP port
|
||||
// Run ssl.js for SSL support
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
// Cache configuration
|
||||
const cache = 604800, // cache time in seconds
|
||||
cacheMin = cache, // minimum cache refresh time in seconds
|
||||
cachePrivate = false; // True if cache is private. Used in Cache-Control header in response
|
||||
|
||||
/*
|
||||
* Main stuff
|
||||
*/
|
||||
|
|
@ -30,13 +35,11 @@ const fs = require('fs'),
|
|||
// Debug stuff
|
||||
version = JSON.parse(fs.readFileSync('package.json', 'utf8')).version,
|
||||
|
||||
// CDN stuff
|
||||
cdn = require('simple-svg-cdn');
|
||||
// Included files
|
||||
Collections = require('./src/collections'),
|
||||
|
||||
// Cache time
|
||||
const cache = 604800; // cache time in seconds
|
||||
const cacheMin = cache; // minimum cache refresh time in seconds
|
||||
const cachePrivate = false; // True if cache is private
|
||||
// Query parser
|
||||
parseQuery = require('./src/query');
|
||||
|
||||
// Region file to easy identify server in CDN
|
||||
let region = '';
|
||||
|
|
@ -64,56 +67,118 @@ if (reloadKey.length < 8 || reloadKey.length > 64) {
|
|||
// Icons module
|
||||
const icons = serveDefaultIcons ? require('simple-svg-icons') : null;
|
||||
|
||||
// Collections list
|
||||
let collections = null,
|
||||
loading = true;
|
||||
|
||||
/**
|
||||
* Load icons
|
||||
*
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function loadIcons() {
|
||||
cdn.clearCollections();
|
||||
console.log('Loading collections at ' + (new Date()).toString());
|
||||
return new Promise((fulfill, reject) => {
|
||||
let t = Date.now(),
|
||||
newCollections = new Collections(console.log);
|
||||
|
||||
// Load default collections
|
||||
if (icons !== null) {
|
||||
Object.keys(icons.collections()).forEach(prefix => {
|
||||
let filename = icons.locate(prefix),
|
||||
data;
|
||||
try {
|
||||
data = fs.readFileSync(filename, 'utf8');
|
||||
data = JSON.parse(data);
|
||||
cdn.deOptimize(data);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
return;
|
||||
}
|
||||
console.log('Added premade collection: ' + prefix);
|
||||
cdn.addCollection(prefix, data);
|
||||
console.log('Loading collections at ' + (new Date()).toString());
|
||||
|
||||
// Load default collections
|
||||
if (icons !== null) {
|
||||
Object.keys(icons.collections()).forEach(prefix => {
|
||||
newCollections.addFile(icons.locate(prefix));
|
||||
});
|
||||
}
|
||||
|
||||
// Add collections from "json" directory
|
||||
customIconDirectories.forEach(dir => {
|
||||
newCollections.addDirectory(dir);
|
||||
});
|
||||
}
|
||||
|
||||
// Add collections from "json" directory
|
||||
let files;
|
||||
try {
|
||||
files = fs.readdirSync(customIconsDirectory);
|
||||
} catch (err) {
|
||||
files = [];
|
||||
}
|
||||
files.forEach(file => {
|
||||
let list = file.split('.');
|
||||
if (list.length !== 2 || list[1] !== 'json') {
|
||||
newCollections.load().then(() => {
|
||||
console.log('Loaded in ' + (Date.now() - t) + 'ms');
|
||||
fulfill(newCollections);
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse request
|
||||
*
|
||||
* @param {string} prefix
|
||||
* @param {string} query
|
||||
* @param {string} ext
|
||||
* @param {object} req
|
||||
* @param {object} res
|
||||
*/
|
||||
function parseRequest(prefix, query, ext, req, res) {
|
||||
function parse() {
|
||||
let result = 404,
|
||||
collection = collections.find(prefix);
|
||||
|
||||
if (collection !== null) {
|
||||
result = parseQuery(collection, query, ext, req.query);
|
||||
}
|
||||
|
||||
if (typeof result === 'number') {
|
||||
res.sendStatus(result);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
let data = fs.readFileSync(customIconsDirectory + '/' + file, 'utf8');
|
||||
data = JSON.parse(data);
|
||||
cdn.deOptimize(data);
|
||||
console.log('Added custom collection: ' + list[0]);
|
||||
cdn.addCollection(list[0], data);
|
||||
} catch (err) {
|
||||
}
|
||||
});
|
||||
|
||||
// Sort collections
|
||||
cdn.sortPrefixes();
|
||||
// Send cache header
|
||||
if (
|
||||
cache &&
|
||||
(req.get('Pragma') === void 0 || req.get('Pragma').indexOf('no-cache') === -1) &&
|
||||
(req.get('Cache-Control') === void 0 || req.get('Cache-Control').indexOf('no-cache') === -1)
|
||||
) {
|
||||
res.set('Cache-Control', (cachePrivate ? 'private' : 'public') + ', max-age=' + cache + ', min-refresh=' + cacheMin);
|
||||
if (!cachePrivate) {
|
||||
res.set('Pragma', 'cache');
|
||||
}
|
||||
}
|
||||
|
||||
// Check for download
|
||||
if (result.filename !== void 0 && (req.query.download === '1' || req.query.download === 'true')) {
|
||||
res.set('Content-Disposition', 'attachment; filename="' + result.filename + '"');
|
||||
}
|
||||
|
||||
// Send data
|
||||
res.type(result.type).send(result.body);
|
||||
}
|
||||
|
||||
// Parse query
|
||||
if (collections === null) {
|
||||
// This means script is still loading
|
||||
// Attempt to parse query every 100ms for up to 2 seconds
|
||||
let attempts = 0,
|
||||
timer = setInterval(function() {
|
||||
attempts ++;
|
||||
if (collections === null) {
|
||||
if (attempts > 20) {
|
||||
clearInterval(timer);
|
||||
res.sendStatus(503);
|
||||
}
|
||||
} else {
|
||||
clearInterval(timer);
|
||||
parse();
|
||||
}
|
||||
}, 100);
|
||||
|
||||
} else {
|
||||
parse();
|
||||
}
|
||||
}
|
||||
|
||||
// Load icons
|
||||
loadIcons();
|
||||
loadIcons().then(newCollections => {
|
||||
collections = newCollections;
|
||||
loading = false;
|
||||
}).catch(err => {
|
||||
console.log('Fatal error loading collections:', err);
|
||||
loading = false;
|
||||
});
|
||||
|
||||
// Disable X-Powered-By header
|
||||
app.disable('x-powered-by');
|
||||
|
|
@ -127,43 +192,39 @@ app.options('/*', (req, res) => {
|
|||
res.send(200);
|
||||
});
|
||||
|
||||
// GET request
|
||||
app.get(/\/([a-z0-9\-\/]+)\.(js|json|svg)$/, (req, res) => {
|
||||
let parts = req.params[0].split('/'),
|
||||
result = 404;
|
||||
// GET 3 part request
|
||||
app.get(/^\/([a-z0-9-]+)\/([a-z0-9-]+)\.(js|json|svg)$/, (req, res) => {
|
||||
// prefix/icon.svg
|
||||
// prefix/icons.json
|
||||
parseRequest(req.params[0], req.params[1], req.params[2], req, res);
|
||||
});
|
||||
|
||||
if (parts.length) {
|
||||
let collection = cdn.getCollection(parts[0]);
|
||||
// GET 2 part JS/JSON request
|
||||
app.get(/^\/([a-z0-9-]+)\.(js|json)$/, (req, res) => {
|
||||
// prefix.json
|
||||
parseRequest(req.params[0], 'icons', req.params[1], req, res);
|
||||
});
|
||||
|
||||
if (collection !== null) {
|
||||
result = cdn.parseQuery(collection, parts, req.params[1], req.query);
|
||||
}
|
||||
}
|
||||
// GET 2 part SVG request
|
||||
app.get(/^\/([a-z0-9:-]+)\.svg$/, (req, res) => {
|
||||
let parts = req.params[0].split(':');
|
||||
|
||||
if (typeof result === 'number') {
|
||||
res.sendStatus(result);
|
||||
if (parts.length === 2) {
|
||||
// prefix:icon.svg
|
||||
parseRequest(parts[0], parts[1], 'svg', req, res);
|
||||
return;
|
||||
}
|
||||
|
||||
// Send cache header
|
||||
if (
|
||||
cache &&
|
||||
(req.get('Pragma') === void 0 || req.get('Pragma').indexOf('no-cache') === -1) &&
|
||||
(req.get('Cache-Control') === void 0 || req.get('Cache-Control').indexOf('no-cache') === -1)
|
||||
) {
|
||||
res.set('Cache-Control', (cachePrivate ? 'private' : 'public') + ', max-age=' + cache + ', min-refresh=' + cacheMin);
|
||||
if (!cachePrivate) {
|
||||
res.set('Pragma', 'cache');
|
||||
if (parts.length === 1) {
|
||||
parts = parts[0].split('-');
|
||||
if (parts.length > 1) {
|
||||
// prefix-icon.svg
|
||||
parseRequest(parts.shift(), parts.join('-'), 'svg', req, res);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for download
|
||||
if (result.filename !== void 0 && (req.query.download === '1' || req.query.download === 'true')) {
|
||||
res.set('Content-Disposition', 'attachment; filename="' + result.filename + '"');
|
||||
}
|
||||
|
||||
// Send data
|
||||
res.type(result.type).send(result.body);
|
||||
res.sendStatus(404);
|
||||
});
|
||||
|
||||
// Debug information and AWS health check
|
||||
|
|
@ -180,7 +241,19 @@ app.get('/version', (req, res) => {
|
|||
app.get('/reload', (req, res) => {
|
||||
if (reloadKey.length && req.query && req.query.key && req.query.key === reloadKey) {
|
||||
// Reload collections
|
||||
process.nextTick(loadIcons);
|
||||
process.nextTick(() => {
|
||||
if (loading) {
|
||||
return;
|
||||
}
|
||||
loading = true;
|
||||
loadIcons().then(newCollections => {
|
||||
collections = newCollections;
|
||||
loading = false;
|
||||
}).catch(err => {
|
||||
console.log('Fatal error loading collections:', err);
|
||||
loading = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
res.sendStatus(200);
|
||||
|
|
|
|||
|
|
@ -1,619 +1,616 @@
|
|||
{
|
||||
"icons": {
|
||||
"arty-stroke-16-arc-180": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 24c22.143 0 40 17.906 40 40s-17.863 40-40 40h-8\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-153\"/><path d=\"M40 104l16 16\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M40 104l16-16\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arc-180": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 24c22.143 0 40 17.906 40 40s-17.863 40-40 40h-8\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-153\"/><path d=\"M40 104l16 16\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M40 104l16-16\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arc-270": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 24c22.143 0 40 17.906 40 40s-17.863 40-40 40-40-17.906-40-40v-8\" class=\"animation-delay-0 animation-duration-12 animate-stroke stroke-length-230\"/><path d=\"M24 40L8 56\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-30\"/><path d=\"M24 40l16 16\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-30\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arc-270": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 24c22.143 0 40 17.906 40 40s-17.863 40-40 40-40-17.906-40-40v-8\" class=\"animation-delay-0 animation-duration-12 animate-stroke stroke-length-230\"/><path d=\"M24 40L8 56\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-30\"/><path d=\"M24 40l16 16\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-30\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arc-90": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\"><path d=\"M64 24c22.143 0 40 17.906 40 40v8\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/><path d=\"M104 88l16-16\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-30\"/><path d=\"M104 88L88 72\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-30\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arc-90": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\"><path d=\"M64 24c22.143 0 40 17.906 40 40v8\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/><path d=\"M104 88l16-16\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-30\"/><path d=\"M104 88L88 72\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-30\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrow-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M120 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-153\"/><path d=\"M8 64l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrow-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M120 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-153\"/><path d=\"M8 64l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrows-from-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M48 80H16\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80v32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48V16\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48h32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 8L84 44\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrows-from-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M48 80H16\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80v32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48V16\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48h32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 8L84 44\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrows-from-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M48 48V16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 80v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48V16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 80h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 48H16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80H16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 8L84 44\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 120L84 84\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M8 8l36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrows-from-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M48 48V16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 80v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48V16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 80h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 48H16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80H16\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M80 48h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 8L84 44\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 120L84 84\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M8 8l36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrows-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M56 88h56\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M72 40H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 88L96 64\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 88l-24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 40l24-24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 40l24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrows-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M56 88h56\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M72 40H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 88L96 64\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 88l-24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 40l24-24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 40l24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrows-to-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 120V88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120h32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8H88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8v32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M52 76l-36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M76 52l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrows-to-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 120V88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120h32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8H88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8v32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M52 76l-36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M76 52l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-arrows-to-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 120V88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 120V88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8H88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 120H88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80l-36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M80 48l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M80 80l36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M48 48L12 12\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-arrows-to-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 120V88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 120V88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8v32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 120h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 8H88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 120H88\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8h32\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M48 80l-36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M80 48l36-36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M80 80l36 36\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M48 48L12 12\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-caret-up-outline": {
|
||||
"body": "<path d=\"M38 74l26-26 26 26z\" stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-caret-up-outline": {
|
||||
"body": "<path d=\"M38 74l26-26 26 26z\" stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>"
|
||||
},
|
||||
"arty-stroke-16-caret-up": {
|
||||
"body": "<path d=\"M24 80l40-40 40 40z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-caret-up": {
|
||||
"body": "<path d=\"M24 80l40-40 40 40z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>"
|
||||
},
|
||||
"arty-stroke-16-carets-vertical-outline": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M38 78l26 26 26-26z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M38 50l26-26 26 26z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-carets-vertical-outline": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M38 78l26 26 26-26z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M38 50l26-26 26 26z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-carets-vertical": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M24 72l40 40 40-40z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M24 56l40-40 40 40z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-carets-vertical": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M24 72l40 40 40-40z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M24 56l40-40 40 40z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-chevron-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M40 64l48-48\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/><path d=\"M40 64l48 48\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-chevron-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M40 64l48-48\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/><path d=\"M40 64l48 48\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-close": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 8l112 112\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/><path d=\"M8 120L120 8\" class=\"animation-delay-6 animation-duration-6 animate-stroke stroke-length-230\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-close": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 8l112 112\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/><path d=\"M8 120L120 8\" class=\"animation-delay-6 animation-duration-6 animate-stroke stroke-length-230\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-confirm": {
|
||||
"body": "<path d=\"M8 64l48 48 64-96\" stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-230\"/>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-confirm": {
|
||||
"body": "<path d=\"M8 64l48 48 64-96\" stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-230\"/>"
|
||||
},
|
||||
"arty-stroke-16-double-arrow-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 64h48\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M64 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 64L96 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 64L96 88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 64l24-24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 64l24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-double-arrow-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 64h48\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M64 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-68\"/><path d=\"M120 64L96 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M120 64L96 88\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 64l24-24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 64l24 24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-drop-outline": {
|
||||
"body": "<path d=\"M64 8S24 54 24 82c0 22 16 38 40 38s40-16 40-38c0-28-40-74-40-74z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-drop-outline": {
|
||||
"body": "<path d=\"M64 8S24 54 24 82c0 22 16 38 40 38s40-16 40-38c0-28-40-74-40-74z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/>"
|
||||
},
|
||||
"arty-stroke-16-drop": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 8S24 54 24 82c0 22 16 38 40 38s40-16 40-38c0-28-40-74-40-74z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-345\"/><path d=\"M64 8S24 54 24 82c0 12.676 5.311 23.36 14.404 30.139l57.8-56.002C84.565 33.594 64 8 64 8z\" fill=\"currentColor\" class=\"animation-delay-9 animation-duration-4 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-drop": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 8S24 54 24 82c0 22 16 38 40 38s40-16 40-38c0-28-40-74-40-74z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-345\"/><path d=\"M64 8S24 54 24 82c0 12.676 5.311 23.36 14.404 30.139l57.8-56.002C84.565 33.594 64 8 64 8z\" fill=\"currentColor\" class=\"animation-delay-9 animation-duration-4 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-filters": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M24 8v40\" stroke-width=\"16\" class=\"animation-delay-0 animation-duration-3 animate-stroke stroke-length-45\"/><path d=\"M24 104v16\" stroke-width=\"16\" class=\"animation-delay-3 animation-duration-1 animate-stroke stroke-length-20\"/><path d=\"M12 76h24\" stroke-width=\"24\" class=\"animation-delay-4 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M64 8v8\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-1 animate-stroke stroke-length-9\"/><path d=\"M64 72v48\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M52 44h24\" stroke-width=\"24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M104 8v48\" stroke-width=\"16\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M104 112v8\" stroke-width=\"16\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-9\"/><path d=\"M92 84h24\" stroke-width=\"24\" class=\"animation-delay-15 animation-duration-2 animate-stroke stroke-length-30\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-filters": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M24 8v40\" stroke-width=\"16\" class=\"animation-delay-0 animation-duration-3 animate-stroke stroke-length-45\"/><path d=\"M24 104v16\" stroke-width=\"16\" class=\"animation-delay-3 animation-duration-1 animate-stroke stroke-length-20\"/><path d=\"M12 76h24\" stroke-width=\"24\" class=\"animation-delay-4 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M64 8v8\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-1 animate-stroke stroke-length-9\"/><path d=\"M64 72v48\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M52 44h24\" stroke-width=\"24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-30\"/><path d=\"M104 8v48\" stroke-width=\"16\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M104 112v8\" stroke-width=\"16\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-9\"/><path d=\"M92 84h24\" stroke-width=\"24\" class=\"animation-delay-15 animation-duration-2 animate-stroke stroke-length-30\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-grid-3-outline": {
|
||||
"body": "<g transform=\"translate(4 4)\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"12\" r=\"12\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"12\" r=\"12\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"12\" cy=\"60\" r=\"12\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"60\" r=\"12\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"60\" r=\"12\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"12\" cy=\"108\" r=\"12\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"108\" r=\"12\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"108\" r=\"12\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-grid-3-outline": {
|
||||
"body": "<g transform=\"translate(4 4)\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"12\" r=\"12\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"12\" r=\"12\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"12\" cy=\"60\" r=\"12\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"60\" r=\"12\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"60\" r=\"12\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"12\" cy=\"108\" r=\"12\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"60\" cy=\"108\" r=\"12\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"108\" cy=\"108\" r=\"12\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-grid-3": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><circle cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"16\" r=\"16\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"16\" r=\"16\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"64\" r=\"16\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"64\" r=\"16\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"64\" r=\"16\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"112\" r=\"16\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"112\" r=\"16\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"112\" r=\"16\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-grid-3": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><circle cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"16\" r=\"16\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"16\" r=\"16\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"64\" r=\"16\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"64\" r=\"16\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"64\" r=\"16\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"112\" r=\"16\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"64\" cy=\"112\" r=\"16\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"112\" cy=\"112\" r=\"16\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-list-3-outline": {
|
||||
"body": "<g transform=\"translate(4 4)\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"animation-delay-0 animation-duration-3 animate-fill\"/><rect x=\"48\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-3 animation-duration-3 animate-fill\"/><circle cx=\"12\" cy=\"60\" r=\"12\" class=\"animation-delay-5 animation-duration-3 animate-fill\"/><rect x=\"48\" y=\"48\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-8 animation-duration-3 animate-fill\"/><circle cx=\"12\" cy=\"108\" r=\"12\" class=\"animation-delay-11 animation-duration-3 animate-fill\"/><rect x=\"48\" y=\"96\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-13 animation-duration-3 animate-fill\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-list-3-outline": {
|
||||
"body": "<g transform=\"translate(4 4)\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"animation-delay-0 animation-duration-3 animate-fill\"/><rect x=\"48\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-3 animation-duration-3 animate-fill\"/><circle cx=\"12\" cy=\"60\" r=\"12\" class=\"animation-delay-5 animation-duration-3 animate-fill\"/><rect x=\"48\" y=\"48\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-8 animation-duration-3 animate-fill\"/><circle cx=\"12\" cy=\"108\" r=\"12\" class=\"animation-delay-11 animation-duration-3 animate-fill\"/><rect x=\"48\" y=\"96\" width=\"72\" height=\"24\" rx=\"12\" class=\"animation-delay-13 animation-duration-3 animate-fill\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-list-3": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><circle fill=\"currentColor\" cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-4 animate-fill\"/><path d=\"M64 16h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-68\"/><circle fill=\"currentColor\" cx=\"16\" cy=\"64\" r=\"16\" class=\"animation-delay-5 animation-duration-4 animate-fill\"/><path d=\"M64 64h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-1 animate-stroke stroke-length-68\"/><circle fill=\"currentColor\" cx=\"16\" cy=\"112\" r=\"16\" class=\"animation-delay-11 animation-duration-4 animate-fill\"/><path d=\"M64 112h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-list-3": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><circle fill=\"currentColor\" cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-4 animate-fill\"/><path d=\"M64 16h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-68\"/><circle fill=\"currentColor\" cx=\"16\" cy=\"64\" r=\"16\" class=\"animation-delay-5 animation-duration-4 animate-fill\"/><path d=\"M64 64h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-1 animate-stroke stroke-length-68\"/><circle fill=\"currentColor\" cx=\"16\" cy=\"112\" r=\"16\" class=\"animation-delay-11 animation-duration-4 animate-fill\"/><path d=\"M64 112h48\" stroke=\"currentColor\" stroke-width=\"32\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-68\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-panel-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 64l32 32\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M8 64l32-32\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M92 64H16\" class=\"animation-delay-7 animation-duration-5 animate-stroke stroke-length-102\"/><path d=\"M120 8v112\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-7 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-panel-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 64l32 32\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M8 64l32-32\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-68\"/><path d=\"M92 64H16\" class=\"animation-delay-7 animation-duration-5 animate-stroke stroke-length-102\"/><path d=\"M120 8v112\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-7 animate-stroke stroke-length-153\"/></g>"
|
||||
},
|
||||
"arty-stroke-16-search": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M52 76L8 120\" class=\"animation-delay-10 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M51.92 76.364C44.558 69.06 40 58.965 40 48 40 25.909 57.857 8 80 8s40 17.909 40 40-17.86 40-40 40c-11.186 0-20.866-4.48-28.08-11.636z\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/></g>",
|
||||
"width": 128,
|
||||
"height": 128
|
||||
"arty-animated:16-search": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M52 76L8 120\" class=\"animation-delay-10 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M51.92 76.364C44.558 69.06 40 58.965 40 48 40 25.909 57.857 8 80 8s40 17.909 40 40-17.86 40-40 40c-11.186 0-20.866-4.48-28.08-11.636z\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/></g>"
|
||||
},
|
||||
"arty-stroke-20-arc-180": {
|
||||
"arty-animated:20-arc-180": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 32c26.571 0 48 21.488 48 48s-21.435 48-48 48H64\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-230\"/><path d=\"M48 128l24 24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/><path d=\"M48 128l24-24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arc-270": {
|
||||
"arty-animated:20-arc-270": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 32c26.571 0 48 21.488 48 48s-21.435 48-48 48-48-21.488-48-48V64\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-345\"/><path d=\"M32 56L8 80\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/><path d=\"M32 56l24 24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arc-90": {
|
||||
"arty-animated:20-arc-90": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\"><path d=\"M80 32c26.571 0 48 21.488 48 48v16\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-102\"/><path d=\"M128 112l24-24\" class=\"animation-delay-7 animation-duration-4 animate-stroke stroke-length-45\"/><path d=\"M128 112l-24-24\" class=\"animation-delay-7 animation-duration-4 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrow-left": {
|
||||
"arty-animated:20-arrow-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M152 80H16\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M8 80l48 48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/><path d=\"M8 80l48-48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrows-from-2-corners": {
|
||||
"arty-animated:20-arrows-from-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 96H24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M64 96v40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 64V24\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 64h40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 152l52-52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M152 8l-52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrows-from-corners": {
|
||||
"arty-animated:20-arrows-from-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M64 64V24\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 96v40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 64V24\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M64 96v40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 96h40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M64 64H24\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M64 96H24\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M96 64h40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 152l52-52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M152 8l-52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M152 152l-52-52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M8 8l52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrows-horizontal": {
|
||||
"arty-animated:20-arrows-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M72 112h72\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M88 48H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M152 112l-32-32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M152 112l-32 32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 48l32-32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 48l32 32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrows-to-2-corners": {
|
||||
"arty-animated:20-arrows-to-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 152v-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 152h40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 8h-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 8v40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M68 92l-52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M92 68l52-52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-arrows-to-corners": {
|
||||
"arty-animated:20-arrows-to-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 152v-40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 8v40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 152v-40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8v40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 152h40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 8h-40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M152 152h-40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M8 8h40\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-45\"/><path d=\"M64 96l-52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M96 64l52-52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M96 96l52 52\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M64 64L12 12\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-caret-up-outline": {
|
||||
"body": "<path d=\"M46 90l34-34 34 34z\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"arty-animated:20-caret-up-outline": {
|
||||
"body": "<path d=\"M46 90l34-34 34 34z\" stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-caret-up": {
|
||||
"arty-animated:20-caret-up": {
|
||||
"body": "<path d=\"M32 96l48-48 48 48z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-carets-vertical-outline": {
|
||||
"arty-animated:20-carets-vertical-outline": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M46 94l34 34 34-34z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M46 66l34-34 34 34z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-carets-vertical": {
|
||||
"arty-animated:20-carets-vertical": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M32 88l48 48 48-48z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M32 72l48-48 48 48z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-chevron-left": {
|
||||
"arty-animated:20-chevron-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M48 80l64-64\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/><path d=\"M48 80l64 64\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-close": {
|
||||
"arty-animated:20-close": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 8l144 144\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/><path d=\"M8 152L152 8\" class=\"animation-delay-6 animation-duration-6 animate-stroke stroke-length-230\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-confirm": {
|
||||
"arty-animated:20-confirm": {
|
||||
"body": "<path d=\"M8 80l64 64 80-128\" stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-double-arrow-horizontal": {
|
||||
"arty-animated:20-double-arrow-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 80h64\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M80 80H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M152 80l-32-32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M152 80l-32 32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 80l32-32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 80l32 32\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-panel-left": {
|
||||
"arty-animated:20-panel-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 80l48 48\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M8 80l48-48\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M124 80H16\" class=\"animation-delay-6 animation-duration-5 animate-stroke stroke-length-153\"/><path d=\"M152 8v144\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-20-search": {
|
||||
"arty-animated:20-search": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M68 92L8 152\" class=\"animation-delay-10 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M70.305 90.037C61.468 81.271 56 69.158 56 56c0-26.51 21.429-48 48-48s48 21.49 48 48-21.433 48-48 48c-13.423 0-25.039-5.376-33.695-13.963z\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/></g>",
|
||||
"width": 160,
|
||||
"height": 160
|
||||
},
|
||||
"arty-stroke-24-arc-180": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64s-28.58 64-64 64H80\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-345\"/><path d=\"M64 160l24 24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/><path d=\"M64 160l24-24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/></g>"
|
||||
"arty-animated:24-arc-180": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64s-28.58 64-64 64H80\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-345\"/><path d=\"M64 160l24 24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/><path d=\"M64 160l24-24\" class=\"animation-delay-9 animation-duration-2 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arc-270": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64s-28.58 64-64 64-64-28.65-64-64V80\" class=\"animation-delay-0 animation-duration-12 animate-stroke stroke-length-500\"/><path d=\"M32 64L8 88\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M32 64l24 24\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/></g>"
|
||||
"arty-animated:24-arc-270": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64s-28.58 64-64 64-64-28.65-64-64V80\" class=\"animation-delay-0 animation-duration-12 animate-stroke stroke-length-500\"/><path d=\"M32 64L8 88\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M32 64l24 24\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arc-90": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64v16\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/><path d=\"M160 128l24-24\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-45\"/><path d=\"M160 128l-24-24\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-45\"/></g>"
|
||||
"arty-animated:24-arc-90": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 32c35.429 0 64 28.65 64 64v16\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/><path d=\"M160 128l24-24\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-45\"/><path d=\"M160 128l-24-24\" class=\"animation-delay-8 animation-duration-3 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrow-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M184 96H16\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-230\"/><path d=\"M8 96l56 56\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/><path d=\"M8 96l56-56\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/></g>"
|
||||
"arty-animated:24-arrow-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M184 96H16\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-230\"/><path d=\"M8 96l56 56\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/><path d=\"M8 96l56-56\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrows-from-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 112H32\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112v48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80V32\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80h48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 8l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>"
|
||||
"arty-animated:24-arrows-from-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 112H32\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112v48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80V32\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80h48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 8l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrows-from-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 80V32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 112v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80V32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 112h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 80H32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112H32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 8l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 184l-68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M8 8l68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>"
|
||||
"arty-animated:24-arrows-from-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M80 80V32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 112v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80V32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 112h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 80H32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112H32\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M112 80h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 8l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M184 184l-68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M8 8l68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrows-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M88 144h88\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M104 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M184 144l-40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M184 144l-40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>"
|
||||
"arty-animated:24-arrows-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M88 144h88\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M104 64H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M184 144l-40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M184 144l-40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 64l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrows-to-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 184v-48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184h48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8h-48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8v48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M84 108l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M108 84l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>"
|
||||
"arty-animated:24-arrows-to-2-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 184v-48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184h48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8h-48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8v48\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M84 108l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M108 84l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-arrows-to-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 184v-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 184v-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 8v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8h-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 184h-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 8h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M112 80l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M112 112l68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M80 80L12 12\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>"
|
||||
"arty-animated:24-arrows-to-corners": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke=\"currentColor\" stroke-width=\"16\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 184v-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 184v-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 8v48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 184h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 8h-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M184 184h-48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M8 8h48\" class=\"animation-delay-9 animation-duration-4 animate-stroke stroke-length-68\"/><path d=\"M80 112l-68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M112 80l68-68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M112 112l68 68\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/><path d=\"M80 80L12 12\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-caret-upcopy": {
|
||||
"body": "<path d=\"M40 120l56-56 56 56z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>"
|
||||
"arty-animated:24-caret-up-outline": {
|
||||
"body": "<path d=\"M54 114l42-42 42 42z\" stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-caret-up-outline": {
|
||||
"body": "<path d=\"M54 114l42-42 42 42z\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>"
|
||||
"arty-animated:24-caret-up": {
|
||||
"body": "<path d=\"M40 120l56-56 56 56z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-caret-up": {
|
||||
"body": "<path d=\"M40 120l56-56 56 56z\" fill=\"currentColor\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/>"
|
||||
"arty-animated:24-carets-vertical-outline": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M54 109l42 42 42-42z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M54 81l42-42 42 42z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-carets-vertical-outline": {
|
||||
"body": "<g stroke-linecap=\"round\" stroke-width=\"12\" stroke=\"currentColor\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M54 110l42 42 42-42z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M54 82l42-42 42 42z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>"
|
||||
"arty-animated:24-carets-vertical": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M40 104l56 56 56-56z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M40 88l56-56 56 56z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-carets-vertical": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M40 104l56 56 56-56z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/><path d=\"M40 88l56-56 56 56z\" class=\"animation-delay-0 animation-duration-10 animate-fill\"/></g>"
|
||||
"arty-animated:24-chevron-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M56 96l80-80\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/><path d=\"M56 96l80 80\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-chevron-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M56 96l80-80\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/><path d=\"M56 96l80 80\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-153\"/></g>"
|
||||
"arty-animated:24-close": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 8l176 176\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-345\"/><path d=\"M8 184L184 8\" class=\"animation-delay-6 animation-duration-6 animate-stroke stroke-length-345\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-close": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 8l176 176\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-345\"/><path d=\"M8 184L184 8\" class=\"animation-delay-6 animation-duration-6 animate-stroke stroke-length-345\"/></g>"
|
||||
"arty-animated:24-confirm": {
|
||||
"body": "<path d=\"M8 104l72 64L184 24\" stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-confirm": {
|
||||
"body": "<path d=\"M8 104l72 64L184 24\" stroke-linecap=\"round\" stroke-width=\"16\" stroke=\"currentColor\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-345\"/>"
|
||||
"arty-animated:24-double-arrow-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 96h80\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M96 96H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M184 96l-40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M184 96l-40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 96l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 96l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-double-arrow-horizontal": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 96h80\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M96 96H16\" class=\"animation-delay-0 animation-duration-8 animate-stroke stroke-length-102\"/><path d=\"M184 96l-40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M184 96l-40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 96l40-40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/><path d=\"M8 96l40 40\" stroke-linejoin=\"round\" class=\"animation-delay-8 animation-duration-5 animate-stroke stroke-length-68\"/></g>"
|
||||
"arty-animated:24-drop-outline": {
|
||||
"body": "<path d=\"M96 8S32 84 32 128c0 36 28 56 64 56s64-20 64-56C160 84 96 8 96 8z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-500\"/>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-drop-outline": {
|
||||
"body": "<path d=\"M96 8S32 84 32 128c0 36 28 56 64 56s64-20 64-56C160 84 96 8 96 8z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\" class=\"animation-delay-0 animation-duration-10 animate-stroke stroke-length-500\"/>"
|
||||
"arty-animated:24-drop": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 8S32 84 32 128c0 36 28 56 64 56s64-20 64-56C160 84 96 8 96 8z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-500\"/><path d=\"M96 8S32 84 32 128c0 20.785 9.333 36.236 24.151 45.584l92.734-85.324C130.558 49.037 96 8 96 8z\" fill=\"currentColor\" class=\"animation-delay-9 animation-duration-4 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-drop": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M96 8S32 84 32 128c0 36 28 56 64 56s64-20 64-56C160 84 96 8 96 8z\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-9 animate-stroke stroke-length-500\"/><path d=\"M96 8S32 84 32 128c0 20.785 9.333 36.236 24.151 45.584l92.734-85.324C130.558 49.037 96 8 96 8z\" fill=\"currentColor\" class=\"animation-delay-9 animation-duration-4 animate-fill\"/></g>"
|
||||
"arty-animated:24-filters": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M32 8v72\" stroke-width=\"16\" class=\"animation-delay-0 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M32 136v48\" stroke-width=\"16\" class=\"animation-delay-3 animation-duration-2 animate-stroke stroke-length-68\"/><path d=\"M12 108h40\" stroke-width=\"24\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M96 8v24\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-1 animate-stroke stroke-length-30\"/><path d=\"M96 88v96\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-3 animate-stroke stroke-length-153\"/><path d=\"M76 60h40\" stroke-width=\"24\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M160 8v88\" stroke-width=\"16\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M160 152v32\" stroke-width=\"16\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M140 124h40\" stroke-width=\"24\" class=\"animation-delay-15 animation-duration-1 animate-stroke stroke-length-45\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-filters": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M32 8v72\" stroke-width=\"16\" class=\"animation-delay-0 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M32 136v48\" stroke-width=\"16\" class=\"animation-delay-3 animation-duration-2 animate-stroke stroke-length-68\"/><path d=\"M12 108h40\" stroke-width=\"24\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M96 8v24\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-1 animate-stroke stroke-length-30\"/><path d=\"M96 88v96\" stroke-width=\"16\" class=\"animation-delay-6 animation-duration-3 animate-stroke stroke-length-153\"/><path d=\"M76 60h40\" stroke-width=\"24\" class=\"animation-delay-10 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M160 8v88\" stroke-width=\"16\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M160 152v32\" stroke-width=\"16\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-45\"/><path d=\"M140 124h40\" stroke-width=\"24\" class=\"animation-delay-15 animation-duration-1 animate-stroke stroke-length-45\"/></g>"
|
||||
"arty-animated:24-grid-3-outline": {
|
||||
"body": "<g transform=\"translate(8 8)\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"16\" r=\"16\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"16\" r=\"16\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"88\" r=\"16\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"88\" r=\"16\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"88\" r=\"16\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"160\" r=\"16\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"160\" r=\"16\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"160\" r=\"16\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-grid-3-outline": {
|
||||
"body": "<g transform=\"translate(8 8)\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"16\" r=\"16\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"16\" r=\"16\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"88\" r=\"16\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"88\" r=\"16\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"88\" r=\"16\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"16\" cy=\"160\" r=\"16\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"88\" cy=\"160\" r=\"16\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"160\" cy=\"160\" r=\"16\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>"
|
||||
"arty-animated:24-grid-3": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><circle cx=\"24\" cy=\"24\" r=\"24\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"24\" r=\"24\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"24\" r=\"24\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"24\" cy=\"96\" r=\"24\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"96\" r=\"24\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"96\" r=\"24\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"24\" cy=\"168\" r=\"24\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"168\" r=\"24\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"168\" r=\"24\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-grid-3": {
|
||||
"body": "<g fill=\"currentColor\" fill-rule=\"evenodd\"><circle cx=\"24\" cy=\"24\" r=\"24\" class=\"animation-delay-0 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"24\" r=\"24\" class=\"animation-delay-2 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"24\" r=\"24\" class=\"animation-delay-4 animation-duration-2 animate-fill\"/><circle cx=\"24\" cy=\"96\" r=\"24\" class=\"animation-delay-6 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"96\" r=\"24\" class=\"animation-delay-7 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"96\" r=\"24\" class=\"animation-delay-9 animation-duration-2 animate-fill\"/><circle cx=\"24\" cy=\"168\" r=\"24\" class=\"animation-delay-11 animation-duration-2 animate-fill\"/><circle cx=\"96\" cy=\"168\" r=\"24\" class=\"animation-delay-13 animation-duration-2 animate-fill\"/><circle cx=\"168\" cy=\"168\" r=\"24\" class=\"animation-delay-15 animation-duration-2 animate-fill\"/></g>"
|
||||
"arty-animated:24-list-3-outline": {
|
||||
"body": "<g transform=\"translate(8 8)\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-3 animate-fill\"/><rect x=\"72\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-3 animation-duration-3 animate-fill\"/><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"88\" r=\"16\" class=\"animation-delay-5 animation-duration-3 animate-fill\"/><rect x=\"72\" y=\"72\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-8 animation-duration-3 animate-fill\"/><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"160\" r=\"16\" class=\"animation-delay-11 animation-duration-3 animate-fill\"/><rect x=\"72\" y=\"144\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-13 animation-duration-3 animate-fill\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-list-3-outline": {
|
||||
"body": "<g transform=\"translate(8 8)\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"16\" r=\"16\" class=\"animation-delay-0 animation-duration-3 animate-fill\"/><rect x=\"72\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-3 animation-duration-3 animate-fill\"/><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"88\" r=\"16\" class=\"animation-delay-5 animation-duration-3 animate-fill\"/><rect x=\"72\" y=\"72\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-8 animation-duration-3 animate-fill\"/><circle stroke-linejoin=\"round\" cx=\"16\" cy=\"160\" r=\"16\" class=\"animation-delay-11 animation-duration-3 animate-fill\"/><rect x=\"72\" y=\"144\" width=\"104\" height=\"32\" rx=\"16\" class=\"animation-delay-13 animation-duration-3 animate-fill\"/></g>"
|
||||
"arty-animated:24-list-3": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><circle fill=\"currentColor\" cx=\"24\" cy=\"24\" r=\"24\" class=\"animation-delay-0 animation-duration-4 animate-fill\"/><path d=\"M96 24h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-102\"/><circle fill=\"currentColor\" cx=\"24\" cy=\"96\" r=\"24\" class=\"animation-delay-5 animation-duration-4 animate-fill\"/><path d=\"M96 96h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-1 animate-stroke stroke-length-102\"/><circle fill=\"currentColor\" cx=\"24\" cy=\"168\" r=\"24\" class=\"animation-delay-11 animation-duration-4 animate-fill\"/><path d=\"M96 168h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-102\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-list-3": {
|
||||
"body": "<g fill=\"none\" fill-rule=\"evenodd\"><circle fill=\"currentColor\" cx=\"24\" cy=\"24\" r=\"24\" class=\"animation-delay-0 animation-duration-4 animate-fill\"/><path d=\"M96 24h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-4 animation-duration-1 animate-stroke stroke-length-102\"/><circle fill=\"currentColor\" cx=\"24\" cy=\"96\" r=\"24\" class=\"animation-delay-5 animation-duration-4 animate-fill\"/><path d=\"M96 96h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-9 animation-duration-1 animate-stroke stroke-length-102\"/><circle fill=\"currentColor\" cx=\"24\" cy=\"168\" r=\"24\" class=\"animation-delay-11 animation-duration-4 animate-fill\"/><path d=\"M96 168h72\" stroke=\"currentColor\" stroke-width=\"48\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animation-delay-14 animation-duration-1 animate-stroke stroke-length-102\"/></g>"
|
||||
"arty-animated:24-panel-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 96l64 64\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M8 96l64-64\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M156 96H16\" class=\"animation-delay-6 animation-duration-5 animate-stroke stroke-length-230\"/><path d=\"M184 8v176\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
},
|
||||
"arty-stroke-24-panel-left": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M8 96l64 64\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M8 96l64-64\" stroke-linejoin=\"round\" class=\"animation-delay-11 animation-duration-3 animate-stroke stroke-length-102\"/><path d=\"M156 96H16\" class=\"animation-delay-6 animation-duration-5 animate-stroke stroke-length-230\"/><path d=\"M184 8v176\" stroke-linejoin=\"round\" class=\"animation-delay-0 animation-duration-6 animate-stroke stroke-length-230\"/></g>"
|
||||
},
|
||||
"arty-stroke-24-search": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M72 120L8 184\" class=\"animation-delay-11 animation-duration-2 animate-stroke stroke-length-102\"/><path d=\"M75.073 117.383C63.29 105.695 56 89.544 56 72c0-35.346 28.571-64 64-64s64 28.654 64 64c0 35.346-28.577 64-64 64-17.897 0-33.385-7.167-44.927-18.617z\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-500\"/></g>"
|
||||
"arty-animated:24-search": {
|
||||
"body": "<g stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" fill=\"none\" fill-rule=\"evenodd\"><path d=\"M72 120L8 184\" class=\"animation-delay-11 animation-duration-2 animate-stroke stroke-length-102\"/><path d=\"M75.073 117.383C63.29 105.695 56 89.544 56 72c0-35.346 28.571-64 64-64s64 28.654 64 64c0 35.346-28.577 64-64 64-17.897 0-33.385-7.167-44.927-18.617z\" class=\"animation-delay-0 animation-duration-11 animate-stroke stroke-length-500\"/></g>",
|
||||
"width": 192,
|
||||
"height": 192
|
||||
}
|
||||
},
|
||||
"aliases": {
|
||||
"arty-stroke-16-arrow-right": {
|
||||
"parent": "arty-stroke-16-arrow-left",
|
||||
"arty-animated:16-arrow-right": {
|
||||
"parent": "arty-animated:16-arrow-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-arrow-up": {
|
||||
"parent": "arty-stroke-16-arrow-left",
|
||||
"arty-animated:16-arrow-up": {
|
||||
"parent": "arty-animated:16-arrow-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-arrow-down": {
|
||||
"parent": "arty-stroke-16-arrow-left",
|
||||
"arty-animated:16-arrow-down": {
|
||||
"parent": "arty-animated:16-arrow-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-16-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-stroke-16-arrows-from-2-corners",
|
||||
"arty-animated:16-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-animated:16-arrows-from-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-arrows-vertical": {
|
||||
"parent": "arty-stroke-16-arrows-horizontal",
|
||||
"arty-animated:16-arrows-vertical": {
|
||||
"parent": "arty-animated:16-arrows-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-16-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-stroke-16-arrows-to-2-corners",
|
||||
"arty-animated:16-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-animated:16-arrows-to-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-caret-down-outline": {
|
||||
"parent": "arty-stroke-16-caret-up-outline",
|
||||
"arty-animated:16-caret-down-outline": {
|
||||
"parent": "arty-animated:16-caret-up-outline",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-caret-left-outline": {
|
||||
"parent": "arty-stroke-16-caret-up-outline",
|
||||
"arty-animated:16-caret-left-outline": {
|
||||
"parent": "arty-animated:16-caret-up-outline",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-caret-right-outline": {
|
||||
"parent": "arty-stroke-16-caret-up-outline",
|
||||
"arty-animated:16-caret-right-outline": {
|
||||
"parent": "arty-animated:16-caret-up-outline",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-16-caret-down": {
|
||||
"parent": "arty-stroke-16-caret-up",
|
||||
"arty-animated:16-caret-down": {
|
||||
"parent": "arty-animated:16-caret-up",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-caret-left": {
|
||||
"parent": "arty-stroke-16-caret-up",
|
||||
"arty-animated:16-caret-left": {
|
||||
"parent": "arty-animated:16-caret-up",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-caret-right": {
|
||||
"parent": "arty-stroke-16-caret-up",
|
||||
"arty-animated:16-caret-right": {
|
||||
"parent": "arty-animated:16-caret-up",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-16-carets-horizontal-outline": {
|
||||
"parent": "arty-stroke-16-carets-vertical-outline",
|
||||
"arty-animated:16-carets-horizontal-outline": {
|
||||
"parent": "arty-animated:16-carets-vertical-outline",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-16-carets-horizontal": {
|
||||
"parent": "arty-stroke-16-carets-vertical",
|
||||
"arty-animated:16-carets-horizontal": {
|
||||
"parent": "arty-animated:16-carets-vertical",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-16-chevron-right": {
|
||||
"parent": "arty-stroke-16-chevron-left",
|
||||
"arty-animated:16-chevron-right": {
|
||||
"parent": "arty-animated:16-chevron-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-chevron-up": {
|
||||
"parent": "arty-stroke-16-chevron-left",
|
||||
"arty-animated:16-chevron-up": {
|
||||
"parent": "arty-animated:16-chevron-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-chevron-down": {
|
||||
"parent": "arty-stroke-16-chevron-left",
|
||||
"arty-animated:16-chevron-down": {
|
||||
"parent": "arty-animated:16-chevron-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-16-double-arrow-vertical": {
|
||||
"parent": "arty-stroke-16-double-arrow-horizontal",
|
||||
"arty-animated:16-double-arrow-vertical": {
|
||||
"parent": "arty-animated:16-double-arrow-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-16-filters-horizontal": {
|
||||
"parent": "arty-stroke-16-filters",
|
||||
"arty-animated:16-filters-horizontal": {
|
||||
"parent": "arty-animated:16-filters",
|
||||
"rotate": 3,
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-list-3-outline-rtl": {
|
||||
"parent": "arty-stroke-16-list-3-outline",
|
||||
"arty-animated:16-list-3-outline-rtl": {
|
||||
"parent": "arty-animated:16-list-3-outline",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-list-3-rtl": {
|
||||
"parent": "arty-stroke-16-list-3",
|
||||
"arty-animated:16-list-3-rtl": {
|
||||
"parent": "arty-animated:16-list-3",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-panel-right": {
|
||||
"parent": "arty-stroke-16-panel-left",
|
||||
"arty-animated:16-panel-right": {
|
||||
"parent": "arty-animated:16-panel-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-16-panel-up": {
|
||||
"parent": "arty-stroke-16-panel-left",
|
||||
"arty-animated:16-panel-up": {
|
||||
"parent": "arty-animated:16-panel-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-16-panel-down": {
|
||||
"parent": "arty-stroke-16-panel-left",
|
||||
"arty-animated:16-panel-down": {
|
||||
"parent": "arty-animated:16-panel-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-16-search-rotated": {
|
||||
"parent": "arty-stroke-16-search",
|
||||
"arty-animated:16-search-rotated": {
|
||||
"parent": "arty-animated:16-search",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-arrow-right": {
|
||||
"parent": "arty-stroke-20-arrow-left",
|
||||
"arty-animated:20-arrow-right": {
|
||||
"parent": "arty-animated:20-arrow-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-20-arrow-up": {
|
||||
"parent": "arty-stroke-20-arrow-left",
|
||||
"arty-animated:20-arrow-up": {
|
||||
"parent": "arty-animated:20-arrow-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-arrow-down": {
|
||||
"parent": "arty-stroke-20-arrow-left",
|
||||
"arty-animated:20-arrow-down": {
|
||||
"parent": "arty-animated:20-arrow-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-stroke-20-arrows-from-2-corners",
|
||||
"arty-animated:20-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-animated:20-arrows-from-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-20-arrows-vertical": {
|
||||
"parent": "arty-stroke-20-arrows-horizontal",
|
||||
"arty-animated:20-arrows-vertical": {
|
||||
"parent": "arty-animated:20-arrows-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-20-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-stroke-20-arrows-to-2-corners",
|
||||
"arty-animated:20-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-animated:20-arrows-to-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-20-caret-down-outline": {
|
||||
"parent": "arty-stroke-20-caret-up-outline",
|
||||
"arty-animated:20-caret-down-outline": {
|
||||
"parent": "arty-animated:20-caret-up-outline",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-caret-left-outline": {
|
||||
"parent": "arty-stroke-20-caret-up-outline",
|
||||
"arty-animated:20-caret-left-outline": {
|
||||
"parent": "arty-animated:20-caret-up-outline",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-caret-right-outline": {
|
||||
"parent": "arty-stroke-20-caret-up-outline",
|
||||
"arty-animated:20-caret-right-outline": {
|
||||
"parent": "arty-animated:20-caret-up-outline",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-20-caret-down": {
|
||||
"parent": "arty-stroke-20-caret-up",
|
||||
"arty-animated:20-caret-down": {
|
||||
"parent": "arty-animated:20-caret-up",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-caret-left": {
|
||||
"parent": "arty-stroke-20-caret-up",
|
||||
"arty-animated:20-caret-left": {
|
||||
"parent": "arty-animated:20-caret-up",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-caret-right": {
|
||||
"parent": "arty-stroke-20-caret-up",
|
||||
"arty-animated:20-caret-right": {
|
||||
"parent": "arty-animated:20-caret-up",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-20-carets-horizontal-outline": {
|
||||
"parent": "arty-stroke-20-carets-vertical-outline",
|
||||
"arty-animated:20-carets-horizontal-outline": {
|
||||
"parent": "arty-animated:20-carets-vertical-outline",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-carets-horizontal": {
|
||||
"parent": "arty-stroke-20-carets-vertical",
|
||||
"arty-animated:20-carets-horizontal": {
|
||||
"parent": "arty-animated:20-carets-vertical",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-chevron-right": {
|
||||
"parent": "arty-stroke-20-chevron-left",
|
||||
"arty-animated:20-chevron-right": {
|
||||
"parent": "arty-animated:20-chevron-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-20-chevron-up": {
|
||||
"parent": "arty-stroke-20-chevron-left",
|
||||
"arty-animated:20-chevron-up": {
|
||||
"parent": "arty-animated:20-chevron-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-chevron-down": {
|
||||
"parent": "arty-stroke-20-chevron-left",
|
||||
"arty-animated:20-chevron-down": {
|
||||
"parent": "arty-animated:20-chevron-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-double-arrow-vertical": {
|
||||
"parent": "arty-stroke-20-double-arrow-horizontal",
|
||||
"arty-animated:20-double-arrow-vertical": {
|
||||
"parent": "arty-animated:20-double-arrow-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-20-panel-right": {
|
||||
"parent": "arty-stroke-20-panel-left",
|
||||
"arty-animated:20-panel-right": {
|
||||
"parent": "arty-animated:20-panel-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-20-panel-up": {
|
||||
"parent": "arty-stroke-20-panel-left",
|
||||
"arty-animated:20-panel-up": {
|
||||
"parent": "arty-animated:20-panel-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-20-panel-down": {
|
||||
"parent": "arty-stroke-20-panel-left",
|
||||
"arty-animated:20-panel-down": {
|
||||
"parent": "arty-animated:20-panel-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-20-search-rotated": {
|
||||
"parent": "arty-stroke-20-search",
|
||||
"arty-animated:20-search-rotated": {
|
||||
"parent": "arty-animated:20-search",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-arrow-right": {
|
||||
"parent": "arty-stroke-24-arrow-left",
|
||||
"arty-animated:24-arrow-right": {
|
||||
"parent": "arty-animated:24-arrow-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-arrow-up": {
|
||||
"parent": "arty-stroke-24-arrow-left",
|
||||
"arty-animated:24-arrow-up": {
|
||||
"parent": "arty-animated:24-arrow-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-arrow-down": {
|
||||
"parent": "arty-stroke-24-arrow-left",
|
||||
"arty-animated:24-arrow-down": {
|
||||
"parent": "arty-animated:24-arrow-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-stroke-24-arrows-from-2-corners",
|
||||
"arty-animated:24-arrows-from-2-corners-rotated": {
|
||||
"parent": "arty-animated:24-arrows-from-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-arrows-vertical": {
|
||||
"parent": "arty-stroke-24-arrows-horizontal",
|
||||
"arty-animated:24-arrows-vertical": {
|
||||
"parent": "arty-animated:24-arrows-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-24-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-stroke-24-arrows-to-2-corners",
|
||||
"arty-animated:24-arrows-to-2-corners-rotated": {
|
||||
"parent": "arty-animated:24-arrows-to-2-corners",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-caret-down-outline": {
|
||||
"parent": "arty-stroke-24-caret-up-outline",
|
||||
"arty-animated:24-caret-down-outline": {
|
||||
"parent": "arty-animated:24-caret-up-outline",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-caret-left-outline": {
|
||||
"parent": "arty-stroke-24-caret-up-outline",
|
||||
"arty-animated:24-caret-left-outline": {
|
||||
"parent": "arty-animated:24-caret-up-outline",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-caret-right-outline": {
|
||||
"parent": "arty-stroke-24-caret-up-outline",
|
||||
"arty-animated:24-caret-right-outline": {
|
||||
"parent": "arty-animated:24-caret-up-outline",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-24-caret-down": {
|
||||
"parent": "arty-stroke-24-caret-up",
|
||||
"arty-animated:24-caret-down": {
|
||||
"parent": "arty-animated:24-caret-up",
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-caret-left": {
|
||||
"parent": "arty-stroke-24-caret-up",
|
||||
"arty-animated:24-caret-left": {
|
||||
"parent": "arty-animated:24-caret-up",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-caret-right": {
|
||||
"parent": "arty-stroke-24-caret-up",
|
||||
"arty-animated:24-caret-right": {
|
||||
"parent": "arty-animated:24-caret-up",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-24-carets-horizontal-outline": {
|
||||
"parent": "arty-stroke-24-carets-vertical-outline",
|
||||
"arty-animated:24-carets-horizontal-outline": {
|
||||
"parent": "arty-animated:24-carets-vertical-outline",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-carets-horizontal": {
|
||||
"parent": "arty-stroke-24-carets-vertical",
|
||||
"arty-animated:24-carets-horizontal": {
|
||||
"parent": "arty-animated:24-carets-vertical",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-chevron-right": {
|
||||
"parent": "arty-stroke-24-chevron-left",
|
||||
"arty-animated:24-chevron-right": {
|
||||
"parent": "arty-animated:24-chevron-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-chevron-up": {
|
||||
"parent": "arty-stroke-24-chevron-left",
|
||||
"arty-animated:24-chevron-up": {
|
||||
"parent": "arty-animated:24-chevron-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-chevron-down": {
|
||||
"parent": "arty-stroke-24-chevron-left",
|
||||
"arty-animated:24-chevron-down": {
|
||||
"parent": "arty-animated:24-chevron-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-double-arrow-vertical": {
|
||||
"parent": "arty-stroke-24-double-arrow-horizontal",
|
||||
"arty-animated:24-double-arrow-vertical": {
|
||||
"parent": "arty-animated:24-double-arrow-horizontal",
|
||||
"rotate": 1
|
||||
},
|
||||
"arty-stroke-24-filters-horizontal": {
|
||||
"parent": "arty-stroke-24-filters",
|
||||
"arty-animated:24-filters-horizontal": {
|
||||
"parent": "arty-animated:24-filters",
|
||||
"rotate": 3,
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-list-3-outline-rtl": {
|
||||
"parent": "arty-stroke-24-list-3-outline",
|
||||
"arty-animated:24-list-3-outline-rtl": {
|
||||
"parent": "arty-animated:24-list-3-outline",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-list-3-rtl": {
|
||||
"parent": "arty-stroke-24-list-3",
|
||||
"arty-animated:24-list-3-rtl": {
|
||||
"parent": "arty-animated:24-list-3",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-panel-right": {
|
||||
"parent": "arty-stroke-24-panel-left",
|
||||
"arty-animated:24-panel-right": {
|
||||
"parent": "arty-animated:24-panel-left",
|
||||
"hFlip": true
|
||||
},
|
||||
"arty-stroke-24-panel-up": {
|
||||
"parent": "arty-stroke-24-panel-left",
|
||||
"arty-animated:24-panel-up": {
|
||||
"parent": "arty-animated:24-panel-left",
|
||||
"rotate": 1,
|
||||
"vFlip": true
|
||||
},
|
||||
"arty-stroke-24-panel-down": {
|
||||
"parent": "arty-stroke-24-panel-left",
|
||||
"arty-animated:24-panel-down": {
|
||||
"parent": "arty-animated:24-panel-left",
|
||||
"rotate": 3
|
||||
},
|
||||
"arty-stroke-24-search-rotated": {
|
||||
"parent": "arty-stroke-24-search",
|
||||
"arty-animated:24-search-rotated": {
|
||||
"parent": "arty-animated:24-search",
|
||||
"rotate": 3
|
||||
}
|
||||
},
|
||||
"width": 192,
|
||||
"height": 192
|
||||
"width": 128,
|
||||
"height": 128
|
||||
}
|
||||
10
package.json
10
package.json
|
|
@ -1,16 +1,20 @@
|
|||
{
|
||||
"name": "simple-svg-website-icons",
|
||||
"version": "0.1.0",
|
||||
"version": "1.0.0-beta1",
|
||||
"description": "Node.js version of icons.simplesvg.com",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "node app.js"
|
||||
"start": "node app.js",
|
||||
"test": "mocha tests/*_test.js"
|
||||
},
|
||||
"author": "Vjacheslav Trushkin",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"express": "^4.16.2",
|
||||
"simple-svg-cdn": "^0.3.2",
|
||||
"simple-svg-icons": "git+https://github.com/simplesvg/icons.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "^4.1.2",
|
||||
"mocha": "^4.0.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,277 @@
|
|||
"use strict";
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const defaultAttributes = {
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: 16,
|
||||
height: 16,
|
||||
rotate: 0,
|
||||
hFlip: false,
|
||||
vFlip: false
|
||||
};
|
||||
|
||||
/**
|
||||
* Class to represent one collection of icons
|
||||
*/
|
||||
class Collection {
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {string} [prefix] Optional prefix
|
||||
*/
|
||||
constructor(prefix) {
|
||||
this.prefix = typeof prefix === 'string' ? prefix : null;
|
||||
this.loaded = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load from JSON data
|
||||
*
|
||||
* @param {string|object} data
|
||||
*/
|
||||
loadJSON(data) {
|
||||
if (typeof data === 'string') {
|
||||
try {
|
||||
data = JSON.parse(data);
|
||||
} catch (err) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Validate
|
||||
if (typeof data !== 'object' || data.icons === void 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var {{icons, aliases, prefix}} data **/
|
||||
|
||||
// DeOptimize
|
||||
Object.keys(data).forEach(prop => {
|
||||
switch (typeof data[prop]) {
|
||||
case 'number':
|
||||
case 'boolean':
|
||||
let value = data[prop];
|
||||
Object.keys(data.icons).forEach(key => {
|
||||
if (data.icons[key][prop] === void 0) {
|
||||
data.icons[key][prop] = value;
|
||||
}
|
||||
});
|
||||
delete data[prop];
|
||||
}
|
||||
});
|
||||
|
||||
// Remove prefix from icons
|
||||
if (data.prefix === void 0 || data.prefix === '') {
|
||||
if (this.prefix === null) {
|
||||
return;
|
||||
}
|
||||
let error = false,
|
||||
sliceLength = this.prefix.length + 1;
|
||||
|
||||
['icons', 'aliases'].forEach(prop => {
|
||||
if (error || data[prop] === void 0) {
|
||||
return;
|
||||
}
|
||||
let newItems = {};
|
||||
Object.keys(data[prop]).forEach(key => {
|
||||
if (error || key.length <= sliceLength || key.slice(0, this.prefix.length) !== this.prefix) {
|
||||
error = true;
|
||||
return;
|
||||
}
|
||||
let newKey = key.slice(sliceLength);
|
||||
if (data[prop][key].parent !== void 0) {
|
||||
let parent = data[prop][key].parent;
|
||||
if (parent.length <= sliceLength || parent.slice(0, this.prefix.length) !== this.prefix) {
|
||||
error = true;
|
||||
return;
|
||||
}
|
||||
data[prop][key].parent = parent.slice(sliceLength);
|
||||
}
|
||||
newItems[newKey] = data[prop][key];
|
||||
});
|
||||
data[prop] = newItems;
|
||||
});
|
||||
if (error) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
this.prefix = data.prefix;
|
||||
}
|
||||
|
||||
// Add aliases and icons
|
||||
this.icons = data.icons;
|
||||
this.aliases = data.aliases === void 0 ? {} : data.aliases;
|
||||
this.loaded = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load collection from file
|
||||
*
|
||||
* @param {string} file File or JSON
|
||||
* @returns {Promise}
|
||||
*/
|
||||
loadFile(file) {
|
||||
return new Promise((fulfill, reject) => {
|
||||
// Load file
|
||||
fs.readFile(file, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
this.loadJSON(data);
|
||||
if (this.loaded) {
|
||||
fulfill(this);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Functions used by getIcons()
|
||||
/**
|
||||
* Check if icon has already been copied
|
||||
*
|
||||
* @param {string} name
|
||||
* @returns {boolean}
|
||||
* @private
|
||||
*/
|
||||
_copied(name) {
|
||||
return !!(this._result.icons[name] || this._result.aliases[name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy icon
|
||||
*
|
||||
* @param {string} name
|
||||
* @param {number} iteration
|
||||
* @returns {boolean}
|
||||
* @private
|
||||
*/
|
||||
_copy(name, iteration) {
|
||||
if (this._copied(name) || iteration > 5) {
|
||||
return true;
|
||||
}
|
||||
if (this.icons[name] !== void 0) {
|
||||
this._result.icons[name] = this.icons[name];
|
||||
return true;
|
||||
}
|
||||
if (this.aliases && this.aliases[name] !== void 0) {
|
||||
if (!this._copy(this.aliases[name].parent, iteration + 1)) {
|
||||
return false;
|
||||
}
|
||||
this._result.aliases[name] = this.aliases[name];
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data for selected icons
|
||||
* This function assumes collection has been loaded. Verification should be done during loading
|
||||
*
|
||||
* @param {Array} icons
|
||||
* @returns {{icons: {}, aliases: {}}}
|
||||
*/
|
||||
getIcons(icons) {
|
||||
this._result = {
|
||||
prefix: this.prefix,
|
||||
icons: {},
|
||||
aliases: {}
|
||||
};
|
||||
|
||||
icons.forEach(icon => this._copy(icon, 0));
|
||||
return this._result;
|
||||
}
|
||||
|
||||
// Functions used by getIcon()
|
||||
/**
|
||||
* Merge icon data with this._result
|
||||
*
|
||||
* @param {object} data
|
||||
* @private
|
||||
*/
|
||||
_mergeIcon(data) {
|
||||
Object.keys(data).forEach(key => {
|
||||
if (this._result[key] === void 0) {
|
||||
this._result[key] = data[key];
|
||||
return;
|
||||
}
|
||||
// Merge transformations, ignore the rest because alias overwrites parent items's attributes
|
||||
switch (key) {
|
||||
case 'rotate':
|
||||
this._result.rotate += data.rotate;
|
||||
break;
|
||||
|
||||
case 'hFlip':
|
||||
case 'vFlip':
|
||||
this._result[key] = this._result[key] !== data[key];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add missing properties to object
|
||||
*
|
||||
* @param {object} data
|
||||
* @returns {object}
|
||||
* @private
|
||||
*/
|
||||
static _addMissingAttributes(data) {
|
||||
let item = Object.assign({}, defaultAttributes, data);
|
||||
if (item.inlineTop === void 0) {
|
||||
item.inlineTop = item.top;
|
||||
}
|
||||
if (item.inlineHeight === void 0) {
|
||||
item.inlineHeight = item.height;
|
||||
}
|
||||
if (item.verticalAlign === void 0) {
|
||||
// -0.143 if icon is designed for 14px height,
|
||||
// otherwise assume icon is designed for 16px height
|
||||
item.verticalAlign = item.height % 7 === 0 && item.height % 8 !== 0 ? -0.143 : -0.125;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get icon data for SVG
|
||||
* This function assumes collection has been loaded. Verification should be done during loading
|
||||
*
|
||||
* @param {string} name
|
||||
* @returns {object|null}
|
||||
*/
|
||||
getIcon(name) {
|
||||
if (this.icons[name] !== void 0) {
|
||||
return Collection._addMissingAttributes(this.icons[name]);
|
||||
}
|
||||
|
||||
// Alias
|
||||
if (this.aliases[name] === void 0) {
|
||||
return null;
|
||||
}
|
||||
this._result = Object.assign({}, this.aliases[name]);
|
||||
|
||||
let parent = this.aliases[name].parent,
|
||||
iteration = 0;
|
||||
|
||||
while (iteration < 5) {
|
||||
if (this.icons[parent] !== void 0) {
|
||||
// Merge with icon
|
||||
this._mergeIcon(this.icons[parent]);
|
||||
return Collection._addMissingAttributes(this._result);
|
||||
}
|
||||
|
||||
if (this.aliases[parent] === void 0) {
|
||||
return null;
|
||||
}
|
||||
this._mergeIcon(this.aliases[parent]);
|
||||
parent = this.aliases[parent].parent;
|
||||
iteration ++;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Collection;
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
"use strict";
|
||||
|
||||
const fs = require('fs');
|
||||
const Collection = require('./collection');
|
||||
|
||||
/**
|
||||
* Class to represent collection of collections
|
||||
*/
|
||||
class Collections {
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {boolean} [log] Optional function for logging loading process
|
||||
*/
|
||||
constructor(log) {
|
||||
this._log = typeof log === 'function' ? log : null;
|
||||
this.items = {};
|
||||
this._loadQueue = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add directory to loading queue
|
||||
*
|
||||
* @param {string} dir
|
||||
*/
|
||||
addDirectory(dir) {
|
||||
this._loadQueue.push({
|
||||
type: 'dir',
|
||||
dir: dir.slice(-1) === '/' ? dir.slice(0, dir.length - 1) : dir
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add file to loading queue
|
||||
*
|
||||
* @param {string} filename
|
||||
*/
|
||||
addFile(filename) {
|
||||
this._loadQueue.push({
|
||||
type: 'file',
|
||||
filename: filename
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load queue
|
||||
*
|
||||
* Promise will never reject because single file should not break app,
|
||||
* it will log failures using "log" function from constructor
|
||||
*
|
||||
* @returns {Promise}
|
||||
*/
|
||||
load() {
|
||||
return new Promise((fulfill, reject) => {
|
||||
let promises = [];
|
||||
|
||||
this._loadQueue.forEach(item => {
|
||||
switch (item.type) {
|
||||
case 'dir':
|
||||
promises.push(this._loadDir(item.dir));
|
||||
break;
|
||||
|
||||
case 'file':
|
||||
promises.push(this._loadFile(item.filename));
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
Promise.all(promises).then(() => {
|
||||
fulfill(this);
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load directory
|
||||
*
|
||||
* @param {string} dir
|
||||
* @returns {Promise}
|
||||
* @private
|
||||
*/
|
||||
_loadDir(dir) {
|
||||
return new Promise((fulfill, reject) => {
|
||||
fs.readdir(dir, (err, files) => {
|
||||
if (err) {
|
||||
if (this._log !== null) {
|
||||
this._log('Error loading directory: ' + dir);
|
||||
}
|
||||
fulfill(false);
|
||||
} else {
|
||||
let promises = [];
|
||||
files.forEach(file => {
|
||||
if (file.slice(-5) !== '.json') {
|
||||
return;
|
||||
}
|
||||
promises.push(this._loadFile(dir + '/' + file));
|
||||
});
|
||||
|
||||
// Load all promises
|
||||
Promise.all(promises).then(res => {
|
||||
fulfill(true);
|
||||
}).catch(err => {
|
||||
fulfill(false);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load file
|
||||
*
|
||||
* @param {string} filename Full filename
|
||||
* @returns {Promise}
|
||||
*/
|
||||
_loadFile(filename) {
|
||||
return new Promise((fulfill, reject) => {
|
||||
let file = filename.split('/').pop(),
|
||||
fileParts = file.split('.');
|
||||
if (fileParts.length !== 2) {
|
||||
fulfill(false);
|
||||
return;
|
||||
}
|
||||
|
||||
let prefix = fileParts[0],
|
||||
collection = new Collection(prefix);
|
||||
|
||||
collection.loadFile(filename).then(() => {
|
||||
if (!collection.loaded) {
|
||||
if (this._log !== null) {
|
||||
this._log('Failed to load collection: ' + filename);
|
||||
}
|
||||
fulfill(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (collection.prefix !== prefix) {
|
||||
if (this._log !== null) {
|
||||
this._log('Collection prefix does not match: ' + collection.prefix + ' in file ' + file);
|
||||
}
|
||||
fulfill(false);
|
||||
return;
|
||||
}
|
||||
|
||||
let count = Object.keys(collection.icons).length;
|
||||
if (!count) {
|
||||
if (this._log !== null) {
|
||||
this._log('Collection is empty: ' + file);
|
||||
}
|
||||
fulfill(false);
|
||||
return;
|
||||
}
|
||||
|
||||
this.items[prefix] = collection;
|
||||
if (this._log !== null) {
|
||||
this._log('Loaded collection ' + prefix + ' from ' + file + ' (' + count + ' icons)');
|
||||
}
|
||||
fulfill(true);
|
||||
}).catch(() => {
|
||||
fulfill(false);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Find collection
|
||||
*
|
||||
* @param {string} prefix
|
||||
* @returns {Collection|null}
|
||||
*/
|
||||
find(prefix) {
|
||||
return this.items[prefix] === void 0 ? null : this.items[prefix];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Collections;
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
"use strict";
|
||||
|
||||
const generateSVG = require('./svg');
|
||||
|
||||
/**
|
||||
* Regexp for checking callback attribute
|
||||
*
|
||||
* @type {RegExp}
|
||||
* @private
|
||||
*/
|
||||
const _callbackMatch = /^[a-z0-9_.]+$/i;
|
||||
|
||||
/**
|
||||
* Generate data for query
|
||||
*
|
||||
* @param {Collection} collection
|
||||
* @param {string} query Query string after last / without extension
|
||||
* @param {string} ext Extension
|
||||
* @param {object} params Parameters
|
||||
* @returns {number|object}
|
||||
*/
|
||||
module.exports = (collection, query, ext, params) => {
|
||||
switch (ext) {
|
||||
case 'svg':
|
||||
// Generate SVG
|
||||
// query = icon name
|
||||
let icon = collection.getIcon(query);
|
||||
if (icon === null) {
|
||||
return 404;
|
||||
}
|
||||
return {
|
||||
filename: query + '.svg',
|
||||
type: 'image/svg+xml; charset=utf-8',
|
||||
body: generateSVG(icon, params)
|
||||
};
|
||||
|
||||
case 'js':
|
||||
case 'json':
|
||||
if (query !== 'icons' || typeof params.icons !== 'string') {
|
||||
return 404;
|
||||
}
|
||||
|
||||
let result = collection.getIcons(params.icons.split(','));
|
||||
|
||||
if (!Object.keys(result.icons).length) {
|
||||
return 404;
|
||||
}
|
||||
if (!Object.keys(result.aliases).length) {
|
||||
delete result.aliases;
|
||||
}
|
||||
result = JSON.stringify(result);
|
||||
|
||||
if (ext === 'js') {
|
||||
let callback;
|
||||
if (params.callback !== void 0) {
|
||||
callback = params.callback;
|
||||
if (!callback.match(_callbackMatch)) {
|
||||
return 400;
|
||||
}
|
||||
} else {
|
||||
callback = 'SimpleSVG._loaderCallback';
|
||||
}
|
||||
return {
|
||||
type: 'application/javascript; charset=utf-8',
|
||||
body: callback + '(' + result + ')'
|
||||
};
|
||||
}
|
||||
return {
|
||||
type: 'application/json; charset=utf-8',
|
||||
body: result
|
||||
};
|
||||
|
||||
default:
|
||||
return 404;
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* This file is part of the simple-svg-cdn package.
|
||||
*
|
||||
* (c) Vjacheslav Trushkin <cyberalien@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
const _unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g,
|
||||
_unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
|
||||
|
||||
/**
|
||||
* Calculate second dimension when only 1 dimension is set
|
||||
*
|
||||
* @param {string|number} size One dimension (such as width)
|
||||
* @param {number} ratio Width/height ratio.
|
||||
* If size == width, ratio = height/width
|
||||
* If size == height, ratio = width/height
|
||||
* @param {number} [precision] Floating number precision in result to minimize output. Default = 100
|
||||
* @return {string|number|null} Another dimension, null on error
|
||||
*/
|
||||
module.exports = (size, ratio, precision) => {
|
||||
if (ratio === 1) {
|
||||
return size;
|
||||
}
|
||||
|
||||
precision = precision === void 0 ? 100 : precision;
|
||||
if (typeof size === 'number') {
|
||||
return Math.ceil(size * ratio * precision) / precision;
|
||||
}
|
||||
|
||||
// split code into sets of strings and numbers
|
||||
let split = size.split(_unitsSplit);
|
||||
if (split === null || !split.length) {
|
||||
return null;
|
||||
}
|
||||
let results = [],
|
||||
code = split.shift(),
|
||||
isNumber = _unitsTest.test(code),
|
||||
num;
|
||||
|
||||
while (true) {
|
||||
if (isNumber) {
|
||||
num = parseFloat(code);
|
||||
if (isNaN(num)) {
|
||||
results.push(code);
|
||||
} else {
|
||||
results.push(Math.ceil(num * ratio * precision) / precision);
|
||||
}
|
||||
} else {
|
||||
results.push(code);
|
||||
}
|
||||
|
||||
// next
|
||||
code = split.shift();
|
||||
if (code === void 0) {
|
||||
return results.join('');
|
||||
}
|
||||
isNumber = !isNumber;
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* This file is part of the simple-svg-cdn package.
|
||||
*
|
||||
* (c) Vjacheslav Trushkin <cyberalien@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Unique id counter
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
let idCounter = 0;
|
||||
|
||||
/**
|
||||
* Replace IDs in SVG output with unique IDs
|
||||
* Fast replacement without parsing XML, assuming commonly used patterns.
|
||||
*
|
||||
* @param {string} body
|
||||
* @return {string}
|
||||
*/
|
||||
module.exports = body => {
|
||||
let regex = /\sid="(\S+)"/g,
|
||||
ids = [],
|
||||
match, prefix;
|
||||
|
||||
function strReplace(search, replace, subject) {
|
||||
let pos = 0;
|
||||
|
||||
while ((pos = subject.indexOf(search, pos)) !== -1) {
|
||||
subject = subject.slice(0, pos) + replace + subject.slice(pos + search.length);
|
||||
pos += replace.length;
|
||||
}
|
||||
|
||||
return subject;
|
||||
}
|
||||
|
||||
// Find all IDs
|
||||
while (match = regex.exec(body)) {
|
||||
ids.push(match[1]);
|
||||
}
|
||||
if (!ids.length) {
|
||||
return body;
|
||||
}
|
||||
|
||||
prefix = 'SimpleSVGId-' + Date.now().toString(16) + '-' + (Math.random() * 0x1000000 | 0).toString(16) + '-';
|
||||
|
||||
// Replace with unique ids
|
||||
ids.forEach(function(id) {
|
||||
let newID = prefix + idCounter;
|
||||
idCounter ++;
|
||||
body = strReplace('="' + id + '"', '="' + newID + '"', body);
|
||||
body = strReplace('="#' + id + '"', '="#' + newID + '"', body);
|
||||
body = strReplace('(#' + id + ')', '(#' + newID + ')', body);
|
||||
});
|
||||
|
||||
return body;
|
||||
};
|
||||
|
|
@ -0,0 +1,272 @@
|
|||
"use strict";
|
||||
|
||||
const replaceIDs = require('./svg-ids');
|
||||
const calculateDimension = require('./svg-dimensions');
|
||||
|
||||
/**
|
||||
* Get preserveAspectRatio attribute value
|
||||
*
|
||||
* @param {object} align
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
function _align(align) {
|
||||
let result;
|
||||
switch (align.horizontal) {
|
||||
case 'left':
|
||||
result = 'xMin';
|
||||
break;
|
||||
|
||||
case 'right':
|
||||
result = 'xMax';
|
||||
break;
|
||||
|
||||
default:
|
||||
result = 'xMid';
|
||||
}
|
||||
switch (align.vertical) {
|
||||
case 'top':
|
||||
result += 'YMin';
|
||||
break;
|
||||
|
||||
case 'bottom':
|
||||
result += 'YMax';
|
||||
break;
|
||||
|
||||
default:
|
||||
result += 'YMid';
|
||||
}
|
||||
result += align.slice ? ' slice' : ' meet';
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate SVG
|
||||
*
|
||||
* @param {object} item Icon data
|
||||
* @param {object} props Query string
|
||||
* @returns {string}
|
||||
*/
|
||||
module.exports = (item, props) => {
|
||||
// Set data
|
||||
let align = {
|
||||
horizontal: 'center',
|
||||
vertical: 'middle',
|
||||
slice: false
|
||||
};
|
||||
let transform = {
|
||||
rotate: item.rotate,
|
||||
hFlip: item.hFlip,
|
||||
vFlip: item.vFlip
|
||||
};
|
||||
let style = '';
|
||||
|
||||
let attributes = {};
|
||||
|
||||
// Get width/height
|
||||
let inline = props.inline === true || props.inline === 'true' || props.inline === '1';
|
||||
|
||||
let box = {
|
||||
left: item.left,
|
||||
top: inline ? item.inlineTop : item.top,
|
||||
width: item.width,
|
||||
height: inline ? item.inlineHeight : item.height
|
||||
};
|
||||
|
||||
// Transformations
|
||||
['hFlip', 'vFlip'].forEach(key => {
|
||||
if (props[key] !== void 0 && (props[key] === true || props[key] === 'true' || props[key] === '1')) {
|
||||
transform[key] = !transform[key];
|
||||
}
|
||||
});
|
||||
if (props.flip !== void 0) {
|
||||
props.flip.toLowerCase().split(/[\s,]+/).forEach(value => {
|
||||
switch (value) {
|
||||
case 'horizontal':
|
||||
transform.hFlip = !transform.hFlip;
|
||||
break;
|
||||
|
||||
case 'vertical':
|
||||
transform.vFlip = !transform.vFlip;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (props.rotate !== void 0) {
|
||||
let value = props.rotate;
|
||||
if (typeof value === 'number') {
|
||||
transform.rotate += value;
|
||||
} else if (typeof value === 'string') {
|
||||
let units = value.replace(/^-?[0-9.]*/, '');
|
||||
if (units === '') {
|
||||
value = parseInt(value);
|
||||
if (!isNaN(value)) {
|
||||
transform.rotate += value;
|
||||
}
|
||||
} else if (units !== value) {
|
||||
let split = false;
|
||||
switch (units) {
|
||||
case '%':
|
||||
// 25% -> 1, 50% -> 2, ...
|
||||
split = 25;
|
||||
break;
|
||||
|
||||
case 'deg':
|
||||
// 90deg -> 1, 180deg -> 2, ...
|
||||
split = 90;
|
||||
}
|
||||
if (split) {
|
||||
value = parseInt(value.slice(0, value.length - units.length));
|
||||
if (!isNaN(value)) {
|
||||
transform.rotate += Math.round(value / split);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Apply transformations to box
|
||||
let transformations = [],
|
||||
tempValue;
|
||||
if (transform.hFlip) {
|
||||
if (transform.vFlip) {
|
||||
transform.rotate += 2;
|
||||
} else {
|
||||
// Horizontal flip
|
||||
transformations.push('translate(' + (box.width + box.left) + ' ' + (0 - box.top) + ')');
|
||||
transformations.push('scale(-1 1)');
|
||||
box.top = box.left = 0;
|
||||
}
|
||||
} else if (transform.vFlip) {
|
||||
// Vertical flip
|
||||
transformations.push('translate(' + (0 - box.left) + ' ' + (box.height + box.top) + ')');
|
||||
transformations.push('scale(1 -1)');
|
||||
box.top = box.left = 0;
|
||||
}
|
||||
switch (transform.rotate % 4) {
|
||||
case 1:
|
||||
// 90deg
|
||||
tempValue = box.height / 2 + box.top;
|
||||
transformations.unshift('rotate(90 ' + tempValue + ' ' + tempValue + ')');
|
||||
// swap width/height and x/y
|
||||
if (box.left !== 0 || box.top !== 0) {
|
||||
tempValue = box.left;
|
||||
box.left = box.top;
|
||||
box.top = tempValue;
|
||||
}
|
||||
if (box.width !== box.height) {
|
||||
tempValue = box.width;
|
||||
box.width = box.height;
|
||||
box.height = tempValue;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// 180deg
|
||||
transformations.unshift('rotate(180 ' + (box.width / 2 + box.left) + ' ' + (box.height / 2 + box.top) + ')');
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// 270deg
|
||||
tempValue = box.width / 2 + box.left;
|
||||
transformations.unshift('rotate(-90 ' + tempValue + ' ' + tempValue + ')');
|
||||
// swap width/height and x/y
|
||||
if (box.left !== 0 || box.top !== 0) {
|
||||
tempValue = box.left;
|
||||
box.left = box.top;
|
||||
box.top = tempValue;
|
||||
}
|
||||
if (box.width !== box.height) {
|
||||
tempValue = box.width;
|
||||
box.width = box.height;
|
||||
box.height = tempValue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Calculate dimensions
|
||||
// Values for width/height: null = default, 'auto' = from svg, false = do not set
|
||||
// Default: if both values aren't set, height defaults to '1em', width is calculated from height
|
||||
let customWidth = props.width ? props.width : null;
|
||||
let customHeight = props.height ? props.height : null;
|
||||
|
||||
let width, height;
|
||||
if (customWidth === null && customHeight === null) {
|
||||
customHeight = '1em';
|
||||
}
|
||||
if (customWidth !== null && customHeight !== null) {
|
||||
width = customWidth;
|
||||
height = customHeight;
|
||||
} else if (customWidth !== null) {
|
||||
width = customWidth;
|
||||
height = calculateDimension(width, box.height / box.width);
|
||||
} else {
|
||||
height = customHeight;
|
||||
width = calculateDimension(height, box.width / box.height);
|
||||
}
|
||||
|
||||
if (width !== false) {
|
||||
attributes.width = width === 'auto' ? box.width : width;
|
||||
}
|
||||
if (height !== false) {
|
||||
attributes.height = height === 'auto' ? box.height : height;
|
||||
}
|
||||
|
||||
// Add vertical-align for inline icon
|
||||
if (inline && item.verticalAlign !== 0) {
|
||||
style += 'vertical-align: ' + item.verticalAlign + 'em;';
|
||||
}
|
||||
|
||||
// Check custom alignment
|
||||
if (props.align !== void 0) {
|
||||
props.align.toLowerCase().split(/[\s,]+/).forEach(value => {
|
||||
switch (value) {
|
||||
case 'left':
|
||||
case 'right':
|
||||
case 'center':
|
||||
align.horizontal = value;
|
||||
break;
|
||||
|
||||
case 'top':
|
||||
case 'bottom':
|
||||
case 'middle':
|
||||
align.vertical = value;
|
||||
break;
|
||||
|
||||
case 'crop':
|
||||
align.slice = true;
|
||||
break;
|
||||
|
||||
case 'meet':
|
||||
align.slice = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Add 360deg transformation to style to prevent subpixel rendering bug
|
||||
style += '-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);';
|
||||
|
||||
// Style attribute
|
||||
attributes.style = style;
|
||||
|
||||
// Generate viewBox and preserveAspectRatio attributes
|
||||
attributes.preserveAspectRatio = _align(align);
|
||||
attributes.viewBox = box.left + ' ' + box.top + ' ' + box.width + ' ' + box.height;
|
||||
|
||||
// Generate body
|
||||
let body = replaceIDs(item.body);
|
||||
|
||||
if (props.color !== void 0) {
|
||||
body = body.replace(/currentColor/g, props.color);
|
||||
}
|
||||
if (transformations.length) {
|
||||
body = '<g transform="' + transformations.join(' ') + '">' + body + '</g>';
|
||||
}
|
||||
|
||||
let svg = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"';
|
||||
Object.keys(attributes).forEach(attr => {
|
||||
svg += ' ' + attr + '="' + attributes[attr] + '"';
|
||||
});
|
||||
svg += '>' + body + '</svg>';
|
||||
|
||||
return svg;
|
||||
};
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const Collection = require('../src/collection');
|
||||
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing loading collection', () => {
|
||||
it('loading collection with prefix', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
bar: {
|
||||
body: '<bar />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
baz: {
|
||||
body: '<baz />',
|
||||
width: 30,
|
||||
height: 40
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
baz90: {
|
||||
parent: 'baz',
|
||||
rotate: 1
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data); // load as object
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.prefix).to.be.equal('foo');
|
||||
expect(collection.icons.bar).to.be.eql(data.icons.bar);
|
||||
});
|
||||
|
||||
it('loading collection without prefix', () => {
|
||||
let data = {
|
||||
icons: {
|
||||
'foo-bar': {
|
||||
body: '<bar />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
'foo-baz': {
|
||||
body: '<baz />',
|
||||
width: 30,
|
||||
height: 40
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
'foo-baz90': {
|
||||
parent: 'foo-baz',
|
||||
rotate: 1
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let collection = new Collection('foo');
|
||||
collection.loadJSON(JSON.stringify(data)); // load as string
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.prefix).to.be.equal('foo');
|
||||
expect(Object.keys(collection.icons)).to.be.eql(['bar', 'baz']);
|
||||
});
|
||||
|
||||
it('loading collection without detectable prefix', () => {
|
||||
let data = {
|
||||
icons: {
|
||||
'foo-bar': {
|
||||
body: '<bar />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
'foo-baz': {
|
||||
body: '<baz />',
|
||||
width: 30,
|
||||
height: 40
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
'foo-baz90': {
|
||||
parent: 'foo-baz',
|
||||
rotate: 1
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(false);
|
||||
expect(collection.prefix).to.be.equal(null);
|
||||
});
|
||||
|
||||
it('optimized collection', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
bar: {
|
||||
body: '<bar />',
|
||||
height: 20
|
||||
},
|
||||
baz: {
|
||||
body: '<baz />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
baz90: {
|
||||
parent: 'baz',
|
||||
rotate: 1
|
||||
}
|
||||
},
|
||||
width: 30,
|
||||
height: 40
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.prefix).to.be.equal('foo');
|
||||
expect(collection.icons.bar).to.be.eql({
|
||||
body: '<bar />',
|
||||
height: 20,
|
||||
width: 30
|
||||
});
|
||||
expect(collection.icons.baz).to.be.eql({
|
||||
body: '<baz />',
|
||||
width: 30,
|
||||
height: 40
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const calculateDimension = require('../src/svg-dimensions');
|
||||
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing dimensions function', () => {
|
||||
it('numbers', () => {
|
||||
let width = 48,
|
||||
height = 36,
|
||||
result;
|
||||
|
||||
// Get height knowing width
|
||||
result = calculateDimension(width, height / width);
|
||||
expect(result).to.be.equal(height);
|
||||
|
||||
// Get width knowing height
|
||||
result = calculateDimension(height, width / height);
|
||||
expect(result).to.be.equal(width);
|
||||
|
||||
// Get height for custom width
|
||||
result = calculateDimension(24, height / width);
|
||||
expect(result).to.be.equal(18);
|
||||
|
||||
result = calculateDimension(30, height / width);
|
||||
expect(result).to.be.equal(22.5);
|
||||
|
||||
result = calculateDimension(99, height / width);
|
||||
expect(result).to.be.equal(74.25);
|
||||
|
||||
// Get width for custom height
|
||||
result = calculateDimension(18, width / height);
|
||||
expect(result).to.be.equal(24);
|
||||
|
||||
result = calculateDimension(74.25, width / height);
|
||||
expect(result).to.be.equal(99);
|
||||
|
||||
// Test floating numbers
|
||||
result = calculateDimension(16, 10 / 9);
|
||||
expect(result).to.be.equal(17.78);
|
||||
|
||||
result = calculateDimension(16, 10 / 9, 1000);
|
||||
expect(result).to.be.equal(17.778);
|
||||
});
|
||||
|
||||
it('strings', () => {
|
||||
let width = 48,
|
||||
height = 36,
|
||||
result;
|
||||
|
||||
// Strings without units
|
||||
result = calculateDimension('48', height / width);
|
||||
expect(result).to.be.equal('36');
|
||||
|
||||
// Pixels
|
||||
result = calculateDimension('48px', height / width);
|
||||
expect(result).to.be.equal('36px');
|
||||
|
||||
// Percentages
|
||||
result = calculateDimension('36%', width / height);
|
||||
expect(result).to.be.equal('48%');
|
||||
|
||||
// em
|
||||
result = calculateDimension('1em', height / width);
|
||||
expect(result).to.be.equal('0.75em');
|
||||
|
||||
result = calculateDimension('1em', width / height);
|
||||
expect(result).to.be.equal('1.34em');
|
||||
|
||||
result = calculateDimension('1em', width / height, 1000);
|
||||
expect(result).to.be.equal('1.334em');
|
||||
|
||||
// custom units with space
|
||||
result = calculateDimension('48 Whatever', height / width);
|
||||
expect(result).to.be.equal('36 Whatever');
|
||||
|
||||
// numbers after unit should be parsed too
|
||||
result = calculateDimension('48% + 5em', height / width);
|
||||
expect(result).to.be.equal('36% + 3.75em');
|
||||
|
||||
// calc()
|
||||
result = calculateDimension('calc(100% - 48px)', height / width);
|
||||
expect(result).to.be.equal('calc(75% - 36px)');
|
||||
|
||||
// -webkit-calc()
|
||||
result = calculateDimension('-webkit-calc(100% - 48px)', height / width);
|
||||
expect(result).to.be.equal('-webkit-calc(75% - 36px)');
|
||||
});
|
||||
|
||||
it('strings without units', () => {
|
||||
let width = 48,
|
||||
height = 36,
|
||||
result;
|
||||
|
||||
// invalid number
|
||||
result = calculateDimension('-.', height / width);
|
||||
expect(result).to.be.equal('-.');
|
||||
|
||||
// variable
|
||||
result = calculateDimension('@width', height / width);
|
||||
expect(result).to.be.equal('@width');
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,162 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const Collection = require('../src/collection');
|
||||
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing icon data', () => {
|
||||
it('simple icon', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />',
|
||||
width: 30,
|
||||
left: -10,
|
||||
top: -5
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.getIcon('icon1')).to.be.eql({
|
||||
body: '<icon1 />',
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: 20,
|
||||
height: 20,
|
||||
inlineHeight: 20,
|
||||
hFlip: false,
|
||||
vFlip: false,
|
||||
rotate: 0,
|
||||
inlineTop: 0,
|
||||
verticalAlign: -0.125
|
||||
});
|
||||
|
||||
expect(collection.getIcon('icon2')).to.be.eql({
|
||||
body: '<icon2 />',
|
||||
left: -10,
|
||||
top: -5,
|
||||
width: 30,
|
||||
height: 20,
|
||||
inlineHeight: 20,
|
||||
hFlip: false,
|
||||
vFlip: false,
|
||||
rotate: 0,
|
||||
inlineTop: -5,
|
||||
verticalAlign: -0.125
|
||||
});
|
||||
});
|
||||
|
||||
it('alias', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />',
|
||||
rotate: 3,
|
||||
hFlip: true,
|
||||
vFlip: true,
|
||||
top: -3
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
},
|
||||
alias2: {
|
||||
parent: 'icon2',
|
||||
rotate: 2,
|
||||
hFlip: true,
|
||||
width: 30,
|
||||
height: 28 // verticalAlign should be -1/7
|
||||
},
|
||||
alias3: {
|
||||
parent: 'missing-icon'
|
||||
},
|
||||
alias4: {
|
||||
parent: 'alias5'
|
||||
},
|
||||
alias5: {
|
||||
parent: 'alias4'
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
|
||||
// Simple alias
|
||||
expect(collection.getIcon('alias1')).to.be.eql({
|
||||
body: '<icon1 />',
|
||||
parent: 'icon1', // Leftover from merging objects
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: 20,
|
||||
height: 20,
|
||||
inlineHeight: 20,
|
||||
hFlip: false,
|
||||
vFlip: false,
|
||||
rotate: 1,
|
||||
inlineTop: 0,
|
||||
verticalAlign: -0.125
|
||||
});
|
||||
|
||||
// Alias with overwritten properties
|
||||
expect(collection.getIcon('alias2')).to.be.eql({
|
||||
body: '<icon2 />',
|
||||
parent: 'icon2', // Leftover from merging objects
|
||||
left: 0,
|
||||
top: -3,
|
||||
width: 30,
|
||||
height: 28,
|
||||
inlineHeight: 28, // same as height
|
||||
hFlip: false,
|
||||
vFlip: true,
|
||||
rotate: 5,
|
||||
inlineTop: -3, // same as top
|
||||
verticalAlign: -0.143
|
||||
});
|
||||
|
||||
// Alias that has no parent
|
||||
expect(collection.getIcon('alias3')).to.be.equal(null);
|
||||
|
||||
// Infinite loop
|
||||
expect(collection.getIcon('alias4')).to.be.equal(null);
|
||||
|
||||
// No such icon/alias
|
||||
expect(collection.getIcon('whatever')).to.be.equal(null);
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const Collection = require('../src/collection');
|
||||
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing icons list', () => {
|
||||
it('several icons', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />'
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.getIcons(['icon1', 'icon3', 'icon20'])).to.be.eql({
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
},
|
||||
aliases: {}
|
||||
});
|
||||
});
|
||||
|
||||
it('icons and aliases', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />'
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.getIcons(['icon2', 'alias1'])).to.be.eql({
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />',
|
||||
width: 20,
|
||||
height: 20
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />',
|
||||
width: 20,
|
||||
height: 20
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('aliases only', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />'
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.loaded).to.be.equal(true);
|
||||
expect(collection.getIcons(['icon20', 'alias1'])).to.be.eql({
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />',
|
||||
width: 20,
|
||||
height: 20
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon1',
|
||||
rotate: 1
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('nothing to return', () => {
|
||||
let data = {
|
||||
prefix: 'foo',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 />'
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />'
|
||||
},
|
||||
icon3: {
|
||||
body: '<icon3 />'
|
||||
},
|
||||
icon4: {
|
||||
body: '<icon4 />'
|
||||
}
|
||||
},
|
||||
width: 20,
|
||||
height: 20
|
||||
};
|
||||
|
||||
let collection = new Collection();
|
||||
collection.loadJSON(data);
|
||||
|
||||
expect(collection.getIcons(['icon20', 'alias10'])).to.be.eql({
|
||||
prefix: 'foo',
|
||||
icons: {},
|
||||
aliases: {}
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing splitting query string', () => {
|
||||
it('3 part requests', () => {
|
||||
const exp = /^\/([a-z0-9-]+)\/([a-z0-9-]+)\.(js|json|svg)$/;
|
||||
|
||||
function test(str) {
|
||||
let result = str.match(exp);
|
||||
if (!result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Remove first parameter and named parameters that don't exist in Expression.js params
|
||||
result.shift();
|
||||
delete result.index;
|
||||
delete result.input;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// SVG
|
||||
expect(test('/foo/bar.svg')).to.be.eql(['foo', 'bar', 'svg']);
|
||||
expect(test('/fa-pro/test-icon.svg')).to.be.eql(['fa-pro', 'test-icon', 'svg']);
|
||||
|
||||
// icons
|
||||
expect(test('/foo/icons.js')).to.be.eql(['foo', 'icons', 'js']);
|
||||
expect(test('/long-prefixed-v1/icons.json')).to.be.eql(['long-prefixed-v1', 'icons', 'json']);
|
||||
|
||||
// Too long
|
||||
expect(test('/fa-pro/test/icon.svg')).to.be.equal(null);
|
||||
|
||||
// Upper case
|
||||
expect(test('/SomePrefix/Test.SVG')).to.be.equal(null);
|
||||
|
||||
// Invalid characters
|
||||
expect(test('/foo_bar/test.svg')).to.be.equal(null);
|
||||
});
|
||||
|
||||
it('2 part js/json requests', () => {
|
||||
const exp = /^\/([a-z0-9-]+)\.(js|json)$/;
|
||||
|
||||
function test(str) {
|
||||
let result = str.match(exp);
|
||||
if (!result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Remove first parameter and named parameters that don't exist in Expression.js params
|
||||
result.shift();
|
||||
delete result.index;
|
||||
delete result.input;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// icons
|
||||
expect(test('/foo.js')).to.be.eql(['foo', 'js']);
|
||||
expect(test('/long-prefixed-v1.json')).to.be.eql(['long-prefixed-v1', 'json']);
|
||||
|
||||
// Too long
|
||||
expect(test('/fa-pro/icons.js')).to.be.equal(null);
|
||||
|
||||
// Upper case
|
||||
expect(test('/SomePrefix.JSON')).to.be.equal(null);
|
||||
|
||||
// Invalid characters
|
||||
expect(test('/foo_bar.json')).to.be.equal(null);
|
||||
});
|
||||
|
||||
it('2 part svg requests', () => {
|
||||
const exp = /^\/([a-z0-9:\-]+)\.svg$/;
|
||||
|
||||
function test(str) {
|
||||
let result = str.match(exp);
|
||||
if (!result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Remove first parameter and named parameters that don't exist in Expression.js params
|
||||
result.shift();
|
||||
delete result.index;
|
||||
delete result.input;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// icons
|
||||
expect(test('/foo.svg')).to.be.eql(['foo']);
|
||||
expect(test('/long-prefixed-v1.svg')).to.be.eql(['long-prefixed-v1']);
|
||||
expect(test('/long-prefixed:icon-v1.svg')).to.be.eql(['long-prefixed:icon-v1']);
|
||||
|
||||
// Too long
|
||||
expect(test('/fa-pro/icons.svg')).to.be.equal(null);
|
||||
|
||||
// Upper case
|
||||
expect(test('/SomePrefix.SVG')).to.be.equal(null);
|
||||
|
||||
// Invalid characters
|
||||
expect(test('/foo_bar.svg')).to.be.equal(null);
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
const Collection = require('../src/collection'),
|
||||
parseQuery = require('../src/query');
|
||||
|
||||
let collection1 = new Collection('test');
|
||||
collection1.loadJSON({
|
||||
prefix: 'test',
|
||||
icons: {
|
||||
icon1: {
|
||||
body: '<icon1 fill="currentColor" />',
|
||||
width: 30
|
||||
},
|
||||
icon2: {
|
||||
body: '<icon2 />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
alias1: {
|
||||
parent: 'icon2',
|
||||
hFlip: true
|
||||
}
|
||||
},
|
||||
width: 24,
|
||||
height: 24
|
||||
});
|
||||
|
||||
let collection2 = new Collection('test2');
|
||||
collection2.loadJSON({
|
||||
icons: {
|
||||
'test2-icon1': {
|
||||
body: '<icon1 fill="currentColor" />',
|
||||
width: 30
|
||||
},
|
||||
'test2-icon2': {
|
||||
body: '<icon2 />'
|
||||
},
|
||||
'test2-icon3': {
|
||||
body: '<defs><foo id="bar" /></defs><bar use="url(#bar)" fill="currentColor" stroke="currentColor" />'
|
||||
}
|
||||
},
|
||||
aliases: {
|
||||
'test2-alias1': {
|
||||
parent: 'test2-icon2',
|
||||
hFlip: true
|
||||
}
|
||||
},
|
||||
width: 24,
|
||||
height: 24
|
||||
});
|
||||
|
||||
describe('Testing requests', () => {
|
||||
it('icons list', () => {
|
||||
// Simple query with prefix
|
||||
expect(parseQuery(collection1, 'icons', 'js', {
|
||||
icons: 'alias1'
|
||||
})).to.be.eql({
|
||||
type: 'application/javascript; charset=utf-8',
|
||||
body: 'SimpleSVG._loaderCallback({"prefix":"test","icons":{"icon2":{"body":"<icon2 />","width":24,"height":24}},"aliases":{"alias1":{"parent":"icon2","hFlip":true}}})'
|
||||
});
|
||||
|
||||
// Query collection without prefix, json
|
||||
expect(parseQuery(collection2, 'icons', 'json', {
|
||||
icons: 'alias1'
|
||||
})).to.be.eql({
|
||||
type: 'application/json; charset=utf-8',
|
||||
body: '{"prefix":"test2","icons":{"icon2":{"body":"<icon2 />","width":24,"height":24}},"aliases":{"alias1":{"parent":"icon2","hFlip":true}}}'
|
||||
});
|
||||
|
||||
// Custom callback
|
||||
expect(parseQuery(collection1, 'icons', 'js', {
|
||||
icons: 'icon1,icon2',
|
||||
callback: 'console.log'
|
||||
})).to.be.eql({
|
||||
type: 'application/javascript; charset=utf-8',
|
||||
body: 'console.log({"prefix":"test","icons":{"icon1":{"body":"<icon1 fill=\\"currentColor\\" />","width":30,"height":24},"icon2":{"body":"<icon2 />","width":24,"height":24}}})'
|
||||
});
|
||||
});
|
||||
|
||||
it('svg', () => {
|
||||
// Simple icon
|
||||
expect(parseQuery(collection1, 'icon1', 'svg', {
|
||||
})).to.be.eql({
|
||||
filename: 'icon1.svg',
|
||||
type: 'image/svg+xml; charset=utf-8',
|
||||
body: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1.25em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 30 24"><icon1 fill="currentColor" /></svg>'
|
||||
});
|
||||
|
||||
// Icon with custom attributes
|
||||
expect(parseQuery(collection2, 'alias1', 'svg', {
|
||||
color: 'red'
|
||||
})).to.be.eql({
|
||||
filename: 'alias1.svg',
|
||||
type: 'image/svg+xml; charset=utf-8',
|
||||
body: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><g transform="translate(24 0) scale(-1 1)"><icon2 /></g></svg>'
|
||||
});
|
||||
|
||||
// Icon with id replacement
|
||||
let result = parseQuery(collection2, 'icon3', 'svg', {
|
||||
color: 'red',
|
||||
rotate: '90deg'
|
||||
}).body.replace(/SimpleSVGId-[0-9a-f]+-[0-9a-f]+-[0-9]+/g, 'some-id');
|
||||
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><g transform="rotate(90 12 12)"><defs><foo id="some-id" /></defs><bar use="url(#some-id)" fill="red" stroke="red" /></g></svg>');
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
"use strict";
|
||||
|
||||
(() => {
|
||||
const generateSVG = require('../src/svg');
|
||||
|
||||
const chai = require('chai'),
|
||||
expect = chai.expect,
|
||||
should = chai.should();
|
||||
|
||||
describe('Testing SVG generator', () => {
|
||||
const defaultAttributes = {
|
||||
left: 0,
|
||||
top: 0,
|
||||
rotate: 0,
|
||||
hFlip: false,
|
||||
vFlip: false
|
||||
};
|
||||
|
||||
// Copy of function from src/svg
|
||||
function addMissingAttributes(data) {
|
||||
let item = Object.assign({}, defaultAttributes, data);
|
||||
if (item.inlineHeight === void 0) {
|
||||
item.inlineHeight = item.height;
|
||||
}
|
||||
if (item.inlineTop === void 0) {
|
||||
item.inlineTop = item.top;
|
||||
}
|
||||
if (item.verticalAlign === void 0) {
|
||||
// -0.143 if icon is designed for 14px height,
|
||||
// otherwise assume icon is designed for 16px height
|
||||
item.verticalAlign = item.height % 7 === 0 && item.height % 8 !== 0 ? -0.143 : -0.125;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
it('simple SVG icon with default and custom dimensions', () => {
|
||||
let data = addMissingAttributes({
|
||||
body: '<body />',
|
||||
width: 24,
|
||||
height: 24
|
||||
});
|
||||
|
||||
let result = generateSVG(data, {});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><body /></svg>');
|
||||
|
||||
// Custom dimensions
|
||||
result = generateSVG(data, {
|
||||
width: 48
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><body /></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
height: 32
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><body /></svg>');
|
||||
});
|
||||
|
||||
it('custom colors and inline icon', () => {
|
||||
let data = addMissingAttributes({
|
||||
body: '<path d="whatever" fill="currentColor" />',
|
||||
width: 20,
|
||||
height: 24,
|
||||
inlineHeight: 28,
|
||||
inlineTop: -2
|
||||
});
|
||||
|
||||
let result = generateSVG(data, {});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0.84em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 24"><path d="whatever" fill="currentColor" /></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
width: '48',
|
||||
color: 'red'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="57.6" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 24"><path d="whatever" fill="red" /></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
height: '100%',
|
||||
inline: 'true'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="71.43%" height="100%" style="vertical-align: -0.125em;-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 -2 20 28"><path d="whatever" fill="currentColor" /></svg>');
|
||||
});
|
||||
|
||||
it('custom alignment', () => {
|
||||
let data = addMissingAttributes({
|
||||
body: '<path d="whatever" fill="currentColor" />',
|
||||
width: 20,
|
||||
height: 24,
|
||||
inlineHeight: 28,
|
||||
inlineTop: -2
|
||||
});
|
||||
|
||||
let result = generateSVG(data, {
|
||||
align: 'top',
|
||||
width: '50',
|
||||
height: '50'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMin meet" viewBox="0 0 20 24"><path d="whatever" fill="currentColor" /></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
align: 'left,bottom',
|
||||
width: '50',
|
||||
height: '50'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMinYMax meet" viewBox="0 0 20 24"><path d="whatever" fill="currentColor" /></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
align: 'right,middle,crop',
|
||||
width: '50',
|
||||
height: '50'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMaxYMid slice" viewBox="0 0 20 24"><path d="whatever" fill="currentColor" /></svg>');
|
||||
});
|
||||
|
||||
it('transformations', () => {
|
||||
let data = addMissingAttributes({
|
||||
body: '<body />',
|
||||
width: 20,
|
||||
height: 24
|
||||
});
|
||||
|
||||
let result = generateSVG(data, {
|
||||
rotate: 1
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1.2em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 20"><g transform="rotate(90 12 12)"><body /></g></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
rotate: '180deg'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0.84em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 24"><g transform="rotate(180 10 12)"><body /></g></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
rotate: '3'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1.2em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 20"><g transform="rotate(-90 10 10)"><body /></g></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
rotate: '75%'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1.2em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 20"><g transform="rotate(-90 10 10)"><body /></g></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
flip: 'Horizontal'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0.84em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 24"><g transform="translate(20 0) scale(-1 1)"><body /></g></svg>');
|
||||
|
||||
result = generateSVG(data, {
|
||||
flip: 'ignored, Vertical space-works-as-comma'
|
||||
});
|
||||
expect(result).to.be.equal('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0.84em" height="1em" style="-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 24"><g transform="translate(0 24) scale(1 -1)"><body /></g></svg>');
|
||||
});
|
||||
});
|
||||
})();
|
||||
Loading…
Reference in New Issue