feat(lab): Migrate lab to main repo. (#4521)
* Add directory * Add lab check script * Delete duplicated icons * Fix the lab page * Adjust paths * update lockfile * update lockfile * fix(lab/planet): replace with guideline-compliant design * Add install step * Add second install step * Adjust lab in site * try this * Fix workflow * Add cspell * Format code * Temporary delete icons for copilot review * Place back lab icons * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Update lock file * Revert svg changes * Fix list * Rename filenames * Format tsconfig --------- Co-authored-by: Karsa <contact@karsa.org> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@@ -9,3 +9,4 @@ strikethrough
|
|||||||
touchpad
|
touchpad
|
||||||
ungroup
|
ungroup
|
||||||
toc
|
toc
|
||||||
|
sunlounger
|
||||||
|
|||||||
30
.github/workflows/linting-icons.yml
vendored
@@ -7,6 +7,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'icons/*'
|
- 'icons/*'
|
||||||
|
- 'lab/*'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint-filenames:
|
lint-filenames:
|
||||||
@@ -17,20 +18,47 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v6
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
|
cache: 'pnpm'
|
||||||
node-version-file: 'package.json'
|
node-version-file: 'package.json'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Get changed files
|
- name: Get changed files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
uses: tj-actions/changed-files@v46
|
uses: tj-actions/changed-files@v46
|
||||||
with:
|
with:
|
||||||
files: icons/*
|
files: |
|
||||||
|
icons/*
|
||||||
|
lab/*
|
||||||
|
|
||||||
- name: Generate annotations
|
- name: Generate annotations
|
||||||
run: node ./scripts/lintFilenames.mts
|
run: node ./scripts/lintFilenames.mts
|
||||||
env:
|
env:
|
||||||
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
|
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||||
|
|
||||||
|
check-lab-icons:
|
||||||
|
name: Check Lab Icons
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: pnpm/action-setup@v4
|
||||||
|
- uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
cache: 'pnpm'
|
||||||
|
node-version-file: 'package.json'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Check lab icons do not already exist in icons
|
||||||
|
run: node ./scripts/checkLabIcons.mts
|
||||||
|
|
||||||
lint-aliases:
|
lint-aliases:
|
||||||
name: Check Uniqueness of Aliases
|
name: Check Uniqueness of Aliases
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
3
.gitignore
vendored
@@ -54,6 +54,9 @@ docs/.vitepress/data/iconDetails
|
|||||||
docs/.vitepress/data/relatedIcons.json
|
docs/.vitepress/data/relatedIcons.json
|
||||||
docs/.vitepress/data/brandStopwords.json
|
docs/.vitepress/data/brandStopwords.json
|
||||||
docs/.vitepress/data/iconPopularity
|
docs/.vitepress/data/iconPopularity
|
||||||
|
docs/.vitepress/data/lab/iconNodes
|
||||||
|
docs/.vitepress/data/lab/iconMetaData.ts
|
||||||
|
docs/.vitepress/data/lab/iconPopularity
|
||||||
docs/.vercel
|
docs/.vercel
|
||||||
docs/.nitro
|
docs/.nitro
|
||||||
docs/public/og/**
|
docs/public/og/**
|
||||||
|
|||||||
25
docs/.vitepress/api/lab/icon-details/index.get.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { eventHandler, setResponseHeader } from 'h3';
|
||||||
|
import iconMetaData from '../../../data/lab/iconMetaData';
|
||||||
|
import iconPopularity from '../../../data/lab/iconPopularity';
|
||||||
|
import iconNodes from '../../../data/lab/iconNodes';
|
||||||
|
|
||||||
|
export default eventHandler((event) => {
|
||||||
|
setResponseHeader(event, 'Access-Control-Allow-Origin', '*');
|
||||||
|
|
||||||
|
return Object.fromEntries(
|
||||||
|
Object.entries(iconMetaData).map(([iconName, iconData]) => {
|
||||||
|
// Remove $schema from the response
|
||||||
|
delete iconData['$schema'];
|
||||||
|
|
||||||
|
return [
|
||||||
|
iconName,
|
||||||
|
{
|
||||||
|
name: iconName,
|
||||||
|
iconNode: iconNodes[iconName],
|
||||||
|
popularity: iconPopularity[iconName]?.count ?? 0,
|
||||||
|
...iconData,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
14
docs/.vitepress/api/lab/icon-metadata/index.get.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { eventHandler, setResponseHeader } from 'h3';
|
||||||
|
import iconMetaData from '../../../data/lab/iconMetaData';
|
||||||
|
|
||||||
|
export default eventHandler((event) => {
|
||||||
|
setResponseHeader(event, 'Cache-Control', 'public, max-age=86400');
|
||||||
|
setResponseHeader(event, 'Access-Control-Allow-Origin', '*');
|
||||||
|
|
||||||
|
for (const iconDetail in iconMetaData) {
|
||||||
|
// Remove $schema from the response
|
||||||
|
delete iconMetaData[iconDetail]['$schema'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return iconMetaData;
|
||||||
|
});
|
||||||
30
docs/.vitepress/api/lab/icon-nodes/index.get.ts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { eventHandler, getQuery, setResponseHeader } from 'h3';
|
||||||
|
import iconNodes from '../../../data/lab/iconNodes';
|
||||||
|
type IconNodeWithKeys = [elementName: string, attrs: Record<string, string> & { key?: string }][];
|
||||||
|
|
||||||
|
export default eventHandler((event) => {
|
||||||
|
const query = getQuery(event);
|
||||||
|
|
||||||
|
const withUniqueKeys = query.withUniqueKeys === 'true';
|
||||||
|
|
||||||
|
setResponseHeader(event, 'Cache-Control', 'public, max-age=86400');
|
||||||
|
setResponseHeader(event, 'Access-Control-Allow-Origin', '*');
|
||||||
|
|
||||||
|
if (withUniqueKeys) {
|
||||||
|
return iconNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.entries(iconNodes).reduce((acc, [name, iconNode]) => {
|
||||||
|
if (withUniqueKeys) {
|
||||||
|
return [name, iconNode];
|
||||||
|
}
|
||||||
|
|
||||||
|
const newIconNode = (iconNode as IconNodeWithKeys).map(([name, { key, ...attrs }]) => {
|
||||||
|
return [name, attrs];
|
||||||
|
});
|
||||||
|
|
||||||
|
acc[name] = newIconNode;
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
});
|
||||||
0
docs/.vitepress/data/lab/.gitkeep
Normal file
@@ -16,7 +16,7 @@ export const externalLibContext = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const externalLibIconNodesAPI = {
|
const externalLibIconNodesAPI = {
|
||||||
lab: 'https://lab.lucide.dev/api/icon-details',
|
lab: `${import.meta.env.DEV ? 'http://localhost:3000' : ''}/api/lab/icon-details`,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function useExternalLibs(): ExternalLibContext {
|
export function useExternalLibs(): ExternalLibContext {
|
||||||
@@ -32,13 +32,15 @@ export function useExternalLibs(): ExternalLibContext {
|
|||||||
newExternalIconNodes[lib] = savedIconNodes[lib];
|
newExternalIconNodes[lib] = savedIconNodes[lib];
|
||||||
} else {
|
} else {
|
||||||
const response = await fetch(externalLibIconNodesAPI[lib]);
|
const response = await fetch(externalLibIconNodesAPI[lib]);
|
||||||
const iconNodes = await response.json();
|
const iconDetails = await response.json();
|
||||||
|
|
||||||
if (iconNodes) {
|
if (iconDetails) {
|
||||||
newExternalIconNodes[lib] = Object.values(iconNodes).map((iconEntity: IconEntity) => ({
|
newExternalIconNodes[lib] = Object.values(iconDetails).map((iconEntity: IconEntity) => {
|
||||||
|
return {
|
||||||
...iconEntity,
|
...iconEntity,
|
||||||
externalLibrary: lib,
|
externalLibrary: lib,
|
||||||
}));
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,26 @@
|
|||||||
import { IconEntity } from '../../.vitepress/theme/types';
|
import iconNodes from '../../.vitepress/data/lab/iconNodes';
|
||||||
|
import iconPopularity from '../../.vitepress/data/lab/iconPopularity';
|
||||||
|
import iconMetaData from '../../.vitepress/data/lab/iconMetaData';
|
||||||
|
import { type IconEntity } from '../../.vitepress/theme/types';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
paths: async () => {
|
paths: async () => {
|
||||||
try {
|
return (Object.entries(iconNodes) as unknown as IconEntity[]).map(([name, iconNode]) => {
|
||||||
const iconDetailsResponse = await fetch('https://lab.lucide.dev/api/icon-details');
|
const iconDetails = iconMetaData[name];
|
||||||
const iconDetails = (await iconDetailsResponse.json()) as Record<string, IconEntity>;
|
|
||||||
|
delete iconDetails['$schema'];
|
||||||
|
|
||||||
return Object.values(iconDetails).map((iconEntity) => {
|
|
||||||
const params = {
|
const params = {
|
||||||
|
name,
|
||||||
|
iconNode,
|
||||||
externalLibrary: 'lab',
|
externalLibrary: 'lab',
|
||||||
...iconEntity,
|
popularity: iconPopularity[name]?.count ?? 0,
|
||||||
|
...iconDetails,
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
params,
|
params,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching icon details:', error);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,8 +15,10 @@
|
|||||||
"prebuild:categoriesJson": "node ./scripts/writeCategoriesMetadata.mts",
|
"prebuild:categoriesJson": "node ./scripts/writeCategoriesMetadata.mts",
|
||||||
"prebuild:relatedIcons": "node ./scripts/writeIconRelatedIcons.mts",
|
"prebuild:relatedIcons": "node ./scripts/writeIconRelatedIcons.mts",
|
||||||
"prebuild:iconDetails": "node ./scripts/writeIconDetails.mts",
|
"prebuild:iconDetails": "node ./scripts/writeIconDetails.mts",
|
||||||
"prebuild:iconPopularity": "node ./scripts/writeiconPopularity.mts",
|
"prebuild:iconPopularity": "node ./scripts/writeiconPopularity.mts && node ./scripts/writeiconPopularityIndex.mts",
|
||||||
"prebuild:brandStopwords": "node ./scripts/writeBrandStopwords.mts",
|
"prebuild:brandStopwords": "node ./scripts/writeBrandStopwords.mts",
|
||||||
|
"prebuild:writeLabIconNodes": "node ./scripts/writeLabIconNodes.mts",
|
||||||
|
"prebuild:writeLabIconMetaIndex": "node ./scripts/writeLabIconMetaIndex.mts",
|
||||||
"postbuild:vercelJson": "node ./scripts/writeVercelOutput.mts",
|
"postbuild:vercelJson": "node ./scripts/writeVercelOutput.mts",
|
||||||
"dev": "nitropack dev",
|
"dev": "nitropack dev",
|
||||||
"prebuild:api": "nitropack prepare",
|
"prebuild:api": "nitropack prepare",
|
||||||
|
|||||||
49
docs/scripts/writeLabIconMetaIndex.mts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { readSvgDirectory, toCamelCase } from '@lucide/helpers';
|
||||||
|
|
||||||
|
const currentDir = process.cwd();
|
||||||
|
const ICONS_DIR = path.resolve(currentDir, '../lab');
|
||||||
|
const iconJsonFiles = await readSvgDirectory(ICONS_DIR, '.json');
|
||||||
|
|
||||||
|
const labDirectory = path.resolve(currentDir, '.vitepress/data/lab');
|
||||||
|
const location = path.resolve(currentDir, labDirectory, 'iconMetaData.ts');
|
||||||
|
|
||||||
|
if (fs.existsSync(location)) {
|
||||||
|
fs.unlinkSync(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(labDirectory)) {
|
||||||
|
fs.mkdirSync(labDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
const iconMetaIndexFileImports = [];
|
||||||
|
const iconMetaIndexFileExports = [];
|
||||||
|
|
||||||
|
iconJsonFiles.forEach((iconJsonFile) => {
|
||||||
|
const iconName = path.basename(iconJsonFile, '.json');
|
||||||
|
|
||||||
|
iconMetaIndexFileImports.push(
|
||||||
|
`import ${toCamelCase(iconName)}Metadata from '../../../../lab/${iconName}.json';`,
|
||||||
|
);
|
||||||
|
iconMetaIndexFileExports.push(` '${iconName}': ${toCamelCase(iconName)}Metadata,`);
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await fs.promises.writeFile(
|
||||||
|
location,
|
||||||
|
`\
|
||||||
|
${iconMetaIndexFileImports.join('\n')}
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
${iconMetaIndexFileExports.join('\n')}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Successfully write icon json file index');
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(`Something went wrong generating icon json file index file,\n ${error}`);
|
||||||
|
}
|
||||||
62
docs/scripts/writeLabIconNodes.mts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { renderIconsObject } from '@lucide/build-icons';
|
||||||
|
import { readSvgDirectory, toCamelCase } from '@lucide/helpers';
|
||||||
|
|
||||||
|
const currentDir = process.cwd();
|
||||||
|
const ICONS_DIR = path.resolve(currentDir, '../lab');
|
||||||
|
const svgFiles = await readSvgDirectory(ICONS_DIR);
|
||||||
|
const icons = await renderIconsObject(svgFiles, ICONS_DIR, true);
|
||||||
|
|
||||||
|
const iconNodesDirectory = path.resolve(currentDir, '.vitepress/data/lab', 'iconNodes');
|
||||||
|
|
||||||
|
if (fs.existsSync(iconNodesDirectory)) {
|
||||||
|
fs.rmSync(iconNodesDirectory, { recursive: true, force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(iconNodesDirectory)) {
|
||||||
|
fs.mkdirSync(iconNodesDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
const iconIndexFile = path.resolve(iconNodesDirectory, `index.ts`);
|
||||||
|
const iconIndexFileImports: string[] = [];
|
||||||
|
const iconIndexFileExports: string[] = [];
|
||||||
|
const iconIndexFileDefaultExports: string[] = [];
|
||||||
|
|
||||||
|
const writeIconFiles = Object.entries(icons).map(async ([iconName, { children }]) => {
|
||||||
|
// We need to use .node.json because the there is a file called package, which is a reserved word for packages.
|
||||||
|
const location = path.resolve(iconNodesDirectory, `${iconName}.node.json`);
|
||||||
|
const iconNode = children.map(({ name, attributes }) => [name, attributes]);
|
||||||
|
|
||||||
|
const output = JSON.stringify(iconNode, null, 2);
|
||||||
|
await fs.promises.writeFile(location, output, 'utf-8');
|
||||||
|
|
||||||
|
iconIndexFileImports.push(
|
||||||
|
`import ${toCamelCase(iconName)}Node from './${iconName}.node.json' with { type: "json" };`,
|
||||||
|
);
|
||||||
|
iconIndexFileExports.push(` ${toCamelCase(iconName)}Node as ${toCamelCase(iconName)},`);
|
||||||
|
iconIndexFileDefaultExports.push(` '${iconName}': ${toCamelCase(iconName)}Node,`);
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await Promise.all(writeIconFiles);
|
||||||
|
await fs.promises.writeFile(
|
||||||
|
iconIndexFile,
|
||||||
|
`\
|
||||||
|
${iconIndexFileImports.join('\n')}
|
||||||
|
|
||||||
|
export {
|
||||||
|
${iconIndexFileExports.join('\n')}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
${iconIndexFileDefaultExports.join('\n')}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Successfully write', writeIconFiles.length, 'iconNodes.');
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(`Something went wrong generating iconNode files,\n ${error}`);
|
||||||
|
}
|
||||||
@@ -5,27 +5,59 @@ import { loadEnvFile } from 'node:process';
|
|||||||
import { readSvgDirectory } from '@lucide/helpers';
|
import { readSvgDirectory } from '@lucide/helpers';
|
||||||
|
|
||||||
const currentDir = process.cwd();
|
const currentDir = process.cwd();
|
||||||
const ICONS_DIR = path.resolve(currentDir, '../icons');
|
const dataDirectory = path.resolve(currentDir, '.vitepress/data');
|
||||||
const iconPopularityDirectory = path.resolve(currentDir, '.vitepress/data', 'iconPopularity');
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Load environment variables from .env file, if it exists.
|
// Load environment variables from .env file, if it exists.
|
||||||
loadEnvFile(`${currentDir}/.env`);
|
loadEnvFile(`${currentDir}/.env`);
|
||||||
} catch (error) {}
|
} catch (error) {}
|
||||||
|
|
||||||
if (fs.existsSync(iconPopularityDirectory)) {
|
interface IconCollection {
|
||||||
fs.rmSync(iconPopularityDirectory, { recursive: true, force: true });
|
/** Human readable name, used for logging. */
|
||||||
|
name: string;
|
||||||
|
/** Directory containing the icon `.json` files. */
|
||||||
|
iconsDir: string;
|
||||||
|
/** Directory the `${iconName}.json` popularity files are written to. */
|
||||||
|
outputDir: string;
|
||||||
|
/** Matches an analytics route and captures the icon name in group 1. */
|
||||||
|
routePattern: RegExp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(iconPopularityDirectory)) {
|
// Lab must come before the default collection because `/icons/lab/foo` also
|
||||||
fs.mkdirSync(iconPopularityDirectory);
|
// matches the default `/icons/(...)` pattern; the first match wins per route.
|
||||||
|
const iconCollections: IconCollection[] = [
|
||||||
|
{
|
||||||
|
name: 'lab',
|
||||||
|
iconsDir: path.resolve(currentDir, '../lab'),
|
||||||
|
outputDir: path.resolve(dataDirectory, 'lab', 'iconPopularity'),
|
||||||
|
// e.g. /icons/lab/burger, /icons/lab/burger/ or /icons/lab/burger?ref=homepage
|
||||||
|
routePattern: /^\/icons\/lab\/([^\/\?]+)(?:[\/\?]|$)/,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'default',
|
||||||
|
iconsDir: path.resolve(currentDir, '../icons'),
|
||||||
|
outputDir: path.resolve(dataDirectory, 'iconPopularity'),
|
||||||
|
// e.g. /icons/activity, /icons/activity/ or /icons/activity?ref=homepage
|
||||||
|
routePattern: /^\/icons\/([^\/\?]+)(?:[\/\?]|$)/,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
interface CollectionData extends IconCollection {
|
||||||
|
iconNames: string[];
|
||||||
|
counts: Record<string, number>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const iconJsonFiles = await readSvgDirectory(ICONS_DIR, '.json');
|
const collections: CollectionData[] = await Promise.all(
|
||||||
const iconNames = iconJsonFiles.map((file) => path.basename(file, '.json'));
|
iconCollections.map(async (collection) => {
|
||||||
|
const iconJsonFiles = await readSvgDirectory(collection.iconsDir, '.json');
|
||||||
|
const iconNames = iconJsonFiles.map((file) => path.basename(file, '.json'));
|
||||||
|
|
||||||
const defaultIconNamePopularity: Record<string, number> = Object.fromEntries(
|
return {
|
||||||
iconNames.map((iconName) => [iconName, 0])
|
...collection,
|
||||||
|
iconNames,
|
||||||
|
counts: Object.fromEntries(iconNames.map((iconName) => [iconName, 0])),
|
||||||
|
};
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
interface AnalyticsResponse {
|
interface AnalyticsResponse {
|
||||||
@@ -35,19 +67,30 @@ interface AnalyticsResponse {
|
|||||||
}[];
|
}[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const writeIconPopularity = async (iconVisitCounts: Record<string, number>) => {
|
const writeIconPopularity = async ({ name, outputDir, counts }: CollectionData) => {
|
||||||
const writePopularityPromises = Object.entries(iconVisitCounts).map(([iconName, count]) => {
|
if (fs.existsSync(outputDir)) {
|
||||||
const location = path.resolve(iconPopularityDirectory, `${iconName}.json`);
|
fs.rmSync(outputDir, { recursive: true, force: true });
|
||||||
|
}
|
||||||
|
fs.mkdirSync(outputDir, { recursive: true });
|
||||||
|
|
||||||
|
const writePopularityPromises = Object.entries(counts).map(([iconName, count]) => {
|
||||||
|
const location = path.resolve(outputDir, `${iconName}.json`);
|
||||||
return fs.promises.writeFile(location, JSON.stringify({ count }, null, 2), 'utf-8');
|
return fs.promises.writeFile(location, JSON.stringify({ count }, null, 2), 'utf-8');
|
||||||
});
|
});
|
||||||
|
|
||||||
await Promise.all(writePopularityPromises);
|
await Promise.all(writePopularityPromises);
|
||||||
console.log('Successfully written icon popularity data for', writePopularityPromises.length, 'icons.');
|
console.log(
|
||||||
|
'Successfully written icon popularity data for',
|
||||||
|
writePopularityPromises.length,
|
||||||
|
`${name} icons.`,
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const writeAllIconPopularity = () => Promise.all(collections.map(writeIconPopularity));
|
||||||
|
|
||||||
if (process.env.LUCIDE_ANALYTICS_TOKEN === undefined) {
|
if (process.env.LUCIDE_ANALYTICS_TOKEN === undefined) {
|
||||||
console.warn('LUCIDE_ANALYTICS_TOKEN environment variable is not set. Writing default icon popularity data.');
|
console.warn('LUCIDE_ANALYTICS_TOKEN environment variable is not set. Writing default icon popularity data.');
|
||||||
await writeIconPopularity(defaultIconNamePopularity);
|
await writeAllIconPopularity();
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,29 +119,34 @@ try {
|
|||||||
|
|
||||||
const analyticsData: AnalyticsResponse = await response.json();
|
const analyticsData: AnalyticsResponse = await response.json();
|
||||||
|
|
||||||
const iconVisitCounts = analyticsData.results.reduce((acc, { dimensions, metrics }) => {
|
for (const { dimensions, metrics } of analyticsData.results) {
|
||||||
const [route] = dimensions;
|
const [route] = dimensions;
|
||||||
const [count] = metrics;
|
const [count] = metrics;
|
||||||
|
|
||||||
if (!route.startsWith('/icons')) {
|
if (!route.startsWith('/icons')) {
|
||||||
return acc
|
continue;
|
||||||
}
|
}
|
||||||
// Only match routes that start with /icons/ and end with an icon name, e.g. /icons/activity, /icons/activity/ or /icons/activity?ref=homepage
|
|
||||||
const match = route.match(/^\/icons\/([^\/\?]+)(?:[\/\?]|$)/);
|
// Route each visit to the first collection whose pattern matches. Lab is
|
||||||
if (match) {
|
// checked first so `/icons/lab/foo` is not swallowed by the default pattern.
|
||||||
|
for (const collection of collections) {
|
||||||
|
const match = route.match(collection.routePattern);
|
||||||
|
if (!match) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const iconName = match[1];
|
const iconName = match[1];
|
||||||
|
if (collection.iconNames.includes(iconName)) {
|
||||||
|
collection.counts[iconName] += count;
|
||||||
|
}
|
||||||
|
|
||||||
if (iconNames.includes(iconName)) {
|
break;
|
||||||
acc[iconName] = (acc[iconName] || 0) + count;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return acc;
|
await writeAllIconPopularity();
|
||||||
}, defaultIconNamePopularity);
|
|
||||||
|
|
||||||
await writeIconPopularity(iconVisitCounts);
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching analytics data:', error);
|
console.error('Error fetching analytics data:', error);
|
||||||
await writeIconPopularity(defaultIconNamePopularity);
|
await writeAllIconPopularity();
|
||||||
}
|
}
|
||||||
|
|||||||
49
docs/scripts/writeiconPopularityIndex.mts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { readSvgDirectory, toCamelCase } from '@lucide/helpers';
|
||||||
|
|
||||||
|
const currentDir = process.cwd();
|
||||||
|
const ICONS_DIR = path.resolve(currentDir, '../lab');
|
||||||
|
const iconJsonFiles = await readSvgDirectory(ICONS_DIR, '.json');
|
||||||
|
|
||||||
|
const labIconPopularityDirectory = path.resolve(currentDir, '.vitepress/data/lab/iconPopularity');
|
||||||
|
const location = path.resolve(currentDir, labIconPopularityDirectory, 'index.ts');
|
||||||
|
|
||||||
|
if (fs.existsSync(location)) {
|
||||||
|
fs.unlinkSync(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(labIconPopularityDirectory)) {
|
||||||
|
fs.mkdirSync(labIconPopularityDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
const iconMetaIndexFileImports = [];
|
||||||
|
const iconMetaIndexFileExports = [];
|
||||||
|
|
||||||
|
iconJsonFiles.forEach((iconJsonFile) => {
|
||||||
|
const iconName = path.basename(iconJsonFile, '.json');
|
||||||
|
|
||||||
|
iconMetaIndexFileImports.push(
|
||||||
|
`import ${toCamelCase(iconName)}Popularity from './${iconName}.json' with { type: 'json' };`,
|
||||||
|
);
|
||||||
|
iconMetaIndexFileExports.push(` '${iconName}': ${toCamelCase(iconName)}Popularity,`);
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await fs.promises.writeFile(
|
||||||
|
location,
|
||||||
|
`\
|
||||||
|
${iconMetaIndexFileImports.join('\n')}
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
${iconMetaIndexFileExports.join('\n')}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Successfully write icon json file index');
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(`Something went wrong generating icon json file index file,\n ${error}`);
|
||||||
|
}
|
||||||
21
lab/ampersand-square.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"and",
|
||||||
|
"typography",
|
||||||
|
"operator",
|
||||||
|
"join",
|
||||||
|
"concatenate",
|
||||||
|
"code",
|
||||||
|
"coding",
|
||||||
|
"&"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"design",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/ampersand-square.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||||
|
<path d="M16 17c-4-2-7-6-7-8a2 2 0 0 1 4 0c0 3-5 1.5-5 5 0 1.7 1.3 3 3 3 3 0 5-2 5-4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 352 B |
33
lab/apple-core.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"fruit",
|
||||||
|
"juice",
|
||||||
|
"smoothie",
|
||||||
|
"sweet",
|
||||||
|
"snack",
|
||||||
|
"meal",
|
||||||
|
"lunch",
|
||||||
|
"ingredient",
|
||||||
|
"cooking",
|
||||||
|
"cookery",
|
||||||
|
"kitchen",
|
||||||
|
"cuisine",
|
||||||
|
"eating",
|
||||||
|
"healthy",
|
||||||
|
"nutrition",
|
||||||
|
"diet",
|
||||||
|
"bite",
|
||||||
|
"bitten",
|
||||||
|
"consumed",
|
||||||
|
"litter",
|
||||||
|
"trash",
|
||||||
|
"rubbish"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/apple-core.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M14 2a2 2 0 0 0-2 2v2.53" />
|
||||||
|
<path d="M12 6.53a5.98 5.98 0 0 0-8.5.5 4 4 0 0 1 4.02 5.86 4 4 0 0 1-1.76 7.04C6.82 21.17 7.97 22 9 22c1.5 0 1.5-1 3-1s1.5 1 3 1c1.03 0 2.18-.83 3.24-2.07a4 4 0 0 1-1.76-7.03 4 4 0 0 1 4.02-5.87 5.99 5.99 0 0 0-8.5-.5Z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 474 B |
25
lab/arrows-up-down-square.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"elevator",
|
||||||
|
"lift",
|
||||||
|
"floors",
|
||||||
|
"levels",
|
||||||
|
"hotel",
|
||||||
|
"accommodation",
|
||||||
|
"expand",
|
||||||
|
"unfold",
|
||||||
|
"vertical",
|
||||||
|
"toolbar",
|
||||||
|
"button"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"buildings",
|
||||||
|
"travel",
|
||||||
|
"arrows",
|
||||||
|
"shapes"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
lab/arrows-up-down-square.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m6 9 3-3 3 3" />
|
||||||
|
<path d="M9 6v6" />
|
||||||
|
<rect width="20" height="20" x="2" y="2" rx="2" />
|
||||||
|
<path d="M15 18v-6" />
|
||||||
|
<path d="m18 15-3 3-3-3" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 366 B |
23
lab/astronaut-helmet.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"spacesuit",
|
||||||
|
"spaceman",
|
||||||
|
"explore",
|
||||||
|
"interplanetary",
|
||||||
|
"stars",
|
||||||
|
"safety",
|
||||||
|
"protection",
|
||||||
|
"headgear",
|
||||||
|
"🧑🚀",
|
||||||
|
"👨🚀",
|
||||||
|
"👩🚀"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"science",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/astronaut-helmet.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m10.6 13.4 6.3 6.1c.3.5.1 1.1-.4 1.4-1.4.7-2.9 1.1-4.5 1.1a2 2 0 0 1-1.4-.6l-8-8A2 2 0 0 1 2 12a10 10 0 0 1 19.44-3.3c.3.7-.3 1.3-1 1.3H12" />
|
||||||
|
<circle cx="12" cy="12" r="2" />
|
||||||
|
<path d="M16.2 18.8c3-1.9 4.4-5.5 3.5-8.8" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 445 B |
24
lab/at-sign-circle.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"mention",
|
||||||
|
"at",
|
||||||
|
"email address",
|
||||||
|
"message",
|
||||||
|
"contact",
|
||||||
|
"networking",
|
||||||
|
"ping",
|
||||||
|
"@"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"account",
|
||||||
|
"communication",
|
||||||
|
"social",
|
||||||
|
"notifications",
|
||||||
|
"shapes"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/at-sign-circle.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<path d="M14 17.7a6 6 0 1 1 4-5.7 2 2 0 0 1-4 0" />
|
||||||
|
<circle cx="12" cy="12" r="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 333 B |
32
lab/at-sign-square.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"mention",
|
||||||
|
"at",
|
||||||
|
"email address",
|
||||||
|
"message",
|
||||||
|
"contacts",
|
||||||
|
"details",
|
||||||
|
"address book",
|
||||||
|
"directory",
|
||||||
|
"listing",
|
||||||
|
"networking",
|
||||||
|
"business card",
|
||||||
|
"ping",
|
||||||
|
"toolbar",
|
||||||
|
"keyboard",
|
||||||
|
"button",
|
||||||
|
"@"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"account",
|
||||||
|
"connectivity",
|
||||||
|
"communication",
|
||||||
|
"social",
|
||||||
|
"shapes"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/at-sign-square.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="20" height="20" x="2" y="2" rx="2" />
|
||||||
|
<path d="M14 17.7a6 6 0 1 1 4-5.7 2 2 0 0 1-4 0" />
|
||||||
|
<circle cx="12" cy="12" r="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 350 B |
26
lab/avocado.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"fruit",
|
||||||
|
"snack",
|
||||||
|
"meal",
|
||||||
|
"lunch",
|
||||||
|
"ingredient",
|
||||||
|
"cooking",
|
||||||
|
"cookery",
|
||||||
|
"kitchen",
|
||||||
|
"cuisine",
|
||||||
|
"eating",
|
||||||
|
"healthy",
|
||||||
|
"nutrition",
|
||||||
|
"diet",
|
||||||
|
"guacamole",
|
||||||
|
"mexican"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/avocado.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M22 7a4.95 4.95 0 0 0-8.6-3.4c-1.5 1.6-1.6 1.8-5 2.6a8 8 0 1 0 9.4 9.5c.7-3.4 1-3.6 2.6-5 1-1 1.6-2.3 1.6-3.7" />
|
||||||
|
<circle cx="10" cy="14" r="3.5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 370 B |
27
lab/baby-pacifier.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"dummy",
|
||||||
|
"teething",
|
||||||
|
"suck",
|
||||||
|
"silence",
|
||||||
|
"quiet",
|
||||||
|
"newborn",
|
||||||
|
"childproof",
|
||||||
|
"children",
|
||||||
|
"infant",
|
||||||
|
"kids",
|
||||||
|
"toddler",
|
||||||
|
"mother",
|
||||||
|
"mum",
|
||||||
|
"family"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"people",
|
||||||
|
"home",
|
||||||
|
"shopping"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
lab/baby-pacifier.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M10.1 7.4a1.95 1.95 0 0 0 3.7-1.5c-.8-2-3.2-3-5.2-2.2-2.9 1.2-4.8 3.7-5.4 6.5a1.95 1.95 0 0 0 0 3.6A9.05 9.05 0 0 0 7 19.42" />
|
||||||
|
<path d="M17.1 19.4c2-1.3 3.3-3.4 3.8-5.6a2 2 0 0 0 0-3.6 9.83 9.83 0 0 0-3.2-5" />
|
||||||
|
<path d="M8 12h.01" />
|
||||||
|
<path d="M16 12h.01" />
|
||||||
|
<circle cx="12" cy="16" r="2" />
|
||||||
|
<path d="M10 16h-.5A2.5 2.5 0 0 0 7 18.5v1A2.5 2.5 0 0 0 9.5 22h5a2.5 2.5 0 0 0 2.5-2.5v-1a2.5 2.5 0 0 0-2.5-2.5H14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 641 B |
33
lab/bacon.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"rashers",
|
||||||
|
"smoked",
|
||||||
|
"streaky",
|
||||||
|
"crispy",
|
||||||
|
"meat",
|
||||||
|
"fast food",
|
||||||
|
"junk food",
|
||||||
|
"snack",
|
||||||
|
"dish",
|
||||||
|
"restaurant",
|
||||||
|
"brunch",
|
||||||
|
"lunch",
|
||||||
|
"meal",
|
||||||
|
"savory",
|
||||||
|
"savoury",
|
||||||
|
"cookery",
|
||||||
|
"cooking",
|
||||||
|
"grilled",
|
||||||
|
"barbecue",
|
||||||
|
"barbeque",
|
||||||
|
"bbq",
|
||||||
|
"pig"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/bacon.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M22 8c-2 5-5 2-7 7s-5 2-7 7l-6-6c2-5 5-2 7-7s5-2 7-7Z" />
|
||||||
|
<path d="M5 19c2-5 5-2 7-7s5-2 7-7" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 318 B |
26
lab/bag-hand.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"purse",
|
||||||
|
"finance",
|
||||||
|
"storage",
|
||||||
|
"store",
|
||||||
|
"ecommerce",
|
||||||
|
"cart",
|
||||||
|
"purchase",
|
||||||
|
"womens",
|
||||||
|
"girls",
|
||||||
|
"female",
|
||||||
|
"ladies",
|
||||||
|
"accessories",
|
||||||
|
"fashion",
|
||||||
|
"leather"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"shopping",
|
||||||
|
"money"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/bag-hand.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M8 8c0-2.8 1.8-5 4-5s4 2.2 4 5" />
|
||||||
|
<path d="m21 18.6-2-9.8c-.1-.5-.5-.8-1-.8H6c-.5 0-.9.3-1 .8l-2 9.8v.4a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2Z" />
|
||||||
|
<path d="M12 12v4" />
|
||||||
|
<path d="M18 8A6 6 0 0 1 6 8" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 421 B |
24
lab/barbecue.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"barbeque",
|
||||||
|
"bbq",
|
||||||
|
"grilled",
|
||||||
|
"smoke",
|
||||||
|
"dinner",
|
||||||
|
"meal",
|
||||||
|
"meat",
|
||||||
|
"cookery",
|
||||||
|
"cooking",
|
||||||
|
"charcoal",
|
||||||
|
"heat",
|
||||||
|
"hot",
|
||||||
|
"fire"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
lab/barbecue.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M6 4c0-1 2-1 2-2" />
|
||||||
|
<path d="M12 4c0-1 2-1 2-2" />
|
||||||
|
<path d="M18 4c0-1 2-1 2-2" />
|
||||||
|
<path d="M3 8a9.06 9 0 0 0 18 0Z" />
|
||||||
|
<path d="m9.2 15.6-1.3 2.6" />
|
||||||
|
<circle cx="7" cy="20" r="2" />
|
||||||
|
<path d="M9 20h8" />
|
||||||
|
<path d="M14.8 15.6 18 22" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 467 B |
29
lab/barber-pole.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"hairdresser",
|
||||||
|
"grooming",
|
||||||
|
"cut",
|
||||||
|
"shave",
|
||||||
|
"shop",
|
||||||
|
"salon",
|
||||||
|
"service",
|
||||||
|
"signage",
|
||||||
|
"stripes",
|
||||||
|
"spin",
|
||||||
|
"spiral",
|
||||||
|
"helix",
|
||||||
|
"twist",
|
||||||
|
"twirl",
|
||||||
|
"rotate"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"maps",
|
||||||
|
"medical",
|
||||||
|
"people",
|
||||||
|
"social"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
lab/barber-pole.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M7 6h10" />
|
||||||
|
<path d="M7 22h10" />
|
||||||
|
<path d="M8 22V6a4 4 0 0 1 8 0v16" />
|
||||||
|
<path d="m8 11.5 8-4" />
|
||||||
|
<path d="m8 16 8-4" />
|
||||||
|
<path d="m8 20.5 8-4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 374 B |
21
lab/barn.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"stable",
|
||||||
|
"cattle",
|
||||||
|
"horses",
|
||||||
|
"farm",
|
||||||
|
"ranch",
|
||||||
|
"hay",
|
||||||
|
"alfalfa",
|
||||||
|
"door"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"buildings",
|
||||||
|
"animals",
|
||||||
|
"maps"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/barn.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M22 12H2l2-6 8-4 8 4Z" />
|
||||||
|
<rect width="4" height="4" x="10" y="8" />
|
||||||
|
<path d="m7 22 10-10v10L7 12Z" />
|
||||||
|
<path d="M21 12v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-8" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 383 B |
15
lab/baseball.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"home run",
|
||||||
|
"pitcher",
|
||||||
|
"bat",
|
||||||
|
"innings",
|
||||||
|
"rounders",
|
||||||
|
"bounce"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"sports",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/baseball.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M2 12c5.5 0 10-4.5 10-10" />
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<path d="M22 12c-5.5 0-10 4.5-10 10" />
|
||||||
|
<path d="m8 11.5-1.5-2" />
|
||||||
|
<path d="m11.5 8-2-1.5" />
|
||||||
|
<path d="m14.5 17.5-2-1.5" />
|
||||||
|
<path d="m17.5 14.5-1.5-2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 448 B |
32
lab/baseline-square.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"color",
|
||||||
|
"colour",
|
||||||
|
"toolbar",
|
||||||
|
"formatting",
|
||||||
|
"plain text",
|
||||||
|
"rich text",
|
||||||
|
"rtf",
|
||||||
|
"typography",
|
||||||
|
"fonts",
|
||||||
|
"font book",
|
||||||
|
"collection",
|
||||||
|
"slab serif",
|
||||||
|
"writing",
|
||||||
|
"writer",
|
||||||
|
"prose",
|
||||||
|
"content",
|
||||||
|
"markdown",
|
||||||
|
"markup"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"tools",
|
||||||
|
"design",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/baseline-square.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||||
|
<path d="M9.5 12h5" />
|
||||||
|
<path d="m9 13 3-6 3 6" />
|
||||||
|
<path d="M7 17h10" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 339 B |
19
lab/basketball.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"bounce",
|
||||||
|
"hoop",
|
||||||
|
"netball",
|
||||||
|
"court",
|
||||||
|
"dribble",
|
||||||
|
"slam dunk",
|
||||||
|
"alley-oop",
|
||||||
|
"team",
|
||||||
|
"score",
|
||||||
|
"nba"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"sports",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/basketball.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<path d="M2.1 13.4A10.1 10.1 0 0 0 13.4 2.1" />
|
||||||
|
<path d="m5 4.9 14 14.2" />
|
||||||
|
<path d="M21.9 10.6a10.1 10.1 0 0 0-11.3 11.3" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 376 B |
18
lab/bat-ball.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"table tennis",
|
||||||
|
"ping-pong",
|
||||||
|
"whiff-whaff",
|
||||||
|
"paddle",
|
||||||
|
"racquet",
|
||||||
|
"racket",
|
||||||
|
"net",
|
||||||
|
"bounce",
|
||||||
|
"score"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"sports",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/bat-ball.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="18" cy="18" r="4" />
|
||||||
|
<path d="m4 8 10 10" />
|
||||||
|
<path d="M20.8 15.2c1.9-3.4 1.4-7.7-1.4-10.6-3.5-3.5-9.1-3.5-12.5 0-4.7 4.7-5.1 6.9-1.4 11.1l-2.9 2.9c-.8.8-.8 2 0 2.8.8.8 2 .8 2.8 0l2.9-2.9c2.6 2.3 4.5 3 6.6 2.1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 439 B |
18
lab/bath-bubble.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"amenities",
|
||||||
|
"services",
|
||||||
|
"bathroom",
|
||||||
|
"towel",
|
||||||
|
"relax",
|
||||||
|
"luxury"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"home",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
21
lab/bath-bubble.svg
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M15 3h.01" />
|
||||||
|
<circle cx="11.5" cy="6.5" r=".5" />
|
||||||
|
<circle cx="16.5" cy="7.5" r=".5" />
|
||||||
|
<path d="M2 12h6" />
|
||||||
|
<path d="M13 15H8v-3c0-.6.4-1 1-1h3c.6 0 1 .4 1 1Z" />
|
||||||
|
<path d="M13 12h9" />
|
||||||
|
<path d="M4 12v5a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5" />
|
||||||
|
<path d="M7 19v2" />
|
||||||
|
<path d="M17 19v2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 519 B |
22
lab/beach-ball.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"inflatable",
|
||||||
|
"summer holiday",
|
||||||
|
"seaside",
|
||||||
|
"toys",
|
||||||
|
"kids",
|
||||||
|
"children",
|
||||||
|
"play",
|
||||||
|
"football",
|
||||||
|
"soccer"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"travel",
|
||||||
|
"sports",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/beach-ball.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<path d="M19.1 4.9c-1.6-1.6-6 .3-9.9 4.2C5.3 13 3.4 17.4 5 19c1.6 1.6 6-.3 9.9-4.2 3.8-3.9 5.7-8.3 4.2-9.9" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 357 B |
32
lab/bear-face.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"cub",
|
||||||
|
"cuddle",
|
||||||
|
"children",
|
||||||
|
"kids",
|
||||||
|
"toys",
|
||||||
|
"teddy",
|
||||||
|
"nursery",
|
||||||
|
"picnic",
|
||||||
|
"outdoors",
|
||||||
|
"wilderness",
|
||||||
|
"forest",
|
||||||
|
"national park",
|
||||||
|
"open season",
|
||||||
|
"hunting",
|
||||||
|
"grizzly",
|
||||||
|
"warning",
|
||||||
|
"danger",
|
||||||
|
"strength",
|
||||||
|
"mammal",
|
||||||
|
"🐻",
|
||||||
|
"🧸"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"animals"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/bear-face.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m6 7 .5.5" />
|
||||||
|
<path d="m18 7-.5.5" />
|
||||||
|
<path d="M20.8 4.2c-1.6-1.6-4.1-1.6-5.7 0l-1 1a13.6 13.6 0 0 0-4.2 0l-1-1a4 4 0 0 0-5.8 5.55A7 7 0 0 0 2 13.5C2 18.2 6.5 22 12 22s10-3.8 10-8.5a7 7 0 0 0-1.1-3.8c1.5-1.6 1.5-4-.1-5.5" />
|
||||||
|
<path d="M10 12v-.5" />
|
||||||
|
<path d="M14 12v-.5" />
|
||||||
|
<path d="M14 16h-4" />
|
||||||
|
<path d="M12 16v2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 549 B |
17
lab/bed-bunk.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"sleep",
|
||||||
|
"hostel",
|
||||||
|
"accommodation",
|
||||||
|
"sheets"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"furniture",
|
||||||
|
"home",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/bed-bunk.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M2 22V2" />
|
||||||
|
<path d="M2 5h18a2 2 0 0 1 2 2v15" />
|
||||||
|
<path d="M6 5v5" />
|
||||||
|
<path d="M2 10h20" />
|
||||||
|
<path d="M2 14h20" />
|
||||||
|
<path d="M22 19H2" />
|
||||||
|
<path d="M6 14v5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 388 B |
26
lab/bee-hive.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"nest",
|
||||||
|
"beehive",
|
||||||
|
"beeswax",
|
||||||
|
"bumble",
|
||||||
|
"buzz",
|
||||||
|
"busy",
|
||||||
|
"productivity",
|
||||||
|
"honeycomb",
|
||||||
|
"keeper",
|
||||||
|
"garden",
|
||||||
|
"insect",
|
||||||
|
"sting",
|
||||||
|
"swarm",
|
||||||
|
"wasps"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"nature",
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
lab/bee-hive.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="10" height="4" x="7" y="2" rx="2" />
|
||||||
|
<rect width="16" height="4" x="4" y="6" rx="2" />
|
||||||
|
<path d="M14 14h6a2 2 0 1 0 0-4H4a2 2 0 1 0 0 4h6" />
|
||||||
|
<rect width="4" height="8" x="10" y="10" rx="2" />
|
||||||
|
<path d="M19 14a2 2 0 1 1 0 4H5a2 2 0 1 1 0-4" />
|
||||||
|
<rect width="14" height="4" x="5" y="18" rx="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 526 B |
28
lab/bee.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"bumble",
|
||||||
|
"buzz",
|
||||||
|
"busy",
|
||||||
|
"productivity",
|
||||||
|
"pollen",
|
||||||
|
"pollinate",
|
||||||
|
"honey",
|
||||||
|
"hive",
|
||||||
|
"keeper",
|
||||||
|
"garden",
|
||||||
|
"insect",
|
||||||
|
"antennae",
|
||||||
|
"flying",
|
||||||
|
"wings",
|
||||||
|
"sting",
|
||||||
|
"swarm",
|
||||||
|
"wasp"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"animals"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/bee.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m8 2 1.88 1.88" />
|
||||||
|
<path d="M14.12 3.88 16 2" />
|
||||||
|
<path d="M9 7V6a3 3 0 1 1 6 0v1" />
|
||||||
|
<path d="M5 7a3 3 0 1 0 2.2 5.1C9.1 10 12 7 12 7s2.9 3 4.8 5.1A3 3 0 1 0 19 7Z" />
|
||||||
|
<path d="M7.56 12h8.87" />
|
||||||
|
<path d="M7.5 17h9" />
|
||||||
|
<path d="M15.5 10.7c.9.9 1.4 2.1 1.5 3.3 0 5.8-5 8-5 8s-5-2.2-5-8c.1-1.2.6-2.4 1.5-3.3" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 540 B |
20
lab/beetle-scarab.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"bug",
|
||||||
|
"wildlife",
|
||||||
|
"wings",
|
||||||
|
"flying",
|
||||||
|
"insect",
|
||||||
|
"antennae",
|
||||||
|
"ancient",
|
||||||
|
"egyptian",
|
||||||
|
"heiroglyphic"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"animals"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
lab/beetle-scarab.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m8 2 1.88 1.88" />
|
||||||
|
<path d="M14.12 3.88 16 2" />
|
||||||
|
<path d="M9 7.13V6a3 3 0 1 1 6 0v1.13" />
|
||||||
|
<path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6" />
|
||||||
|
<path d="M12 20v-9" />
|
||||||
|
<path d="M5 4.8C3.2 6.2 2 8.5 2 11h20c0-2.5-1.2-4.8-3-6.2" />
|
||||||
|
<path d="M6.08 15h-4c.2 2.4 1.25 4.4 2.8 6" />
|
||||||
|
<path d="M19.1 21a9 9.4 0 0 0 2.82-6h-4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 588 B |
30
lab/bell-concierge-dot.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"reception",
|
||||||
|
"bellboy",
|
||||||
|
"bellhop",
|
||||||
|
"porter",
|
||||||
|
"service",
|
||||||
|
"summon",
|
||||||
|
"hospitality",
|
||||||
|
"hotel",
|
||||||
|
"accommodation",
|
||||||
|
"attention",
|
||||||
|
"alert",
|
||||||
|
"ring",
|
||||||
|
"ding",
|
||||||
|
"sound",
|
||||||
|
"reminder",
|
||||||
|
"unread",
|
||||||
|
"pending",
|
||||||
|
"updates"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"travel",
|
||||||
|
"notifications"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/bell-concierge-dot.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="19" cy="9" r="3" />
|
||||||
|
<path d="M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2Z" />
|
||||||
|
<path d="M12 4v4c-4.4 0-8 3.6-8 8" />
|
||||||
|
<path d="M10 4h4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 362 B |
23
lab/bell-concierge-off.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"unstaffed",
|
||||||
|
"self-service",
|
||||||
|
"self-catering",
|
||||||
|
"hospitality",
|
||||||
|
"hotel",
|
||||||
|
"accommodation",
|
||||||
|
"silent",
|
||||||
|
"silence",
|
||||||
|
"quiet",
|
||||||
|
"ignore",
|
||||||
|
"forget"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"travel",
|
||||||
|
"notifications"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
lab/bell-concierge-off.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m2 2 20 20" />
|
||||||
|
<path d="M12 4v2.3" />
|
||||||
|
<path d="M10 4h4" />
|
||||||
|
<path d="M19.8 14.1a8 8 0 0 0-5.9-5.9" />
|
||||||
|
<path d="M8.7 8.7C5.9 10 4 12.8 4 16" />
|
||||||
|
<path d="M16 16H4a2 2 0 0 0-2 2v2h18" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 412 B |
30
lab/belt.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"buckle",
|
||||||
|
"strap",
|
||||||
|
"fasten",
|
||||||
|
"fasting",
|
||||||
|
"waistline",
|
||||||
|
"weight loss",
|
||||||
|
"diet",
|
||||||
|
"calories",
|
||||||
|
"store",
|
||||||
|
"clothing",
|
||||||
|
"clothes",
|
||||||
|
"accessories",
|
||||||
|
"apparel",
|
||||||
|
"attire",
|
||||||
|
"outfit",
|
||||||
|
"fashion",
|
||||||
|
"leather"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"shopping",
|
||||||
|
"social",
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
lab/belt.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M7.3 9H3c-.6 0-1-.4-1-1V4c0-.6.4-1 1-1h4.3" />
|
||||||
|
<path d="M6 6h3" />
|
||||||
|
<path d="M13 6h.01" />
|
||||||
|
<rect width="10" height="8" x="7" y="2" rx="2" />
|
||||||
|
<path d="M16.7 3H21c.6 0 1 .4 1 1v4c0 .6-.4 1-1 1h-4.3" />
|
||||||
|
<path d="m10.5 10-8.1 6.2" />
|
||||||
|
<path d="M21.6 8.8 12.2 16" />
|
||||||
|
<path d="M3 22c-.6 0-1-.4-1-1v-4c0-.6.4-1 1-1h16l3 3-3 3Z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 555 B |
32
lab/bold-square.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"emphasis",
|
||||||
|
"emphasize",
|
||||||
|
"strong",
|
||||||
|
"toolbar",
|
||||||
|
"formatting",
|
||||||
|
"styling",
|
||||||
|
"plain text",
|
||||||
|
"rich text",
|
||||||
|
"rtf",
|
||||||
|
"typography",
|
||||||
|
"font",
|
||||||
|
"sans serif",
|
||||||
|
"writing",
|
||||||
|
"writer",
|
||||||
|
"prose",
|
||||||
|
"content",
|
||||||
|
"markdown",
|
||||||
|
"markup"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"tools",
|
||||||
|
"design",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/bold-square.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||||
|
<path d="M8 12h5.5a2.5 2.5 0 0 1 0 5H8V7h5a2.5 2.5 0 0 1 0 5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 328 B |
22
lab/bottle-baby.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"newborn",
|
||||||
|
"children",
|
||||||
|
"infant",
|
||||||
|
"kids",
|
||||||
|
"toddler",
|
||||||
|
"mother",
|
||||||
|
"mum",
|
||||||
|
"family",
|
||||||
|
"milk"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"people",
|
||||||
|
"home",
|
||||||
|
"shopping"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
lab/bottle-baby.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M20 11c1.1-1.4 1.3-3.3.7-4.9l.8-.8a1.5 1.5 0 0 0-2.8-2.8l-.8.8A5.33 5.33 0 0 0 13 4" />
|
||||||
|
<path d="M11.3 3.7a1 1 0 0 1 1.4 0l7.6 7.6a1 1 0 0 1 0 1.4l-1.6 1.6a1 1 0 0 1-1.4 0L9.7 6.7a1 1 0 0 1 0-1.4Z" />
|
||||||
|
<path d="m10 7-7.3 7.3c-.9.9-.9 2.5 0 3.4l3.6 3.6c.9.9 2.5.9 3.4 0L17 14" />
|
||||||
|
<path d="m4 13 2 2" />
|
||||||
|
<path d="m7 10 2 2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 551 B |
29
lab/bottle-champagne.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"alcohol",
|
||||||
|
"drink",
|
||||||
|
"glass",
|
||||||
|
"bubbly",
|
||||||
|
"sparkling",
|
||||||
|
"fizzy",
|
||||||
|
"bar",
|
||||||
|
"party",
|
||||||
|
"special occasion",
|
||||||
|
"celebration",
|
||||||
|
"victory",
|
||||||
|
"champion",
|
||||||
|
"luxury",
|
||||||
|
"nightclub",
|
||||||
|
"nightlife",
|
||||||
|
"sommelier",
|
||||||
|
"restaurant"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage",
|
||||||
|
"social"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/bottle-champagne.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M8 2h.01" />
|
||||||
|
<path d="M12 3h.01" />
|
||||||
|
<path d="m19 8-3-3" />
|
||||||
|
<path d="M9.7 21.3a2.4 2.4 0 0 1-3.4 0l-3.6-3.6a2.41 2.41 0 0 1 0-3.4l6.27-6.27A3.5 3.5 0 0 1 11.45 7h1.1a3.5 3.5 0 0 0 2.47-1.03l3.62-3.61a1.21 1.21 0 0 1 1.72 0l1.28 1.28a1.2 1.2 0 0 1 0 1.72l-3.62 3.61A3.5 3.5 0 0 0 17 11.45v1.1a3.5 3.5 0 0 1-1.03 2.48Z" />
|
||||||
|
<path d="m9.06 8 3.23 3.24a1 1 0 0 1 0 1.41L8.65 16.3a1 1 0 0 1-1.41 0L4 13.06" />
|
||||||
|
<path d="M21 12h.01" />
|
||||||
|
<path d="M22 16h.01" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 682 B |
24
lab/bottle-dispenser.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"toiletries",
|
||||||
|
"bathroom",
|
||||||
|
"amenities",
|
||||||
|
"shower gel",
|
||||||
|
"bubble bath",
|
||||||
|
"shampoo",
|
||||||
|
"conditioner",
|
||||||
|
"hand soap",
|
||||||
|
"sanitizer",
|
||||||
|
"sanitiser",
|
||||||
|
"clean",
|
||||||
|
"wash"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"home",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
lab/bottle-dispenser.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<circle cx="18.5" cy="5.5" r=".5" />
|
||||||
|
<path d="M20 10h.01" />
|
||||||
|
<path d="M9 2h7" />
|
||||||
|
<path d="M11 2v4" />
|
||||||
|
<rect width="4" height="4" x="9" y="6" rx="1" />
|
||||||
|
<path d="M9 10c-1.7 0-3 1.3-3 3v7a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-7c0-1.7-1.3-3-3-3Z" />
|
||||||
|
<path d="M6 14.5a6 6 0 0 1 5 0s2 1.25 5 0" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 507 B |
24
lab/bottle-perfume.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"parfum",
|
||||||
|
"aftershave",
|
||||||
|
"aroma",
|
||||||
|
"fragrance",
|
||||||
|
"smell",
|
||||||
|
"scent",
|
||||||
|
"special",
|
||||||
|
"present",
|
||||||
|
"gift",
|
||||||
|
"accessories",
|
||||||
|
"container",
|
||||||
|
"duty free"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"social",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/bottle-perfume.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="12" height="4" x="6" y="3" />
|
||||||
|
<rect width="6" height="4" x="9" y="7" />
|
||||||
|
<rect width="18" height="10" x="3" y="11" rx="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 351 B |
18
lab/bottle-plastic.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"drink",
|
||||||
|
"water",
|
||||||
|
"liquid",
|
||||||
|
"litres",
|
||||||
|
"pints",
|
||||||
|
"container",
|
||||||
|
"shampoo"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/bottle-plastic.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M10 6.1V3c0-.6.4-1 1-1h2c.6 0 1 .4 1 1v3.1" />
|
||||||
|
<path d="M17 14.5c0-1.2-.9-2.2-2-2.4V12a2 2 0 0 0 2-2 4 4 0 0 0-4-4h-2a4 4 0 0 0-4 4 2 2 0 0 0 2 2v.1a2.5 2.5 0 0 0 0 4.8v.1a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-1a2 2 0 0 0-2-2v-.1c1.1-.2 2-1.2 2-2.4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 483 B |
19
lab/bottle-spray.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"cleaning products",
|
||||||
|
"toiletries",
|
||||||
|
"bathroom",
|
||||||
|
"amenities",
|
||||||
|
"service",
|
||||||
|
"sanitizer",
|
||||||
|
"sanitiser"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"home",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
lab/bottle-spray.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M12 2v4" />
|
||||||
|
<path d="M6 10h4" />
|
||||||
|
<path d="M10 8a2 2 0 0 1 2-2h3c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1H5C3.3 2 2 3.3 2 5c0 .6.4 1 1 1h1a2 2 0 0 1 2 2v2l-2.3 2.3c-.4.4-.7 1.1-.7 1.7v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-6c0-.6-.3-1.3-.7-1.7L10 10Z" />
|
||||||
|
<path d="M14 6c0 2 0 3 2 4" />
|
||||||
|
<path d="M3 16.5a6 6 0 0 1 5 0s2 1.25 5 0" />
|
||||||
|
<path d="M22 2h.01" />
|
||||||
|
<path d="M20 5.5h.01" />
|
||||||
|
<path d="M22 9h.01" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 618 B |
24
lab/bottle-toothbrush-comb.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"toiletries",
|
||||||
|
"bathroom",
|
||||||
|
"amenities",
|
||||||
|
"shower gel",
|
||||||
|
"bubble bath",
|
||||||
|
"shampoo",
|
||||||
|
"conditioner",
|
||||||
|
"toothpaste",
|
||||||
|
"tube",
|
||||||
|
"clean",
|
||||||
|
"wash",
|
||||||
|
"brush"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"home",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
21
lab/bottle-toothbrush-comb.svg
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<rect width="4" height="4" x="2" y="3" />
|
||||||
|
<path d="M6 7v2c0 .6.1 1.4.2 2L8 20.8v.2c0 .6-.4 1-1 1H3c-.6 0-1-.4-1-1V7" />
|
||||||
|
<path d="M14 2v7l-2 5v8" />
|
||||||
|
<rect width="4" height="6" x="10" y="3" />
|
||||||
|
<path d="M18 6h4" />
|
||||||
|
<path d="M18 10h4" />
|
||||||
|
<path d="M18 14h4" />
|
||||||
|
<path d="M18 18h4" />
|
||||||
|
<path d="M18 2h2a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2h-2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 559 B |
25
lab/bowl-chopsticks.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"noodles",
|
||||||
|
"poke",
|
||||||
|
"soup",
|
||||||
|
"culinary",
|
||||||
|
"cuisine",
|
||||||
|
"asian",
|
||||||
|
"japanese",
|
||||||
|
"chinese",
|
||||||
|
"oriental",
|
||||||
|
"eastern",
|
||||||
|
"brunch",
|
||||||
|
"lunch",
|
||||||
|
"dinner"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage",
|
||||||
|
"tools"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/bowl-chopsticks.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m13 2-3 11" />
|
||||||
|
<path d="m22 2-8 11" />
|
||||||
|
<ellipse cx="12" cy="12" rx="10" ry="5" />
|
||||||
|
<path d="M22 12a10 10 0 0 1-20 0" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 344 B |
29
lab/bowl-overflow.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"spillage",
|
||||||
|
"drip",
|
||||||
|
"liquid",
|
||||||
|
"soup",
|
||||||
|
"porridge",
|
||||||
|
"gruel",
|
||||||
|
"cereal",
|
||||||
|
"breakfast",
|
||||||
|
"morning",
|
||||||
|
"brunch",
|
||||||
|
"lunch",
|
||||||
|
"dinner",
|
||||||
|
"meal",
|
||||||
|
"starter",
|
||||||
|
"appetizer",
|
||||||
|
"appetiser",
|
||||||
|
"culinary",
|
||||||
|
"cuisine"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/bowl-overflow.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M12 4C6.5 4 2 6.2 2 9c0 2.4 3.4 4.4 8 4.9 1.1.1 2 1 2 2.1v3a2 2 0 0 0 4 0v-3.4c0-1.1.9-2.2 1.9-2.6 2.5-.9 4.1-2.4 4.1-4 0-2.8-4.5-5-10-5" />
|
||||||
|
<path d="M2 9c0 5.5 4.5 10 10 10" />
|
||||||
|
<path d="M16 18.2c3.5-1.5 6-5.1 6-9.2" />
|
||||||
|
<path d="M16 15.6c0-2.6 3-2.6 3-4.6 0-1.7-3.1-3-7-3s-7 1.3-7 3c0 1.4 2.1 2.5 5 2.9" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 532 B |
20
lab/bowling.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"ten-pin",
|
||||||
|
"10 pin",
|
||||||
|
"pins",
|
||||||
|
"ball",
|
||||||
|
"lane",
|
||||||
|
"alley",
|
||||||
|
"strike",
|
||||||
|
"spare",
|
||||||
|
"score",
|
||||||
|
"indoor sports",
|
||||||
|
"heavy"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"sports",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
lab/bowling.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M9 10h.01" />
|
||||||
|
<path d="M6 13h.01" />
|
||||||
|
<path d="M10 14h.01" />
|
||||||
|
<path d="M11.09 6.07a8 8 0 1 0 .32 15.81" />
|
||||||
|
<path d="M16 9h4" />
|
||||||
|
<path d="M15 5c0 1.5 1 2 1 4 0 2.5-2 4.5-2 7 0 2.6 1.9 6 1.9 6H20s2-3.4 2-6c0-2.5-2-4.5-2-7 0-2 1-2.5 1-4a3 3 0 1 0-6 0" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 480 B |
40
lab/bra-sports.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"brassiere",
|
||||||
|
"breasts",
|
||||||
|
"boobs",
|
||||||
|
"tops",
|
||||||
|
"womens",
|
||||||
|
"girls",
|
||||||
|
"female",
|
||||||
|
"ladies",
|
||||||
|
"lingerie",
|
||||||
|
"underwear",
|
||||||
|
"undergarment",
|
||||||
|
"sportswear",
|
||||||
|
"exercise",
|
||||||
|
"fitness",
|
||||||
|
"swimwear",
|
||||||
|
"beachwear",
|
||||||
|
"bathing constume",
|
||||||
|
"summer holiday",
|
||||||
|
"store",
|
||||||
|
"clothing",
|
||||||
|
"clothes",
|
||||||
|
"apparel",
|
||||||
|
"attire",
|
||||||
|
"fashion",
|
||||||
|
"thread",
|
||||||
|
"cotton",
|
||||||
|
"casual"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"shopping",
|
||||||
|
"sports",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
lab/bra-sports.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m17 21-9-9V3H4v10.6A4 4 0 0 0 6 21h12a4 4 0 0 0 2-7.4V3h-4v9l-4 4" />
|
||||||
|
<path d="M8 11h8" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 312 B |
21
lab/briefcase-plus.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"healthcare",
|
||||||
|
"first aid kit",
|
||||||
|
"paramedic",
|
||||||
|
"medkit",
|
||||||
|
"medikit",
|
||||||
|
"medpack",
|
||||||
|
"medicine",
|
||||||
|
"pharmacy",
|
||||||
|
"pharmaceutical",
|
||||||
|
"add",
|
||||||
|
"cross",
|
||||||
|
"box"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"medical",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/briefcase-plus.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" />
|
||||||
|
<rect width="20" height="14" x="2" y="7" rx="2" />
|
||||||
|
<path d="M15 14H9" />
|
||||||
|
<path d="M12 11v6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 363 B |
19
lab/broom.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"broomstick",
|
||||||
|
"brush",
|
||||||
|
"sweep",
|
||||||
|
"floor",
|
||||||
|
"cleaning",
|
||||||
|
"witch",
|
||||||
|
"halloween"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"tools",
|
||||||
|
"home"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
lab/broom.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="m13 11 9-9" />
|
||||||
|
<path d="M14.6 12.6c.8.8.9 2.1.2 3L10 22l-8-8 6.4-4.8c.9-.7 2.2-.6 3 .2Z" />
|
||||||
|
<path d="m6.8 10.4 6.8 6.8" />
|
||||||
|
<path d="m5 17 1.4-1.4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 375 B |
35
lab/bucket.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"handle",
|
||||||
|
"container",
|
||||||
|
"fill",
|
||||||
|
"liquid",
|
||||||
|
"water",
|
||||||
|
"seaside",
|
||||||
|
"summer holiday",
|
||||||
|
"beach",
|
||||||
|
"sandcastle",
|
||||||
|
"sandbox",
|
||||||
|
"toys",
|
||||||
|
"kids",
|
||||||
|
"children",
|
||||||
|
"play",
|
||||||
|
"gardening",
|
||||||
|
"equipment",
|
||||||
|
"spade",
|
||||||
|
"shovel",
|
||||||
|
"catch",
|
||||||
|
"fishing",
|
||||||
|
"crabs"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"nature",
|
||||||
|
"home",
|
||||||
|
"tools",
|
||||||
|
"travel"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
lab/bucket.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M6 7c0-2.8 2.2-5 5-5h2c2.8 0 5 2.2 5 5" />
|
||||||
|
<path d="M5 11h14" />
|
||||||
|
<path d="m18 11-.8 9c-.1 1.1-1.1 2-2.2 2H9c-1.1 0-2.1-.9-2.2-2L6 11" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 360 B |
31
lab/bull-head.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"cow",
|
||||||
|
"horns",
|
||||||
|
"meat",
|
||||||
|
"steak",
|
||||||
|
"barbecue",
|
||||||
|
"bbq",
|
||||||
|
"beef",
|
||||||
|
"bovine",
|
||||||
|
"rodeo",
|
||||||
|
"ranch",
|
||||||
|
"farmyard",
|
||||||
|
"livestock",
|
||||||
|
"cattle",
|
||||||
|
"taurus",
|
||||||
|
"toro",
|
||||||
|
"hoofs",
|
||||||
|
"hooved",
|
||||||
|
"mammal",
|
||||||
|
"🐮"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"animals",
|
||||||
|
"food-beverage"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
lab/bull-head.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<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"
|
||||||
|
>
|
||||||
|
<path d="M7 10a5 5 0 0 1-4-8 4 4 0 0 0 4 4h10a4 4 0 0 0 4-4 5 5 0 0 1-4 8" />
|
||||||
|
<path d="M6.4 15c-.3-.6-.4-1.3-.4-2 0-4 3-3 3-7" />
|
||||||
|
<path d="M10 12.5v1.6" />
|
||||||
|
<path d="M17.6 15c.3-.6.4-1.3.4-2 0-4-3-3-3-7" />
|
||||||
|
<path d="M14 12.5v1.6" />
|
||||||
|
<path d="M15 22a4 4 0 1 0-3-6.7A4 4 0 1 0 9 22Z" />
|
||||||
|
<path d="M9 18h.01" />
|
||||||
|
<path d="M15 18h.01" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 555 B |