<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Максим Петров: заметки с тегом Blazor</title>
<link>https://maximpetrov.ru/blog/tags/blazor-2/</link>
<description>UI/UX-дизайнер</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.2 (v4116e)</generator>

<itunes:owner>
<itunes:name></itunes:name>
<itunes:email>mail@maximpetrov.ru</itunes:email>
</itunes:owner>
<itunes:subtitle>UI/UX-дизайнер</itunes:subtitle>
<itunes:image href="https://maximpetrov.ru/blog/pictures/userpic/userpic-square@2x.jpg?1711785590" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Дизайн-система Blazor</title>
<guid isPermaLink="false">5</guid>
<link>https://maximpetrov.ru/blog/all/blazor/</link>
<pubDate>Mon, 25 Mar 2024 20:30:02 +0400</pubDate>
<author></author>
<comments>https://maximpetrov.ru/blog/all/blazor/</comments>
<description>
&lt;p&gt;DevExpress Blazor — это набор компонентов пользовательского интерфейса. Активно применяется в приложениях на платформе Blazor и предлагает мощный набор компонентов: таблицы данных, календари, планировщики, выпадающие списки, диалоговые окна и многие другие.&lt;/p&gt;
&lt;p&gt;Задача — переосмыслить и создать дизайн-систему в Figma на основе существующих артефактов и наработок.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-1.png" srcset="/images/blog/1x/blazor-1.png 1x, /images/blog/2x/blazor-1@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Вводные&lt;/h2&gt;
&lt;p&gt;Blazor продукт развивался и вместе с этим росло количество и сложность компонентов. Раньше дизайнер рисовал отдельный макет под каждую задачу. Не было системного подхода и единых правил. Со временем этот подход начал приносить проблемы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Разработка начала сильно обгонять дизайн.&lt;/li&gt;
&lt;li&gt;Многие решения по краевым сценариям стали приниматься разработчиками.&lt;/li&gt;
&lt;li&gt;Дизайнер тратил много времени на поиск UI и UX багов на поздних этапах.&lt;/li&gt;
&lt;li&gt;Итоговая фича могла сильно отличаться от нарисованного макета.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Отдельной проблемой была сложность каждого компонента:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Разные темы&lt;/b&gt;. В разных темах компонент не только меняет цвет, но и начинает обладать другими визуальными свойствами.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Несколько размеров&lt;/b&gt;. Каждый компонент линейки представлен в трёх размерах.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Дополнительные стили&lt;/b&gt;. Большой набор стилистических вариантов для компонентов-атомов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Например, одна только кнопка состоит из 150 вариантов компонента:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-2.png" srcset="/images/blog/1x/blazor-2.png 1x, /images/blog/2x/blazor-2@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Было принято решение менять подход — разработать стандарты, правила постановки задач и проектирования.&lt;/p&gt;
&lt;h2&gt;Задачи&lt;/h2&gt;
&lt;p&gt;Перед новой дизайн-системой поставили следующие задачи:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Оптимизация работы команды на этапах дизайна и разработки.&lt;/b&gt;&lt;br /&gt;
Раньше, эти процессы были довольно хаотичны. Дизайнер брал в задачу в работу и изображал примерную реализацию компонента. Многие краевые сценарии не учитывались. Какие-то решения в процессе разработки менялись на ходу. В итоге, разработка затягивалась, фичи резались и итоговый результат сильно отличался от исходной картинки.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Автоматизация и консистентность&lt;/b&gt;.&lt;br /&gt;
Большой размер и сложность компонентов сильно затрудняли внесение любых изменений в дизайн. Даже небольшие стилистические изменения в базовом компоненте, типа кнопки, приводили к огромному количеству работы со стороны дизайнера. Так как нужно было учесть разные темы, размеры и стили.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Консистентность цвета&lt;/b&gt;.&lt;br /&gt;
Отдельно стоит отметить проблему с цветом. Многие цвета компонентов в коде рассчитывались с помощью миксинов. Это приводило ко многим проблемам, в том числе, проблемам с контрастностью.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Доступность.&lt;/b&gt;&lt;br /&gt;
Пользователи продукта стали всё чаще интересоваться, насколько компоненты доступны для разных категорий пользователей. Нужно было сформировать подход, когда дизайнер на этапе проработки компонента учитывает все WCAG 2.2 AA требования.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Централизация знаний.&lt;/b&gt;&lt;br /&gt;
Многие знания о тех или иных дизайн-решениях нигде не фиксировались. Единственным источником знания были участвующие в работе на фичей члены команды. Нужно было сформировать систему документации.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UI Kit.&lt;/b&gt;&lt;br /&gt;
Всё чаще стали приходить запросы на UI Kit от пользователей. К тому же, это уже давно было у конкурентов.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Результат&lt;/h2&gt;
&lt;h3&gt;Компоненты в Figma переработаны с нуля&lt;/h3&gt;
&lt;p&gt;Дизайн компонентов теперь полностью повторяет функционал кодовой реализации. Учтены все редкие сценарии и краевые состояния. Перед отрисовкой каждого компоненты изучались спецификация+API компонента и все сценарии его использования.&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Пример реализации компонента Grid&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Компонент Grid — один из самых больших и популярных в линейке Blazor. Представляет собой решение для отображения данных в табличном формате. Включает множество функций для управления данными. Например: фильтрация, группировка, пагинация, сортировка и многое другое.&lt;/p&gt;
&lt;p&gt;Основную сложность представляет его размер:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-3.png" srcset="/images/blog/1x/blazor-3.png 1x, /images/blog/2x/blazor-3@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Компонент достаточно гибок в настройке. Так как пользователи используют его по-разному. Всё это отражено в дизайне.&lt;/p&gt;
&lt;p&gt;Чтобы отрисовать такой компонент в Figma, задачу разбили на этапе:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Изучить решения конкурентов.&lt;/li&gt;
&lt;li&gt;Изучить и собрать файл со скриншотами всех состояний компонента.&lt;/li&gt;
&lt;li&gt;Собрать все под-компоненты.&lt;/li&gt;
&lt;li&gt;Собрать итоговый компонент с разными сценариями использования.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собранный в Figma компонент сильно упростил разработку новых фич для грида. Также, упростило создание прототипов для проработки различных сценариев.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-4.png" srcset="/images/blog/1x/blazor-4.png 1x, /images/blog/2x/blazor-4@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Отрисованы новые компоненты&lt;/h3&gt;
&lt;p&gt;Создание новых компонентов включает следующие шаги:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обсудить требования с ПМом.&lt;/li&gt;
&lt;li&gt;Исследовать решения на рынке.&lt;/li&gt;
&lt;li&gt;Утвердить список фич.&lt;/li&gt;
&lt;li&gt;Найти грамотный подход по клавиатурной навигации (поддержка A11Y).&lt;/li&gt;
&lt;li&gt;Отрисовать компонент и все его составляющие.&lt;/li&gt;
&lt;li&gt;Описать компонент в дизайн-токенах.&lt;/li&gt;
&lt;li&gt;Проработать сценарии для демо-стендов.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;b&gt;Пример реализации компонента TreeList&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Компонент TreeList — показывает табличные данные в виде древовидной структуры. Пользователи могут сворачивать и разворачивать данные, как им удобно.&lt;/p&gt;
&lt;p&gt;При подготовке к работе был произведен ресёрч конкурентов, собран список идей и их примерные способы реализации. На каждом этапе приходили синхронизационные встречи с менеджером продукта, разработчиками и другими заинтересованными лицами:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-5.png" srcset="/images/blog/1x/blazor-5.png 1x, /images/blog/2x/blazor-5@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Собранный в Figma компонент учитывает все сценарии использовании и состоянии:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-6.png" srcset="/images/blog/1x/blazor-6.png 1x, /images/blog/2x/blazor-6@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;b&gt;Токенизация&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;Каждый компонент представлен в разных темах. Руками отрисовать или исправлять компонент в каждой теме очень дорого и ресурсозатратно.&lt;/p&gt;
&lt;p&gt;Было принято решение использовать дизайн-токены:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Чтобы быстро обновлять стили компонента под любую тему.&lt;/li&gt;
&lt;li&gt;Гарантировать единообразие решений.&lt;/li&gt;
&lt;li&gt;Использовать токены как мостик между дизайном и разработкой.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Была проведена большая работа над созданием архитектуры и структуры дизайн-токенов:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-7.png" srcset="/images/blog/1x/blazor-7.png 1x, /images/blog/2x/blazor-7@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Каждый компонент имеет полное покрытие токенами:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;color,&lt;/li&gt;
&lt;li&gt;font-weight,&lt;/li&gt;
&lt;li&gt;letter-spacing,&lt;/li&gt;
&lt;li&gt;line-height,&lt;/li&gt;
&lt;li&gt;border-radius,&lt;/li&gt;
&lt;li&gt;border-width,&lt;/li&gt;
&lt;li&gt;font-size,&lt;/li&gt;
&lt;li&gt;text-transform,&lt;/li&gt;
&lt;li&gt;opacity,&lt;/li&gt;
&lt;li&gt;box-shadow,&lt;/li&gt;
&lt;li&gt;size.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Такой подход позволяет быстро создавать новые темы, просто выставляя новые значения в токенах. Для работы использовался плагин Tokens Studio for Figma. Потому что он позволяет покрыть большое количество типов токенов, в отличии от встроенного Figma Variables.&lt;/p&gt;
&lt;p&gt;В итоге, любой компонент в Figma легко протестировать с другими стилистическими настройками. А разработчики могут передавать значения токенов из Figma напрямую в свои стили.&lt;/p&gt;
&lt;h2&gt;&lt;b&gt;Документирование&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;Дизайн-система описывает себя тремя основными способами:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Компоненты и сценарии в Figma.&lt;/b&gt; Главная точка входа в дизайн-систему.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Дизайн-токены.&lt;/b&gt; Служат мостом между дизайном и кодом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Внутренняя документация.&lt;/b&gt; Содержит договоренности и рекомендации по разным аспектам дизайна: правила наименования, структура токенов, правила отрисовки иконок и так далее. Тут же можно найти результаты ресёрчей относящихся к различным дизайн-задачам.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;b&gt;UI Kit&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;Одним из результатов работы над дизайн-системой стал выпуск UI кита в Figma.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://maximpetrov.ru/blog/pictures/empty-image.jpg" width="2560" height="10" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;img src="/images/blog/1x/blazor-8.png" srcset="/images/blog/1x/blazor-8.png 1x, /images/blog/2x/blazor-8@2x.png 2x" class="img-fluid"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;b&gt;Результаты&lt;/b&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Получилось собрать крепкий каркас дизайн-системы в Figma.&lt;/li&gt;
&lt;li&gt;Сильно улучшилась коммуникация дизайна и продукт-менеджеров.
&lt;ul&gt;
  &lt;li&gt;Появились еженедельные созвоны с продукт-менеджерами.&lt;/li&gt;
  &lt;li&gt;Работа над задачами стала идти быстрее, на всех этапах.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Работа между дизайном и разработкой стала эффективнее.
&lt;ul&gt;
  &lt;li&gt;Макеты стали намного подробнее.&lt;/li&gt;
  &lt;li&gt;Дополнительный слой информации передают дизайн-токены.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Появилась внутренняя документация.&lt;/li&gt;
&lt;li&gt;Пользователи получили UI kit.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>


</channel>
</rss>