Icons: Migrate to svgtofont (#6858)

This commit is contained in:
zubiden 2026-04-27 14:29:09 +02:00 committed by Alexander Zinchuk
parent 5db531a04b
commit ea6f810aab
16 changed files with 4083 additions and 1688 deletions

View File

@ -1,23 +0,0 @@
module.exports = {
inputDir: './src/assets/font-icons',
outputDir: './src/styles',
name: 'icons',
fontTypes: ['woff2', 'woff'],
assetTypes: ['css', 'scss', 'ts'],
tag: '',
normalize: true,
templates: {
scss: './dev/icons.scss.hbs',
css: './dev/icons.css.hbs',
},
formatOptions: {
ts: {
types: ['literalId'],
singleQuotes: true,
literalIdName: 'FontIconName',
},
},
pathOptions: {
ts: './src/types/icons/font.ts',
},
};

238
dev/buildIcons.ts Normal file
View File

@ -0,0 +1,238 @@
import { createHash } from 'node:crypto';
import { promises as fs } from 'node:fs';
import path from 'node:path';
import svgtofont from 'svgtofont';
const PROJECT_ROOT = process.cwd();
const SOURCE_DIR = path.join(PROJECT_ROOT, 'src', 'assets', 'font-icons');
const STYLES_DIR = path.join(PROJECT_ROOT, 'src', 'styles');
const FONT_TYPES_PATH = path.join(PROJECT_ROOT, 'src', 'types', 'icons', 'font.ts');
const SVGTOFONT_PACKAGE_PATH = path.join(PROJECT_ROOT, 'node_modules', 'svgtofont', 'package.json');
const STYLE_TEMPLATES_DIR = path.join(PROJECT_ROOT, 'dev', 'icons-templates');
const PREVIEW_DIR = path.join(STYLES_DIR, 'icons');
const TEMP_DIR = path.join(PROJECT_ROOT, '.cache', 'icons-build');
const TEMP_INPUT_DIR = path.join(TEMP_DIR, 'input');
const FONT_NAME = 'icons';
const DEFAULT_START_CODEPOINT = 0xf101;
const SAFE_PUBLIC_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/;
type IconSource = {
publicName: string;
sourcePath: string;
};
type IconDefinition = IconSource & {
codepoint: number;
};
function compareNames(left: string, right: string) {
if (left < right) {
return -1;
}
if (left > right) {
return 1;
}
return 0;
}
function toPublicName(filePath: string) {
const relativePath = path.relative(SOURCE_DIR, filePath);
const rawPublicName = relativePath
.replace(/\.svg$/i, '')
.split(path.sep)
.join('-');
const normalizedPublicName = rawPublicName
.replace(/\s+/g, '-')
.replace(/['"]/g, '')
.replace(/[^a-zA-Z0-9-_]/g, '-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '');
if (!normalizedPublicName || !SAFE_PUBLIC_NAME_PATTERN.test(normalizedPublicName)) {
throw new Error([
`Could not derive a safe icon name from "${relativePath}".`,
'Icon names must be safe for generated selectors, preview HTML, and src/types/icons/font.ts.',
`Derived name: "${normalizedPublicName || '(empty)'}"`,
].join('\n'));
}
return normalizedPublicName;
}
async function collectSvgPaths(directoryPath: string): Promise<string[]> {
const directoryEntries = await fs.readdir(directoryPath, { withFileTypes: true });
const sortedEntries = [...directoryEntries].sort((left, right) => compareNames(left.name, right.name));
const nestedPaths = await Promise.all(sortedEntries.map(async (entry) => {
const fullPath = path.join(directoryPath, entry.name);
if (entry.isDirectory()) {
return collectSvgPaths(fullPath);
}
if (!entry.isFile() || path.extname(entry.name).toLowerCase() !== '.svg') {
return [];
}
return [fullPath];
}));
return nestedPaths.flat();
}
function buildOrderedIconDefinitions(iconSources: IconSource[]) {
const iconSourcesByName = new Map<string, IconSource>();
for (const iconSource of iconSources) {
const duplicateSource = iconSourcesByName.get(iconSource.publicName);
if (duplicateSource) {
throw new Error([
`Duplicate icon name "${iconSource.publicName}" after flattening paths.`,
`- ${duplicateSource.sourcePath}`,
`- ${iconSource.sourcePath}`,
].join('\n'));
}
iconSourcesByName.set(iconSource.publicName, iconSource);
}
return [...iconSourcesByName.keys()]
.sort(compareNames)
.map((publicName, index) => {
const iconSource = iconSourcesByName.get(publicName);
if (!iconSource) {
throw new Error(`Missing icon source for "${publicName}".`);
}
return {
...iconSource,
codepoint: DEFAULT_START_CODEPOINT + index,
};
});
}
async function prepareTempInputs(iconDefinitions: IconDefinition[]) {
await fs.rm(TEMP_INPUT_DIR, { force: true, recursive: true });
await fs.mkdir(TEMP_INPUT_DIR, { recursive: true });
await Promise.all(iconDefinitions.map(async ({ publicName, sourcePath }) => {
const outputPath = path.join(TEMP_INPUT_DIR, `${publicName}.svg`);
await fs.copyFile(sourcePath, outputPath);
}));
}
function escapeCodepoint(codepoint: number) {
return `\\${codepoint.toString(16)}`;
}
async function buildFontHash(iconDefinitions: IconDefinition[]) {
const hash = createHash('md5');
const svgtofontPackage = JSON.parse(await fs.readFile(SVGTOFONT_PACKAGE_PATH, 'utf8')) as {
version?: string;
};
hash.update(FONT_NAME);
hash.update('fontHeight:1000');
hash.update('normalize:true');
hash.update(svgtofontPackage.version || '');
for (const { publicName, codepoint, sourcePath } of iconDefinitions) {
hash.update(publicName);
hash.update(codepoint.toString(16));
hash.update(await fs.readFile(sourcePath));
}
return hash.digest('hex');
}
function buildFontTypes(iconDefinitions: IconDefinition[]) {
const iconTypeLines = iconDefinitions.map(({ publicName }, index) => {
const isLast = index === iconDefinitions.length - 1;
return ` | '${publicName}'${isLast ? ';' : ''}`;
});
return [
'export type FontIconName =',
...iconTypeLines,
'',
].join('\n');
}
async function writeFontTypes(iconDefinitions: IconDefinition[]) {
await fs.writeFile(FONT_TYPES_PATH, buildFontTypes(iconDefinitions));
}
async function buildIcons() {
const svgPaths = await collectSvgPaths(SOURCE_DIR);
if (!svgPaths.length) {
throw new Error(`No SVG icons found in "${SOURCE_DIR}".`);
}
const iconSources = svgPaths.map((sourcePath) => ({
publicName: toPublicName(sourcePath),
sourcePath,
}));
const iconDefinitions = buildOrderedIconDefinitions(iconSources);
const iconDefinitionsByName = new Map(
iconDefinitions.map((iconDefinition) => [iconDefinition.publicName, iconDefinition]),
);
const fontHash = await buildFontHash(iconDefinitions);
const templateIconDefinitions = iconDefinitions.map(({ publicName, codepoint }) => ({
encodedCode: escapeCodepoint(codepoint),
publicName,
}));
await prepareTempInputs(iconDefinitions);
await fs.mkdir(PREVIEW_DIR, { recursive: true });
await svgtofont({
css: {
fileName: FONT_NAME,
hasTimestamp: false,
include: /\.template$/u,
output: STYLES_DIR,
templateVars: {
fontHash,
iconDefinitions: templateIconDefinitions,
previewPath: 'icons/preview.html',
},
},
dist: STYLES_DIR,
excludeFormat: ['eot', 'svg', 'ttf', 'symbol.svg'],
fontName: FONT_NAME,
getIconUnicode(name) {
const iconDefinition = iconDefinitionsByName.get(name);
if (!iconDefinition) {
throw new Error(`Missing codepoint definition for "${name}".`);
}
return [String.fromCodePoint(iconDefinition.codepoint), iconDefinition.codepoint + 1];
},
log: false,
src: TEMP_INPUT_DIR,
startUnicode: iconDefinitions[0]?.codepoint ?? DEFAULT_START_CODEPOINT,
styleTemplates: STYLE_TEMPLATES_DIR,
svgicons2svgfont: {
fontHeight: 1000,
normalize: true,
},
});
await writeFontTypes(iconDefinitions);
}
async function run() {
try {
await buildIcons();
} finally {
await fs.rm(TEMP_DIR, { force: true, recursive: true });
}
}
run().catch((error: unknown) => {
process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
process.exitCode = 1;
});

View File

@ -1,9 +1,10 @@
@font-face {
font-family: "{{ name }}";
font-family: "{{ fontname }}";
font-weight: normal;
font-style: normal;
font-display: block;
src: {{{ fontSrc }}};
src: url("./{{ fontname }}.woff2?{{ fontHash }}") format("woff2"),
url("./{{ fontname }}.woff?{{ fontHash }}") format("woff");
}
.icon-char::before {
@ -20,12 +21,8 @@
width: 1em;
}
{{# each codepoints }}
{{# if ../selector }}
{{ ../selector }}.{{ ../prefix }}-{{ @key }}::before {
{{ else }}
{{ tag }}.{{ ../prefix }}-{{ @key }}::before {
{{/ if }}
content: "\\{{ codepoint this }}";
{% for icon in iconDefinitions -%}
.icon-{{ icon.publicName }}::before {
content: "{{ icon.encodedCode }}";
}
{{/ each }}
{% endfor -%}

View File

@ -3,7 +3,7 @@
@mixin icon {
/* !important to prevent issues with browser extensions that change fonts */
/* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */
font-family: "{{ name }}" !important;
font-family: "{{ fontname }}" !important;
speak: none;
font-style: normal;
font-weight: normal;
@ -15,8 +15,7 @@
-moz-osx-font-smoothing: grayscale;
}
${{ name }}-map: (
{{# each codepoints }}
"{{ @key }}": "\\{{ codepoint this }}",
{{/ each }}
$icons-map: (
{% for icon in iconDefinitions %} "{{ icon.publicName }}": "{{ icon.encodedCode }}",
{% endfor -%}
);

View File

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ fontname }} Preview</title>
<link rel="stylesheet" href="../{{ fontname }}.css?{{ fontHash }}">
<style>
:root {
color-scheme: light;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: #f3f5f8;
color: #111827;
}
.page {
width: min(100%, 96rem);
margin: 0 auto;
padding: 2rem;
}
.header {
margin-bottom: 2rem;
}
.title {
margin: 0;
font-size: 2rem;
line-height: 1.2;
}
.subtitle {
margin: 0.5rem 0 0;
color: #4b5563;
font-size: 1rem;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
gap: 1rem;
}
.card {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
padding: 1rem;
border: 1px solid #d7dde6;
border-radius: 0.75rem;
background: #fff;
text-align: center;
}
.icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
font-family: "{{ fontname }}";
font-style: normal;
font-weight: normal;
font-size: 1.5rem;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.name {
font-size: 0.875rem;
line-height: 1.3;
word-break: break-word;
}
.code {
color: #6b7280;
font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
font-size: 0.75rem;
}
</style>
</head>
<body>
<main class="page">
<header class="header">
<h1 class="title">{{ fontname }} Preview</h1>
<p class="subtitle">{{ iconDefinitions.length }} icons</p>
</header>
<section class="grid">
{% for icon in iconDefinitions -%}
<article class="card">
<i class="icon icon-{{ icon.publicName }}"></i>
<div class="name">{{ icon.publicName }}</div>
<div class="code">{{ icon.encodedCode }}</div>
</article>
{% endfor -%}
</section>
</main>
</body>
</html>

2848
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,39 +9,29 @@
"scripts": {
"dev": "cross-env APP_ENV=development webpack serve --mode development",
"dev:mocked": "cross-env APP_ENV=test APP_MOCKED_CLIENT=1 webpack serve --mode development --port 1235",
"build:dev": "webpack --mode development && bash ./deploy/copy_to_dist.sh",
"build:staging": "cross-env APP_ENV=staging npm run build:dev",
"build:mocked": "cross-env APP_ENV=test APP_MOCKED_CLIENT=1 npm run build:dev",
"build:production": "webpack && bash ./deploy/copy_to_dist.sh",
"web:release:production": "npm i && npm run build:production && git add -A && git commit -a -m '[Build]' --no-verify && git push",
"tauri": "tauri",
"tauri:dev": "tauri dev",
"tauri:build": "tauri build",
"telegraph:update_changelog": "node ./dev/telegraphChangelog.js",
"check:ts": "tsc && eslint --cache --cache-location .cache/.eslintcache",
"check:css": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache",
"fix:ts": "tsc && eslint --cache --cache-location .cache/.eslintcache --fix",
"fix:css": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache --fix",
"check": "npm run check:ts && npm run check:css",
"fix": "npm run fix:ts && npm run fix:css",
"tl:rehash": "node ./dev/tlHash.js",
"gramjs:tl": "tsx ./src/lib/gramjs/tl/generateModules.ts",
"lang:ts": "tsx ./dev/generateLangTypes.js",
"lang:initial": "tsx ./dev/generateInitialLangFallback.js",
"icons:build": "fantasticon -c .fantasticonrc.cjs",
"icons:build": "tsx ./dev/buildIcons.ts",
"test": "cross-env APP_ENV=test jest --verbose --silent --forceExit",
"test:playwright": "playwright test",
"test:record": "playwright codegen localhost:1235",
"statoscope:validate-diff": "statoscope validate --input input.json --reference reference.json",
"postinstall": "node -e \"require('fs').rmSync('.cache', { recursive: true, force: true })\"",
"postversion": "echo $(node -p \"require('./package.json').version\") > public/version.txt && git commit --amend --no-verify --no-edit public/version.txt"
@ -73,7 +63,6 @@
"@stylistic/stylelint-plugin": "^5.1.0",
"@tauri-apps/cli": "^2.10.1",
"@testing-library/jest-dom": "^6.9.1",
"@twbs/fantasticon": "^3.1.0",
"@types/dom-chromium-ai": "^0.0.16",
"@types/dom-view-transitions": "^1.0.6",
"@types/hast": "^3.0.4",
@ -129,6 +118,7 @@
"stylelint-group-selectors": "^1.0.10",
"stylelint-high-performance-animation": "^2.0.0",
"stylelint-plugin-use-baseline": "^1.4.1",
"svgtofont": "^6.5.1",
"telegraph-node": "^1.0.4",
"tsx": "^4.21.0",
"typescript": "^6.0.2",

View File

@ -280,7 +280,7 @@ const SettingsFoldersEdit: FC<OwnProps & StateProps> = ({
});
}, [
invites, state.folderId, state.isTouched, chatListCount, maxInviteLinks, isCreating, onSaveFolder,
onShareFolder, lang, maxChatLists, state.folder.isChatList,
onShareFolder, oldLang, maxChatLists, state.folder.isChatList,
]);
const handleEditInviteClick = useCallback((e: React.MouseEvent<HTMLElement>, url: string) => {

View File

@ -12,8 +12,6 @@ import { formatDateTime } from '../../util/localization/dateFormat';
import useLang from '../../hooks/useLang';
import useOldLang, { type OldLangFn } from '../../hooks/useOldLang';
import styles from './TestDateFormat.module.scss';
const BENCHMARK_COUNT = 10000;
const RANDOM_SEED = 123456789;
const DAY_IN_MS = 24 * 60 * 60 * 1000;
@ -281,7 +279,7 @@ const TestDateFormatPerf = () => {
}, [lang, oldLang, runId]);
return (
<div className={buildClassName(styles.root, 'full-height', 'custom-scroll')}>
<div className={buildClassName('full-height', 'custom-scroll')}>
<h2>Date Format Perf</h2>
<p>Generates 10,000 random dates, benchmarks old and new formatting paths, and prints results to the console.</p>
<p>

View File

@ -3,8 +3,8 @@
font-weight: normal;
font-style: normal;
font-display: block;
src: url("./icons.woff2?04b18437fcd7ee960708328d5fdc1333") format("woff2"),
url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
src: url("./icons.woff2?b5b099df263806a8c2658778f26c60c9") format("woff2"),
url("./icons.woff?b5b099df263806a8c2658778f26c60c9") format("woff");
}
.icon-char::before {
@ -24,34 +24,34 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-active-sessions::before {
content: "\f101";
}
.icon-add-caption::before {
.icon-add::before {
content: "\f102";
}
.icon-add-filled::before {
.icon-add-caption::before {
content: "\f103";
}
.icon-add-one-badge::before {
.icon-add-filled::before {
content: "\f104";
}
.icon-add-user-filled::before {
.icon-add-one-badge::before {
content: "\f105";
}
.icon-add-user::before {
content: "\f106";
}
.icon-add::before {
.icon-add-user-filled::before {
content: "\f107";
}
.icon-admin::before {
content: "\f108";
}
.icon-ai-edit::before {
.icon-ai::before {
content: "\f109";
}
.icon-ai-fix::before {
.icon-ai-edit::before {
content: "\f10a";
}
.icon-ai::before {
.icon-ai-fix::before {
content: "\f10b";
}
.icon-allow-share::before {
@ -66,22 +66,22 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-animations::before {
content: "\f10f";
}
.icon-archive-filled::before {
.icon-archive::before {
content: "\f110";
}
.icon-archive-from-main::before {
.icon-archive-filled::before {
content: "\f111";
}
.icon-archive-to-main::before {
.icon-archive-from-main::before {
content: "\f112";
}
.icon-archive::before {
.icon-archive-to-main::before {
content: "\f113";
}
.icon-arrow-down-circle::before {
.icon-arrow-down::before {
content: "\f114";
}
.icon-arrow-down::before {
.icon-arrow-down-circle::before {
content: "\f115";
}
.icon-arrow-left::before {
@ -96,16 +96,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-attach::before {
content: "\f119";
}
.icon-auction-drop::before {
.icon-auction::before {
content: "\f11a";
}
.icon-auction-filled::before {
.icon-auction-drop::before {
content: "\f11b";
}
.icon-auction-next-round::before {
.icon-auction-filled::before {
content: "\f11c";
}
.icon-auction::before {
.icon-auction-next-round::before {
content: "\f11d";
}
.icon-author-hidden::before {
@ -123,13 +123,13 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-bold::before {
content: "\f122";
}
.icon-boost-craft-chance::before {
.icon-boost::before {
content: "\f123";
}
.icon-boost-outline::before {
.icon-boost-craft-chance::before {
content: "\f124";
}
.icon-boost::before {
.icon-boost-outline::before {
content: "\f125";
}
.icon-boostcircle::before {
@ -153,16 +153,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-bug::before {
content: "\f12c";
}
.icon-calendar-filter::before {
.icon-calendar::before {
content: "\f12d";
}
.icon-calendar::before {
.icon-calendar-filter::before {
content: "\f12e";
}
.icon-camera-add::before {
.icon-camera::before {
content: "\f12f";
}
.icon-camera::before {
.icon-camera-add::before {
content: "\f130";
}
.icon-car::before {
@ -174,10 +174,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-cash-circle::before {
content: "\f133";
}
.icon-channel-filled::before {
.icon-channel::before {
content: "\f134";
}
.icon-channel::before {
.icon-channel-filled::before {
content: "\f135";
}
.icon-channelviews::before {
@ -189,25 +189,25 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-chats-badge::before {
content: "\f138";
}
.icon-check-bold::before {
.icon-check::before {
content: "\f139";
}
.icon-check::before {
.icon-check-bold::before {
content: "\f13a";
}
.icon-clock-edit::before {
.icon-clock::before {
content: "\f13b";
}
.icon-clock::before {
.icon-clock-edit::before {
content: "\f13c";
}
.icon-close-circle::before {
.icon-close::before {
content: "\f13d";
}
.icon-close-topic::before {
.icon-close-circle::before {
content: "\f13e";
}
.icon-close::before {
.icon-close-topic::before {
content: "\f13f";
}
.icon-closed-gift::before {
@ -216,10 +216,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-cloud-download::before {
content: "\f141";
}
.icon-collapse-modal::before {
.icon-collapse::before {
content: "\f142";
}
.icon-collapse::before {
.icon-collapse-modal::before {
content: "\f143";
}
.icon-colorize::before {
@ -228,16 +228,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-combine-craft::before {
content: "\f145";
}
.icon-comments-sticker::before {
.icon-comments::before {
content: "\f146";
}
.icon-comments::before {
.icon-comments-sticker::before {
content: "\f147";
}
.icon-copy-media::before {
.icon-copy::before {
content: "\f148";
}
.icon-copy::before {
.icon-copy-media::before {
content: "\f149";
}
.icon-craft::before {
@ -246,16 +246,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-crop::before {
content: "\f14b";
}
.icon-crown-take-off-outline::before {
.icon-crown-take-off::before {
content: "\f14c";
}
.icon-crown-take-off::before {
.icon-crown-take-off-outline::before {
content: "\f14d";
}
.icon-crown-wear-outline::before {
.icon-crown-wear::before {
content: "\f14e";
}
.icon-crown-wear::before {
.icon-crown-wear-outline::before {
content: "\f14f";
}
.icon-darkmode::before {
@ -264,16 +264,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-data::before {
content: "\f151";
}
.icon-delete-filled::before {
.icon-delete::before {
content: "\f152";
}
.icon-delete-left::before {
.icon-delete-filled::before {
content: "\f153";
}
.icon-delete-user::before {
.icon-delete-left::before {
content: "\f154";
}
.icon-delete::before {
.icon-delete-user::before {
content: "\f155";
}
.icon-diamond::before {
@ -306,28 +306,28 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-enter::before {
content: "\f15f";
}
.icon-expand-modal::before {
.icon-expand::before {
content: "\f160";
}
.icon-expand::before {
.icon-expand-modal::before {
content: "\f161";
}
.icon-eye-crossed-outline::before {
.icon-eye::before {
content: "\f162";
}
.icon-eye-crossed::before {
content: "\f163";
}
.icon-eye-outline::before {
.icon-eye-crossed-outline::before {
content: "\f164";
}
.icon-eye::before {
.icon-eye-outline::before {
content: "\f165";
}
.icon-favorite-filled::before {
.icon-favorite::before {
content: "\f166";
}
.icon-favorite::before {
.icon-favorite-filled::before {
content: "\f167";
}
.icon-file-badge::before {
@ -339,34 +339,34 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-flip::before {
content: "\f16a";
}
.icon-folder-badge::before {
.icon-folder::before {
content: "\f16b";
}
.icon-folder-tabs-bot::before {
.icon-folder-badge::before {
content: "\f16c";
}
.icon-folder-tabs-channel::before {
.icon-folder-tabs-bot::before {
content: "\f16d";
}
.icon-folder-tabs-chat::before {
.icon-folder-tabs-channel::before {
content: "\f16e";
}
.icon-folder-tabs-chats::before {
.icon-folder-tabs-chat::before {
content: "\f16f";
}
.icon-folder-tabs-folder::before {
.icon-folder-tabs-chats::before {
content: "\f170";
}
.icon-folder-tabs-group::before {
.icon-folder-tabs-folder::before {
content: "\f171";
}
.icon-folder-tabs-star::before {
.icon-folder-tabs-group::before {
content: "\f172";
}
.icon-folder-tabs-user::before {
.icon-folder-tabs-star::before {
content: "\f173";
}
.icon-folder::before {
.icon-folder-tabs-user::before {
content: "\f174";
}
.icon-fontsize::before {
@ -390,28 +390,28 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-gifs::before {
content: "\f17b";
}
.icon-gift-transfer-inline::before {
.icon-gift::before {
content: "\f17c";
}
.icon-gift::before {
.icon-gift-transfer-inline::before {
content: "\f17d";
}
.icon-group-filled::before {
.icon-group::before {
content: "\f17e";
}
.icon-group::before {
.icon-group-filled::before {
content: "\f17f";
}
.icon-grouped-disable::before {
.icon-grouped::before {
content: "\f180";
}
.icon-grouped::before {
.icon-grouped-disable::before {
content: "\f181";
}
.icon-hand-stop-filled::before {
.icon-hand-stop::before {
content: "\f182";
}
.icon-hand-stop::before {
.icon-hand-stop-filled::before {
content: "\f183";
}
.icon-hashtag::before {
@ -420,19 +420,19 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-hd-photo::before {
content: "\f185";
}
.icon-heart-outline::before {
.icon-heart::before {
content: "\f186";
}
.icon-heart::before {
.icon-heart-outline::before {
content: "\f187";
}
.icon-help::before {
content: "\f188";
}
.icon-info-filled::before {
.icon-info::before {
content: "\f189";
}
.icon-info::before {
.icon-info-filled::before {
content: "\f18a";
}
.icon-install::before {
@ -459,22 +459,22 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-large-play::before {
content: "\f192";
}
.icon-link-badge::before {
.icon-link::before {
content: "\f193";
}
.icon-link-broken::before {
.icon-link-badge::before {
content: "\f194";
}
.icon-link::before {
.icon-link-broken::before {
content: "\f195";
}
.icon-location::before {
content: "\f196";
}
.icon-lock-badge::before {
.icon-lock::before {
content: "\f197";
}
.icon-lock::before {
.icon-lock-badge::before {
content: "\f198";
}
.icon-logout::before {
@ -489,34 +489,34 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-menu::before {
content: "\f19c";
}
.icon-message-failed::before {
.icon-message::before {
content: "\f19d";
}
.icon-message-pending::before {
.icon-message-failed::before {
content: "\f19e";
}
.icon-message-read::before {
.icon-message-pending::before {
content: "\f19f";
}
.icon-message-succeeded::before {
.icon-message-read::before {
content: "\f1a0";
}
.icon-message::before {
.icon-message-succeeded::before {
content: "\f1a1";
}
.icon-microphone-alt::before {
.icon-microphone::before {
content: "\f1a2";
}
.icon-microphone::before {
.icon-microphone-alt::before {
content: "\f1a3";
}
.icon-monospace::before {
content: "\f1a4";
}
.icon-more-circle::before {
.icon-more::before {
content: "\f1a5";
}
.icon-more::before {
.icon-more-circle::before {
content: "\f1a6";
}
.icon-move-caption-down::before {
@ -540,10 +540,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-new-send::before {
content: "\f1ad";
}
.icon-next-link::before {
.icon-next::before {
content: "\f1ae";
}
.icon-next::before {
.icon-next-link::before {
content: "\f1af";
}
.icon-no-download::before {
@ -579,25 +579,25 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-permissions::before {
content: "\f1ba";
}
.icon-phone-discard-outline::before {
.icon-phone::before {
content: "\f1bb";
}
.icon-phone-discard::before {
content: "\f1bc";
}
.icon-phone::before {
.icon-phone-discard-outline::before {
content: "\f1bd";
}
.icon-photo::before {
content: "\f1be";
}
.icon-pin-badge::before {
.icon-pin::before {
content: "\f1bf";
}
.icon-pin-list::before {
.icon-pin-badge::before {
content: "\f1c0";
}
.icon-pin::before {
.icon-pin-list::before {
content: "\f1c1";
}
.icon-pinned-chat::before {
@ -609,22 +609,22 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-pip::before {
content: "\f1c4";
}
.icon-play-story::before {
.icon-play::before {
content: "\f1c5";
}
.icon-play::before {
.icon-play-story::before {
content: "\f1c6";
}
.icon-poll-badge::before {
.icon-poll::before {
content: "\f1c7";
}
.icon-poll::before {
.icon-poll-badge::before {
content: "\f1c8";
}
.icon-previous-link::before {
.icon-previous::before {
content: "\f1c9";
}
.icon-previous::before {
.icon-previous-link::before {
content: "\f1ca";
}
.icon-privacy-policy::before {
@ -633,10 +633,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-proof-of-ownership::before {
content: "\f1cc";
}
.icon-quote-text::before {
.icon-quote::before {
content: "\f1cd";
}
.icon-quote::before {
.icon-quote-text::before {
content: "\f1ce";
}
.icon-radial-badge::before {
@ -714,10 +714,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-reload::before {
content: "\f1e7";
}
.icon-remove-quote::before {
.icon-remove::before {
content: "\f1e8";
}
.icon-remove::before {
.icon-remove-quote::before {
content: "\f1e9";
}
.icon-reopen-topic::before {
@ -732,10 +732,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-replies::before {
content: "\f1ed";
}
.icon-reply-filled::before {
.icon-reply::before {
content: "\f1ee";
}
.icon-reply::before {
.icon-reply-filled::before {
content: "\f1ef";
}
.icon-revenue-split::before {
@ -765,40 +765,40 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-search::before {
content: "\f1f8";
}
.icon-select-filled::before {
.icon-select::before {
content: "\f1f9";
}
.icon-select::before {
.icon-select-filled::before {
content: "\f1fa";
}
.icon-sell-outline::before {
.icon-sell::before {
content: "\f1fb";
}
.icon-sell::before {
.icon-sell-outline::before {
content: "\f1fc";
}
.icon-send-outline::before {
.icon-send::before {
content: "\f1fd";
}
.icon-send::before {
.icon-send-outline::before {
content: "\f1fe";
}
.icon-settings-filled::before {
.icon-settings::before {
content: "\f1ff";
}
.icon-settings::before {
.icon-settings-filled::before {
content: "\f200";
}
.icon-share-filled::before {
content: "\f201";
}
.icon-share-screen-outlined::before {
.icon-share-screen::before {
content: "\f202";
}
.icon-share-screen-stop::before {
.icon-share-screen-outlined::before {
content: "\f203";
}
.icon-share-screen::before {
.icon-share-screen-stop::before {
content: "\f204";
}
.icon-show-message::before {
@ -819,34 +819,34 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-smile::before {
content: "\f20a";
}
.icon-sort-by-date::before {
.icon-sort::before {
content: "\f20b";
}
.icon-sort-by-number::before {
.icon-sort-by-date::before {
content: "\f20c";
}
.icon-sort-by-price::before {
.icon-sort-by-number::before {
content: "\f20d";
}
.icon-sort::before {
.icon-sort-by-price::before {
content: "\f20e";
}
.icon-speaker-muted-story::before {
.icon-speaker::before {
content: "\f20f";
}
.icon-speaker-outline::before {
.icon-speaker-muted-story::before {
content: "\f210";
}
.icon-speaker-story::before {
.icon-speaker-outline::before {
content: "\f211";
}
.icon-speaker::before {
.icon-speaker-story::before {
content: "\f212";
}
.icon-spoiler-disable::before {
.icon-spoiler::before {
content: "\f213";
}
.icon-spoiler::before {
.icon-spoiler-disable::before {
content: "\f214";
}
.icon-sport::before {
@ -873,10 +873,10 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-stickers::before {
content: "\f21c";
}
.icon-stop-raising-hand::before {
.icon-stop::before {
content: "\f21d";
}
.icon-stop::before {
.icon-stop-raising-hand::before {
content: "\f21e";
}
.icon-story-caption::before {
@ -894,19 +894,19 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-strikethrough::before {
content: "\f223";
}
.icon-tag-add::before {
.icon-tag::before {
content: "\f224";
}
.icon-tag-crossed::before {
.icon-tag-add::before {
content: "\f225";
}
.icon-tag-filter::before {
.icon-tag-crossed::before {
content: "\f226";
}
.icon-tag-name::before {
.icon-tag-filter::before {
content: "\f227";
}
.icon-tag::before {
.icon-tag-name::before {
content: "\f228";
}
.icon-timer::before {
@ -948,16 +948,16 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-unique-profile::before {
content: "\f235";
}
.icon-unlist-outline::before {
.icon-unlist::before {
content: "\f236";
}
.icon-unlist::before {
.icon-unlist-outline::before {
content: "\f237";
}
.icon-unlock-badge::before {
.icon-unlock::before {
content: "\f238";
}
.icon-unlock::before {
.icon-unlock-badge::before {
content: "\f239";
}
.icon-unmute::before {
@ -972,28 +972,28 @@ url("./icons.woff?04b18437fcd7ee960708328d5fdc1333") format("woff");
.icon-up::before {
content: "\f23d";
}
.icon-user-filled::before {
.icon-user::before {
content: "\f23e";
}
.icon-user-online::before {
.icon-user-filled::before {
content: "\f23f";
}
.icon-user-stars::before {
.icon-user-online::before {
content: "\f240";
}
.icon-user-tag::before {
.icon-user-stars::before {
content: "\f241";
}
.icon-user::before {
.icon-user-tag::before {
content: "\f242";
}
.icon-video-outlined::before {
.icon-video::before {
content: "\f243";
}
.icon-video-stop::before {
.icon-video-outlined::before {
content: "\f244";
}
.icon-video::before {
.icon-video-stop::before {
content: "\f245";
}
.icon-view-once::before {

View File

@ -17,42 +17,42 @@
$icons-map: (
"active-sessions": "\f101",
"add-caption": "\f102",
"add-filled": "\f103",
"add-one-badge": "\f104",
"add-user-filled": "\f105",
"add": "\f102",
"add-caption": "\f103",
"add-filled": "\f104",
"add-one-badge": "\f105",
"add-user": "\f106",
"add": "\f107",
"add-user-filled": "\f107",
"admin": "\f108",
"ai-edit": "\f109",
"ai-fix": "\f10a",
"ai": "\f10b",
"ai": "\f109",
"ai-edit": "\f10a",
"ai-fix": "\f10b",
"allow-share": "\f10c",
"allow-speak": "\f10d",
"animals": "\f10e",
"animations": "\f10f",
"archive-filled": "\f110",
"archive-from-main": "\f111",
"archive-to-main": "\f112",
"archive": "\f113",
"arrow-down-circle": "\f114",
"arrow-down": "\f115",
"archive": "\f110",
"archive-filled": "\f111",
"archive-from-main": "\f112",
"archive-to-main": "\f113",
"arrow-down": "\f114",
"arrow-down-circle": "\f115",
"arrow-left": "\f116",
"arrow-right": "\f117",
"ask-support": "\f118",
"attach": "\f119",
"auction-drop": "\f11a",
"auction-filled": "\f11b",
"auction-next-round": "\f11c",
"auction": "\f11d",
"auction": "\f11a",
"auction-drop": "\f11b",
"auction-filled": "\f11c",
"auction-next-round": "\f11d",
"author-hidden": "\f11e",
"avatar-archived-chats": "\f11f",
"avatar-deleted-account": "\f120",
"avatar-saved-messages": "\f121",
"bold": "\f122",
"boost-craft-chance": "\f123",
"boost-outline": "\f124",
"boost": "\f125",
"boost": "\f123",
"boost-craft-chance": "\f124",
"boost-outline": "\f125",
"boostcircle": "\f126",
"boosts": "\f127",
"bot-command": "\f128",
@ -60,47 +60,47 @@ $icons-map: (
"bots": "\f12a",
"brush": "\f12b",
"bug": "\f12c",
"calendar-filter": "\f12d",
"calendar": "\f12e",
"camera-add": "\f12f",
"camera": "\f130",
"calendar": "\f12d",
"calendar-filter": "\f12e",
"camera": "\f12f",
"camera-add": "\f130",
"car": "\f131",
"card": "\f132",
"cash-circle": "\f133",
"channel-filled": "\f134",
"channel": "\f135",
"channel": "\f134",
"channel-filled": "\f135",
"channelviews": "\f136",
"chat-badge": "\f137",
"chats-badge": "\f138",
"check-bold": "\f139",
"check": "\f13a",
"clock-edit": "\f13b",
"clock": "\f13c",
"close-circle": "\f13d",
"close-topic": "\f13e",
"close": "\f13f",
"check": "\f139",
"check-bold": "\f13a",
"clock": "\f13b",
"clock-edit": "\f13c",
"close": "\f13d",
"close-circle": "\f13e",
"close-topic": "\f13f",
"closed-gift": "\f140",
"cloud-download": "\f141",
"collapse-modal": "\f142",
"collapse": "\f143",
"collapse": "\f142",
"collapse-modal": "\f143",
"colorize": "\f144",
"combine-craft": "\f145",
"comments-sticker": "\f146",
"comments": "\f147",
"copy-media": "\f148",
"copy": "\f149",
"comments": "\f146",
"comments-sticker": "\f147",
"copy": "\f148",
"copy-media": "\f149",
"craft": "\f14a",
"crop": "\f14b",
"crown-take-off-outline": "\f14c",
"crown-take-off": "\f14d",
"crown-wear-outline": "\f14e",
"crown-wear": "\f14f",
"crown-take-off": "\f14c",
"crown-take-off-outline": "\f14d",
"crown-wear": "\f14e",
"crown-wear-outline": "\f14f",
"darkmode": "\f150",
"data": "\f151",
"delete-filled": "\f152",
"delete-left": "\f153",
"delete-user": "\f154",
"delete": "\f155",
"delete": "\f152",
"delete-filled": "\f153",
"delete-left": "\f154",
"delete-user": "\f155",
"diamond": "\f156",
"document": "\f157",
"double-badge": "\f158",
@ -111,27 +111,27 @@ $icons-map: (
"edit": "\f15d",
"email": "\f15e",
"enter": "\f15f",
"expand-modal": "\f160",
"expand": "\f161",
"eye-crossed-outline": "\f162",
"expand": "\f160",
"expand-modal": "\f161",
"eye": "\f162",
"eye-crossed": "\f163",
"eye-outline": "\f164",
"eye": "\f165",
"favorite-filled": "\f166",
"favorite": "\f167",
"eye-crossed-outline": "\f164",
"eye-outline": "\f165",
"favorite": "\f166",
"favorite-filled": "\f167",
"file-badge": "\f168",
"flag": "\f169",
"flip": "\f16a",
"folder-badge": "\f16b",
"folder-tabs-bot": "\f16c",
"folder-tabs-channel": "\f16d",
"folder-tabs-chat": "\f16e",
"folder-tabs-chats": "\f16f",
"folder-tabs-folder": "\f170",
"folder-tabs-group": "\f171",
"folder-tabs-star": "\f172",
"folder-tabs-user": "\f173",
"folder": "\f174",
"folder": "\f16b",
"folder-badge": "\f16c",
"folder-tabs-bot": "\f16d",
"folder-tabs-channel": "\f16e",
"folder-tabs-chat": "\f16f",
"folder-tabs-chats": "\f170",
"folder-tabs-folder": "\f171",
"folder-tabs-group": "\f172",
"folder-tabs-star": "\f173",
"folder-tabs-user": "\f174",
"fontsize": "\f175",
"forums": "\f176",
"forward": "\f177",
@ -139,21 +139,21 @@ $icons-map: (
"frozen-time": "\f179",
"fullscreen": "\f17a",
"gifs": "\f17b",
"gift-transfer-inline": "\f17c",
"gift": "\f17d",
"group-filled": "\f17e",
"group": "\f17f",
"grouped-disable": "\f180",
"grouped": "\f181",
"hand-stop-filled": "\f182",
"hand-stop": "\f183",
"gift": "\f17c",
"gift-transfer-inline": "\f17d",
"group": "\f17e",
"group-filled": "\f17f",
"grouped": "\f180",
"grouped-disable": "\f181",
"hand-stop": "\f182",
"hand-stop-filled": "\f183",
"hashtag": "\f184",
"hd-photo": "\f185",
"heart-outline": "\f186",
"heart": "\f187",
"heart": "\f186",
"heart-outline": "\f187",
"help": "\f188",
"info-filled": "\f189",
"info": "\f18a",
"info": "\f189",
"info-filled": "\f18a",
"install": "\f18b",
"italic": "\f18c",
"key": "\f18d",
@ -162,26 +162,26 @@ $icons-map: (
"language": "\f190",
"large-pause": "\f191",
"large-play": "\f192",
"link-badge": "\f193",
"link-broken": "\f194",
"link": "\f195",
"link": "\f193",
"link-badge": "\f194",
"link-broken": "\f195",
"location": "\f196",
"lock-badge": "\f197",
"lock": "\f198",
"lock": "\f197",
"lock-badge": "\f198",
"logout": "\f199",
"loop": "\f19a",
"mention": "\f19b",
"menu": "\f19c",
"message-failed": "\f19d",
"message-pending": "\f19e",
"message-read": "\f19f",
"message-succeeded": "\f1a0",
"message": "\f1a1",
"microphone-alt": "\f1a2",
"microphone": "\f1a3",
"message": "\f19d",
"message-failed": "\f19e",
"message-pending": "\f19f",
"message-read": "\f1a0",
"message-succeeded": "\f1a1",
"microphone": "\f1a2",
"microphone-alt": "\f1a3",
"monospace": "\f1a4",
"more-circle": "\f1a5",
"more": "\f1a6",
"more": "\f1a5",
"more-circle": "\f1a6",
"move-caption-down": "\f1a7",
"move-caption-up": "\f1a8",
"mute": "\f1a9",
@ -189,8 +189,8 @@ $icons-map: (
"my-notes": "\f1ab",
"new-chat-filled": "\f1ac",
"new-send": "\f1ad",
"next-link": "\f1ae",
"next": "\f1af",
"next": "\f1ae",
"next-link": "\f1af",
"no-download": "\f1b0",
"no-share": "\f1b1",
"nochannel": "\f1b2",
@ -202,26 +202,26 @@ $icons-map: (
"password-off": "\f1b8",
"pause": "\f1b9",
"permissions": "\f1ba",
"phone-discard-outline": "\f1bb",
"phone": "\f1bb",
"phone-discard": "\f1bc",
"phone": "\f1bd",
"phone-discard-outline": "\f1bd",
"photo": "\f1be",
"pin-badge": "\f1bf",
"pin-list": "\f1c0",
"pin": "\f1c1",
"pin": "\f1bf",
"pin-badge": "\f1c0",
"pin-list": "\f1c1",
"pinned-chat": "\f1c2",
"pinned-message": "\f1c3",
"pip": "\f1c4",
"play-story": "\f1c5",
"play": "\f1c6",
"poll-badge": "\f1c7",
"poll": "\f1c8",
"previous-link": "\f1c9",
"previous": "\f1ca",
"play": "\f1c5",
"play-story": "\f1c6",
"poll": "\f1c7",
"poll-badge": "\f1c8",
"previous": "\f1c9",
"previous-link": "\f1ca",
"privacy-policy": "\f1cb",
"proof-of-ownership": "\f1cc",
"quote-text": "\f1cd",
"quote": "\f1ce",
"quote": "\f1cd",
"quote-text": "\f1ce",
"radial-badge": "\f1cf",
"rating-icons-level1": "\f1d0",
"rating-icons-level10": "\f1d1",
@ -247,14 +247,14 @@ $icons-map: (
"redo": "\f1e5",
"refund": "\f1e6",
"reload": "\f1e7",
"remove-quote": "\f1e8",
"remove": "\f1e9",
"remove": "\f1e8",
"remove-quote": "\f1e9",
"reopen-topic": "\f1ea",
"reorder-tabs": "\f1eb",
"replace": "\f1ec",
"replies": "\f1ed",
"reply-filled": "\f1ee",
"reply": "\f1ef",
"reply": "\f1ee",
"reply-filled": "\f1ef",
"revenue-split": "\f1f0",
"revote": "\f1f1",
"rotate": "\f1f2",
@ -264,34 +264,34 @@ $icons-map: (
"scheduled": "\f1f6",
"sd-photo": "\f1f7",
"search": "\f1f8",
"select-filled": "\f1f9",
"select": "\f1fa",
"sell-outline": "\f1fb",
"sell": "\f1fc",
"send-outline": "\f1fd",
"send": "\f1fe",
"settings-filled": "\f1ff",
"settings": "\f200",
"select": "\f1f9",
"select-filled": "\f1fa",
"sell": "\f1fb",
"sell-outline": "\f1fc",
"send": "\f1fd",
"send-outline": "\f1fe",
"settings": "\f1ff",
"settings-filled": "\f200",
"share-filled": "\f201",
"share-screen-outlined": "\f202",
"share-screen-stop": "\f203",
"share-screen": "\f204",
"share-screen": "\f202",
"share-screen-outlined": "\f203",
"share-screen-stop": "\f204",
"show-message": "\f205",
"sidebar": "\f206",
"skip-next": "\f207",
"skip-previous": "\f208",
"smallscreen": "\f209",
"smile": "\f20a",
"sort-by-date": "\f20b",
"sort-by-number": "\f20c",
"sort-by-price": "\f20d",
"sort": "\f20e",
"speaker-muted-story": "\f20f",
"speaker-outline": "\f210",
"speaker-story": "\f211",
"speaker": "\f212",
"spoiler-disable": "\f213",
"spoiler": "\f214",
"sort": "\f20b",
"sort-by-date": "\f20c",
"sort-by-number": "\f20d",
"sort-by-price": "\f20e",
"speaker": "\f20f",
"speaker-muted-story": "\f210",
"speaker-outline": "\f211",
"speaker-story": "\f212",
"spoiler": "\f213",
"spoiler-disable": "\f214",
"sport": "\f215",
"star": "\f216",
"stars-lock": "\f217",
@ -300,18 +300,18 @@ $icons-map: (
"stealth-future": "\f21a",
"stealth-past": "\f21b",
"stickers": "\f21c",
"stop-raising-hand": "\f21d",
"stop": "\f21e",
"stop": "\f21d",
"stop-raising-hand": "\f21e",
"story-caption": "\f21f",
"story-expired": "\f220",
"story-priority": "\f221",
"story-reply": "\f222",
"strikethrough": "\f223",
"tag-add": "\f224",
"tag-crossed": "\f225",
"tag-filter": "\f226",
"tag-name": "\f227",
"tag": "\f228",
"tag": "\f224",
"tag-add": "\f225",
"tag-crossed": "\f226",
"tag-filter": "\f227",
"tag-name": "\f228",
"timer": "\f229",
"toncoin": "\f22a",
"tone": "\f22b",
@ -325,22 +325,22 @@ $icons-map: (
"understood": "\f233",
"undo": "\f234",
"unique-profile": "\f235",
"unlist-outline": "\f236",
"unlist": "\f237",
"unlock-badge": "\f238",
"unlock": "\f239",
"unlist": "\f236",
"unlist-outline": "\f237",
"unlock": "\f238",
"unlock-badge": "\f239",
"unmute": "\f23a",
"unpin": "\f23b",
"unread": "\f23c",
"up": "\f23d",
"user-filled": "\f23e",
"user-online": "\f23f",
"user-stars": "\f240",
"user-tag": "\f241",
"user": "\f242",
"video-outlined": "\f243",
"video-stop": "\f244",
"video": "\f245",
"user": "\f23e",
"user-filled": "\f23f",
"user-online": "\f240",
"user-stars": "\f241",
"user-tag": "\f242",
"video": "\f243",
"video-outlined": "\f244",
"video-stop": "\f245",
"view-once": "\f246",
"voice-chat": "\f247",
"volume-1": "\f248",

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +1,41 @@
export type FontIconName =
| 'active-sessions'
| 'add'
| 'add-caption'
| 'add-filled'
| 'add-one-badge'
| 'add-user-filled'
| 'add-user'
| 'add'
| 'add-user-filled'
| 'admin'
| 'ai'
| 'ai-edit'
| 'ai-fix'
| 'ai'
| 'allow-share'
| 'allow-speak'
| 'animals'
| 'animations'
| 'archive'
| 'archive-filled'
| 'archive-from-main'
| 'archive-to-main'
| 'archive'
| 'arrow-down-circle'
| 'arrow-down'
| 'arrow-down-circle'
| 'arrow-left'
| 'arrow-right'
| 'ask-support'
| 'attach'
| 'auction'
| 'auction-drop'
| 'auction-filled'
| 'auction-next-round'
| 'auction'
| 'author-hidden'
| 'avatar-archived-chats'
| 'avatar-deleted-account'
| 'avatar-saved-messages'
| 'bold'
| 'boost'
| 'boost-craft-chance'
| 'boost-outline'
| 'boost'
| 'boostcircle'
| 'boosts'
| 'bot-command'
@ -43,47 +43,47 @@ export type FontIconName =
| 'bots'
| 'brush'
| 'bug'
| 'calendar-filter'
| 'calendar'
| 'camera-add'
| 'calendar-filter'
| 'camera'
| 'camera-add'
| 'car'
| 'card'
| 'cash-circle'
| 'channel-filled'
| 'channel'
| 'channel-filled'
| 'channelviews'
| 'chat-badge'
| 'chats-badge'
| 'check-bold'
| 'check'
| 'clock-edit'
| 'check-bold'
| 'clock'
| 'clock-edit'
| 'close'
| 'close-circle'
| 'close-topic'
| 'close'
| 'closed-gift'
| 'cloud-download'
| 'collapse-modal'
| 'collapse'
| 'collapse-modal'
| 'colorize'
| 'combine-craft'
| 'comments-sticker'
| 'comments'
| 'copy-media'
| 'comments-sticker'
| 'copy'
| 'copy-media'
| 'craft'
| 'crop'
| 'crown-take-off-outline'
| 'crown-take-off'
| 'crown-wear-outline'
| 'crown-take-off-outline'
| 'crown-wear'
| 'crown-wear-outline'
| 'darkmode'
| 'data'
| 'delete'
| 'delete-filled'
| 'delete-left'
| 'delete-user'
| 'delete'
| 'diamond'
| 'document'
| 'double-badge'
@ -94,17 +94,18 @@ export type FontIconName =
| 'edit'
| 'email'
| 'enter'
| 'expand-modal'
| 'expand'
| 'eye-crossed-outline'
| 'eye-crossed'
| 'eye-outline'
| 'expand-modal'
| 'eye'
| 'favorite-filled'
| 'eye-crossed'
| 'eye-crossed-outline'
| 'eye-outline'
| 'favorite'
| 'favorite-filled'
| 'file-badge'
| 'flag'
| 'flip'
| 'folder'
| 'folder-badge'
| 'folder-tabs-bot'
| 'folder-tabs-channel'
@ -114,7 +115,6 @@ export type FontIconName =
| 'folder-tabs-group'
| 'folder-tabs-star'
| 'folder-tabs-user'
| 'folder'
| 'fontsize'
| 'forums'
| 'forward'
@ -122,21 +122,21 @@ export type FontIconName =
| 'frozen-time'
| 'fullscreen'
| 'gifs'
| 'gift-transfer-inline'
| 'gift'
| 'group-filled'
| 'gift-transfer-inline'
| 'group'
| 'grouped-disable'
| 'group-filled'
| 'grouped'
| 'hand-stop-filled'
| 'grouped-disable'
| 'hand-stop'
| 'hand-stop-filled'
| 'hashtag'
| 'hd-photo'
| 'heart-outline'
| 'heart'
| 'heart-outline'
| 'help'
| 'info-filled'
| 'info'
| 'info-filled'
| 'install'
| 'italic'
| 'key'
@ -145,26 +145,26 @@ export type FontIconName =
| 'language'
| 'large-pause'
| 'large-play'
| 'link'
| 'link-badge'
| 'link-broken'
| 'link'
| 'location'
| 'lock-badge'
| 'lock'
| 'lock-badge'
| 'logout'
| 'loop'
| 'mention'
| 'menu'
| 'message'
| 'message-failed'
| 'message-pending'
| 'message-read'
| 'message-succeeded'
| 'message'
| 'microphone-alt'
| 'microphone'
| 'microphone-alt'
| 'monospace'
| 'more-circle'
| 'more'
| 'more-circle'
| 'move-caption-down'
| 'move-caption-up'
| 'mute'
@ -172,8 +172,8 @@ export type FontIconName =
| 'my-notes'
| 'new-chat-filled'
| 'new-send'
| 'next-link'
| 'next'
| 'next-link'
| 'no-download'
| 'no-share'
| 'nochannel'
@ -185,26 +185,26 @@ export type FontIconName =
| 'password-off'
| 'pause'
| 'permissions'
| 'phone-discard-outline'
| 'phone-discard'
| 'phone'
| 'phone-discard'
| 'phone-discard-outline'
| 'photo'
| 'pin'
| 'pin-badge'
| 'pin-list'
| 'pin'
| 'pinned-chat'
| 'pinned-message'
| 'pip'
| 'play-story'
| 'play'
| 'poll-badge'
| 'play-story'
| 'poll'
| 'previous-link'
| 'poll-badge'
| 'previous'
| 'previous-link'
| 'privacy-policy'
| 'proof-of-ownership'
| 'quote-text'
| 'quote'
| 'quote-text'
| 'radial-badge'
| 'rating-icons-level1'
| 'rating-icons-level10'
@ -230,14 +230,14 @@ export type FontIconName =
| 'redo'
| 'refund'
| 'reload'
| 'remove-quote'
| 'remove'
| 'remove-quote'
| 'reopen-topic'
| 'reorder-tabs'
| 'replace'
| 'replies'
| 'reply-filled'
| 'reply'
| 'reply-filled'
| 'revenue-split'
| 'revote'
| 'rotate'
@ -247,34 +247,34 @@ export type FontIconName =
| 'scheduled'
| 'sd-photo'
| 'search'
| 'select-filled'
| 'select'
| 'sell-outline'
| 'select-filled'
| 'sell'
| 'send-outline'
| 'sell-outline'
| 'send'
| 'settings-filled'
| 'send-outline'
| 'settings'
| 'settings-filled'
| 'share-filled'
| 'share-screen'
| 'share-screen-outlined'
| 'share-screen-stop'
| 'share-screen'
| 'show-message'
| 'sidebar'
| 'skip-next'
| 'skip-previous'
| 'smallscreen'
| 'smile'
| 'sort'
| 'sort-by-date'
| 'sort-by-number'
| 'sort-by-price'
| 'sort'
| 'speaker'
| 'speaker-muted-story'
| 'speaker-outline'
| 'speaker-story'
| 'speaker'
| 'spoiler-disable'
| 'spoiler'
| 'spoiler-disable'
| 'sport'
| 'star'
| 'stars-lock'
@ -283,18 +283,18 @@ export type FontIconName =
| 'stealth-future'
| 'stealth-past'
| 'stickers'
| 'stop-raising-hand'
| 'stop'
| 'stop-raising-hand'
| 'story-caption'
| 'story-expired'
| 'story-priority'
| 'story-reply'
| 'strikethrough'
| 'tag'
| 'tag-add'
| 'tag-crossed'
| 'tag-filter'
| 'tag-name'
| 'tag'
| 'timer'
| 'toncoin'
| 'tone'
@ -308,22 +308,22 @@ export type FontIconName =
| 'understood'
| 'undo'
| 'unique-profile'
| 'unlist-outline'
| 'unlist'
| 'unlock-badge'
| 'unlist-outline'
| 'unlock'
| 'unlock-badge'
| 'unmute'
| 'unpin'
| 'unread'
| 'up'
| 'user'
| 'user-filled'
| 'user-online'
| 'user-stars'
| 'user-tag'
| 'user'
| 'video'
| 'video-outlined'
| 'video-stop'
| 'video'
| 'view-once'
| 'voice-chat'
| 'volume-1'

View File

@ -41,7 +41,6 @@
"dev",
"*.config.ts",
"*.config.js",
".fantasticonrc.cjs",
".github/workflows/*.js",
"deploy/*.js"
]