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>
This commit is contained in:
Eric Fennis
2026-07-24 15:05:40 +02:00
committed by GitHub
parent 1d578ab536
commit 9ecaafbc4d
738 changed files with 17615 additions and 1039 deletions

View File

@@ -9,3 +9,4 @@ strikethrough
touchpad touchpad
ungroup ungroup
toc toc
sunlounger

View File

@@ -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
View File

@@ -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/**

View 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,
},
];
}),
);
});

View 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;
});

View 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;
}, {});
});

View File

View 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,
})); };
});
} }
} }
} }

View File

@@ -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 [];
}
}, },
}; };

View File

@@ -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",

View 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}`);
}

View 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}`);
}

View File

@@ -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();
} }

View 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
View 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
View 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
View 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
View 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

View 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"
]
}

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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"
]
}

View 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

View 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"
]
}

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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"
]
}

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Some files were not shown because too many files have changed in this diff Show More