Compare commits
No commits in common. "icons-v3.35.0" and "main" have entirely different histories.
icons-v3.3
...
main
|
|
@ -0,0 +1,152 @@
|
|||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import { PACKAGES_DIR, getAliases, toPascalCase, getAllIcons } from './helpers.mjs';
|
||||
import { stringify } from 'svgson';
|
||||
|
||||
/**
|
||||
* Build icons
|
||||
*
|
||||
* @param name
|
||||
* @param componentTemplate
|
||||
* @param indexIconTemplate
|
||||
* @param indexTypeTemplate
|
||||
* @param extension
|
||||
* @param pretty
|
||||
*/
|
||||
export const buildJsIcons = ({
|
||||
name,
|
||||
componentTemplate,
|
||||
indexItemTemplate,
|
||||
aliasTemplate,
|
||||
extension = 'js',
|
||||
key = true,
|
||||
pascalCase = false,
|
||||
pascalName = true,
|
||||
indexFile = 'icons.ts',
|
||||
}) => {
|
||||
const DIST_DIR = path.resolve(PACKAGES_DIR, name);
|
||||
const aliases = getAliases(),
|
||||
allIcons = getAllIcons(false, true);
|
||||
|
||||
let index = [];
|
||||
Object.entries(allIcons).forEach(([type, icons]) => {
|
||||
icons.forEach((icon, i) => {
|
||||
// process.stdout.write(
|
||||
// `Building \`${name}\` ${type} ${i}/${icons.length}: ${icon.name.padEnd(42)}\r`,
|
||||
// );
|
||||
|
||||
const children = icon.obj.children
|
||||
.map(({ name, attributes }, i) => {
|
||||
if (key) {
|
||||
attributes.key = `svg-${i}`;
|
||||
}
|
||||
|
||||
if (pascalCase) {
|
||||
attributes.strokeWidth = attributes['stroke-width'];
|
||||
delete attributes['stroke-width'];
|
||||
}
|
||||
|
||||
return [name, attributes];
|
||||
})
|
||||
.filter((i) => {
|
||||
const [name, attributes] = i;
|
||||
return !attributes.d || attributes.d !== 'M0 0h24v24H0z';
|
||||
});
|
||||
|
||||
const iconName = `${icon.name}${type !== 'outline' ? `-${type}` : ''}`,
|
||||
iconNamePascal = `${icon.namePascal}${type !== 'outline' ? toPascalCase(type) : ''}`;
|
||||
|
||||
let component = componentTemplate({
|
||||
type,
|
||||
name: iconName,
|
||||
namePascal: iconNamePascal,
|
||||
children,
|
||||
stringify,
|
||||
svg: icon.content,
|
||||
});
|
||||
|
||||
let filePath = path.resolve(
|
||||
DIST_DIR,
|
||||
'src/icons',
|
||||
`${pascalName ? `Icon${iconNamePascal}` : iconName}.${extension}`,
|
||||
);
|
||||
fs.writeFileSync(filePath, component, 'utf-8');
|
||||
|
||||
index.push(
|
||||
indexItemTemplate({
|
||||
type,
|
||||
name: iconName,
|
||||
namePascal: iconNamePascal,
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
fs.writeFileSync(path.resolve(DIST_DIR, `src/icons/${indexFile}`), index.join('\n'), 'utf-8');
|
||||
|
||||
// Write aliases
|
||||
let aliasesStr = '';
|
||||
if (aliases && aliasTemplate) {
|
||||
Object.entries(aliases).forEach(([from, to]) => {
|
||||
aliasesStr += aliasTemplate({
|
||||
from,
|
||||
to,
|
||||
fromPascal: toPascalCase(from),
|
||||
toPascal: toPascalCase(to),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
fs.writeFileSync(path.resolve(DIST_DIR, `./src/aliases.ts`), aliasesStr || `export {};`, 'utf-8');
|
||||
};
|
||||
|
||||
export const buildIconsList = (name) => {
|
||||
const DIST_DIR = path.resolve(PACKAGES_DIR, name);
|
||||
const allIcons = getAllIcons(false, true);
|
||||
|
||||
let index = [];
|
||||
Object.entries(allIcons).forEach(([type, icons]) => {
|
||||
icons.forEach((icon, i) => {
|
||||
// process.stdout.write(
|
||||
// `Building \`${name}\` ${type} ${i}/${icons.length}: ${icon.name.padEnd(42)}\r`,
|
||||
// );
|
||||
|
||||
const iconName = `${icon.name}${type !== 'outline' ? `-${type}` : ''}`;
|
||||
|
||||
index.push(iconName);
|
||||
});
|
||||
});
|
||||
|
||||
fs.writeFileSync(
|
||||
path.resolve(DIST_DIR, `./src/icons-list.ts`),
|
||||
`export default ${JSON.stringify(index, null, 2)};`,
|
||||
'utf-8',
|
||||
);
|
||||
};
|
||||
|
||||
export const buildIconsDynamicImport = (name) => {
|
||||
const DIST_DIR = path.resolve(PACKAGES_DIR, name);
|
||||
const allIcons = getAllIcons(false, true);
|
||||
|
||||
let dynamicImportString = 'export default {';
|
||||
Object.entries(allIcons).forEach(([type, icons]) => {
|
||||
icons.forEach((icon, i) => {
|
||||
// process.stdout.write(
|
||||
// `Building \`${name}\` ${type} ${i}/${icons.length}: ${icon.name.padEnd(42)}\r`,
|
||||
// );
|
||||
|
||||
const iconName = `${icon.name}${type !== 'outline' ? `-${type}` : ''}`,
|
||||
iconNamePascal = `${icon.namePascal}${type !== 'outline' ? toPascalCase(type) : ''}`;
|
||||
|
||||
dynamicImportString += ` '${iconName}': () => import('./icons/Icon${iconNamePascal}'),\n`;
|
||||
});
|
||||
});
|
||||
|
||||
dynamicImportString += '};\n';
|
||||
|
||||
fs.writeFileSync(
|
||||
path.resolve(DIST_DIR, `./src/dynamic-imports.ts`),
|
||||
dynamicImportString,
|
||||
'utf-8',
|
||||
);
|
||||
};
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import cp from 'child_process'
|
||||
import { printChangelog } from './helpers.mjs'
|
||||
|
||||
cp.exec('git status', function(err, ret) {
|
||||
let newIcons = [], modifiedIcons = [], renamedIcons = []
|
||||
|
||||
ret.replace(/new file:\s+icons\/([a-z0-9-\/]+)\.svg/g, function(m, fileName) {
|
||||
newIcons.push(fileName)
|
||||
})
|
||||
|
||||
ret.replace(/modified:\s+icons\/([a-z0-9-\/]+)\.svg/g, function(m, fileName) {
|
||||
modifiedIcons.push(fileName)
|
||||
})
|
||||
|
||||
ret.replace(/renamed:\s+icons\/([a-z0-9-\/]+).svg -> icons\/([a-z0-9-\/]+).svg/g, function(m, fileNameBefore, fileNameAfter) {
|
||||
renamedIcons.push([fileNameBefore, fileNameAfter])
|
||||
})
|
||||
|
||||
modifiedIcons = modifiedIcons.filter(function(el) {
|
||||
return newIcons.indexOf(el) < 0
|
||||
})
|
||||
|
||||
printChangelog(newIcons, modifiedIcons, renamedIcons)
|
||||
})
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import { generateIconsPreview, getAllIcons, getPackageJson, GITHUB_DIR } from './helpers.mjs'
|
||||
import path from 'path'
|
||||
|
||||
const p = getPackageJson()
|
||||
|
||||
const version = process.env.NEW_VERSION || `${p.version}`
|
||||
|
||||
if (version) {
|
||||
const icons = getAllIcons()
|
||||
|
||||
let newIcons = []
|
||||
Object.entries(icons).forEach(([type, icons]) => {
|
||||
icons.forEach(icon => {
|
||||
if (icon.version) {
|
||||
if (`${icon.version}.0` === version) {
|
||||
console.log(`Add icon "${type}/${icon.name}" vith version "${icon.version}" to new icons list`)
|
||||
newIcons.push(icon.path)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (newIcons.length > 0) {
|
||||
generateIconsPreview(newIcons, path.join(GITHUB_DIR, `tabler-icons-${version}.svg`), {
|
||||
columnsCount: 6,
|
||||
paddingOuter: 24
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
import cp from 'child_process'
|
||||
import { getPackageJson, printChangelog } from './helpers.mjs'
|
||||
|
||||
const p = getPackageJson(),
|
||||
version = process.env.LATEST_VERSION || `${p.version}`
|
||||
|
||||
if (version) {
|
||||
cp.exec(`git diff ${version} HEAD --name-status ./icons`, function(err, ret) {
|
||||
|
||||
let newIcons = [], modifiedIcons = [], renamedIcons = []
|
||||
|
||||
ret.replace(/A\s+icons\/([a-z0-9-\/]+)\.svg/g, function(m, fileName) {
|
||||
newIcons.push(fileName)
|
||||
})
|
||||
|
||||
ret.replace(/M\s+icons\/([a-z0-9-\/]+)\.svg/g, function(m, fileName) {
|
||||
modifiedIcons.push(fileName)
|
||||
})
|
||||
|
||||
ret.replace(/R[0-9]+\s+icons\/([a-z0-9-\/]+)\.svg\s+icons\/([a-z0-9-\/]+).svg/g, function(m, fileNameBefore, fileNameAfter) {
|
||||
renamedIcons.push([fileNameBefore, fileNameAfter])
|
||||
})
|
||||
|
||||
modifiedIcons = modifiedIcons.filter(function(el) {
|
||||
return newIcons.indexOf(el) < 0
|
||||
})
|
||||
|
||||
printChangelog(newIcons, modifiedIcons, renamedIcons, true)
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
import OpenAI from 'openai';
|
||||
import { getAllIcons } from './helpers.mjs';
|
||||
import { writeFileSync } from 'fs';
|
||||
|
||||
import dotenv from 'dotenv';
|
||||
dotenv.config();
|
||||
|
||||
const client = new OpenAI();
|
||||
|
||||
const allIcons = getAllIcons();
|
||||
|
||||
let withoutTags = [];
|
||||
for (const icon of allIcons.outline) {
|
||||
if (icon.tags.length == 0 && withoutTags.length < 30) {
|
||||
withoutTags.push(icon.name);
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const completion = await client.chat.completions.create({
|
||||
model: 'gpt-4o',
|
||||
messages: [{
|
||||
role: 'user',
|
||||
content: `generate few tags for icon which represent for each icon: ${withoutTags.join(', ')}. Tags should be one world, lowercase and separated by comma. Generate minimum 10 tags for each icon. Write as json. Use original key. Tag should be different than original key. Tags should be array of strings.`
|
||||
}],
|
||||
response_format: {
|
||||
type: 'json_object',
|
||||
}
|
||||
});
|
||||
|
||||
console.log(completion.choices[0].message.content);
|
||||
|
||||
writeFileSync('./new/tags.json', completion.choices[0].message.content);
|
||||
}
|
||||
|
||||
|
||||
if (withoutTags.length > 0) {
|
||||
main();
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
import { execSync } from 'child_process'
|
||||
import { basename, join } from 'path'
|
||||
import { ICONS_SRC_DIR, parseMatter } from './helpers.mjs'
|
||||
|
||||
// Check icon files added relative to base branch (for PR)
|
||||
function getAddedIconsFromMain() {
|
||||
try {
|
||||
// Use BASE_SHA or BASE_REF from environment, fallback to origin/main
|
||||
const baseRef = process.env.BASE_SHA || process.env.BASE_REF || 'origin/main'
|
||||
const output = execSync(`git diff ${baseRef}...HEAD --name-status`, { encoding: 'utf-8' })
|
||||
const addedIcons = []
|
||||
|
||||
output.split('\n').forEach(line => {
|
||||
if (line.startsWith('A\t')) {
|
||||
const filePath = line.substring(2)
|
||||
// Filter only SVG files from icons/outline/ or icons/filled/ directories
|
||||
if (filePath.match(/^icons\/(outline|filled)\/.+\.svg$/)) {
|
||||
const iconPath = filePath.replace(/^icons\//, '')
|
||||
addedIcons.push(iconPath)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return addedIcons
|
||||
} catch (error) {
|
||||
// Fallback: check relative to HEAD if base ref doesn't exist
|
||||
try {
|
||||
const output = execSync('git diff --diff-filter=A --name-only', { encoding: 'utf-8' })
|
||||
const addedIcons = []
|
||||
|
||||
output.split('\n').forEach(filePath => {
|
||||
if (filePath && filePath.match(/^icons\/(outline|filled)\/.+\.svg$/)) {
|
||||
const iconPath = filePath.replace(/^icons\//, '')
|
||||
addedIcons.push(iconPath)
|
||||
}
|
||||
})
|
||||
|
||||
return addedIcons
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get GitHub raw file URL for icon
|
||||
function getIconRawUrl(iconPath) {
|
||||
// Use PR repo and SHA if available (for forks), otherwise fallback to current repo
|
||||
const repo = process.env.PR_REPO || process.env.GITHUB_REPOSITORY || 'tabler/tabler-icons'
|
||||
const ref = process.env.PR_SHA || process.env.GITHUB_SHA || 'main'
|
||||
return `https://raw.githubusercontent.com/${repo}/${ref}/icons/${iconPath}`
|
||||
}
|
||||
|
||||
// Generate markdown table for icons
|
||||
function generateIconsTable(icons, type) {
|
||||
if (icons.length === 0) {
|
||||
return ''
|
||||
}
|
||||
|
||||
const typeName = type === 'outline' ? 'Outline' : 'Filled'
|
||||
let markdown = `### ${typeName} Icons (${icons.length})\n\n`
|
||||
markdown += `| Icon | Name ${type === 'outline' ? '| Category | Tags ' : ''}|\n`
|
||||
markdown += `|------|------${type === 'outline' ? '|------|------' : ''}|\n`
|
||||
|
||||
icons.forEach(iconPath => {
|
||||
const iconName = basename(iconPath, '.svg')
|
||||
const rawUrl = getIconRawUrl(iconPath)
|
||||
|
||||
const { data } = parseMatter(join(ICONS_SRC_DIR, iconPath))
|
||||
const category = data.category || ''
|
||||
const tags = data.tags || []
|
||||
|
||||
// Use GitHub raw file URL - GitHub Comments support external image URLs
|
||||
markdown += `| <img src="${rawUrl}" width="240" height="240" alt="${iconName}" /> | \`${iconName}.svg\`${type === 'outline' ? ` | ${category || '❌ No category'} | ${tags.join(', ') || '❌ No tags' }` : ''}|\n`
|
||||
})
|
||||
markdown += `\n`
|
||||
|
||||
return markdown
|
||||
}
|
||||
|
||||
// Generate markdown comment with table of added icons
|
||||
function generateIconsComment(icons) {
|
||||
if (icons.length === 0) {
|
||||
return ''
|
||||
}
|
||||
|
||||
// Group icons by type (outline/filled) with full paths
|
||||
const outlineIcons = icons.filter(icon => icon.startsWith('outline/'))
|
||||
const filledIcons = icons.filter(icon => icon.startsWith('filled/'))
|
||||
|
||||
let markdown = `## 📦 Added Icons\n\n`
|
||||
markdown += `This PR adds **${icons.length}** new icon${icons.length > 1 ? 's' : ''}.\n\n`
|
||||
|
||||
markdown += generateIconsTable(outlineIcons, 'outline')
|
||||
markdown += generateIconsTable(filledIcons, 'filled')
|
||||
|
||||
return markdown
|
||||
}
|
||||
|
||||
const addedIcons = getAddedIconsFromMain()
|
||||
|
||||
if (addedIcons.length > 0) {
|
||||
const comment = generateIconsComment(addedIcons)
|
||||
console.log(comment)
|
||||
} else {
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,607 @@
|
|||
import { readdirSync, readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs';
|
||||
import path, { resolve, basename } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import svgParse from 'parse-svg-path';
|
||||
import svgpath from 'svgpath';
|
||||
import { load as cheerioLoad } from 'cheerio';
|
||||
import { minify } from 'html-minifier';
|
||||
import { parseSync } from 'svgson';
|
||||
import { optimize } from 'svgo';
|
||||
import cp from 'child_process';
|
||||
import minimist from 'minimist';
|
||||
import matter from 'gray-matter';
|
||||
import { globSync } from 'glob';
|
||||
import { exec } from 'child_process';
|
||||
import slash from 'slash';
|
||||
|
||||
export const strokes = {
|
||||
200: 1,
|
||||
300: 1.5,
|
||||
400: 2,
|
||||
}
|
||||
|
||||
export const categories = [
|
||||
'Animals',
|
||||
'Arrows',
|
||||
'Badges',
|
||||
'Brand',
|
||||
'Buildings',
|
||||
'Charts',
|
||||
'Communication',
|
||||
'Computers',
|
||||
'Currencies',
|
||||
'Database',
|
||||
'Design',
|
||||
'Development',
|
||||
'Devices',
|
||||
'Document',
|
||||
'E-commerce',
|
||||
'Electrical',
|
||||
'Extensions',
|
||||
'Food',
|
||||
'Games',
|
||||
'Gender',
|
||||
'Gestures',
|
||||
'Health',
|
||||
'Laundry',
|
||||
'Letters',
|
||||
'Logic',
|
||||
'Map',
|
||||
'Math',
|
||||
'Media',
|
||||
'Mood',
|
||||
'Nature',
|
||||
'Numbers',
|
||||
'Photography',
|
||||
'Shapes',
|
||||
'Sport',
|
||||
'Symbols',
|
||||
'System',
|
||||
'Text',
|
||||
'Vehicles',
|
||||
'Version control',
|
||||
'Weather',
|
||||
'Zodiac'
|
||||
]
|
||||
|
||||
export const iconTemplate = (type) =>
|
||||
type === 'outline'
|
||||
? `<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>`
|
||||
: `<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
>`;
|
||||
|
||||
export const blankSquare = '<path stroke="none" d="M0 0h24v24H0z" fill="none"/>';
|
||||
|
||||
export const types = ['outline', 'filled'];
|
||||
|
||||
export const getCurrentDirPath = () => {
|
||||
return path.dirname(fileURLToPath(import.meta.url));
|
||||
};
|
||||
|
||||
export const HOME_DIR = resolve(getCurrentDirPath(), '..');
|
||||
|
||||
export const ICONS_SRC_DIR = resolve(HOME_DIR, 'icons');
|
||||
export const PACKAGES_DIR = resolve(HOME_DIR, 'packages');
|
||||
export const GITHUB_DIR = resolve(HOME_DIR, '.github');
|
||||
|
||||
export const parseMatter = (icon) => {
|
||||
const { data, content } = matter.read(icon, { delims: ['<!--', '-->'] });
|
||||
|
||||
return { data, content };
|
||||
};
|
||||
|
||||
const getSvgContent = (svg, type, name) => {
|
||||
return svg
|
||||
.replace(/<svg([^>]+)>/, (m, m1) => {
|
||||
return `<svg${m1} class="icon icon-tabler icons-tabler-${type} icon-tabler-${name}"\n>\n ${blankSquare}`;
|
||||
})
|
||||
.trim();
|
||||
};
|
||||
|
||||
export const getAllIcons = (withContent = false, withObject = false) => {
|
||||
let icons = {};
|
||||
const limit = process.env['ICONS_LIMIT'] ? parseInt(process.env['ICONS_LIMIT'], 10) : Infinity;
|
||||
|
||||
types.forEach((type) => {
|
||||
icons[type] = globSync(slash(path.join(ICONS_SRC_DIR, `${type}/*.svg`)))
|
||||
.sort((a, b) => a.localeCompare(b))
|
||||
.slice(0, limit)
|
||||
.map((i) => {
|
||||
const { data, content } = parseMatter(i),
|
||||
name = basename(i, '.svg');
|
||||
|
||||
return {
|
||||
name,
|
||||
namePascal: toPascalCase(`${name}`),
|
||||
path: i,
|
||||
category: data.category || '',
|
||||
tags: data.tags || [],
|
||||
version: data.version || '',
|
||||
unicode: data.unicode || '',
|
||||
...(withContent ? { content: getSvgContent(content, type, name) } : {}),
|
||||
...(withObject ? { obj: parseSync(content.replace(blankSquare, '')) } : {}),
|
||||
};
|
||||
})
|
||||
.sort();
|
||||
});
|
||||
|
||||
return icons;
|
||||
};
|
||||
|
||||
export const getAllIconsMerged = (withContent = false, withObject = false) => {
|
||||
const allIcons = getAllIcons(true);
|
||||
|
||||
const icons = {};
|
||||
allIcons.outline.forEach((icon) => {
|
||||
icons[icon.name] = {
|
||||
name: icon.name,
|
||||
category: icon.category || '',
|
||||
tags: icon.tags || [],
|
||||
styles: {
|
||||
outline: {
|
||||
version: icon.version || '',
|
||||
unicode: icon.unicode || '',
|
||||
...(withContent ? { content: icon.content } : {}),
|
||||
...(withObject ? { obj: icon.obj } : {}),
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
allIcons.filled.forEach((icon) => {
|
||||
if (icons[icon.name]) {
|
||||
icons[icon.name].styles.filled = {
|
||||
version: icon.version || '',
|
||||
unicode: icon.unicode || '',
|
||||
...(withContent ? { content: icon.content } : {}),
|
||||
...(withObject ? { obj: icon.obj } : {}),
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return icons;
|
||||
};
|
||||
|
||||
export const getArgvs = () => {
|
||||
return minimist(process.argv.slice(2));
|
||||
};
|
||||
|
||||
export const getPackageDir = (packageName) => {
|
||||
return `${PACKAGES_DIR}/${packageName}`;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return project package.json
|
||||
* @returns {any}
|
||||
*/
|
||||
export const getPackageJson = () => {
|
||||
return JSON.parse(readFileSync(resolve(HOME_DIR, 'package.json'), 'utf-8'));
|
||||
};
|
||||
|
||||
/**
|
||||
* Reads SVGs from directory
|
||||
*
|
||||
* @param directory
|
||||
* @returns {string[]}
|
||||
*/
|
||||
export const readSvgDirectory = (directory) => {
|
||||
return readdirSync(directory).filter((file) => path.extname(file) === '.svg');
|
||||
};
|
||||
|
||||
export const getAliases = (groupped = false) => {
|
||||
const allAliases = JSON.parse(readFileSync(resolve(HOME_DIR, 'aliases.json'), 'utf-8'));
|
||||
const allIcons = getAllIcons();
|
||||
|
||||
if (groupped) {
|
||||
let aliases = [];
|
||||
types.forEach((type) => {
|
||||
const icons = allIcons[type].map((i) => i.name);
|
||||
|
||||
aliases[type] = {};
|
||||
|
||||
for (const [key, value] of Object.entries(allAliases[type])) {
|
||||
if (icons.includes(value)) {
|
||||
aliases[type][key] = value;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return aliases;
|
||||
} else {
|
||||
let aliases = [];
|
||||
types.forEach((type) => {
|
||||
const icons = allIcons[type].map((i) => i.name);
|
||||
|
||||
for (const [key, value] of Object.entries(allAliases[type])) {
|
||||
if (icons.includes(value)) {
|
||||
aliases[`${key}${type !== 'outline' ? `-${type}` : ''}`] =
|
||||
`${value}${type !== 'outline' ? `-${type}` : ''}`;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return aliases;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Read SVG
|
||||
*
|
||||
* @param fileName
|
||||
* @param directory
|
||||
* @returns {string}
|
||||
*/
|
||||
export const readSvg = (fileName, directory) => {
|
||||
return readFileSync(path.join(directory, fileName), 'utf-8');
|
||||
};
|
||||
|
||||
/**
|
||||
* Create directory if not exists
|
||||
* @param dir
|
||||
*/
|
||||
export const createDirectory = (dir) => {
|
||||
if (!existsSync(dir)) {
|
||||
mkdirSync(dir);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get SVG name
|
||||
* @param fileName
|
||||
* @returns {string}
|
||||
*/
|
||||
export const getSvgName = (fileName) => {
|
||||
return path.basename(fileName, '.svg');
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert string to CamelCase
|
||||
* @param string
|
||||
* @returns {*}
|
||||
*/
|
||||
export const toCamelCase = (string) => {
|
||||
return string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) =>
|
||||
p2 ? p2.toUpperCase() : p1.toLowerCase(),
|
||||
);
|
||||
};
|
||||
|
||||
export const toPascalCase = (string) => {
|
||||
const camelCase = toCamelCase(string);
|
||||
|
||||
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
||||
};
|
||||
|
||||
export const addFloats = function (n1, n2) {
|
||||
return Math.round((parseFloat(n1) + parseFloat(n2)) * 1000) / 1000;
|
||||
};
|
||||
|
||||
export const optimizePath = function (path) {
|
||||
let transformed = svgpath(path).rel().round(3).toString();
|
||||
|
||||
return svgParse(transformed)
|
||||
.map(function (a) {
|
||||
return a.join(' ');
|
||||
})
|
||||
.join('');
|
||||
};
|
||||
|
||||
export const optimizeSVG = (data) => {
|
||||
return optimize(data, {
|
||||
js2svg: {
|
||||
indent: 2,
|
||||
pretty: true,
|
||||
},
|
||||
plugins: [
|
||||
{
|
||||
name: 'preset-default',
|
||||
params: {
|
||||
overrides: {
|
||||
mergePaths: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}).data;
|
||||
};
|
||||
|
||||
export function buildIconsObject(svgFiles, getSvg) {
|
||||
return svgFiles
|
||||
.map((svgFile) => {
|
||||
const name = path.basename(svgFile, '.svg');
|
||||
const svg = getSvg(svgFile);
|
||||
const contents = getSvgContents(svg);
|
||||
return { name, contents };
|
||||
})
|
||||
.reduce((icons, icon) => {
|
||||
icons[icon.name] = icon.contents;
|
||||
return icons;
|
||||
}, {});
|
||||
}
|
||||
|
||||
function getSvgContents(svg) {
|
||||
const $ = cheerioLoad(svg);
|
||||
return minify($('svg').html(), { collapseWhitespace: true });
|
||||
}
|
||||
|
||||
export const asyncForEach = async (array, callback) => {
|
||||
for (let index = 0; index < array.length; index++) {
|
||||
await callback(array[index], index, array);
|
||||
}
|
||||
};
|
||||
|
||||
export const createScreenshot = (filePath, retina = true) => {
|
||||
cp.execSync(`rsvg-convert -x 2 -y 2 ${filePath} > ${filePath.replace('.svg', '.png')}`);
|
||||
|
||||
if (retina) {
|
||||
cp.execSync(`rsvg-convert -x 4 -y 4 ${filePath} > ${filePath.replace('.svg', '@2x.png')}`);
|
||||
}
|
||||
};
|
||||
|
||||
export const createSvgSymbol = (svg, name, stroke) => {
|
||||
return svg
|
||||
.replace('<svg', `<symbol id="${name}"`)
|
||||
.replace(' width="24" height="24"', '')
|
||||
.replace(' stroke-width="2"', ` stroke-width="${stroke}"`)
|
||||
.replace('</svg>', '</symbol>')
|
||||
.replace(/\n\s+/g, ' ')
|
||||
.replace(/<!--(.*?)-->/gis, '')
|
||||
.trim();
|
||||
};
|
||||
|
||||
export const generateIconsPreview = async function (
|
||||
files,
|
||||
destFile,
|
||||
{
|
||||
columnsCount = 19,
|
||||
paddingOuter = 7,
|
||||
color = '#354052',
|
||||
background = '#fff',
|
||||
png = true,
|
||||
stroke = 2,
|
||||
retina = true,
|
||||
} = {},
|
||||
) {
|
||||
const padding = 20,
|
||||
iconSize = 24;
|
||||
|
||||
const iconsCount = files.length,
|
||||
rowsCount = Math.ceil(iconsCount / columnsCount),
|
||||
width = columnsCount * (iconSize + padding) + 2 * paddingOuter - padding,
|
||||
height = rowsCount * (iconSize + padding) + 2 * paddingOuter - padding;
|
||||
|
||||
let svgContentSymbols = '',
|
||||
svgContentIcons = '',
|
||||
x = paddingOuter,
|
||||
y = paddingOuter;
|
||||
|
||||
files.forEach(function (file, i) {
|
||||
const name = file.replace(/^(.*)\/([^\/]+)\/([^.]+).svg$/g, '$2-$3');
|
||||
|
||||
let svgFile = readFileSync(file),
|
||||
svgFileContent = svgFile.toString();
|
||||
|
||||
svgFileContent = createSvgSymbol(svgFileContent, name, stroke);
|
||||
|
||||
svgContentSymbols += `\t${svgFileContent}\n`;
|
||||
svgContentIcons += `\t<use xlink:href="#${name}" x="${x}" y="${y}" width="${iconSize}" height="${iconSize}" />\n`;
|
||||
|
||||
x += padding + iconSize;
|
||||
|
||||
if (i % columnsCount === columnsCount - 1) {
|
||||
x = paddingOuter;
|
||||
y += padding + iconSize;
|
||||
}
|
||||
});
|
||||
|
||||
const svgContent = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="color: ${color}"><rect x="0" y="0" width="${width}" height="${height}" fill="${background}"></rect>\n${svgContentSymbols}\n${svgContentIcons}\n</svg>`;
|
||||
|
||||
console.log(destFile);
|
||||
|
||||
writeFileSync(destFile, svgContent);
|
||||
|
||||
if (png) {
|
||||
await createScreenshot(destFile, retina);
|
||||
}
|
||||
};
|
||||
|
||||
export const printChangelog = function (newIcons, modifiedIcons, renamedIcons, pretty = false) {
|
||||
if (newIcons.length > 0) {
|
||||
if (pretty) {
|
||||
console.log(`### ${newIcons.length} new icon${newIcons.length > 1 ? 's' : ''}:\n`);
|
||||
|
||||
newIcons.forEach(function (icon, i) {
|
||||
console.log(`- \`${icon}\``);
|
||||
});
|
||||
} else {
|
||||
let str = '';
|
||||
str += `${newIcons.length} new icon${newIcons.length > 1 ? 's' : ''}: `;
|
||||
|
||||
newIcons.forEach(function (icon, i) {
|
||||
str += `\`${icon}\``;
|
||||
|
||||
if (i + 1 <= newIcons.length - 1) {
|
||||
str += ', ';
|
||||
}
|
||||
});
|
||||
|
||||
console.log(str);
|
||||
}
|
||||
|
||||
console.log('');
|
||||
}
|
||||
|
||||
if (modifiedIcons.length > 0) {
|
||||
let str = '';
|
||||
str += `Fixed icon${modifiedIcons.length > 1 ? 's' : ''}: `;
|
||||
|
||||
modifiedIcons.forEach(function (icon, i) {
|
||||
str += `\`${icon}\``;
|
||||
|
||||
if (i + 1 <= modifiedIcons.length - 1) {
|
||||
str += ', ';
|
||||
}
|
||||
});
|
||||
|
||||
console.log(str);
|
||||
console.log('');
|
||||
}
|
||||
|
||||
if (renamedIcons.length > 0) {
|
||||
console.log(`Renamed icons: `);
|
||||
|
||||
renamedIcons.forEach(function (icon, i) {
|
||||
console.log(`- \`${icon[0]}\` renamed to \`${icon[1]}\``);
|
||||
});
|
||||
}
|
||||
|
||||
console.log('');
|
||||
};
|
||||
|
||||
export const getCompileOptions = () => {
|
||||
const compileOptions = {
|
||||
includeIcons: [],
|
||||
strokeWidth: null,
|
||||
fontForge: 'fontforge',
|
||||
};
|
||||
|
||||
if (existsSync('../compile-options.json')) {
|
||||
try {
|
||||
const tempOptions = JSON.parse(readFileSync('../compile-options.json').toString());
|
||||
|
||||
if (typeof tempOptions !== 'object') {
|
||||
throw 'Compile options file does not contain an json object';
|
||||
}
|
||||
|
||||
if (typeof tempOptions.includeIcons !== 'undefined') {
|
||||
if (!Array.isArray(tempOptions.includeIcons)) {
|
||||
throw 'property inludeIcons is not an array';
|
||||
}
|
||||
compileOptions.includeIcons = tempOptions.includeIcons;
|
||||
}
|
||||
|
||||
if (typeof tempOptions.includeCategories !== 'undefined') {
|
||||
if (typeof tempOptions.includeCategories === 'string') {
|
||||
tempOptions.includeCategories = tempOptions.includeCategories.split(' ');
|
||||
}
|
||||
if (!Array.isArray(tempOptions.includeCategories)) {
|
||||
throw 'property includeCategories is not an array or string';
|
||||
}
|
||||
const tags = Object.entries(require('./tags.json'));
|
||||
tempOptions.includeCategories.forEach(function (category) {
|
||||
category = category.charAt(0).toUpperCase() + category.slice(1);
|
||||
for (const [icon, data] of tags) {
|
||||
if (data.category === category && compileOptions.includeIcons.indexOf(icon) === -1) {
|
||||
compileOptions.includeIcons.push(icon);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof tempOptions.excludeIcons !== 'undefined') {
|
||||
if (!Array.isArray(tempOptions.excludeIcons)) {
|
||||
throw 'property excludeIcons is not an array';
|
||||
}
|
||||
compileOptions.includeIcons = compileOptions.includeIcons.filter(function (icon) {
|
||||
return tempOptions.excludeIcons.indexOf(icon) === -1;
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof tempOptions.excludeOffIcons !== 'undefined' && tempOptions.excludeOffIcons) {
|
||||
// Exclude `*-off` icons
|
||||
compileOptions.includeIcons = compileOptions.includeIcons.filter(function (icon) {
|
||||
return !icon.endsWith('-off');
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof tempOptions.strokeWidth !== 'undefined') {
|
||||
if (
|
||||
typeof tempOptions.strokeWidth !== 'string' &&
|
||||
typeof tempOptions.strokeWidth !== 'number'
|
||||
) {
|
||||
throw 'property strokeWidth is not a string or number';
|
||||
}
|
||||
compileOptions.strokeWidth = tempOptions.strokeWidth.toString();
|
||||
}
|
||||
|
||||
if (typeof tempOptions.fontForge !== 'undefined') {
|
||||
if (typeof tempOptions.fontForge !== 'string') {
|
||||
throw 'property fontForge is not a string';
|
||||
}
|
||||
compileOptions.fontForge = tempOptions.fontForge;
|
||||
}
|
||||
} catch (error) {
|
||||
throw `Error reading compile-options.json: ${error}`;
|
||||
}
|
||||
}
|
||||
|
||||
return compileOptions;
|
||||
};
|
||||
|
||||
export const convertIconsToImages = async (dir, extension, size = 240) => {
|
||||
const rsvgConvertAvailable = await new Promise((resolve) => {
|
||||
exec('command -v rsvg-convert', (error) => {
|
||||
resolve(!error);
|
||||
});
|
||||
});
|
||||
|
||||
if (!rsvgConvertAvailable) {
|
||||
console.log(`\nWarning: rsvg-convert not found. Skipping ${extension} conversion.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const icons = getAllIcons();
|
||||
|
||||
await asyncForEach(Object.entries(icons), async function ([type, svgFiles]) {
|
||||
mkdirSync(path.join(dir, `./${type}`), { recursive: true });
|
||||
|
||||
await asyncForEach(svgFiles, async function (file, i) {
|
||||
const distPath = path.join(dir, `./${type}/${file.name}.${extension}`);
|
||||
|
||||
// process.stdout.write(
|
||||
// `Building \`icons/${extension}\` ${type} ${i}/${svgFiles.length}: ${file.name.padEnd(42)}\r`,
|
||||
// );
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
exec(`rsvg-convert -f ${extension} -h ${size} ${file.path} > ${distPath}`, (error) => {
|
||||
error ? reject() : resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const getMaxUnicode = () => {
|
||||
const files = globSync(path.join(ICONS_SRC_DIR, '**/*.svg'));
|
||||
let maxUnicode = 0;
|
||||
|
||||
files.forEach(function (file) {
|
||||
const svgFile = readFileSync(file).toString();
|
||||
|
||||
svgFile.replace(/unicode: "([a-f0-9.]+)"/i, function (m, unicode) {
|
||||
const newUnicode = parseInt(unicode, 16);
|
||||
|
||||
if (newUnicode) {
|
||||
maxUnicode = Math.max(maxUnicode, newUnicode);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
console.log(`Max unicode: ${maxUnicode}`);
|
||||
|
||||
return maxUnicode;
|
||||
};
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Tabler Icons - version <%= v %></title>
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600" rel="stylesheet">
|
||||
<link rel="stylesheet" href="./<%= fileName %>.css">
|
||||
|
||||
<style>
|
||||
* { margin: 0; border: 0; outline: 0; box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
background: #fafbfc;
|
||||
font-size: 1rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
|
||||
background: #fafafa;
|
||||
border: 1px solid #f0f0f0;
|
||||
color: #666;
|
||||
padding: 2px 4px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 73rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.box {
|
||||
padding: 1rem;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 1px 1px rgba(0, 0, 0, .1);
|
||||
border-radius: 3px;
|
||||
border-top-right-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
|
||||
.tabler-icons {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.tabler-icon {
|
||||
width: 10rem;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
padding: .5rem .25rem 2rem;
|
||||
}
|
||||
|
||||
.tabler-icon i {
|
||||
display: block;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
height: 1em;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.tabler-icon code {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.tabler-icon strong {
|
||||
display: block;
|
||||
margin-bottom: .5rem;
|
||||
}
|
||||
|
||||
.tabler-icon-codes {
|
||||
line-height: 2em;
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: center;
|
||||
margin: 2rem 0 3rem;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 1px 1px rgba(0, 0, 0, .1);
|
||||
border-radius: 3px;
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
}
|
||||
.search-bar input[name=search]{
|
||||
padding:0.5rem;
|
||||
background: #fafbfc;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 1px 1px rgba(0, 0, 0, .1);
|
||||
width:100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header class="header">
|
||||
<h1>
|
||||
Tabler Icons
|
||||
</h1>
|
||||
<p class="text-muted">version <%= v %></p>
|
||||
</header>
|
||||
|
||||
<div class="search-bar">
|
||||
<input type="text" name="search" placeholder="type to search"/>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
<div class="tabler-icons">
|
||||
<% glyphs.forEach(function(glyph) { %>
|
||||
<div class="tabler-icon">
|
||||
<i class="ti ti-<%= glyph.name %>"></i>
|
||||
<strong><%= glyph.name %></strong>
|
||||
<div class="tabler-icon-codes">
|
||||
<code>ti ti-<%= glyph.name %></code><br>
|
||||
<code>\<%= glyph.unicode[0].codePointAt(0).toString(16) %></code>
|
||||
</div>
|
||||
</div>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
const input = document.querySelector("div.search-bar input");
|
||||
const iconContainer = document.querySelector("div.box div.tabler-icons");
|
||||
let icons = [];
|
||||
|
||||
document.querySelectorAll("div.tabler-icon").forEach(icon => icons.push({
|
||||
el : icon,
|
||||
name : icon.querySelector('strong').innerHTML,
|
||||
}));
|
||||
|
||||
input.addEventListener('input', search);
|
||||
|
||||
function search(evt){
|
||||
let searchValue = evt.target.value;
|
||||
let iconsToShow = searchValue.length ? icons.filter(icon => icon.name.includes(searchValue)) : icons;
|
||||
iconContainer.innerHTML = "";
|
||||
iconsToShow.forEach(icon => iconContainer.appendChild(icon.el));
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
@charset "UTF-8";
|
||||
/*!
|
||||
* Tabler Icons <%= v %> by tabler - https://tabler.io
|
||||
* License - https://github.com/tabler/tabler-icons/blob/master/LICENSE
|
||||
*/
|
||||
@use "sass:string";
|
||||
|
||||
$ti-font-family: '<%= fileName %>' !default;
|
||||
$ti-font-path: 'fonts' !default;
|
||||
$ti-font-display: null !default;
|
||||
$ti-prefix: 'ti' !default;
|
||||
|
||||
@font-face {
|
||||
font-family: $ti-font-family;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: $ti-font-display;
|
||||
src: url('#{$ti-font-path}/<%= fileName %>.eot');
|
||||
src: url('#{$ti-font-path}/<%= fileName %>.eot?#iefix') format('embedded-opentype'),
|
||||
url('#{$ti-font-path}/<%= fileName %>.woff2') format('woff2'),
|
||||
url('#{$ti-font-path}/<%= fileName %>.woff') format('woff'),
|
||||
url('#{$ti-font-path}/<%= fileName %>.ttf') format('truetype'),
|
||||
url("#{$ti-font-path}/<%= fileName %>.svg\##{$ti-font-family}") format("svg");
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: $ti-font-family;
|
||||
src: url("#{$ti-font-path}/<%= fileName %>.svg\##{$ti-font-family}") format("svg");
|
||||
}
|
||||
}
|
||||
|
||||
.#{$ti-prefix} {
|
||||
font-family: $ti-font-family !important;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
@function unicode($str) {
|
||||
@return string.unquote("\"")+string.unquote(string.insert($str, "\\", 1))+string.unquote("\"")
|
||||
}
|
||||
|
||||
<% glyphs.forEach(function(glyph) { %>
|
||||
$ti-icon-<%= glyph.name %>: unicode('<%= glyph.unicode[0].codePointAt(0).toString(16) %>');<% }); %>
|
||||
|
||||
<% glyphs.forEach(function(glyph) { %>
|
||||
.#{$ti-prefix}-<%= glyph.name %>:before { content: $ti-icon-<%= glyph.name %>; }<% }); %>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import { glob } from 'glob'
|
||||
import fs from 'fs'
|
||||
import { resolve, join, basename } from 'path'
|
||||
import { ICONS_SRC_DIR } from './helpers.mjs'
|
||||
|
||||
const extensions = ['heart', 'star', 'off', 'bolt', 'cancel', 'check', 'cog', 'dollar', 'dot', 'eco', 'edit', 'x', 'plus', 'minus', 'shield', 'up', 'down', 'move', 'link', 'ribbon', 'question', 'exclamation', '2', '3', 'code', 'pause', 'pin', 'search', 'share', 'hand', 'infinity', 'ai']
|
||||
//const extensions = ['off', 'ai', 'spark']
|
||||
|
||||
extensions.forEach(function (extension) {
|
||||
|
||||
glob.sync(join(ICONS_SRC_DIR, `outline/*-${extension}.svg`)).forEach(function (file, i) {
|
||||
const fileOriginal = file.replace(`-${extension}.svg`, '.svg')
|
||||
|
||||
if (fs.existsSync(fileOriginal)) {
|
||||
const dataOriginal = fs.readFileSync(fileOriginal).toString()
|
||||
|
||||
const categoryOriginal = dataOriginal.match(/category: ([a-zA-Z-]+)/),
|
||||
tagsOriginal = dataOriginal.match(/tags: (\[.*?\])/)
|
||||
|
||||
if (categoryOriginal || tagsOriginal) {
|
||||
|
||||
let data = readFileSync(file).toString()
|
||||
data = data.replace(/(\<\!--[\s\S]+?-->)/, function (m, headerContent) {
|
||||
console.log('categoryOriginal', fileOriginal, categoryOriginal && categoryOriginal[1], tagsOriginal && tagsOriginal[1])
|
||||
|
||||
if (categoryOriginal) {
|
||||
headerContent = headerContent.replace(/category: .*\n/, '')
|
||||
headerContent = headerContent.replace(/\<\!--/, `<!--\ncategory: ${categoryOriginal[1]}`)
|
||||
}
|
||||
|
||||
// if (tagsOriginal) {
|
||||
// headerContent = headerContent.replace(/tags: .*\n/, '')
|
||||
// headerContent = headerContent.replace(/\<\!--/, `<!--\ntags: ${tagsOriginal[1]}`)
|
||||
// }
|
||||
|
||||
return headerContent
|
||||
})
|
||||
|
||||
fs.writeFileSync(file, data)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import fs from 'fs'
|
||||
import { join } from 'path'
|
||||
import { HOME_DIR } from './helpers.mjs'
|
||||
|
||||
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(join(HOME_DIR, 'new/tags.json'), 'utf-8'))
|
||||
|
||||
for (const [key, tags] of Object.entries(data)) {
|
||||
|
||||
const filename = join(HOME_DIR, `icons/outline/${key}.svg`), tagsInline = tags
|
||||
.join(' ')
|
||||
.toLowerCase()
|
||||
.split(' ')
|
||||
.filter((value, index, array) => array.indexOf(value) === index)
|
||||
.join(', ')
|
||||
|
||||
if (key && tags.length) {
|
||||
let data = fs.readFileSync(filename).toString()
|
||||
data = data.replace(/(\<\!--[\s\S]+?-->)/, function (m, headerContent) {
|
||||
|
||||
headerContent = headerContent.replace(/tags: .*\n/, '')
|
||||
headerContent = headerContent.replace(/\<\!--/, `<!--\ntags: [${tagsInline}]`)
|
||||
|
||||
return headerContent
|
||||
})
|
||||
|
||||
console.log(`Updating ${key} with tags: ${tagsInline}`)
|
||||
fs.writeFileSync(filename, data)
|
||||
}
|
||||
}
|
||||
|
||||
console.log('CSV file successfully processed')
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
import { readFileSync, existsSync, writeFileSync } from 'fs'
|
||||
import { glob } from 'glob'
|
||||
import { resolve, basename } from 'path'
|
||||
import { HOME_DIR, optimizeSVG, iconTemplate, types } from './helpers.mjs'
|
||||
|
||||
types.forEach(type => {
|
||||
const files = glob.sync(resolve(HOME_DIR, `./new/${type}/*.svg`))
|
||||
|
||||
files.forEach(function (file, i) {
|
||||
let fileData = readFileSync(file).toString(),
|
||||
filename = basename(file, '.svg')
|
||||
|
||||
console.log(`${type}/${filename}`)
|
||||
|
||||
fileData = optimizeSVG(fileData)
|
||||
|
||||
if (fileData.match(/transform="/)) {
|
||||
throw new Error(`File ${file} has \`transform\` in code!!`)
|
||||
}
|
||||
|
||||
if (filename.match(/\s/)) {
|
||||
throw new Error(`File ${file} has space in name!!`)
|
||||
}
|
||||
|
||||
fileData = fileData.replace(/---/g, '')
|
||||
.replace(/fill="none"/g, '')
|
||||
.replace(/fill="#D8D8D8"/gi, '')
|
||||
.replace(/fill-rule="evenodd"/g, '')
|
||||
.replace(/stroke-linecap="round"/g, '')
|
||||
.replace(/stroke-linejoin="round"/g, '')
|
||||
.replace(/viewBox="0 0 24 24"/g, '')
|
||||
.replace(/stroke="#000000"/g, '')
|
||||
.replace(/stroke="#000"/g, '')
|
||||
.replace(/stroke-width="2"/g, '')
|
||||
.replace(/width="24"/g, '')
|
||||
.replace(/width="24px"/g, '')
|
||||
.replace(/height="24"/g, '')
|
||||
.replace(/height="24px"/g, '')
|
||||
.replace(/clip-rule="evenodd"/g, '')
|
||||
.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g, '')
|
||||
.replace(/<path d="M0 0h24v24H0z"\/>"/g, '')
|
||||
.replace(/<path stroke="red" stroke-width=".1" d="[^"]+"\s?\/>/g, '')
|
||||
.replace(/<path[^>]*fill-opacity=".1"[^>]*\/>/g, '')
|
||||
.replace(/<path[^>]*stroke="red"[^>]*\/>/gs, '')
|
||||
.replace(/<circle[^>]*stroke="red"[^>]*\/>/gs, '')
|
||||
.replace(/<path[^>]*fill="red"[^>]*\/>/gs, '')
|
||||
.replace(/<g[^>]*stroke="red"[^>]*>.*?<\/g>/gs, '')
|
||||
.replace(/<svg\s+>/gs, '<svg>')
|
||||
|
||||
fileData = optimizeSVG(fileData)
|
||||
|
||||
|
||||
fileData = fileData.replace(/<svg>/g, `<!--\n-->\n${iconTemplate(type)}`)
|
||||
|
||||
if (type == "filled") {
|
||||
fileData = fileData
|
||||
.replace('stroke-width="2"', '')
|
||||
.replace('stroke-linecap="round"', '')
|
||||
.replace('stroke-linejoin="round"', '')
|
||||
.replace('stroke="currentColor"', '')
|
||||
.replace('fill="none"', 'fill="currentColor"')
|
||||
// remove empty lines
|
||||
.replace(/^\s*[\r\n]/gm, '')
|
||||
}
|
||||
|
||||
if (existsSync(`./icons/${type}/${filename}.svg`)) {
|
||||
const newFileData = readFileSync(`./icons/${type}/${filename}.svg`).toString()
|
||||
const m = newFileData.match(/(<!--.*-->)/gms)
|
||||
|
||||
if (m) {
|
||||
fileData = fileData.replace('<!--\n-->', m[0])
|
||||
}
|
||||
} else if (filename.match(/\-filled$/)) {
|
||||
fileData = fileData
|
||||
.replace(/<!--\n-->/g, '<!--\ncategory: Filled\n-->')
|
||||
} else if (filename.match(/brand\-/)) {
|
||||
fileData = fileData
|
||||
.replace(/<!--\n-->/g, '<!--\ncategory: Brand\n-->')
|
||||
}
|
||||
|
||||
|
||||
writeFileSync(`./icons/${type}/${filename}.svg`, fileData)
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
import { globSync } from 'glob'
|
||||
import { readFileSync, writeFileSync } from 'fs'
|
||||
import { join, basename } from 'path'
|
||||
import { optimizePath, ICONS_SRC_DIR, iconTemplate, types } from './helpers.mjs'
|
||||
|
||||
types.forEach(type => {
|
||||
const files = globSync(join(ICONS_SRC_DIR, type, '*.svg'))
|
||||
|
||||
files.forEach(function (file, i) {
|
||||
console.log(`Optimize ${basename(file)}`);
|
||||
|
||||
// Read files
|
||||
let svgFile = readFileSync(file),
|
||||
svgFileContent = svgFile.toString()
|
||||
|
||||
// Optimize SVG
|
||||
svgFileContent = svgFileContent.replace(/><\/(polyline|line|rect|circle|path|ellipse)>/g, '/>')
|
||||
.replace(/rx="([^"]+)"\s+ry="\1"/g, 'rx="$1"')
|
||||
.replace(/<path stroke="red" stroke-width="\.1"([^>]+)?\/>/g, '')
|
||||
.replace(/<path[^>]+d="M0 0h24v24h-24z"[^>]+\/>/g, '')
|
||||
.replace(/\s?\/>/g, ' />')
|
||||
.replace(/\n\s*<(line|circle|path|polyline|rect|ellipse)/g, '\n <$1')
|
||||
// .replace(/polyline points="([0-9.]+)\s([0-9.]+)\s([0-9.]+)\s([0-9.]+)"/g, 'line x1="$1" y1="$2" x2="$3" y2="$4"')
|
||||
.replace(/<line x1="([^"]+)" y1="([^"]+)" x2="([^"]+)" y2="([^"]+)"\s*\/>/g, function (f, x1, y1, x2, y2) {
|
||||
return `<path d="M${x1} ${y1}L${x2} ${y2}" />`
|
||||
})
|
||||
.replace(/<circle cx="([^"]+)" cy="([^"]+)" r="([^"]+)"([^>]*)?\/>/g, function (f, cx, cy, r, attrs) {
|
||||
return `<path d="M ${cx - r} ${cy}a ${r} ${r} 0 1 0 ${r * 2} 0a ${r} ${r} 0 1 0 ${r * -2} 0"${attrs}/>`
|
||||
})
|
||||
.replace(/<ellipse cx="([^"]+)" cy="([^"]+)" rx="([^"]+)"\s+\/>/g, function (f, cx, cy, rx) {
|
||||
return `<ellipse cx="${cx}" cy="${cy}" rx="${rx}" ry="${rx}" />`
|
||||
})
|
||||
.replace(/<ellipse cx="([^"]+)" cy="([^"]+)" rx="([^"]+)" ry="([^"]+)"\s+\/>/g, function (f, cx, cy, rx, ry) {
|
||||
return `<path d="M${cx} ${cy}m -${rx} 0a${rx} ${ry} 0 1 0 ${rx * 2} 0a ${rx} ${ry} 0 1 0 -${rx * 2} 0" />`
|
||||
})
|
||||
.replace(/<rect width="([^"]+)" height="([^"]+)" x="([^"]+)" y="([^"]+)"(.*)?\/>/g, function (f, width, height, x, y, attrs) {
|
||||
return `<rect x="${x}" y="${y}" width="${width}" height="${height}"${attrs} />`
|
||||
})
|
||||
.replace(/<rect x="([^"]+)" y="([^"]+)" rx="([^"]+)" width="([^"]+)" height="([^"]+)"\s+\/>/g, function (f, x, y, rx, width, height) {
|
||||
return `<rect x="${x}" y="${y}" width="${height}" height="${height}" rx="${rx}" />`
|
||||
})
|
||||
.replace(/<rect x="([^"]+)" y="([^"]+)" width="([^"]+)" height="([^"]+)" rx="([^"]+)"\s+\/>/g, function (f, x, y, width, height, rx) {
|
||||
return `<path d="M ${x} ${y}m 0 ${rx}a${rx} ${rx} 0 0 1 ${rx} ${-rx}h${width - rx * 2}a${rx} ${rx} 0 0 1 ${rx} ${rx}v${height - rx * 2}a${rx} ${rx} 0 0 1 ${-rx} ${rx}h${-width + rx * 2}a${rx} ${rx} 0 0 1 ${-rx} ${-rx}Z" />`
|
||||
})
|
||||
.replace(/<rect x="([^"]+)" y="([^"]+)" width="([^"]+)" height="([^"]+)"\s+\/>/g, function (f, x, y, width, height) {
|
||||
return `<path d="M ${x} ${y}h${width}v${height}h${-width}Z" />`
|
||||
})
|
||||
.replace(/<polyline points="([^"]+)\s?"\s+\/>/g, function (f, points) {
|
||||
const path = points.split(' ').reduce(
|
||||
(accumulator, currentValue, currentIndex) => `${accumulator}${currentIndex % 2 === 0 ? (currentIndex === 0 ? 'M' : 'L') : ''}${currentValue} `,
|
||||
''
|
||||
)
|
||||
return `<path d="${path}" />`
|
||||
})
|
||||
.replace(/<path d="([^"]+)"/g, function (f, r1) {
|
||||
r1 = optimizePath(r1)
|
||||
|
||||
return `<path d="${r1}"`
|
||||
})
|
||||
.replace(/<path\s+d="([^"]+)"/g, function (f, d) {
|
||||
const d2 = d
|
||||
.replace(/m0 0/g, (f, m) => ``)
|
||||
.replace(/ 0\./g, ' .')
|
||||
.replace(/ -0\./g, ' -.')
|
||||
.replace(/([amcvhslAMCVHLS]) /g, '$1')
|
||||
|
||||
return `<path d="${d2}"`
|
||||
})
|
||||
.replace(/d="m/g, 'd="M')
|
||||
.replace(/([Aa])\s?([0-9.]+)[\s,]([0-9.]+)[\s,]([0-9.]+)[\s,]?([0-1])[\s,]?([0-1])[\s,]?(-?[0-9.]+)[\s,]?(-?[0-9.]+)/gi, '$1$2 $3 $4 $5 $6 $7 $8')
|
||||
.replace(/<path[^>]*d=["']([^"']*?)a([\d.]+)\s+([\d.]+)\s([01])\s([01])\s([01]+)\s([0-9.-]+)\s([0-9.-]+)a\2\s+\3\s+([01])\s+([01])\s([01]+)\s([0-9.-]+)\s([0-9.-]+)z([^"']*?)["']\s+\/>/g, function (match, d, rx, ry, flag1, flag2, extra1, x1, y1, flag3, flag4, extra2, x2, y2, afterZ) {
|
||||
return `<path d="${d}a${rx} ${ry} ${flag1} ${flag2} ${extra1} ${x1} ${y1}a${rx} ${ry} ${flag3} ${flag4} ${extra2} ${x2} ${y2}${afterZ}" />`
|
||||
})
|
||||
.replace(/<path[^>]*d=["']([^"']*?)M([0-9.-]+)\s([0-9.-]+)m([0-9.-]+)\s([0-9.-]+)([^"']*?)["'](.*)?\/>/g, function (match, d, x1, y1, x2, y2, afterM, attrs) {
|
||||
return `<path d="${d}M${Number(x1) + Number(x2)} ${Number(y1) + Number(y2)}${afterM}"${attrs} />`
|
||||
})
|
||||
.replace(/\n\s+\n+/g, '\n')
|
||||
.replace(/<path d="([^"]+)"/g, function (f, d) {
|
||||
const d2 = d
|
||||
.replace(/v0/g, (f, v) => ``)
|
||||
.replace(/h0/g, (f, h) => ``)
|
||||
|
||||
return `<path d="${d2}"`
|
||||
})
|
||||
|
||||
// Add icon template
|
||||
svgFileContent = svgFileContent.replace(/<svg[^>]+>/, iconTemplate(type))
|
||||
|
||||
// Remove stroke and fill
|
||||
if (file.match(/\/filled\//)) {
|
||||
svgFileContent = svgFileContent
|
||||
.replace(/stroke-width="0" fill="currentColor"/gm, '')
|
||||
.replace('stroke-width="2"', '')
|
||||
.replace('stroke-linecap="round"', '')
|
||||
.replace('stroke-linejoin="round"', '')
|
||||
.replace('stroke="currentColor"', '')
|
||||
.replace('fill="none"', 'fill="currentColor"')
|
||||
.replace(/^\s*[\r\n]/gm, '')
|
||||
.replace(/\s{2,}\//g, ' /')
|
||||
}
|
||||
|
||||
// Add comment if not exists
|
||||
if (!svgFileContent.includes('<!--')) {
|
||||
svgFileContent = '<!--\n-->\n' + svgFileContent
|
||||
}
|
||||
|
||||
svgFileContent = svgFileContent.replace(/tags: \[([^]+)\]/, (m, tags) => {
|
||||
tags = [...new Set(tags.split(',').map(t => t.trim()))].filter(t => t).join(', ')
|
||||
|
||||
return `tags: [${tags}]`
|
||||
})
|
||||
|
||||
// Write files
|
||||
if (svgFile.toString() !== svgFileContent) {
|
||||
writeFileSync(file, svgFileContent)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
import { globSync } from 'glob'
|
||||
import { GITHUB_DIR, generateIconsPreview, ICONS_SRC_DIR, asyncForEach } from './helpers.mjs'
|
||||
import path from 'path'
|
||||
|
||||
const types = {
|
||||
'-outline': 'outline',
|
||||
'-filled': 'filled',
|
||||
'': '**'
|
||||
}
|
||||
|
||||
asyncForEach(Object.entries(types), async ([type, dir]) => {
|
||||
const files = globSync(path.join(ICONS_SRC_DIR, `${dir}/*.svg`)).sort((a, b) => path.basename(a).localeCompare(path.basename(b)))
|
||||
|
||||
await generateIconsPreview(files, path.join(GITHUB_DIR, `preview/icons${type}.svg`), {
|
||||
retina: false,
|
||||
stroke: 1.5
|
||||
})
|
||||
|
||||
await generateIconsPreview(files, path.join(GITHUB_DIR, `preview/icons${type}-dark.svg`), {
|
||||
color: '#ffffff',
|
||||
background: 'transparent',
|
||||
retina: false,
|
||||
stroke: 1.5
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import { globSync } from 'glob'
|
||||
import { ICONS_SRC_DIR, generateIconsPreview, GITHUB_DIR } from './helpers.mjs'
|
||||
import path from 'path'
|
||||
|
||||
let files = globSync(path.join(ICONS_SRC_DIR, 'outline/*.svg'))
|
||||
|
||||
files = files.filter(file =>
|
||||
!file.endsWith('-filled.svg')
|
||||
&& !file.endsWith('-off.svg')
|
||||
&& !file.includes('number-')
|
||||
&& !file.includes('letter-')
|
||||
&& !file.includes('loader')
|
||||
&& !file.includes('small')
|
||||
);
|
||||
|
||||
files = files.sort(() => Math.random() - 0.5)
|
||||
|
||||
files = files.slice(0, 500)
|
||||
|
||||
await generateIconsPreview(files, path.join(GITHUB_DIR, 'preview/random-icons.svg'), {
|
||||
background: 'transparent',
|
||||
columnsCount: 25,
|
||||
stroke: 1.5
|
||||
})
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
import fs from 'fs'
|
||||
import { createScreenshot } from './helpers.mjs'
|
||||
import { ICONS_SRC_DIR } from './helpers.mjs'
|
||||
import path from 'path'
|
||||
|
||||
const icon = 'ghost',
|
||||
strokes = ['.25', '.5', '.75', '1', '1.25', '1.5', '1.75', '2', '2.25', '2.5', '2.25'],
|
||||
svgFileContent = fs.readFileSync(path.join(ICONS_SRC_DIR, `outline/${icon}.svg`), 'utf-8'),
|
||||
padding = 16,
|
||||
paddingOuter = 3,
|
||||
iconSize = 56,
|
||||
width = 830,
|
||||
height = iconSize + paddingOuter * 2
|
||||
|
||||
let svgContentSymbols = '',
|
||||
svgContentIcons = '',
|
||||
x = paddingOuter
|
||||
|
||||
strokes.forEach(function (stroke) {
|
||||
let svgFileContentStroked = createSvgSymbol(svgFileContent, `icon-${stroke}`, stroke)
|
||||
|
||||
svgFileContent
|
||||
.replace('<svg', `<symbol id="icon-${stroke}"`)
|
||||
.replace(' width="24" height="24"', '')
|
||||
.replace(' stroke-width="2"', ` stroke-width="${stroke}"`)
|
||||
.replace('</svg>', '</symbol>')
|
||||
.replace(/\n\s+/g, ' ')
|
||||
.replace(/<!--(.*?)-->/gis, '')
|
||||
|
||||
svgContentSymbols += `\t${svgFileContentStroked}\n`
|
||||
svgContentIcons += `\t<use xlink:href="#icon-${stroke}" x="${x}" y="${paddingOuter}" width="${iconSize}" height="${iconSize}" />\n`
|
||||
|
||||
x += padding + iconSize
|
||||
})
|
||||
|
||||
const svgContent = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="color: #354052"><rect x="0" y="0" width="${width}" height="${height}" fill="#fff"></rect>\n${svgContentSymbols}\n${svgContentIcons}\n</svg>`
|
||||
const svgContentDark = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="color: #ffffff"><rect x="0" y="0" width="${width}" height="${height}" fill="transparent"></rect>\n${svgContentSymbols}\n${svgContentIcons}\n</svg>`
|
||||
|
||||
fs.writeFileSync('.github/icons-stroke.svg', svgContent)
|
||||
fs.writeFileSync('.github/icons-stroke-dark.svg', svgContentDark)
|
||||
await createScreenshot('.github/icons-stroke.svg')
|
||||
await createScreenshot('.github/icons-stroke-dark.svg')
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
import { visualizer } from 'rollup-plugin-visualizer'
|
||||
import license from 'rollup-plugin-license'
|
||||
import esbuild from 'rollup-plugin-esbuild'
|
||||
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
||||
|
||||
const getRollupPlugins = (pkg, minify) => {
|
||||
return [
|
||||
esbuild({
|
||||
minify
|
||||
}),
|
||||
nodeResolve({
|
||||
extensions: ['.js', '.ts', '.jsx', '.tsx'],
|
||||
// resolveOnly: [/^@tabler\/.*$/],
|
||||
}),
|
||||
license({
|
||||
banner: `@license ${pkg.name} v${pkg.version} - ${pkg.license}
|
||||
|
||||
This source code is licensed under the ${pkg.license} license.
|
||||
See the LICENSE file in the root directory of this source tree.`
|
||||
}),
|
||||
visualizer({
|
||||
sourcemap: false,
|
||||
filename: `stats/${pkg.name}${minify ? '-min' : ''}.html`
|
||||
})
|
||||
].filter(Boolean)
|
||||
}
|
||||
|
||||
export const getRollupConfig = (pkg, outputFileName, bundles, globals) => {
|
||||
return bundles
|
||||
.map(({
|
||||
inputs,
|
||||
format,
|
||||
minify,
|
||||
preserveModules,
|
||||
outputDir = 'dist',
|
||||
extension = 'js',
|
||||
exports = 'named',
|
||||
outputFile,
|
||||
external = [],
|
||||
paths
|
||||
}) => {
|
||||
return inputs.map(input => ({
|
||||
input,
|
||||
plugins: getRollupPlugins(pkg, minify),
|
||||
external: [...Object.keys(globals), ...external],
|
||||
output: {
|
||||
name: pkg.name,
|
||||
...(preserveModules
|
||||
? {
|
||||
dir: `${outputDir}/${format}`,
|
||||
entryFileNames: `[name].${extension}`,
|
||||
}
|
||||
: {
|
||||
file: outputFile ?? `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.${extension}`,
|
||||
}),
|
||||
format,
|
||||
sourcemap: true,
|
||||
preserveModules,
|
||||
preserveModulesRoot: 'src',
|
||||
globals,
|
||||
exports,
|
||||
paths
|
||||
},
|
||||
}))
|
||||
})
|
||||
.flat();
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
import { globSync } from 'glob'
|
||||
import { readFileSync, writeFileSync } from 'fs'
|
||||
import path from 'path'
|
||||
import { ICONS_SRC_DIR, getMaxUnicode, getPackageJson } from './helpers.mjs'
|
||||
|
||||
const pkg = getPackageJson(),
|
||||
newVersion = process.env.NEW_VERSION || pkg.version
|
||||
|
||||
const files = globSync(path.join(ICONS_SRC_DIR, '**/*.svg'))
|
||||
|
||||
let maxUnicode = getMaxUnicode()
|
||||
|
||||
files.forEach(function (file) {
|
||||
let svgFile = readFileSync(file).toString()
|
||||
|
||||
// Add unicode to svg files
|
||||
if (!svgFile.match(/\nunicode: "?([a-f0-9.]+)"?/i)) {
|
||||
maxUnicode++
|
||||
const unicode = maxUnicode.toString(16)
|
||||
|
||||
if (unicode) {
|
||||
svgFile = svgFile.replace(/-->\s?\n<svg/i, function (m) {
|
||||
return `unicode: "${unicode}"\n${m}`
|
||||
})
|
||||
|
||||
console.log(`Add unicode "${unicode}" to "${file}"`)
|
||||
writeFileSync(file, svgFile, 'utf8')
|
||||
}
|
||||
}
|
||||
|
||||
if (newVersion) {
|
||||
// Add version to svg files
|
||||
if (!svgFile.match(/\nversion: "?([a-f0-9.]+)"?/i)) {
|
||||
const minorVersion = newVersion.split('.').slice(0, 2).join('.')
|
||||
|
||||
console.log(svgFile);
|
||||
|
||||
svgFile = svgFile.replace(/-->\s?\n<svg/i, function (m) {
|
||||
return `version: "${minorVersion}"\n${m}`
|
||||
})
|
||||
|
||||
console.log(svgFile);
|
||||
|
||||
console.log(`Add version "${minorVersion}" to "${file}"`)
|
||||
writeFileSync(file, svgFile, 'utf8')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import { readFileSync, writeFileSync } from 'fs'
|
||||
import { glob } from 'glob'
|
||||
import { resolve } from 'path'
|
||||
import { HOME_DIR, ICONS_SRC_DIR } from './helpers.mjs'
|
||||
|
||||
let count = glob.sync(resolve(ICONS_SRC_DIR, '**/*.svg')).length,
|
||||
outlineCount = glob.sync(resolve(ICONS_SRC_DIR, '**/outline/*.svg')).length,
|
||||
filledCount = glob.sync(resolve(ICONS_SRC_DIR, '**/filled/*.svg')).length
|
||||
|
||||
console.log('count', count);
|
||||
console.log('filledCount', filledCount);
|
||||
console.log('outlineCount', outlineCount);
|
||||
|
||||
const readmes = glob.sync(resolve(HOME_DIR, '{.,packages/*}/README.md'))
|
||||
|
||||
readmes.forEach(readme => {
|
||||
let fileData = readFileSync(readme).toString()
|
||||
|
||||
fileData = fileData.replace(/<!--icons-count-->(.*?)<!--\/icons-count-->/, `<!--icons-count-->${count}<!--/icons-count-->`)
|
||||
.replace(/<!--icons-count-outline-->(.*?)<!--\/icons-count-outline-->/, `<!--icons-count-outline-->${outlineCount}<!--/icons-count-outline-->`)
|
||||
.replace(/<!--icons-count-filled-->(.*?)<!--\/icons-count-filled-->/, `<!--icons-count-filled-->${filledCount}<!--/icons-count-filled-->`)
|
||||
|
||||
writeFileSync(readme, fileData)
|
||||
})
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,265 @@
|
|||
import { globSync } from 'glob'
|
||||
import fs from 'fs'
|
||||
import { basename } from 'path'
|
||||
import { HOME_DIR, ICONS_SRC_DIR, iconTemplate, parseMatter, types, getArgvs, categories } from './helpers.mjs'
|
||||
import { join } from 'path'
|
||||
import { execSync } from 'child_process'
|
||||
|
||||
let error = false
|
||||
|
||||
const outlineIconsNames = globSync(join(ICONS_SRC_DIR, 'outline/*.svg')).map(i => basename(i, '.svg')).sort(),
|
||||
filledIconsNames = globSync(join(ICONS_SRC_DIR, 'filled/*.svg')).map(i => basename(i, '.svg')).sort(),
|
||||
argvs = getArgvs(),
|
||||
aliases = JSON.parse(fs.readFileSync(join(HOME_DIR, 'aliases.json'), 'utf-8'));
|
||||
|
||||
let unicodes = []
|
||||
|
||||
// Validate that only .svg files exist in icons/filled and icons/outline directories
|
||||
types.forEach(type => {
|
||||
const dirPath = join(ICONS_SRC_DIR, type)
|
||||
const files = fs.readdirSync(dirPath)
|
||||
|
||||
files.forEach(file => {
|
||||
// Ignore .DS_Store (macOS system file)
|
||||
if (file === '.DS_Store') {
|
||||
return
|
||||
}
|
||||
|
||||
if (!file.endsWith('.svg')) {
|
||||
console.log(`⛔️ Directory \`icons/${type}\` contains non-SVG file: \`${file}\``)
|
||||
error = true
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const duplicateExists = (arr) => {
|
||||
return new Set(arr).size !== arr.length
|
||||
}
|
||||
|
||||
const getIconName = (icon) => {
|
||||
//return last two parts of the path
|
||||
return icon.split('/').slice(-2).join('/')
|
||||
}
|
||||
|
||||
function getAddedIconsFromMain() {
|
||||
try {
|
||||
// Use BASE_SHA or BASE_REF from environment, fallback to origin/main
|
||||
const baseRef = process.env.BASE_SHA || process.env.BASE_REF || 'origin/main'
|
||||
const output = execSync(`git diff ${baseRef}...HEAD --name-status`, { encoding: 'utf-8' })
|
||||
const addedIcons = []
|
||||
|
||||
output.split('\n').forEach(line => {
|
||||
if (line.startsWith('A\t')) {
|
||||
const filePath = line.substring(2)
|
||||
// Filter only SVG files from icons/outline/ or icons/filled/ directories
|
||||
if (filePath.match(/^icons\/((outline|filled)\/.+\.svg)$/)) {
|
||||
// add icon without icons/ prefix
|
||||
addedIcons.push(filePath.replace(/^icons\//, ''))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return addedIcons
|
||||
} catch (error) {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
types.forEach(type => {
|
||||
const icons = globSync(join(ICONS_SRC_DIR, type, '*.svg')).sort()
|
||||
|
||||
icons.forEach((icon) => {
|
||||
const iconContent = fs.readFileSync(icon, 'utf-8'),
|
||||
iconName = getIconName(icon)
|
||||
|
||||
if (!iconContent.includes(iconTemplate(type))) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` is not properly formatted`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (!iconContent.includes('<!--') || !iconContent.includes('-->')) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has no metadata`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (iconContent.includes('M0 0h24v24H0z')) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains empty rectangle path \`M0 0h24v24H0z\``)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for SVG elements that should be converted to path
|
||||
const invalidElements = ['<circle', '<rect', '<ellipse', '<line', '<polygon', '<polyline']
|
||||
const foundInvalidElements = invalidElements.filter(el => iconContent.includes(el))
|
||||
if (foundInvalidElements.length > 0) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains elements that should be converted to path: ${foundInvalidElements.join(', ')}`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for rectangle paths that end with 'z' (should not have closing 'z')
|
||||
// Rectangle paths should have two arc commands next to each other with the same size (rx and ry)
|
||||
const rectanglePathRegex = /<path[^>]*d=["']([^"']*?)a([\d.]+)\s+([\d.]+)\s+[01]\s+[01]\s([0-9.-]+)\s([0-9.-]+)\s[0-9.-]+a\2\s+\3\s+[01]\s+[01]\s[0-9.-]+\s([0-9.-]+)\s([0-9.-]+)z([^"']*?)["']\s+\/>/g
|
||||
if (rectanglePathRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains rectangle path that ends with 'z' (should not have closing 'z')`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for path with 'z' followed by h/v/H/V command (invalid pattern)
|
||||
const invalidZCommandRegex = /<path[^>]*d=["']([^"']*?)z[hvHV]([^"']*?)["']\s+\/>/g
|
||||
if (invalidZCommandRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains path with 'z' followed by h/v/H/V command (invalid pattern)`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for path with 'm' (relative move) after 'M' (absolute move)
|
||||
const invalidMAfterMRegex = /<path[^>]*d=["']([^"']*?)M[0-9.-]\s[0-9.-]*?m([^"']*?)["']/g
|
||||
if (invalidMAfterMRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains path with 'm' (relative move) after 'M' (absolute move)`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for path with 'Z' (uppercase) - disallow Z from path
|
||||
if (type === 'outline') {
|
||||
const invalidZRegex = /<path[^>]*d=["'][^"']*Z[^"']*["']\s+\/>/gi
|
||||
if (invalidZRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains path with 'Z'`)
|
||||
error = true
|
||||
}
|
||||
}
|
||||
|
||||
// Check for empty path d=""
|
||||
const emptyPathRegex = /<path[^>]*d=["']\s*["']/g
|
||||
if (emptyPathRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains empty path d=""`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for v0 or h0 (forbidden, but v0.1, h0.5 etc. are allowed)
|
||||
const forbiddenV0H0Regex = /<path[^>]*d="[^"']*[hv]0(?!\.\d)[^"']*"/g
|
||||
if (forbiddenV0H0Regex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains forbidden v0 or h0`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// Check for path with only M command (empty path)
|
||||
const onlyMRegex = /<path[^>]*d=["']\s*[Mm][\s0-9.-]+\s*["']/g
|
||||
if (onlyMRegex.test(iconContent)) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` contains path with only M command (empty path)`)
|
||||
error = true
|
||||
}
|
||||
|
||||
try {
|
||||
const { data } = parseMatter(icon)
|
||||
|
||||
if (data.unicode) {
|
||||
if (unicodes.indexOf(data.unicode) !== -1) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has duplicate unicode \`${data.unicode}\``)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (data.unicode.length !== 4 && data.unicode.length !== 5) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has invalid unicode \`${data.unicode}\``)
|
||||
error = true
|
||||
}
|
||||
|
||||
unicodes.push(data.unicode)
|
||||
} else if (argvs.hard) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has no unicode`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// check duplicates in tags
|
||||
if (duplicateExists(data.tags || [])) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has duplicate tags`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (argvs.hard && !data.version) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has no version`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (type === 'filled' && data.category) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has category in filled version`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (type === 'filled' && data.tags) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has tags in filled version`)
|
||||
error = true
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` has invalid metadata`)
|
||||
error = true
|
||||
}
|
||||
})
|
||||
|
||||
filledIconsNames.forEach((icon) => {
|
||||
const iconName = getIconName(icon)
|
||||
|
||||
if (outlineIconsNames.indexOf(icon) === -1) {
|
||||
console.log(`⛔️ Icon \`${iconName}\` exists in filled version but doesn't exists in outline`)
|
||||
error = true
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// check aliases
|
||||
Object.entries(aliases).forEach(([type, replacers]) => {
|
||||
Object.entries(replacers).forEach(([from, to]) => {
|
||||
if (!fs.existsSync(join(ICONS_SRC_DIR, type, `${to}.svg`))) {
|
||||
console.log(`⛔️ Alias \`${type}/${from}\` for \`${type}/${to}\` doesn't exists`)
|
||||
error = true
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const addedIcons = getAddedIconsFromMain()
|
||||
|
||||
for (const icon of addedIcons) {
|
||||
const iconPath = join(ICONS_SRC_DIR, icon)
|
||||
|
||||
try {
|
||||
const { data, content } = parseMatter(iconPath)
|
||||
|
||||
if (data.unicode) {
|
||||
console.log(`⛔️ Icon \`${icon}\` has unicode, but should not have it`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (data.version) {
|
||||
console.log(`⛔️ New icon \`${icon}\` has version, but should not have it`)
|
||||
error = true
|
||||
}
|
||||
|
||||
if (!icon.match(/^(outline|filled)\/[a-z0-9-]+\.svg$/)) {
|
||||
console.log(`⛔️ New icon \`${icon}\` has invalid name`)
|
||||
error = true
|
||||
}
|
||||
|
||||
// check if outline icon has category
|
||||
if (icon.match(/^outline\//) ) {
|
||||
if(!data.category) {
|
||||
console.log(`⛔️ New outline icon \`${icon}\` has no category`)
|
||||
error = true
|
||||
} else if (!categories.includes(data.category)) {
|
||||
console.log(`⛔️ New outline icon \`${icon}\` has invalid category \`${data.category}\`. Valid categories are: ${categories.join(', ')}`)
|
||||
error = true
|
||||
}
|
||||
} else {
|
||||
if (icon.match(/^filled\//) && data.category) {
|
||||
console.log(`⛔️ New filled icon \`${icon}\` has category, but should not have it`)
|
||||
error = true
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(`⛔️ New icon \`${icon}\` has invalid metadata`)
|
||||
error = true
|
||||
}
|
||||
}
|
||||
|
||||
if (error) {
|
||||
process.exit(1)
|
||||
} else {
|
||||
console.log('✅ All icons are valid!')
|
||||
process.exit(0)
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
import Zip from 'adm-zip'
|
||||
import { getPackageJson, HOME_DIR } from './helpers.mjs'
|
||||
import { resolve } from 'path'
|
||||
|
||||
const p = getPackageJson()
|
||||
const zip = new Zip()
|
||||
|
||||
zip.addLocalFile(resolve(HOME_DIR, `.github/og.png`), '.', 'tabler-icons.png')
|
||||
|
||||
zip.addLocalFolder(resolve(HOME_DIR, `packages/icons/icons/`), 'svg')
|
||||
zip.addLocalFolder(resolve(HOME_DIR, `packages/icons-png/icons/`), 'png')
|
||||
zip.addLocalFolder(resolve(HOME_DIR, `packages/icons-pdf/icons/`), 'pdf')
|
||||
zip.addLocalFolder(resolve(HOME_DIR, `packages/icons-eps/icons/`), 'eps')
|
||||
zip.addLocalFolder(resolve(HOME_DIR, `packages/icons-webfont/dist`), 'webfont')
|
||||
|
||||
zip.writeZip(resolve(HOME_DIR, `packages-zip/tabler-icons-${p.version}.zip`));
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
quote_type = single
|
||||
max_line_length = 100
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
const sass = require("sass");
|
||||
const path = require("path");
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addTemplateFormats("scss");
|
||||
|
||||
eleventyConfig.addExtension("scss", {
|
||||
outputFileExtension: "css",
|
||||
compile: async function(inputContent, inputPath) {
|
||||
const parsed = path.parse(inputPath);
|
||||
if (parsed.name.startsWith("_")) {
|
||||
return;
|
||||
}
|
||||
|
||||
const result = sass.compileString(inputContent, {
|
||||
loadPaths: [parsed.dir || ".", path.join(process.cwd(), "src", "_includes")],
|
||||
style: "expanded"
|
||||
});
|
||||
|
||||
return async (data) => {
|
||||
return result.css;
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
eleventyConfig.addWatchTarget("./src");
|
||||
eleventyConfig.addWatchTarget("./icons");
|
||||
|
||||
eleventyConfig.setQuietMode(true);
|
||||
|
||||
eleventyConfig.addLiquidTag("include_cached", function (liquidEngine) {
|
||||
return {
|
||||
parse: function (tagToken, remainingTokens) {
|
||||
this.str = tagToken.args;
|
||||
},
|
||||
render: async function (scope, hash) {
|
||||
var str = await this.liquid.evalValue(this.str, scope);
|
||||
return str;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter("group_by", function (value) {
|
||||
return value
|
||||
});
|
||||
|
||||
return {
|
||||
pathPrefix: "/",
|
||||
dir: {
|
||||
input: "src",
|
||||
layouts: "_layouts",
|
||||
includes: "_includes"
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
github: codecalm # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: tabler
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
name: Icon request
|
||||
description: Suggest a new icon for this project
|
||||
labels: ['icon request']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before submitting an icon request check if it has already been requested. If there is an open request, please add a 👍.
|
||||
- type: input
|
||||
id: name
|
||||
attributes:
|
||||
label: Icon name
|
||||
description: What should this icon depict? For multiple icons, provide a comma-separated list.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: use-cases
|
||||
attributes:
|
||||
label: Use cases
|
||||
description: Why do you need this icon? Include at least two real-life use cases per requested icon, avoiding generic descriptions like "it's a car icon".
|
||||
placeholder: e.g. I need a star icon to use in my rating system.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: design-ideas
|
||||
attributes:
|
||||
label: Design ideas
|
||||
description: What should this icon look like? Provide simple, minimalistic icon examples from other sets or your own drafts to help us visualize your request.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Please review the following checklist before submitting your request.
|
||||
options:
|
||||
- label: I have searched if someone has submitted a similar issue before and there weren't any. (Please make sure to also search closed issues, as this issue might already have been resolved.)
|
||||
required: true
|
||||
- label: I have searched existing icons to make sure it does not already exist and I didn't find any.
|
||||
required: true
|
||||
- label: I am not requesting a brand logo and the art is not protected by copyright.
|
||||
required: true
|
||||
- label: I have provided appropriate use cases for the icon(s) requested.
|
||||
required: true
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
name: Bug report
|
||||
description: Create a report to help us improve
|
||||
labels: ['bug']
|
||||
body:
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: Try to describe in detail the problem you're running into and provide additional context about your working environment if necessary.
|
||||
placeholder: e.g. When I do X, Y happens instead of Z
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before reporting an issue, please search to see if someone has filed a similar issue before. If there is already an open issue, please add a 👍 and/or leave a comment with additional information.
|
||||
- type: checkboxes
|
||||
id: packages
|
||||
attributes:
|
||||
label: Package
|
||||
description: Which Tabler Icons packages are affected? You may select more than one.
|
||||
options:
|
||||
- label: "@tabler/icons"
|
||||
- label: "@tabler/icons-eps"
|
||||
- label: "@tabler/icons-pdf"
|
||||
- label: "@tabler/icons-png"
|
||||
- label: "@tabler/icons-webfont"
|
||||
- label: "@tabler/icons-sprite"
|
||||
- label: "@tabler/icons-preact"
|
||||
- label: "@tabler/icons-react"
|
||||
- label: "@tabler/icons-react-native"
|
||||
- label: "@tabler/icons-solid"
|
||||
- label: "@tabler/icons-svelte"
|
||||
- label: "@tabler/icons-svelte-runes"
|
||||
- label: "@tabler/icons-vue"
|
||||
- label: Figma plugin
|
||||
- label: source/main
|
||||
- label: other/not relevant
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of Tabler Icons are you running?
|
||||
placeholder: e.g. 3.5.0
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: browsers
|
||||
attributes:
|
||||
label: Browser
|
||||
description: In which browser(s) are you experiencing the issue? You may select more than one.
|
||||
options:
|
||||
- label: Chrome/Chromium
|
||||
- label: Firefox
|
||||
- label: Safari
|
||||
- label: Edge
|
||||
- label: iOS Safari
|
||||
- label: Opera
|
||||
- label: Other/not relevant
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: operating-systems
|
||||
attributes:
|
||||
label: Operating system
|
||||
description: In which operating systems a you experiencing the issue? You may select more than one.
|
||||
options:
|
||||
- label: Windows
|
||||
- label: Linux
|
||||
- label: macOS
|
||||
- label: ChromeOS
|
||||
- label: iOS
|
||||
- label: Android
|
||||
- label: Other/not relevant
|
||||
|
||||
- type: textarea
|
||||
id: steps-to-reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Please provide a detailed guide on how this issue can be reproduced or a live example with a working reproduction on Codesandbox, JSFiddle or similar.
|
||||
placeholder: |
|
||||
1. Import `check` icon
|
||||
2. Add to a React component/view
|
||||
3. Run the react app
|
||||
4. Notice that the `check` isn't rendering correctly which seems a encoding problem
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Please review the following checklist before submitting your issue.
|
||||
options:
|
||||
- label: I have searched if someone has submitted a similar issue before and there weren't any. (Please make sure to also search closed issues, as this issue might already have been resolved.)
|
||||
required: true
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Ask the community
|
||||
url: https://github.com/tabler/tabler-icons/discussions/new
|
||||
about: Ask and discuss questions with other Tabler community members.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
version: 2
|
||||
updates:
|
||||
- schedule:
|
||||
interval: "weekly"
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
# For changed dependencies
|
||||
📦 dependencies:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- pnpm-lock.yaml
|
||||
|
||||
# For icons changes
|
||||
🎨 icons:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'icons/**/*.svg'
|
||||
- aliases.json
|
||||
|
||||
# For new icons
|
||||
✨ new icons:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'icons/**/*.svg'
|
||||
|
||||
# For modified icons
|
||||
🔧 modified icons:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'icons/**/*.svg'
|
||||
|
||||
# For Github Actions
|
||||
🤖 github-actions:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- .github/workflows/*.yml
|
||||
- .github/labeler.yml
|
||||
- .github/dependabot.yml
|
||||
|
||||
|
||||
# For React package
|
||||
🔗 react package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-react/*'
|
||||
|
||||
# For Vue package
|
||||
🔗 vue package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-vue/*'
|
||||
|
||||
# For Preact package
|
||||
🔗 preact package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-preact/*'
|
||||
|
||||
# For Svelte 4 and below package
|
||||
🔗 svelte package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-svelte/*'
|
||||
|
||||
# For Svelte 5 package
|
||||
🔗 svelte-runes package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-svelte-runes/*'
|
||||
|
||||
# For SolidJS package
|
||||
🔗 solid package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-solidjs/*'
|
||||
|
||||
# For Webfont package
|
||||
🔗 webfont package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-webfont/*'
|
||||
|
||||
# For Sprite package
|
||||
🔗 sprite package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-sprite/*'
|
||||
|
||||
# For React Native package
|
||||
🔗 react-native package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-react-native/*'
|
||||
|
||||
# For PNG package
|
||||
🔗 png package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-png/*'
|
||||
|
||||
# For PDF package
|
||||
🔗 pdf package:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'packages/icons-pdf/*'
|
||||
|
||||
# For tests
|
||||
🧪 tests:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'test/**/*'
|
||||
- 'packages/*/test.spec.*'
|
||||
- 'packages/*/vitest.config.*'
|
||||
|
||||
# For website/documentation site
|
||||
🌐 website:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/**/*'
|
||||
- '*.liquid'
|
||||
|
||||
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 236 KiB |
|
After Width: | Height: | Size: 457 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 457 KiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 3.7 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 495 KiB |
|
After Width: | Height: | Size: 249 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -0,0 +1,94 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 337 284" width="337" height="284" style="color: #354052"><rect x="0" y="0" width="337" height="284" fill="#fff"></rect>
|
||||
<symbol id="ad" class="icon icon-tabler icon-tabler-ad" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M7 15v-4a2 2 0 0 1 4 0v4" /><line x1="7" y1="13" x2="11" y2="13" /><path d="M17 9v6h-1.5a1.5 1.5 0 1 1 1.5 -1.5" />
|
||||
</symbol>
|
||||
<symbol id="alarm" class="icon icon-tabler icon-tabler-alarm" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="13" r="7" /><polyline points="12 10 12 13 14 13" /><line x1="7" y1="4" x2="4.25" y2="6" /><line x1="17" y1="4" x2="19.75" y2="6" />
|
||||
</symbol>
|
||||
<symbol id="arrow-back" class="icon icon-tabler icon-tabler-arrow-back" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M9 11l-4 4l4 4m-4 -4h11a4 4 0 0 0 0 -8h-1" />
|
||||
</symbol>
|
||||
<symbol id="arrow-forward" class="icon icon-tabler icon-tabler-arrow-forward" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M15 11l4 4l-4 4m4 -4h-11a4 4 0 0 1 0 -8h1" />
|
||||
</symbol>
|
||||
<symbol id="artboard" class="icon icon-tabler icon-tabler-artboard" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="8" y="8" width="8" height="8" rx="1" /><line x1="3" y1="8" x2="4" y2="8" /><line x1="3" y1="16" x2="4" y2="16" /><line x1="8" y1="3" x2="8" y2="4" /><line x1="16" y1="3" x2="16" y2="4" /><line x1="20" y1="8" x2="21" y2="8" /><line x1="20" y1="16" x2="21" y2="16" /><line x1="8" y1="20" x2="8" y2="21" /><line x1="16" y1="20" x2="16" y2="21" />
|
||||
</symbol>
|
||||
<symbol id="award" class="icon icon-tabler icon-tabler-award" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="9" r="6" /><polyline points="8 13.5 8 21 12 19 16 21 16 13.5" />
|
||||
</symbol>
|
||||
<symbol id="bug" class="icon icon-tabler icon-tabler-bug" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M9 9v-1a3 3 0 0 1 6 0v1" /><path d="M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3" /><line x1="3" y1="13" x2="7" y2="13" /><line x1="17" y1="13" x2="21" y2="13" /><line x1="12" y1="20" x2="12" y2="14" /><line x1="4" y1="19" x2="7.35" y2="17" /><line x1="20" y1="19" x2="16.65" y2="17" /><line x1="4" y1="7" x2="7.75" y2="9.4" /><line x1="20" y1="7" x2="16.25" y2="9.4" />
|
||||
</symbol>
|
||||
<symbol id="building-arch" class="icon icon-tabler icon-tabler-building-arch" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="3" y1="21" x2="21" y2="21" /><path d="M4 21v-15a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v15" /><path d="M9 21v-8a3 3 0 0 1 6 0v8" />
|
||||
</symbol>
|
||||
<symbol id="building-bridge-2" class="icon icon-tabler icon-tabler-building-bridge-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M6 7h12a2 2 0 0 1 2 2v9a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-2a4 4 0 0 0 -8 0v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-9a2 2 0 0 1 2 -2" />
|
||||
</symbol>
|
||||
<symbol id="building-bridge" class="icon icon-tabler icon-tabler-building-bridge" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="6" y1="5" x2="6" y2="19" /><line x1="18" y1="5" x2="18" y2="19" /><line x1="2" y1="15" x2="22" y2="15" /><path d="M3 8a7.5 7.5 0 0 0 3 -2a6.5 6.5 0 0 0 12 0a7.5 7.5 0 0 0 3 2" /><line x1="12" y1="10" x2="12" y2="15" />
|
||||
</symbol>
|
||||
<symbol id="building-church" class="icon icon-tabler icon-tabler-building-church" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="3" y1="21" x2="21" y2="21" /><path d="M10 21v-4a2 2 0 0 1 4 0v4" /><line x1="10" y1="5" x2="14" y2="5" /><line x1="12" y1="3" x2="12" y2="8" /><path d="M6 21v-7m-2 2l8 -8l8 8m-2 -2v7" />
|
||||
</symbol>
|
||||
<symbol id="building-hospital" class="icon icon-tabler icon-tabler-building-hospital" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="3" y1="21" x2="21" y2="21" /><path d="M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16" /><path d="M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4" /><line x1="10" y1="9" x2="14" y2="9" /><line x1="12" y1="7" x2="12" y2="11" />
|
||||
</symbol>
|
||||
<symbol id="building-store" class="icon icon-tabler icon-tabler-building-store" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="3" y1="21" x2="21" y2="21" /><path d="M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4" /><path d="M5 21v-10.15" /><path d="M19 21v-10.15" /><path d="M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4" />
|
||||
</symbol>
|
||||
<symbol id="building" class="icon icon-tabler icon-tabler-building" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><line x1="3" y1="21" x2="21" y2="21" /><line x1="9" y1="8" x2="10" y2="8" /><line x1="9" y1="12" x2="10" y2="12" /><line x1="9" y1="16" x2="10" y2="16" /><line x1="14" y1="8" x2="15" y2="8" /><line x1="14" y1="12" x2="15" y2="12" /><line x1="14" y1="16" x2="15" y2="16" /><path d="M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16" />
|
||||
</symbol>
|
||||
<symbol id="calendar-event" class="icon icon-tabler icon-tabler-calendar-event" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="4" y="5" width="16" height="16" rx="2" /><line x1="16" y1="3" x2="16" y2="7" /><line x1="8" y1="3" x2="8" y2="7" /><line x1="4" y1="11" x2="20" y2="11" /><rect x="8" y="15" width="2" height="2" />
|
||||
</symbol>
|
||||
<symbol id="device-speaker" class="icon icon-tabler icon-tabler-device-speaker" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="5" y="3" width="14" height="18" rx="2" /><circle cx="12" cy="14" r="3" /><line x1="12" y1="7" x2="12" y2="7.01" />
|
||||
</symbol>
|
||||
<symbol id="globe" class="icon icon-tabler icon-tabler-globe" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="10" r="4" /><path d="M6.75 16a8.015 8.015 0 1 0 9.25 -13" /><line x1="12" y1="18" x2="12" y2="22" /><line x1="8" y1="22" x2="16" y2="22" />
|
||||
</symbol>
|
||||
<symbol id="help" class="icon icon-tabler icon-tabler-help" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="9" /><line x1="12" y1="17" x2="12" y2="17.01" /><path d="M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4" />
|
||||
</symbol>
|
||||
<symbol id="home-2" class="icon icon-tabler icon-tabler-home-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><polyline points="5 12 3 12 12 3 21 12 19 12" /><path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" /><rect x="10" y="12" width="4" height="4" />
|
||||
</symbol>
|
||||
<symbol id="id" class="icon icon-tabler icon-tabler-id" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="3" y="4" width="18" height="16" rx="3" /><circle cx="9" cy="10" r="2" /><line x1="15" y1="8" x2="17" y2="8" /><line x1="15" y1="12" x2="17" y2="12" /><line x1="7" y1="16" x2="17" y2="16" />
|
||||
</symbol>
|
||||
<symbol id="layout-bottombar" class="icon icon-tabler icon-tabler-layout-bottombar" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="4" y="4" width="16" height="16" rx="2" /><line x1="4" y1="15" x2="20" y2="15" />
|
||||
</symbol>
|
||||
<symbol id="live-photo" class="icon icon-tabler icon-tabler-live-photo" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="1" /><circle cx="12" cy="12" r="5" /><circle cx="12" cy="12" r="9" stroke-dasharray=".001 4.03" />
|
||||
</symbol>
|
||||
<symbol id="mug" class="icon icon-tabler icon-tabler-mug" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M5 6h10a1 1 0 0 1 1 1v8a4 4 0 0 1 -4 4h-4a4 4 0 0 1 -4 -4v-8a1 1 0 0 1 1 -1" /><path d="M16 9h2a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-2" />
|
||||
</symbol>
|
||||
<symbol id="palette" class="icon icon-tabler icon-tabler-palette" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M12 21a9 9 0 1 1 0 -18a9 8 0 0 1 9 8a4.5 4 0 0 1 -4.5 4h-2.5a2 2 0 0 0 -1 3.75a1.3 1.3 0 0 1 -1 2.25" /><circle cx="7.5" cy="10.5" r=".5" /><circle cx="12" cy="7.5" r=".5" /><circle cx="16.5" cy="10.5" r=".5" />
|
||||
</symbol>
|
||||
<symbol id="pencil" class="icon icon-tabler icon-tabler-pencil" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M4 20h4l10.5 -10.5a1.5 1.5 0 0 0 -4 -4l-10.5 10.5v4" /><line x1="13.5" y1="6.5" x2="17.5" y2="10.5" />
|
||||
</symbol>
|
||||
<symbol id="record-mail" class="icon icon-tabler icon-tabler-record-mail" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="7" cy="12" r="3" /><circle cx="17" cy="12" r="3" /><line x1="7" y1="15" x2="17" y2="15" />
|
||||
</symbol>
|
||||
<symbol id="ruler" class="icon icon-tabler icon-tabler-ruler" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M5 4h14a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-7a1 1 0 0 0 -1 1v7a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1" /><line x1="4" y1="8" x2="6" y2="8" /><line x1="4" y1="12" x2="7" y2="12" /><line x1="4" y1="16" x2="6" y2="16" /><line x1="8" y1="4" x2="8" y2="6" /><polyline points="12 4 12 7 " /><polyline points="16 4 16 6 " />
|
||||
</symbol>
|
||||
<symbol id="scissors" class="icon icon-tabler icon-tabler-scissors" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="6" cy="7" r="3" /><circle cx="6" cy="17" r="3" /><line x1="8.6" y1="8.6" x2="19" y2="19" /><line x1="8.6" y1="15.4" x2="19" y2="5" />
|
||||
</symbol>
|
||||
<symbol id="stack" class="icon icon-tabler icon-tabler-stack" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><polyline points="12 4 4 8 12 12 20 8 12 4" /><polyline points="4 12 12 16 20 12" /><polyline points="4 16 12 20 20 16" />
|
||||
</symbol>
|
||||
<symbol id="template" class="icon icon-tabler icon-tabler-template" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><rect x="4" y="4" width="16" height="4" rx="1" /><rect x="4" y="12" width="6" height="8" rx="2" /><line x1="14" y1="12" x2="20" y2="12" /><line x1="14" y1="16" x2="20" y2="16" /><line x1="14" y1="20" x2="20" y2="20" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#ad" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#alarm" x="77" y="24" width="24" height="24" />
|
||||
<use xlink:href="#arrow-back" x="130" y="24" width="24" height="24" />
|
||||
<use xlink:href="#arrow-forward" x="183" y="24" width="24" height="24" />
|
||||
<use xlink:href="#artboard" x="236" y="24" width="24" height="24" />
|
||||
<use xlink:href="#award" x="289" y="24" width="24" height="24" />
|
||||
<use xlink:href="#bug" x="24" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-arch" x="77" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-bridge-2" x="130" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-bridge" x="183" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-church" x="236" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-hospital" x="289" y="77" width="24" height="24" />
|
||||
<use xlink:href="#building-store" x="24" y="130" width="24" height="24" />
|
||||
<use xlink:href="#building" x="77" y="130" width="24" height="24" />
|
||||
<use xlink:href="#calendar-event" x="130" y="130" width="24" height="24" />
|
||||
<use xlink:href="#device-speaker" x="183" y="130" width="24" height="24" />
|
||||
<use xlink:href="#globe" x="236" y="130" width="24" height="24" />
|
||||
<use xlink:href="#help" x="289" y="130" width="24" height="24" />
|
||||
<use xlink:href="#home-2" x="24" y="183" width="24" height="24" />
|
||||
<use xlink:href="#id" x="77" y="183" width="24" height="24" />
|
||||
<use xlink:href="#layout-bottombar" x="130" y="183" width="24" height="24" />
|
||||
<use xlink:href="#live-photo" x="183" y="183" width="24" height="24" />
|
||||
<use xlink:href="#mug" x="236" y="183" width="24" height="24" />
|
||||
<use xlink:href="#palette" x="289" y="183" width="24" height="24" />
|
||||
<use xlink:href="#pencil" x="24" y="236" width="24" height="24" />
|
||||
<use xlink:href="#record-mail" x="77" y="236" width="24" height="24" />
|
||||
<use xlink:href="#ruler" x="130" y="236" width="24" height="24" />
|
||||
<use xlink:href="#scissors" x="183" y="236" width="24" height="24" />
|
||||
<use xlink:href="#stack" x="236" y="236" width="24" height="24" />
|
||||
<use xlink:href="#template" x="289" y="236" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -0,0 +1,38 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 332 124" width="332" height="124" style="color: #354052"><rect x="0" y="0" width="332" height="124" fill="#fff"></rect>
|
||||
<symbol id="ball-bowling" class="icon icon-tabler icon-tabler-ball-bowling" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="9" /><line x1="11" y1="9" x2="11" y2="9.01" /><line x1="15" y1="8" x2="15" y2="8.01" /><line x1="14" y1="12" x2="14" y2="12.01" />
|
||||
</symbol>
|
||||
<symbol id="ball-tennis" class="icon icon-tabler icon-tabler-ball-tennis" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="9" /><path d="M6 5.3a9 9 0 0 1 0 13.4" /><path d="M6 5.3a9 9 0 0 1 0 13.4" transform="rotate(180 12 12)" /></symbol>
|
||||
<symbol id="ball-volleyball" class="icon icon-tabler icon-tabler-ball-volleyball" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="9" /><path d="M12 12a8 8 0 0 0 8 4M7.5 13.5a12 12 0 0 0 8.5 6.5" /><path d="M12 12a8 8 0 0 0 8 4M7.5 13.5a12 12 0 0 0 8.5 6.5" transform="rotate(120 12 12)" /><path d="M12 12a8 8 0 0 0 8 4M7.5 13.5a12 12 0 0 0 8.5 6.5" transform="rotate(240 12 12)" /></symbol>
|
||||
<symbol id="flame" class="icon icon-tabler icon-tabler-flame" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M18 15a6 6 0 1 1 -10.853 -3.529c1.926-2.338 4.763-3.327 3.848-8.47 2.355 1.761 5.84 5.38 2.022 9.406-1.136 1.091-.244 2.767 1.221 2.593.882-.105 2.023-.966 3.23-2.3.532.68.532 1.717.532 2.3z" />
|
||||
</symbol>
|
||||
<symbol id="hand-middle-finger" class="icon icon-tabler icon-tabler-hand-middle-finger" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M8 13.5v-4a1.5 1.5 0 0 1 3 0v2.5m0 -2.5v-6a1.5 1.5 0 0 1 3 0v8.5m0 -2.5a1.5 1.5 0 0 1 3 0v2.5m0 -1.5a1.5 1.5 0 0 1 3 0v5.5a6 6 0 0 1 -6 6h-2a7 6 0 0 1 -5 -3l-2.7 -5.25a1.4 1.4 0 0 1 2.75 -2l.9 1.75" />
|
||||
</symbol>
|
||||
<symbol id="hand-stop" class="icon icon-tabler icon-tabler-hand-stop" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M8 13.5v-8a1.5 1.5 0 0 1 3 0v6.5m0 -6.5v-2a1.5 1.5 0 0 1 3 0v8.5m0 -6.5a1.5 1.5 0 0 1 3 0v6.5m0 -4.5a1.5 1.5 0 0 1 3 0v8.5a6 6 0 0 1 -6 6h-2a7 6 0 0 1 -5 -3l-2.7 -5.25a1.4 1.4 0 0 1 2.75 -2l.9 1.75" />
|
||||
</symbol>
|
||||
<symbol id="medical-cross" class="icon icon-tabler icon-tabler-medical-cross" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M13 3a1 1 0 0 1 1 1v4.535l3.928 -2.267a1 1 0 0 1 1.366 .366l1 1.732a1 1 0 0 1 -.366 1.366L16.001 12l3.927 2.269a1 1 0 0 1 .366 1.366l-1 1.732a1 1 0 0 1 -1.366 .366L14 15.464V20a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-4.536l-3.928 2.268a1 1 0 0 1 -1.366 -.366l-1-1.732a1 1 0 0 1 .366 -1.366L7.999 12 4.072 9.732a1 1 0 0 1 -.366 -1.366l1-1.732a1 1 0 0 1 1.366 -.366L10 8.535V4a1 1 0 0 1 1 -1h2z" />
|
||||
</symbol>
|
||||
<symbol id="mist" class="icon icon-tabler icon-tabler-mist" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M5 5h3m4 0h9" /><path d="M3 10h11m4 0h1" /><path d="M5 15h5m4 0h7" /><path d="M3 20h9m4 0h3" />
|
||||
</symbol>
|
||||
<symbol id="sunset" class="icon icon-tabler icon-tabler-sunset" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M3 17h1m16 0h1M5.6 10.6l.7.7m12.1-.7l-.7.7M8 17a4 4 0 0 1 8 0" /><line x1="3" y1="21" x2="21" y2="21" /><path d="M12 9v-6l3 3m-6 0l3 -3" />
|
||||
</symbol>
|
||||
<symbol id="sunshine" class="icon icon-tabler icon-tabler-sunshine" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M3 17h1m16 0h1M5.6 10.6l.7.7m12.1-.7l-.7.7M8 17a4 4 0 0 1 8 0" /><line x1="3" y1="21" x2="21" y2="21" /><path d="M12 3v6l3 -3m-6 0l3 3" />
|
||||
</symbol>
|
||||
<symbol id="wind" class="icon icon-tabler icon-tabler-wind" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><path d="M5 8h8.5a2.5 2.5 0 1 0 -2.34 -3.24" /><path d="M3 12h15.5a2.5 2.5 0 1 1 -2.34 3.24" /><path d="M4 16h5.5a2.5 2.5 0 1 1 -2.34 3.24" />
|
||||
</symbol>
|
||||
<symbol id="yin-yang" class="icon icon-tabler icon-tabler-yin-yang" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z"/><circle cx="12" cy="12" r="9" /><path d="M12 3a4.5 4.5 0 0 0 0 9a4.5 4.5 0 0 1 0 9" /><circle cx="12" cy="7.5" r=".5" fill="currentColor" /><circle cx="12" cy="16.5" r=".5" fill="currentColor" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#ball-bowling" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#ball-tennis" x="76" y="24" width="24" height="24" />
|
||||
<use xlink:href="#ball-volleyball" x="128" y="24" width="24" height="24" />
|
||||
<use xlink:href="#flame" x="180" y="24" width="24" height="24" />
|
||||
<use xlink:href="#hand-middle-finger" x="232" y="24" width="24" height="24" />
|
||||
<use xlink:href="#hand-stop" x="284" y="24" width="24" height="24" />
|
||||
<use xlink:href="#medical-cross" x="24" y="76" width="24" height="24" />
|
||||
<use xlink:href="#mist" x="76" y="76" width="24" height="24" />
|
||||
<use xlink:href="#sunset" x="128" y="76" width="24" height="24" />
|
||||
<use xlink:href="#sunshine" x="180" y="76" width="24" height="24" />
|
||||
<use xlink:href="#wind" x="232" y="76" width="24" height="24" />
|
||||
<use xlink:href="#yin-yang" x="284" y="76" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
|
@ -0,0 +1,79 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 248" width="292" height="248" style="color: #354052"><rect x="0" y="0" width="292" height="248" fill="#fff"></rect>
|
||||
<symbol id="equal-double" class="icon icon-tabler icon-tabler-equal-double" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 10h7" /><path d="M3 14h7" /><path d="M14 10h7" /><path d="M14 14h7" />
|
||||
</symbol>
|
||||
<symbol id="math-1-divide-2" class="icon icon-tabler icon-tabler-math-1-divide-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12h14" /><path d="M10 15h3a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-2a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h3" /><path d="M10 5l2 -2v6" />
|
||||
</symbol>
|
||||
<symbol id="math-1-divide-3" class="icon icon-tabler icon-tabler-math-1-divide-3" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 15.5a0.5 .5 0 0 1 .5 -.5h2a1.5 1.5 0 0 1 0 3h-1.167h1.167a1.5 1.5 0 0 1 0 3h-2a0.5 .5 0 0 1 -.5 -.5" /><path d="M5 12h14" /><path d="M10 5l2 -2v6" />
|
||||
</symbol>
|
||||
<symbol id="math-equal-greater" class="icon icon-tabler icon-tabler-math-equal-greater" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 18l14 -4" /><path d="M5 14l14 -4l-14 -4" />
|
||||
</symbol>
|
||||
<symbol id="math-equal-lower" class="icon icon-tabler icon-tabler-math-equal-lower" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19 18l-14 -4" /><path d="M19 14l-14 -4l14 -4" />
|
||||
</symbol>
|
||||
<symbol id="math-function-y" class="icon icon-tabler icon-tabler-math-function-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2" /><path d="M5 12h6" /><path d="M15 12l3 5.063" /><path d="M21 12l-4.8 9" />
|
||||
</symbol>
|
||||
<symbol id="math-greater" class="icon icon-tabler icon-tabler-math-greater" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 18l14 -6l-14 -6" />
|
||||
</symbol>
|
||||
<symbol id="math-integral-x" class="icon icon-tabler icon-tabler-math-integral-x" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2" /><path d="M14 12l6 6" /><path d="M14 18l6 -6" />
|
||||
</symbol>
|
||||
<symbol id="math-integral" class="icon icon-tabler icon-tabler-math-integral" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2" />
|
||||
</symbol>
|
||||
<symbol id="math-integrals" class="icon icon-tabler icon-tabler-math-integrals" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2" /><path d="M11 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2" />
|
||||
</symbol>
|
||||
<symbol id="math-lower" class="icon icon-tabler icon-tabler-math-lower" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19 18l-14 -6l14 -6" />
|
||||
</symbol>
|
||||
<symbol id="math-not" class="icon icon-tabler icon-tabler-math-not" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12h14v4" />
|
||||
</symbol>
|
||||
<symbol id="math-pi-divide-2" class="icon icon-tabler icon-tabler-math-pi-divide-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 15h3a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-2a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h3" /><path d="M5 12h14" /><path d="M10 9v-6" /><path d="M14 3v6" /><path d="M15 3h-6" />
|
||||
</symbol>
|
||||
<symbol id="math-pi" class="icon icon-tabler icon-tabler-math-pi" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7 20v-16" /><path d="M17 4v16" /><path d="M20 4h-16" />
|
||||
</symbol>
|
||||
<symbol id="math-x-divide-2" class="icon icon-tabler icon-tabler-math-x-divide-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 15h3a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-2a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h3" /><path d="M5 12h14" /><path d="M9 3l6 6" /><path d="M9 9l6 -6" />
|
||||
</symbol>
|
||||
<symbol id="math-x-divide-y-2" class="icon icon-tabler icon-tabler-math-x-divide-y-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 21l18 -18" /><path d="M15 14l3 4.5" /><path d="M21 14l-4.5 7" /><path d="M3 4l6 6" /><path d="M3 10l6 -6" />
|
||||
</symbol>
|
||||
<symbol id="math-x-divide-y" class="icon icon-tabler icon-tabler-math-x-divide-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 3l6 6" /><path d="M9 9l6 -6" /><path d="M9 15l3 4.5" /><path d="M15 15l-4.5 7" /><path d="M5 12h14" />
|
||||
</symbol>
|
||||
<symbol id="math-x-minus-x" class="icon icon-tabler icon-tabler-math-x-minus-x" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M2 9l6 6" /><path d="M2 15l6 -6" /><path d="M16 9l6 6" /><path d="M16 15l6 -6" /><path d="M10 12h4" />
|
||||
</symbol>
|
||||
<symbol id="math-x-minus-y" class="icon icon-tabler icon-tabler-math-x-minus-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M2 9l6 6" /><path d="M2 15l6 -6" /><path d="M16 9l3 5.063" /><path d="M22 9l-4.8 9" /><path d="M10 12h4" />
|
||||
</symbol>
|
||||
<symbol id="math-x-plus-x" class="icon icon-tabler icon-tabler-math-x-plus-x" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M2 9l6 6" /><path d="M2 15l6 -6" /><path d="M16 9l6 6" /><path d="M16 15l6 -6" /><path d="M10 12h4" /><path d="M12 10v4" />
|
||||
</symbol>
|
||||
<symbol id="math-x-plus-y" class="icon icon-tabler icon-tabler-math-x-plus-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M16 9l3 5.063" /><path d="M2 9l6 6" /><path d="M2 15l6 -6" /><path d="M22 9l-4.8 9" /><path d="M10 12h4" /><path d="M12 10v4" />
|
||||
</symbol>
|
||||
<symbol id="math-xy" class="icon icon-tabler icon-tabler-math-xy" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 9l3 5.063" /><path d="M4 9l6 6" /><path d="M4 15l6 -6" /><path d="M20 9l-4.8 9" />
|
||||
</symbol>
|
||||
<symbol id="math-y-minus-y" class="icon icon-tabler icon-tabler-math-y-minus-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M2 9l3 5.063" /><path d="M8 9l-4.8 9" /><path d="M16 9l3 5.063" /><path d="M22 9l-4.8 9" /><path d="M10 12h4" />
|
||||
</symbol>
|
||||
<symbol id="math-y-plus-y" class="icon icon-tabler icon-tabler-math-y-plus-y" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M2 9l3 5.063" /><path d="M8 9l-4.8 9" /><path d="M16 9l3 5.063" /><path d="M22 9l-4.8 9" /><path d="M10 12h4" /><path d="M12 10v4" />
|
||||
</symbol>
|
||||
<symbol id="slash" class="icon icon-tabler icon-tabler-slash" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 21l18 -18" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#equal-double" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-1-divide-2" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-1-divide-3" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-equal-greater" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-equal-lower" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-function-y" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#math-greater" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-integral-x" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-integral" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-integrals" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-lower" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-not" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#math-pi-divide-2" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-pi" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-x-divide-2" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-x-divide-y-2" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-x-divide-y" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-x-minus-x" x="244" y="112" width="24" height="24" />
|
||||
<use xlink:href="#math-x-minus-y" x="24" y="156" width="24" height="24" />
|
||||
<use xlink:href="#math-x-plus-x" x="68" y="156" width="24" height="24" />
|
||||
<use xlink:href="#math-x-plus-y" x="112" y="156" width="24" height="24" />
|
||||
<use xlink:href="#math-xy" x="156" y="156" width="24" height="24" />
|
||||
<use xlink:href="#math-y-minus-y" x="200" y="156" width="24" height="24" />
|
||||
<use xlink:href="#math-y-plus-y" x="244" y="156" width="24" height="24" />
|
||||
<use xlink:href="#slash" x="24" y="200" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="bowl" class="icon icon-tabler icon-tabler-bowl" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 8h16a1 1 0 0 1 1 1v.5c0 1.5 -2.517 5.573 -4 6.5v1a1 1 0 0 1 -1 1h-8a1 1 0 0 1 -1 -1v-1c-1.687 -1.054 -4 -5 -4 -6.5v-.5a1 1 0 0 1 1 -1z" />
|
||||
</symbol>
|
||||
<symbol id="brand-guardian" class="icon icon-tabler icon-tabler-brand-guardian" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 13h6" /><path d="M4 12c0 -9.296 9.5 -9 9.5 -9c-2.808 0 -4.5 4.373 -4.5 9s1.763 8.976 4.572 8.976c0 .023 -9.572 1.092 -9.572 -8.976z" /><path d="M14.5 3c1.416 0 3.853 1.16 4.5 2v3.5" /><path d="M15 13v8s2.77 -.37 4 -2v-6" /><path d="M13.5 21h1.5" /><path d="M13.5 3h1" />
|
||||
</symbol>
|
||||
<symbol id="brand-spacehey" class="icon icon-tabler icon-tabler-brand-spacehey" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="17" cy="6" r="2" /><path d="M14 20h6v-6a3 3 0 0 0 -6 0v6z" /><path d="M11 8v2.5a3.5 3.5 0 0 1 -3.5 3.5h-.5a3 3 0 0 1 0 -6h4z" />
|
||||
</symbol>
|
||||
<symbol id="car-turbine" class="icon icon-tabler icon-tabler-car-turbine" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="11" cy="13" r="4" /><path d="M18.86 11c.088 .66 .14 1.512 .14 2a8 8 0 1 1 -8 -8h6" /><path d="M11 9c2.489 .108 4.489 .108 6 0" /><rect x="17" y="3" width="4" height="8" rx="1" /><path d="M11 13l-3.5 -1.5" /><path d="M11 13l2.5 3" /><path d="M8.5 16l2.5 -3" /><path d="M11 13l3.5 -1.5" /><path d="M11 9v4" />
|
||||
</symbol>
|
||||
<symbol id="code-circle-2" class="icon icon-tabler icon-tabler-code-circle-2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M8.5 13.5l-1.5 -1.5l1.5 -1.5" /><path d="M15.5 10.5l1.5 1.5l-1.5 1.5" /><circle cx="12" cy="12" r="9" /><path d="M13 9.5l-2 5.5" />
|
||||
</symbol>
|
||||
<symbol id="code-circle" class="icon icon-tabler icon-tabler-code-circle" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 14l-2 -2l2 -2" /><path d="M14 10l2 2l-2 2" /><circle cx="12" cy="12" r="9" />
|
||||
</symbol>
|
||||
<symbol id="eggs" class="icon icon-tabler icon-tabler-eggs" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M13 22c-3 0 -4.868 -2.118 -4.995 -5c-.005 -3 1.995 -5 4.995 -5c4 0 8.01 2.5 8.005 5c-.005 2.5 -4.005 5 -8.005 5z" /><path d="M8 18c-3.03 -.196 -5 -2.309 -5 -5.38c0 -4.307 2.75 -8.625 5.5 -8.62c2.614 .005 5.248 3.915 5.5 8" />
|
||||
</symbol>
|
||||
<symbol id="file-broken" class="icon icon-tabler icon-tabler-file-broken" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M5 7v-2a2 2 0 0 1 2 -2h7l5 5v2" /><path d="M19 19a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2" /><path d="M5 16h.01" /><path d="M5 13h.01" /><path d="M5 10h.01" /><path d="M19 13h.01" /><path d="M19 16h.01" />
|
||||
</symbol>
|
||||
<symbol id="file-infinity" class="icon icon-tabler icon-tabler-file-infinity" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15.536 17.586a2.123 2.123 0 0 0 -2.929 0a1.951 1.951 0 0 0 0 2.828c.809 .781 2.12 .781 2.929 0c.809 -.781 -.805 .778 .004 -.003l1.46 -1.41l1.46 -1.419" /><path d="M15.54 17.582l1.46 1.42l1.46 1.41c.809 .78 -.805 -.779 .004 .002s2.12 .781 2.929 0a1.951 1.951 0 0 0 0 -2.828a2.123 2.123 0 0 0 -2.929 0" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M9.5 21h-2.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v6" />
|
||||
</symbol>
|
||||
<symbol id="file-stack" class="icon icon-tabler icon-tabler-file-stack" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4" /><path d="M5 21h14" /><path d="M5 18h14" /><path d="M5 15h14" />
|
||||
</symbol>
|
||||
<symbol id="home-hand" class="icon icon-tabler icon-tabler-home-hand" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 9l-6 -6l-9 9h2v7a2 2 0 0 0 2 2h3.5" /><path d="M9 21v-6a2 2 0 0 1 2 -2h2" /><path d="M16 17.5l-.585 -.578a1.516 1.516 0 0 0 -2 0c-.477 .433 -.551 1.112 -.177 1.622l1.762 2.456c.37 .506 1.331 1 2 1h3c1.009 0 1.497 -.683 1.622 -1.593c.252 -.938 .378 -1.74 .378 -2.407c0 -1 -.939 -1.843 -2 -2h-1v-2.636c0 -.754 -.672 -1.364 -1.5 -1.364s-1.5 .61 -1.5 1.364v4.136z" />
|
||||
</symbol>
|
||||
<symbol id="home-infinity" class="icon icon-tabler icon-tabler-home-infinity" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19 14v-2h2l-9 -9l-9 9h2v7a2 2 0 0 0 2 2h2.5" /><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 1.75 1.032" /><path d="M15.536 17.586a2.123 2.123 0 0 0 -2.929 0a1.951 1.951 0 0 0 0 2.828c.809 .781 2.12 .781 2.929 0c.809 -.781 -.805 .778 .004 -.003l1.46 -1.41l1.46 -1.419" /><path d="M15.54 17.582l1.46 1.42l1.46 1.41c.809 .78 -.805 -.779 .004 .002s2.12 .781 2.929 0a1.951 1.951 0 0 0 0 -2.828a2.123 2.123 0 0 0 -2.929 0" />
|
||||
</symbol>
|
||||
<symbol id="moneybag" class="icon icon-tabler icon-tabler-moneybag" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9.5 3h5a1.5 1.5 0 0 1 1.5 1.5a3.5 3.5 0 0 1 -3.5 3.5h-1a3.5 3.5 0 0 1 -3.5 -3.5a1.5 1.5 0 0 1 1.5 -1.5z" /><path d="M4 17v-1a8 8 0 1 1 16 0v1a4 4 0 0 1 -4 4h-8a4 4 0 0 1 -4 -4z" />
|
||||
</symbol>
|
||||
<symbol id="needle-thread" class="icon icon-tabler icon-tabler-needle-thread" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 21c-.667 -.667 3.262 -6.236 11.785 -16.709a3.5 3.5 0 1 1 5.078 4.791c-10.575 8.612 -16.196 12.585 -16.863 11.918z" /><path d="M17.5 6.5l-1 1" /><path d="M17 7c-2.333 -2.667 -3.5 -4 -5 -4s-2 1 -2 2c0 4 8.161 8.406 6 11c-1.056 1.268 -3.363 1.285 -5.75 .808" /><path d="M5.739 15.425c-1.393 -.565 -3.739 -1.925 -3.739 -3.425" /><path d="M19.5 9.5l1.5 1.5" />
|
||||
</symbol>
|
||||
<symbol id="needle" class="icon icon-tabler icon-tabler-needle" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 21c-.667 -.667 3.262 -6.236 11.785 -16.709a3.5 3.5 0 1 1 5.078 4.791c-10.575 8.612 -16.196 12.585 -16.863 11.918z" /><path d="M17.5 6.5l-1 1" />
|
||||
</symbol>
|
||||
<symbol id="perfume" class="icon icon-tabler icon-tabler-perfume" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 6v3" /><path d="M14 6v3" /><rect x="5" y="9" width="14" height="12" rx="2" /><circle cx="12" cy="15" r="2" /><path d="M9 3h6v3h-6z" />
|
||||
</symbol>
|
||||
<symbol id="salad" class="icon icon-tabler icon-tabler-salad" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 11h16a1 1 0 0 1 1 1v.5c0 1.5 -2.517 5.573 -4 6.5v1a1 1 0 0 1 -1 1h-8a1 1 0 0 1 -1 -1v-1c-1.687 -1.054 -4 -5 -4 -6.5v-.5a1 1 0 0 1 1 -1z" /><path d="M18.5 11c.351 -1.017 .426 -2.236 .5 -3.714v-1.286h-2.256c-2.83 0 -4.616 .804 -5.64 2.076" /><path d="M5.255 11.008a12.204 12.204 0 0 1 -.255 -2.008v-1h1.755c.98 0 1.801 .124 2.479 .35" /><path d="M8 8l1 -4l4 2.5" /><path d="M13 11v-.5a2.5 2.5 0 1 0 -5 0v.5" />
|
||||
</symbol>
|
||||
<symbol id="spray" class="icon icon-tabler icon-tabler-spray" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="4" y="10" width="8" height="11" rx="2" /><path d="M6 10v-4a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v4" /><path d="M15 7h.01" /><path d="M18 9h.01" /><path d="M18 5h.01" /><path d="M21 3h.01" /><path d="M21 7h.01" /><path d="M21 11h.01" /><path d="M10 7h1" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#bowl" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#brand-guardian" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#brand-spacehey" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#car-turbine" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#code-circle-2" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#code-circle" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#eggs" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#file-broken" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#file-infinity" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#file-stack" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#home-hand" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#home-infinity" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#moneybag" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#needle-thread" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#needle" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#perfume" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#salad" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#spray" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="brand-superhuman" class="icon icon-tabler icon-tabler-brand-superhuman" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M16 12l4 3l-8 7l-8 -7l4 -3" /><path d="M12 3l-8 6l8 6l8 -6z" /><path d="M12 15h8" />
|
||||
</symbol>
|
||||
<symbol id="brand-topbuzz" class="icon icon-tabler icon-tabler-brand-topbuzz" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4.417 8.655a0.524 .524 0 0 1 -.405 -.622l.986 -4.617a0.524 .524 0 0 1 .626 -.404l14.958 3.162c.285 .06 .467 .339 .406 .622l-.987 4.618a0.524 .524 0 0 1 -.625 .404l-4.345 -.92c-.198 -.04 -.315 .024 -.353 .197l-2.028 9.49a0.527 .527 0 0 1 -.625 .404l-4.642 -.982a0.527 .527 0 0 1 -.406 -.622l2.028 -9.493c.037 -.17 -.031 -.274 -.204 -.31l-4.384 -.927z" />
|
||||
</symbol>
|
||||
<symbol id="brand-volkswagen" class="icon icon-tabler icon-tabler-brand-volkswagen" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 21a9 9 0 0 0 9 -9a9 9 0 0 0 -9 -9a9 9 0 0 0 -9 9a9 9 0 0 0 9 9z" /><path d="M5 7l4.5 11l1.5 -5h2l1.5 5l4.5 -11" /><path d="M9 4l2 6h2l2 -6" />
|
||||
</symbol>
|
||||
<symbol id="cane" class="icon icon-tabler icon-tabler-cane" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 21l6.324 -11.69c.54 -.974 1.756 -4.104 -1.499 -5.762c-3.255 -1.657 -5.175 .863 -5.825 2.032" />
|
||||
</symbol>
|
||||
<symbol id="cards" class="icon icon-tabler icon-tabler-cards" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3.604 7.197l7.138 -3.109a0.96 .96 0 0 1 1.27 .527l4.924 11.902a1.004 1.004 0 0 1 -.514 1.304l-7.137 3.109a0.96 .96 0 0 1 -1.271 -.527l-4.924 -11.903a1.005 1.005 0 0 1 .514 -1.304z" /><path d="M15 4h1a1 1 0 0 1 1 1v3.5" /><path d="M20 6c.264 .112 .52 .217 .768 .315a1 1 0 0 1 .53 1.311l-2.298 5.374" />
|
||||
</symbol>
|
||||
<symbol id="cherry" class="icon icon-tabler icon-tabler-cherry" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="7.5" cy="16.5" r="3.5" /><circle cx="17" cy="18" r="3" /><path d="M9 13c.366 -2.006 1.866 -3.873 4.5 -5.6" /><path d="M17 15c-1.333 -2.333 -2.333 -5.333 -1 -9" /><path d="M5 6c3.667 -2.667 7.333 -2.667 11 0c-3.667 2.667 -7.333 2.667 -11 0" />
|
||||
</symbol>
|
||||
<symbol id="go-game" class="icon icon-tabler icon-tabler-go-game" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="6" cy="6" r="2" /><circle cx="12" cy="12" r="2" /><circle cx="6" cy="18" r="2" /><circle cx="18" cy="18" r="2" /><path d="M3 12h7m4 0h7" /><path d="M3 6h1m4 0h13" /><path d="M3 18h1m4 0h8m4 0h1" /><path d="M6 3v1m0 4v8m0 4v1" /><path d="M12 3v7m0 4v7" /><path d="M18 3v13m0 4v1" />
|
||||
</symbol>
|
||||
<symbol id="loader-3" class="icon icon-tabler icon-tabler-loader-3" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 12a9 9 0 0 0 9 9a9 9 0 0 0 9 -9a9 9 0 0 0 -9 -9" /><path d="M17 12a5 5 0 1 0 -5 5" />
|
||||
</symbol>
|
||||
<symbol id="meeple" class="icon icon-tabler icon-tabler-meeple" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 20h-5a1 1 0 0 1 -1 -1c0 -2 3.378 -4.907 4 -6c-1 0 -4 -.5 -4 -2c0 -2 4 -3.5 6 -4c0 -1.5 .5 -4 3 -4s3 2.5 3 4c2 .5 6 2 6 4c0 1.5 -3 2 -4 2c.622 1.093 4 4 4 6a1 1 0 0 1 -1 1h-5c-1 0 -2 -4 -3 -4s-2 4 -3 4z" />
|
||||
</symbol>
|
||||
<symbol id="poker-chip" class="icon icon-tabler icon-tabler-poker-chip" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9" /><circle cx="12" cy="12" r="5" /><path d="M12 3v4" /><path d="M12 17v4" /><path d="M3 12h4" /><path d="M17 12h4" /><path d="M18.364 5.636l-2.828 2.828" /><path d="M8.464 15.536l-2.828 2.828" /><path d="M5.636 5.636l2.828 2.828" /><path d="M15.536 15.536l2.828 2.828" />
|
||||
</symbol>
|
||||
<symbol id="s-turn-down" class="icon icon-tabler icon-tabler-s-turn-down" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6.5 5.5a2 2 0 1 1 -4 0a2 2 0 0 1 4 0z" /><path d="M4.5 7.5v9.5a3.5 3.5 0 0 0 7 0v-9a3.5 3.5 0 0 1 7 0v13.5" /><path d="M15.5 18.5l3 3l3 -3" />
|
||||
</symbol>
|
||||
<symbol id="s-turn-left" class="icon icon-tabler icon-tabler-s-turn-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19 7a2 2 0 1 1 0 -4a2 2 0 0 1 0 4z" /><path d="M17 5h-9.5a3.5 3.5 0 0 0 0 7h9a3.5 3.5 0 0 1 0 7h-13.5" /><path d="M6 16l-3 3l3 3" />
|
||||
</symbol>
|
||||
<symbol id="s-turn-right" class="icon icon-tabler icon-tabler-s-turn-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="5" cy="5" r="2" /><path d="M7 5h9.5a3.5 3.5 0 0 1 0 7h-9a3.5 3.5 0 0 0 0 7h13.5" /><path d="M18 16l3 3l-3 3" />
|
||||
</symbol>
|
||||
<symbol id="s-turn-up" class="icon icon-tabler icon-tabler-s-turn-up" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6.5 19.5a2 2 0 1 0 -4 0a2 2 0 0 0 4 0z" /><path d="M4.5 17.5v-9.5a3.5 3.5 0 0 1 7 0v9a3.5 3.5 0 0 0 7 0v-13.5" /><path d="M15.5 6.5l3 -3l3 3" />
|
||||
</symbol>
|
||||
<symbol id="target-arrow" class="icon icon-tabler icon-tabler-target-arrow" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="1" /><path d="M12 7a5 5 0 1 0 5 5" /><path d="M13.004 3.055a9 9 0 1 0 7.941 7.945" /><path d="M15 6v3h3l3 -3h-3v-3z" /><path d="M15 9l-3 3" />
|
||||
</symbol>
|
||||
<symbol id="texture" class="icon icon-tabler icon-tabler-texture" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6 3l-3 3" /><path d="M21 18l-3 3" /><path d="M11 3l-8 8" /><path d="M16 3l-13 13" /><path d="M21 3l-18 18" /><path d="M21 8l-13 13" /><path d="M21 13l-8 8" />
|
||||
</symbol>
|
||||
<symbol id="tic-tac" class="icon icon-tabler icon-tabler-tic-tac" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="6" cy="6" r="2" /><path d="M3 12h18" /><path d="M12 3v18" /><path d="M4 16l4 4" /><path d="M4 20l4 -4" /><path d="M16 4l4 4" /><path d="M16 8l4 -4" /><circle cx="18" cy="18" r="2" />
|
||||
</symbol>
|
||||
<symbol id="whirl" class="icon icon-tabler icon-tabler-whirl" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 12a2 2 0 1 0 -4 0a2 2 0 0 0 4 0z" /><path d="M12 21c-3.314 0 -6 -2.462 -6 -5.5s2.686 -5.5 6 -5.5" /><path d="M21 12c0 3.314 -2.462 6 -5.5 6s-5.5 -2.686 -5.5 -6" /><path d="M12 14c3.314 0 6 -2.462 6 -5.5s-2.686 -5.5 -6 -5.5" /><path d="M14 12c0 -3.314 -2.462 -6 -5.5 -6s-5.5 2.686 -5.5 6" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#brand-superhuman" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#brand-topbuzz" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#brand-volkswagen" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#cane" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#cards" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#cherry" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#go-game" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#loader-3" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#meeple" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#poker-chip" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#s-turn-down" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#s-turn-left" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#s-turn-right" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#s-turn-up" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#target-arrow" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#texture" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#tic-tac" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#whirl" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="inner-shadow-bottom-left" class="icon icon-tabler icon-tabler-inner-shadow-bottom-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9" /><path d="M6 12a6 6 0 0 0 6 6" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-bottom-right" class="icon icon-tabler icon-tabler-inner-shadow-bottom-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 21a9 9 0 1 1 0 -18a9 9 0 0 1 0 18z" /><path d="M18 12a6 6 0 0 1 -6 6" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-bottom" class="icon icon-tabler icon-tabler-inner-shadow-bottom" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.364 18.364a9 9 0 1 0 -12.728 -12.728a9 9 0 0 0 12.728 12.728z" /><path d="M7.757 16.243a6 6 0 0 0 8.486 0" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-left" class="icon icon-tabler icon-tabler-inner-shadow-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5.636 5.636a9 9 0 1 1 12.728 12.728a9 9 0 0 1 -12.728 -12.728z" /><path d="M7.757 16.243a6 6 0 0 1 0 -8.486" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-right" class="icon icon-tabler icon-tabler-inner-shadow-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.364 18.364a9 9 0 1 1 -12.728 -12.728a9 9 0 0 1 12.728 12.728z" /><path d="M16.243 7.757a6 6 0 0 1 0 8.486" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-top-left" class="icon icon-tabler icon-tabler-inner-shadow-top-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a9 9 0 1 1 0 18a9 9 0 0 1 0 -18z" /><path d="M6 12a6 6 0 0 1 6 -6" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-top-right" class="icon icon-tabler icon-tabler-inner-shadow-top-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0 -18z" /><path d="M18 12a6 6 0 0 0 -6 -6" />
|
||||
</symbol>
|
||||
<symbol id="inner-shadow-top" class="icon icon-tabler icon-tabler-inner-shadow-top" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5.636 5.636a9 9 0 1 0 12.728 12.728a9 9 0 0 0 -12.728 -12.728z" /><path d="M16.243 7.757a6 6 0 0 0 -8.486 0" />
|
||||
</symbol>
|
||||
<symbol id="square-f0" class="icon icon-tabler icon-tabler-square-f0" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 10.5v3a1.5 1.5 0 0 0 3 0v-3a1.5 1.5 0 0 0 -3 0z" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f1" class="icon icon-tabler icon-tabler-square-f1" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 11l2 -2v6" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f2" class="icon icon-tabler icon-tabler-square-f2" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 9h2a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-1a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h2" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f3" class="icon icon-tabler icon-tabler-square-f3" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 9.5a0.5 .5 0 0 1 .5 -.5h1a1.5 1.5 0 0 1 0 3h-.5h.5a1.5 1.5 0 0 1 0 3h-1a0.5 .5 0 0 1 -.5 -.5" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f4" class="icon icon-tabler icon-tabler-square-f4" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 9v2a1 1 0 0 0 1 1h1" /><path d="M16 9v6" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f5" class="icon icon-tabler icon-tabler-square-f5" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 14.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-2v-3h3" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f6" class="icon icon-tabler icon-tabler-square-f6" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M16 9.75a0.75 .75 0 0 0 -.75 -.75h-1.25a1 1 0 0 0 -1 1v4a1 1 0 0 0 1 1h1a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-2" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f7" class="icon icon-tabler icon-tabler-square-f7" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 9h3l-1.5 6" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f8" class="icon icon-tabler icon-tabler-square-f8" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M14.5 12h-.5a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-1a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
<symbol id="square-f9" class="icon icon-tabler icon-tabler-square-f9" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 6.667v10.666a2.667 2.667 0 0 1 -2.667 2.667h-10.666a2.667 2.667 0 0 1 -2.667 -2.667v-10.666a2.667 2.667 0 0 1 2.667 -2.667h10.666a2.667 2.667 0 0 1 2.667 2.667z" /><path d="M13 14.25c0 .414 .336 .75 .75 .75h1.5a0.75 .75 0 0 0 .75 -.75v-4.5a0.75 .75 0 0 0 -.75 -.75h-1.5a0.75 .75 0 0 0 -.75 .75v1.5c0 .414 .336 .75 .75 .75h2.25" /><path d="M8 12h2" /><path d="M10 9h-2v6" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#inner-shadow-bottom-left" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-bottom-right" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-bottom" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-left" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-right" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-top-left" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-top-right" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#inner-shadow-top" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#square-f0" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#square-f1" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#square-f2" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#square-f3" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#square-f4" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#square-f5" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#square-f6" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#square-f7" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#square-f8" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#square-f9" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="align-box-bottom-center" class="icon icon-tabler icon-tabler-align-box-bottom-center" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="4" y="4" width="16" height="16" rx="2" /><path d="M9 15v2" /><path d="M12 11v6" /><path d="M15 13v4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-bottom-left" class="icon icon-tabler icon-tabler-align-box-bottom-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="4" y="4" width="16" height="16" rx="2" /><path d="M7 15v2" /><path d="M10 11v6" /><path d="M13 13v4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-bottom-right" class="icon icon-tabler icon-tabler-align-box-bottom-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="4" y="4" width="16" height="16" rx="2" /><path d="M11 15v2" /><path d="M14 11v6" /><path d="M17 13v4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-left-bottom" class="icon icon-tabler icon-tabler-align-box-left-bottom" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 18.222v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778h12.444c.982 0 1.778 -.796 1.778 -1.778z" /><path d="M9 17h-2" /><path d="M13 14h-6" /><path d="M11 11h-4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-left-middle" class="icon icon-tabler icon-tabler-align-box-left-middle" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 18.222v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778h12.444c.982 0 1.778 -.796 1.778 -1.778z" /><path d="M9 15h-2" /><path d="M13 12h-6" /><path d="M11 9h-4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-left-top" class="icon icon-tabler icon-tabler-align-box-left-top" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20 18.222v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778h12.444c.982 0 1.778 -.796 1.778 -1.778z" /><path d="M9 13h-2" /><path d="M13 10h-6" /><path d="M11 7h-4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-right-bottom" class="icon icon-tabler icon-tabler-align-box-right-bottom" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 18.222v-12.444c0 -.982 .796 -1.778 1.778 -1.778h12.444c.982 0 1.778 .796 1.778 1.778v12.444c0 .982 -.796 1.778 -1.778 1.778h-12.444a1.778 1.778 0 0 1 -1.778 -1.778z" /><path d="M15 17h2" /><path d="M11 14h6" /><path d="M13 11h4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-right-middle" class="icon icon-tabler icon-tabler-align-box-right-middle" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 18.222v-12.444c0 -.982 .796 -1.778 1.778 -1.778h12.444c.982 0 1.778 .796 1.778 1.778v12.444c0 .982 -.796 1.778 -1.778 1.778h-12.444a1.778 1.778 0 0 1 -1.778 -1.778z" /><path d="M15 15h2" /><path d="M11 12h6" /><path d="M13 9h4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-right-top" class="icon icon-tabler icon-tabler-align-box-right-top" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 18.222v-12.444c0 -.982 .796 -1.778 1.778 -1.778h12.444c.982 0 1.778 .796 1.778 1.778v12.444c0 .982 -.796 1.778 -1.778 1.778h-12.444a1.778 1.778 0 0 1 -1.778 -1.778z" /><path d="M15 13h2" /><path d="M11 10h6" /><path d="M13 7h4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-top-center" class="icon icon-tabler icon-tabler-align-box-top-center" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5.778 20h12.444c.982 0 1.778 -.796 1.778 -1.778v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778z" /><path d="M9 9v-2" /><path d="M12 13v-6" /><path d="M15 11v-4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-top-left" class="icon icon-tabler icon-tabler-align-box-top-left" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5.778 20h12.444c.982 0 1.778 -.796 1.778 -1.778v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778z" /><path d="M7 9v-2" /><path d="M10 13v-6" /><path d="M13 11v-4" />
|
||||
</symbol>
|
||||
<symbol id="align-box-top-right" class="icon icon-tabler icon-tabler-align-box-top-right" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5.778 20h12.444c.982 0 1.778 -.796 1.778 -1.778v-12.444c0 -.982 -.796 -1.778 -1.778 -1.778h-12.444c-.982 0 -1.778 .796 -1.778 1.778v12.444c0 .982 .796 1.778 1.778 1.778z" /><path d="M11 9v-2" /><path d="M14 13v-6" /><path d="M17 11v-4" />
|
||||
</symbol>
|
||||
<symbol id="delta" class="icon icon-tabler icon-tabler-delta" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 20h16l-8 -16z" />
|
||||
</symbol>
|
||||
<symbol id="file-delta" class="icon icon-tabler icon-tabler-file-delta" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M9 17h6l-3 -6z" />
|
||||
</symbol>
|
||||
<symbol id="file-function" class="icon icon-tabler icon-tabler-file-function" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M10.5 17h.333c.474 0 .87 -.323 .916 -.746l.502 -4.508c.047 -.423 .443 -.746 .916 -.746h.333" /><path d="M10.5 14h3" />
|
||||
</symbol>
|
||||
<symbol id="file-lambda" class="icon icon-tabler icon-tabler-file-lambda" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M10 17l2 -3" /><path d="M15 17c-2.5 0 -2.5 -6 -5 -6" />
|
||||
</symbol>
|
||||
<symbol id="file-percent" class="icon icon-tabler icon-tabler-file-percent" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 17l4 -4" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M10 13h.01" /><path d="M14 17h.01" />
|
||||
</symbol>
|
||||
<symbol id="lambda" class="icon icon-tabler icon-tabler-lambda" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6 20l6.5 -9" /><path d="M19 20c-6 0 -6 -16 -12 -16" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#align-box-bottom-center" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-bottom-left" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-bottom-right" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-left-bottom" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-left-middle" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-left-top" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#align-box-right-bottom" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#align-box-right-middle" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#align-box-right-top" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#align-box-top-center" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#align-box-top-left" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#align-box-top-right" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#delta" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#file-delta" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#file-function" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#file-lambda" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#file-percent" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#lambda" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="air-conditioning-disabled" class="icon icon-tabler icon-tabler-air-conditioning-disabled" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="8" width="18" height="8" rx="2" /><path d="M7 16v-3a1 1 0 0 1 1 -1h8a1 1 0 0 1 1 1v3" />
|
||||
</symbol>
|
||||
<symbol id="alpha" class="icon icon-tabler icon-tabler-alpha" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.1 6c-1.1 2.913 -1.9 4.913 -2.4 6c-1.879 4.088 -3.713 6 -6 6c-2.4 0 -4.8 -2.4 -4.8 -6s2.4 -6 4.8 -6c2.267 0 4.135 1.986 6 6c.512 1.102 1.312 3.102 2.4 6" />
|
||||
</symbol>
|
||||
<symbol id="beta" class="icon icon-tabler icon-tabler-beta" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M8 22v-14a4 4 0 0 1 4 -4h.5a3.5 3.5 0 0 1 0 7h-.5h.5a4.5 4.5 0 1 1 -4.5 4.5v-.5" />
|
||||
</symbol>
|
||||
<symbol id="braile" class="icon icon-tabler icon-tabler-braile" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 5a1 1 0 1 0 2 0a1 1 0 0 0 -2 0z" /><path d="M7 5a1 1 0 1 0 2 0a1 1 0 0 0 -2 0z" /><path d="M7 19a1 1 0 1 0 2 0a1 1 0 0 0 -2 0z" /><path d="M16 12h.01" /><path d="M8 12h.01" /><path d="M16 19h.01" />
|
||||
</symbol>
|
||||
<symbol id="clock-cancel" class="icon icon-tabler icon-tabler-clock-cancel" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="19" cy="19" r="3" /><path d="M17 21l4 -4" /><path d="M20.995 12.3a9 9 0 1 0 -8.683 8.694" /><path d="M12 7v5l2 2" />
|
||||
</symbol>
|
||||
<symbol id="clock-edit" class="icon icon-tabler icon-tabler-clock-edit" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M21 12a9.001 9.001 0 1 0 -9.972 8.948c.32 .034 .644 .052 .972 .052" /><path d="M12 7v5l2 2" /><path d="M18.42 15.61a2.1 2.1 0 0 1 2.97 2.97l-3.39 3.42h-3v-3l3.42 -3.39z" />
|
||||
</symbol>
|
||||
<symbol id="clock-pause" class="icon icon-tabler icon-tabler-clock-pause" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M13 20.94a8.916 8.916 0 0 1 -7.364 -2.576a9 9 0 1 1 15.306 -5.342" /><path d="M12 7v5l2 2" /><path d="M17 17v5" /><path d="M21 17v5" />
|
||||
</symbol>
|
||||
<symbol id="clock-play" class="icon icon-tabler icon-tabler-clock-play" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 7v5l2 2" /><path d="M17 22l5 -3l-5 -3z" /><path d="M13.017 20.943a9 9 0 1 1 7.831 -7.292" />
|
||||
</symbol>
|
||||
<symbol id="clock-record" class="icon icon-tabler icon-tabler-clock-record" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M20.995 12.3a9 9 0 1 0 -8.683 8.694" /><path d="M12 7v5l2 2" /><circle cx="19" cy="19" r="3" />
|
||||
</symbol>
|
||||
<symbol id="clock-stop" class="icon icon-tabler icon-tabler-clock-stop" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M21 12a9 9 0 1 0 -9 9" /><path d="M12 7v5l1 1" /><path d="M16 16h6v6h-6z" />
|
||||
</symbol>
|
||||
<symbol id="cylinder" class="icon icon-tabler icon-tabler-cylinder" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><ellipse cx="12" cy="6" rx="5" ry="3" /><path d="M7 6v12c0 1.657 2.239 3 5 3s5 -1.343 5 -3v-12" />
|
||||
</symbol>
|
||||
<symbol id="sort-0-9" class="icon icon-tabler icon-tabler-sort-0-9" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M11 12h2" /><path d="M4 10v4a2 2 0 1 0 4 0v-4a2 2 0 1 0 -4 0z" /><path d="M16 15a1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1v-6a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h3" />
|
||||
</symbol>
|
||||
<symbol id="sort-9-0" class="icon icon-tabler icon-tabler-sort-9-0" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 15a1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1v-6a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h3" /><path d="M16 10v4a2 2 0 1 0 4 0v-4a2 2 0 1 0 -4 0z" /><path d="M11 12h2" />
|
||||
</symbol>
|
||||
<symbol id="sort-a-z" class="icon icon-tabler icon-tabler-sort-a-z" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M16 8h4l-4 8h4" /><path d="M4 16v-6a2 2 0 1 1 4 0v6" /><path d="M4 13h4" /><path d="M11 12h2" />
|
||||
</symbol>
|
||||
<symbol id="sort-z-a" class="icon icon-tabler icon-tabler-sort-z-a" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 8h4l-4 8h4" /><path d="M16 16v-6a2 2 0 1 1 4 0v6" /><path d="M16 13h4" /><path d="M11 12h2" />
|
||||
</symbol>
|
||||
<symbol id="swipe" class="icon icon-tabler icon-tabler-swipe" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><g fill="#FFF"><path d="M15 16.572v2.42a2.01 2.01 0 0 1 -2.009 2.008h-7.981a2.01 2.01 0 0 1 -2.01 -2.009v-7.981a2.01 2.01 0 0 1 2.009 -2.01h2.954" /><path d="M9.167 4.511a2.04 2.04 0 0 1 2.496 -1.441l7.826 2.097a2.04 2.04 0 0 1 1.441 2.496l-2.097 7.826a2.04 2.04 0 0 1 -2.496 1.441l-7.827 -2.097a2.04 2.04 0 0 1 -1.441 -2.496l2.098 -7.827z" /></g>
|
||||
</symbol>
|
||||
<symbol id="teapot" class="icon icon-tabler icon-tabler-teapot" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.29 3h3.42a2 2 0 0 1 1.988 1.78l1.555 14a2 2 0 0 1 -1.988 2.22h-6.53a2 2 0 0 1 -1.988 -2.22l1.555 -14a2 2 0 0 1 1.988 -1.78z" /><path d="M7.47 12.5l-4.257 -5.019a0.899 .899 0 0 1 .69 -1.481h13.09a3.004 3.004 0 0 1 3.007 3v3c0 1.657 -1.346 3 -3.007 3" /><path d="M7 17h10" />
|
||||
</symbol>
|
||||
<symbol id="timeline-event" class="icon icon-tabler icon-tabler-timeline-event" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="18" r="2" /><path d="M10 18h-6" /><path d="M14 18h6" /><path d="M12 13l-2 -2h-3a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1h10a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-3l-2 2z" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#air-conditioning-disabled" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#alpha" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#beta" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#braile" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#clock-cancel" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#clock-edit" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#clock-pause" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#clock-play" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#clock-record" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#clock-stop" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#cylinder" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#sort-0-9" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#sort-9-0" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#sort-a-z" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#sort-z-a" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#swipe" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#teapot" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#timeline-event" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 292 160" width="292" height="160" style="color: #354052"><rect x="0" y="0" width="292" height="160" fill="#fff"></rect>
|
||||
<symbol id="123" class="icon icon-tabler icon-tabler-123" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 10l2 -2v8" /><path d="M9 8h3a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h3" /><path d="M17 8h2.5a1.5 1.5 0 0 1 1.5 1.5v1a1.5 1.5 0 0 1 -1.5 1.5h-1.5h1.5a1.5 1.5 0 0 1 1.5 1.5v1a1.5 1.5 0 0 1 -1.5 1.5h-2.5" />
|
||||
</symbol>
|
||||
<symbol id="badge-3d" class="icon icon-tabler icon-tabler-badge-3d" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M7 9.5a0.5 .5 0 0 1 .5 -.5h1a1.5 1.5 0 0 1 0 3h-.5h.5a1.5 1.5 0 0 1 0 3h-1a0.5 .5 0 0 1 -.5 -.5" /><path d="M14 9v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z" />
|
||||
</symbol>
|
||||
<symbol id="badge-4k" class="icon icon-tabler icon-tabler-badge-4k" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M7 9v2a1 1 0 0 0 1 1h1" /><path d="M10 9v6" /><path d="M14 9v6" /><path d="M17 9l-2 3l2 3" /><path d="M15 12h-1" />
|
||||
</symbol>
|
||||
<symbol id="badge-8k" class="icon icon-tabler icon-tabler-badge-8k" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M14 9v6" /><path d="M17 9l-2 3l2 3" /><path d="M15 12h-1" /><path d="M8.5 12h-.5a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1a1 1 0 0 1 1 1v1a1 1 0 0 1 -1 1h-1a1 1 0 0 0 -1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1" />
|
||||
</symbol>
|
||||
<symbol id="badge-ad" class="icon icon-tabler icon-tabler-badge-ad" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M14 9v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z" /><path d="M7 15v-4.5a1.5 1.5 0 0 1 3 0v4.5" /><path d="M7 13h3" />
|
||||
</symbol>
|
||||
<symbol id="badge-ar" class="icon icon-tabler icon-tabler-badge-ar" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M7 15v-4.5a1.5 1.5 0 0 1 3 0v4.5" /><path d="M7 13h3" /><path d="M14 12h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6m3 0l-2 -3" />
|
||||
</symbol>
|
||||
<symbol id="badge-cc" class="icon icon-tabler icon-tabler-badge-cc" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M10 10.5a1.5 1.5 0 0 0 -3 0v3a1.5 1.5 0 0 0 3 0" /><path d="M17 10.5a1.5 1.5 0 0 0 -3 0v3a1.5 1.5 0 0 0 3 0" />
|
||||
</symbol>
|
||||
<symbol id="badge-hd" class="icon icon-tabler icon-tabler-badge-hd" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M14 9v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z" /><path d="M7 15v-6" /><path d="M10 15v-6" /><path d="M7 12h3" />
|
||||
</symbol>
|
||||
<symbol id="badge-sd" class="icon icon-tabler icon-tabler-badge-sd" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M14 9v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z" /><path d="M7 14.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a0.75 .75 0 0 1 .75 .75" />
|
||||
</symbol>
|
||||
<symbol id="badge-tm" class="icon icon-tabler icon-tabler-badge-tm" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M6 9h4" /><path d="M8 9v6" /><path d="M13 15v-6l2 3l2 -3v6" />
|
||||
</symbol>
|
||||
<symbol id="badge-vo" class="icon icon-tabler icon-tabler-badge-vo" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M7 9l2 6l2 -6" /><path d="M15.5 9a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1 -3 0v-3a1.5 1.5 0 0 1 1.5 -1.5z" />
|
||||
</symbol>
|
||||
<symbol id="badge-vr" class="icon icon-tabler icon-tabler-badge-vr" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M14 12h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6m3 0l-2 -3" /><path d="M7 9l2 6l2 -6" />
|
||||
</symbol>
|
||||
<symbol id="badge-wc" class="icon icon-tabler icon-tabler-badge-wc" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M6.5 9l.5 6l2 -4l2 4l.5 -6" /><path d="M17 10.5a1.5 1.5 0 0 0 -3 0v3a1.5 1.5 0 0 0 3 0" />
|
||||
</symbol>
|
||||
<symbol id="box-seam" class="icon icon-tabler icon-tabler-box-seam" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3l8 4.5v9l-8 4.5l-8 -4.5v-9l8 -4.5" /><path d="M12 12l8 -4.5" /><path d="M8.2 9.8l7.6 -4.6" /><path d="M12 12v9" /><path d="M12 12l-8 -4.5" />
|
||||
</symbol>
|
||||
<symbol id="brand-linqpad" class="icon icon-tabler icon-tabler-brand-linqpad" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 21h3.5l2.5 -6l2.5 -1l2.5 7h4l1 -4.5l-2 -1l-7 -12l-6 -.5l1.5 4l2.5 .5l1 2.5l-7 8z" />
|
||||
</symbol>
|
||||
<symbol id="clipboard-data" class="icon icon-tabler icon-tabler-clipboard-data" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2" /><rect x="9" y="3" width="6" height="4" rx="2" /><path d="M9 17v-4" /><path d="M12 17v-1" /><path d="M15 17v-2" /><path d="M12 17v-1" />
|
||||
</symbol>
|
||||
<symbol id="flip-flops" class="icon icon-tabler icon-tabler-flip-flops" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 4c2.21 0 4 1.682 4 3.758c0 .078 -.003 .156 -.008 .234l-.6 9.014c-.11 1.683 -1.596 2.994 -3.392 2.994s-3.28 -1.311 -3.392 -2.994l-.6 -9.014c-.138 -2.071 1.538 -3.855 3.743 -3.985a4.15 4.15 0 0 1 .25 -.007z" /><path d="M14.5 14c1 -3.333 2.167 -5 3.5 -5c1.333 0 2.5 1.667 3.5 5" /><path d="M18 16v1" /><path d="M6 4c2.21 0 4 1.682 4 3.758c0 .078 -.003 .156 -.008 .234l-.6 9.014c-.11 1.683 -1.596 2.994 -3.392 2.994s-3.28 -1.311 -3.392 -2.994l-.6 -9.014c-.138 -2.071 1.538 -3.855 3.742 -3.985c.084 -.005 .167 -.007 .25 -.007z" /><path d="M2.5 14c1 -3.333 2.167 -5 3.5 -5c1.333 0 2.5 1.667 3.5 5" /><path d="M6 16v1" />
|
||||
</symbol>
|
||||
<symbol id="vector-spline" class="icon icon-tabler icon-tabler-vector-spline" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><rect x="17" y="3" width="4" height="4" rx="1" /><rect x="3" y="17" width="4" height="4" rx="1" /><path d="M17 5c-6.627 0 -12 5.373 -12 12" />
|
||||
</symbol>
|
||||
|
||||
<use xlink:href="#123" x="24" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-3d" x="68" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-4k" x="112" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-8k" x="156" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-ad" x="200" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-ar" x="244" y="24" width="24" height="24" />
|
||||
<use xlink:href="#badge-cc" x="24" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-hd" x="68" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-sd" x="112" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-tm" x="156" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-vo" x="200" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-vr" x="244" y="68" width="24" height="24" />
|
||||
<use xlink:href="#badge-wc" x="24" y="112" width="24" height="24" />
|
||||
<use xlink:href="#box-seam" x="68" y="112" width="24" height="24" />
|
||||
<use xlink:href="#brand-linqpad" x="112" y="112" width="24" height="24" />
|
||||
<use xlink:href="#clipboard-data" x="156" y="112" width="24" height="24" />
|
||||
<use xlink:href="#flip-flops" x="200" y="112" width="24" height="24" />
|
||||
<use xlink:href="#vector-spline" x="244" y="112" width="24" height="24" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |