Coder Social home page Coder Social logo

vkcom / icons Goto Github PK

View Code? Open in Web Editor NEW
124.0 124.0 69.0 87.72 MB

Набор SVG иконок, представленный в виде React компонентов.

Home Page: https://vkcom.github.io/icons/

License: MIT License

JavaScript 56.63% TypeScript 33.09% CSS 9.62% HTML 0.66%

icons's People

Contributors

actions-user avatar arthurstam avatar blackysoul avatar dependabot[bot] avatar egormorozovv avatar elizabeth-bennet avatar etokatya avatar eugpoloz avatar evgeniakorchits avatar fedorov-xyz avatar fliqle avatar gnvcor avatar inomdzhon avatar mendrew avatar mrzillagold avatar nekr avatar nickpvk avatar oxyberg avatar pale-emperor avatar severecloud avatar thoughtspile avatar vkui-bot avatar wayshev avatar wd055 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

icons's Issues

Добавить новую иконку

Иконка закладки, мне кажется очень полезная для множества кейсов, к примеру в моем она необходима)
image

Сделать возможность изменять размер иконок

Товарищи, это же SVG иконки. Было бы круто, если бы можно было передать также размер иконки и она автоматически меняла бы свой размер. В векторной графике это не должно быть сложно, зато можно отказаться от этих странных импортов по размерам.

Не билдится проект

Собираю набор иконок под свой сервис (чтоб не нарушать принцип использования иконок решил под основу взять этот проект). Проблема в том что dist остается пустым после билда на windows а на linux выдает ошибку при билде.

yarn build
yarn run v1.22.5
$ yarn icons-build && yarn docs
$ node scripts/icons.js && yarn icons-build-cjs && yarn icons-build-es6 && rm -rf tmp
generating icons...
icons successfully generated in dist!
$ yarn icons-tsc && yarn icons-babel
$ NODE_ENV=production tsc --emitDeclarationOnly --declaration --project tsconfig-icons.json --outDir dist/
Killed
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Зависимости установил.
Нода 14.11.0
yarn 1.22.5
(ничего не менял и не добавлял... как скопировал с гита так и пытаюсь билдить)
Возможно, что-то не то делаю. Буду благодарен за помощь!

[Feature] Решить вопрос с семантикой

Проблема

Исторически, svg-иконка обернута в div. Из-за этого, когда иконка попадает в инлайновый элемент (a, button, span, etc.), нарушается семантика дерева.

Решения

  1. Дать возможность переопределять корневой div с помощью свойства Component. Плюсы: простое решение. Минусы: ухудшается DX.
  2. Заменить div на span и динамически генерировать тег style с .Icon { display: 'block' } (div по умолчанию блочный и мы должны сохранить эту блочность). Плюсы: DX остаётся на прежнем уровне. Минусы: технически сложное решение.
  3. Вообще избавиться от корневого элемента и рисовать svg. Плюсы: DX остаётся на прежнем уровне, компонент становится проще. Минусы: что-то может пойти не так.

Аномальные отклонения весовых размеров иконок при одинаковом качестве

Коротко, одна и та же иконка в разных размерах имеет внушительно отличимый размер на выходе.

Взять к примеру иконки key_outline_20 и key_outline_24, весовой размер первой иконки в 2.32 раза больше второй, хотя по визуальному размеру это должно быть наоборот.

key_outline_20 = 1268 символов для элемента symbol
key_outline_24 = 545 символов для элемента symbol

image

favorite: { '12': 909, '16': 982, '20': 984, '24': 420, '28': 314, '36': 323 }
flash: { '12': 538, '16': 328, '20': 393, '24': 418, '28': 347 },
gift: { '12': 782, '16': 726, '24': 371, '28': 664, '32': 511, '36': 413 },
market: { '12': 1077, '16': 1096, '24': 1066, '36': 289 },
mention: { '12': 854, '16': 845, '24': 1762, '28': 1740 },
money_circle: { '12': 817, '16': 761, '24': 576 },
services: { '12': 1384, '16': 1382, '24': 560, '28': 1502, '48': 453 },
story: { '12': 469, '16': 726, '20': 769, '24': 603, '28': 429, '36': 630, '48': 1058 },
archive_outline: { '16': 1145, '20': 1526, '24': 591, '28': 1498, '56': 526 },
building_outline: { '16': 2534, '24': 3967, '28': 4026, '36': 4439, '56': 4396 },
check_square_outline: { '16': 1321, '20': 1056, '24': 1323, '28': 1093 },
comment_outline: { '16': 1111, '20': 1200, '24': 1056, '28': 608, '56': 1361 },
copy_outline: { '16': 1369, '20': 1583, '24': 1692, '28': 439 },
crop: { '16': 261, '24': 787, '28': 506, '32': 772 },
crop_outline: { '16': 882, '20': 385 },
error_circle_outline: { '16': 278, '20': 252, '24': 611, '28': 553, '32': 858 },
euro_outline: { '16': 432, '20': 354, '24': 474, '28': 653 },
favorite_outline: { '16': 2194, '20': 2211, '24': 671, '28': 642, '36': 757, '56': 1996 },
game: { '16': 418, '24': 838, '28': 988, '48': 698 },
gift_outline: { '16': 1830, '20': 1499, '24': 1121, '28': 1654, '32': 1660, '36': 1877, '44': 1695, '56': 1571 },
hand_heart_filled: { '16': 994, '24': 2156, '28': 1181 },
hand_outline: { '16': 748, '24': 1202 },
headphones_outline: { '16': 346, '28': 566, '56': 372 },
help_outline: { '16': 548, '20': 489, '24': 885, '28': 888, '36': 711, '56': 665 },
hide_outline: { '16': 814, '20': 843, '24': 1009, '28': 668, '48': 1298, '56': 989 },
image_filter: { '16': 373, '32': 784 },
info_outline: { '16': 255, '28': 647, '56': 412 },
key_outline: { '16': 1125, '20': 1268, '24': 545, '28': 446, '56': 1789 },
list_letter_outline: { '16': 762, '20': 1171, '24': 1157, '28': 1191 },
list_number_outline: { '16': 692, '20': 1307, '24': 1250, '28': 1289 },
list_play_outline: { '16': 396, '20': 506, '28': 267, '36': 432, '56': 590 },
lock_outline: { '16': 946, '20': 1150, '24': 1430, '28': 1002, '36': 1400, '56': 1431 },
mail_outline: { '16': 1233, '20': 1072, '24': 1507, '28': 997, '36': 1325, '56': 1283 },
market_outline: { '16': 369, '20': 1147, '24': 1447, '28': 971, '36': 1062, '56': 1633 },
menu_outline: { '16': 265, '20': 315, '24': 155, '28': 134 },
money_circle_outline: { '16': 670, '20': 385, '24': 810, '28': 637, '36': 803 },
more_vertical: { '16': 274, '20': 165, '24': 254, '28': 189 },
music: { '16': 858, '24': 603, '28': 648, '32': 634, '36': 543 },
newsfeed_outline: { '16': 1210, '20': 1235, '24': 837, '28': 884, '48': 261, '56': 1215 },
notification: { '16': 606, '24': 421, '28': 338 },
palette_outline: { '16': 672, '24': 1020, '28': 817, '56': 727 },
pause_circle: { '16': 185, '20': 681, '24': 810, '28': 321, '32': 748, '40': 805 },
pen_outline: { '16': 1201, '24': 448 },
qr_code: { '16': 4609 }, qr: { '24': 1392 },

Полный файл со всеми размерами:
sizes.json

Избавиться от webpack при сборке иконок

Ребята, серьезно? Вы предлагаете тянуть всю эту шапку webpack для каждой иконки? Намного логичнее было бы использовать что-то типа rollup для каждой иконки, тогда оверхед будет минимальным.

Unified icons sizes

I don't understand why the heck there's different sets of icons by size.

Why not make all icons with size of 24dp? It'll be easier to maintain and use.

Использование библиотеки в head'е

В либе используется зависимость svg-baker-runtime, которая исполняется сразу при импорте библиотеки в код, она вставляет некоторые элементы в конец body. И если скрипты подключаются из head'а, выглядит это вот так:
image

[Feature] Замена пикселей в `width` и `height` на относительные единицы

Какая сейчас проблема?

У иконок размеры width и height зашиты в пикселях. Если нам необходимо изменить масштаб, то нам нужно прибегать к передаче width и height

- <Icon24ExternalLinkOutline />
+ <Icon24ExternalLinkOutline width={16} height={16} />

Это не слишком удобно. К тому же некоторые иконки имеют разную пропорцию, например у https://vkcom.github.io/icons/#16/more_vertical width={8} и height={16}, что добавляет дополнительные сложности.

Бывает есть иконка в тексте (см. Рис. 1)

image

Рис. 1. Пример иконки в предложении

в нашем случае мы должны узнать размер шрифта и задать его иконке через параметры в JS. А если текст меняет свой размер при определенном параметре, то нам ещё потребуется и в JS слушать изменение ширины окна.

Видео с примером проблемы
now.mov

В принципе в VKUI уже есть кейсы, где мы завязываемся на изменение ширины в JS для изменения размера иконки, пример по ссылке.

Как можно?

Чтобы можно было переопределять размеры иконок со следующими преимуществами:

  1. Без знания пропорций
  2. Без JS
  3. Изменение размера одним св-ом

во-первых, предлагаю заменить в width и height единицы px на em, а размер задавать через font-size.

  • на примере <Icon24ExternalLinkOutline /> это будет выглядеть так
    <div style="width: 1em; height: 1em; font-size: 24px;">
      <svg width="1em" height="1em" viewBox="0 0 24 24">...</svg>
    </div>
  • на примере <Icon16MoreVertical /> это будет
    <div style="width: 0.5em; height: 1em; font-size: 16px;">
      <svg width="0.5em" height="1em" viewBox="0 0 8 16">...</svg>
    </div>

это будет обратно совместимые изменение.

Во-вторых, добавить параметр fontSize, который принимает все валидные для font-size значения. Это для того, чтобы можно было писать

<Icon24ExternalLinkOutline fontSize="inherit" />

=>

<div style="width: 1em; height: 1em">
  <svg width="1em" height="1em" viewBox="0 0 24 24">...</svg>
</div>

и тогда иконка впишется по размерам в текст, а в компонентах можно будет менять её размер через font-size в CSS.

Видео с примером регулирования размера иконки через font-size
want.mov

Ссылки


Опечатка в Icon16ClockOutline

image

В библиотеке опечатка с иконкой clock размера 16. Вместо outline написано ourline

import Icon16ClockOurline from '@vkontakte/icons/dist/16/clock_ourline';

[enhancement] Добавить иконку

Есть Icon28ThumbsUpOutline, еще к нему хотелось бы Icon28ThumbsUp. Есть конечно Icon24ThumbUp, но это другое.

Пример кейса:
image

Проблема с иконкой часов

Точнее, с иконкой аж две проблемы.

Первая - опечатка в названии иконки - Icon16ClockOurline (очевидно, должно быть Icon16ClockOutline)
Вторая - эта иконка должна быть квадратной (16х16 пикс.), но она почему-то по ширине на один пиксель больше, чем требуется. Пофиксил проблему с помощью margin-right:-1px , но это конечно такое себе решение.

Использую следующие версии библиотек:
@vkontakte/icons - 1.49.0
@vkontakte/vkui - 4.0.8

icon_bug

Сменить классы для иконок

На данный момент у иконки используется класс Icon. Он может перебиваться стилями со страницы. Если уж используется css-modules, то можно использовать какой-то генерированный класс для иконок.

[Feature] Добавить подгруппы иконок с разделением по платформам

Было бы удобно дать возможность добавлять и использовать в библиотеке иконки под отдельные платформы, как сейчас, это сделано в VKUI.

image

К сожалению, на данный момент, для отдельных платформ/сервисов иконки приходится хранить либо в самом проекте, либо устанавливать отдельные дополнительные репозитории с ними. Это ухудшает общую архитектуру проектов, приводит к разным подходам подключения и хранения иконок в них.

React 18 support

Are you planning to bump supported React to v18? Right now you have 16 || 17 in your package.json (package works as expected if I install with --legacy-peer-deps flag)

Улучшить поиск

Иногда необходимо перебирать названия чтобы найти нужную иконку.

Необходимо добавить алиасы для названий иконок и Левенштейна

[Question][Build] С версии `v1.157.0` в бандле теперь есть вызов `makeIcon()`

Описание

Раньше в бандл иконки сразу попадали в "чистую" и вызова makeIcon() в рантайме не происходило. Теперь всё наоборот.

Вопрос

Так и задумано?

Контекст

Версия

v1.157.0 и больше

Скриншоты

image

Рис. 1. До версии v1.157.0

image

Рис. 2. После версии v1.157.0

Вернуть старую галочку верификации VK

Вчера эту иконку убрали и заменили на новую галочку верификации. Новую убирать не нужно, можно, например, вернуть старую иконку галочки VK и назвать, например, old_verified.

Does not work with SSR

import React from 'react';
import Icon from '@vkontakte/icons/dist/36/like';
...
render() {
    ...
    <Icon />
    ...
}

will throw

ReferenceError: document is not defined
    at BrowserSprite._autoConfigure (/Users/markel/Desktop/react-starter-kit/node_modules/svg-baker-runtime/browser-sprite.js:761:43)
    at new BrowserSprite (/Users/markel/Desktop/react-starter-kit/node_modules/svg-baker-runtime/browser-sprite.js:695:12)
....

I haven't got much experience svg-baker-runtime, but I suppose 'svg-baker-runtime/browser-sprite' should be replaced.

For now I can use it like this:

import React from 'react';
import Icon from '@vkontakte/icons/dist/36/like';
...
render() {
    ...
    {typeof window !== 'undefined' && <Icon />}
    ...
}

Ошибки при компиляции React + Vite

Добрый день, все было нормально, пока не установил новую версию vk icon

node_modules/@vkontakte/icons/dist/es6/12/add_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/add_12.js" was ignored.
node_modules/@vkontakte/icons/dist/es6/12/album_filled_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/album_filled_12.js" was ignored.
node_modules/@vkontakte/icons/dist/es6/12/arrow_down_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/arrow_down_12.js" was ignored.
node_modules/@vkontakte/icons/dist/es6/12/arrow_up_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/arrow_up_12.js" was ignored.
node_modules/@vkontakte/icons/dist/es6/12/arrow_down_circle_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/arrow_down_circle_12.js" was ignored.
node_modules/@vkontakte/icons/dist/es6/12/arrow_right_12.js (1:0) Module level directives cause errors when bundled, "use-client" in "node_modules/@vkontakte/icons/dist/es6/12/arrow_right_12.js" was ignored. .... и т д

Я так понял, что в новой версии вы добавили 'use client' для корректного рендера иконок в Next.js 13 React Server Components, это как то влияет на биллинг там где нет Next.js?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.