Программное обеспечение для совместной работы · Новый ресурс

Дизайн-система Monday Vibe.

Создайте рабочую доску доставки с токенами Vibe 4 и элементами управления React. Разберитесь, чем семантические цвета действий отличаются от меток на доске, изучите именованные шаги отступов и сокращённые записи шрифтов, а также настройте CSS, необходимую новому приложению.

Руководство OpenDesign9 глав49 справочных записейАвторское руководство по приложению
01

Предпросмотр интерфейса дизайн-системы Monday Vibe

Изменяйте статусы строк и завершайте выбранные задачи; сводные счётчики обновляются локально.

Доска задач на неделюОткрыть полный пример
Независимая интерпретация HTML/CSS на основе проверенных параметров палитры светлой темы Vibe, отступов и типографики; системный шрифт в качестве запасного. · Справочник по реализации
02

Справочник по дизайн-системе Monday Vibe

Открытый исходный код Vibe 4 и интеграция с @vibe/core. Ниже приведены проверенные значения светлой темы и определения стилей; цвета меток на доске отличаются от семантических ролей успеха и ошибки. В нативном примере используются настоящие элементы управления Vibe Button внутри таблицы HTML, принадлежащей приложению.

Актуальные переменные отступов

Источник
Название / правилоЗначение / конфигурацияПрименение
--space-22pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-44pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-88pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-1212pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-1616pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-2020pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-2424pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-3232pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-4040pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-4848pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-6464pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.
--space-8080pxИспользуйте для отступов в приложении; числовое имя токена приведено так, как оно указано в актуальном исходном коде.

Цвета действий и поверхностей

Источник
Название / правилоЗначение / конфигурацияПрименение
--primary-color#0073ea Основные действия.
--primary-hover-color#0060b9 Основное действие при наведении.
--primary-selected-color#cce5ff Фон выбранного содержимого.
--primary-text-color#323338 Основной цвет текста для комфортного чтения.
--secondary-text-color#676879 Вторичные подписи.
--primary-background-color#ffffff Основная поверхность.
--allgrey-background-color#f6f7fb Фон приложения.
--ui-border-color#c3c6d4 Граница элемента управления.
--positive-color#00854d Семантический цвет положительного действия.
--negative-color#d83a52 Семантический цвет отрицательного действия.

Палитра меток доски

Источник
Название / правилоЗначение / конфигурацияПрименение
--color-done-green#00c875 Категориальная метка «Готово», а не семантический цвет положительного действия.
--color-working_orange#fdab3d Категориальная метка «В работе»; точное имя в исходном коде содержит подчёркивание.
--color-stuck-red#df2f4a Категориальная метка «Заблокировано».
--color-dark_purple#784bd1 Пример идентификации группы.

Сокращённые записи типографических стилей

Источник
Название / правилоЗначение / конфигурацияПрименение
--font-familyFigtree, Roboto, Noto script fallbacks, sans-serifСемейство шрифта для основного текста; файлы шрифтов устанавливаются отдельно.
--title-font-familyPoppins, Roboto, Noto script fallbacks, sans-serifСемейство шрифта для заголовков.
--font-h1-medium600 32px/40px; title familyЗаголовок доски.
--font-h2-medium600 24px/30px; title familyЗаголовок группы.
--font-h3-medium600 18px/24px; title familyКомпактный подзаголовок.
--font-text1-normal400 16px/22px; body familyОсновной текст.
--font-text2-normal400 14px/20px; body familyТекст плотных строк.
--font-text3-normal400 12px/16px; body familyДополнительная информация.

Скругления

Источник
Название / правилоЗначение / конфигурацияПрименение
--border-radius-44pxНебольшие элементы управления.
--border-radius-88pxКонтейнеры среднего размера.
--border-radius-1212pxДоступный числовой шаг скругления.
--border-radius-1616pxКрупные контейнеры.
--border-radius-smallvar(--border-radius-4)Именованный малый псевдоним.
--border-radius-mediumvar(--border-radius-8)Именованный средний псевдоним.
--border-radius-bigvar(--border-radius-16)Именованный большой псевдоним.

Кнопка API

Источник
Название / правилоЗначение / конфигурацияПрименение
kindDefault: primaryВизуальное выделение, включая третичные действия в этом примере.
sizeDefault: mediumИспользуйте малый размер для компактных действий в строках.
typeDefault: buttonЯвно укажите submit для отправки формы.
disabledbooleanОтключает пакетное действие, если строки не выбраны.
loadingbooleanПоказывает индикатор загрузки во время реальной операции.
activebooleanВизуальное активное состояние; для переключателя также укажите aria-pressed.
onClickReact mouse-event callbackОбновите здесь состояние приложения.
aria-pressedARIA pressed stateЕсли для переключения строк используются кнопки, сообщайте об их состоянии выбора.
03

Полное руководство по дизайн-системе Monday Vibe

Практическое руководство по выбору, применению и оценке этой системы для реального интерфейса.

DESIGN-monday-vibe.md

Подробные рекомендации, отправная точка для реализации и ссылки на источники.

Скачать руководство

Создавайте интерфейс на основе актуальных точек входа Vibe — дизайн-система Monday Vibe

Основные компоненты и токены CSS импортируются отдельно

В Vibe 4 именованные компоненты React доступны через @vibe/core, а переменные CSS — через @vibe/core/tokens. Подключите оба пакета в новом клиентском приложении. Компонент может добавлять собственные стили и при этом использовать переменные из файла токенов. В примере доски используются нативная структура таблицы и настоящие элементы управления Vibe Button, а данные строк и выбор управляются приложением.

Из этого руководства OpenDesign

Прочитать вспомогательную спецификацию

Не смешивайте поколения пакетов

Старый пакет monday-ui-react-core относится к Vibe 2. Для Vibe 3 выпускаются критические исправления, но не новые функции. В этом руководстве рассматривается актуальный интерфейс Vibe 4 и пронумерованные переменные отступов. Интеграция не является клиентом monday.com SDK и не подключается к учётным записям, рабочим пространствам или элементам API.

Прочитать вспомогательную спецификацию

Цвета действий и метки доски выполняют разные функции — дизайн-система Monday Vibe

Используйте семантические роли для элементов управления

Для основных действий используйте основную роль и соответствующий ей цвет при наведении. Для выделения используйте фон выбранного элемента, а для обычного текста — основные и вторичные текстовые роли. Используйте значения темы как согласованный набор, а не меняйте цвет фона страницы отдельно от остальных. В этом локальном примере сохранена проверенная светлая тема.

Прочитать вспомогательную спецификацию

Ячейка «Готово» — не кнопка успешного действия

В исходных данных есть категориальные цвета доски наряду с семантическими цветами обратной связи. Зелёный цвет статуса «Готово» — #00c875, а семантический цвет положительного действия — #00854d. Для ячеек со статусами используются цвета доски и контрастный, хорошо читаемый текст; статусы «В работе», «Заблокировано» и «Готово» обозначены словами, поэтому цвет никогда не служит единственным признаком состояния.

Прочитать вспомогательную спецификацию

Используйте полную сокращённую запись шрифта — дизайн-система Monday Vibe

Для заголовков и рабочих строк предусмотрена разная типографика

В исходных данных для заголовков указан Poppins, а для основного текста — Figtree с резервными шрифтами для разных письменностей. Текущая сокращённая запись h1-medium — 600 32px/40px, а text2-normal — 400 14px/20px. Применяйте сокращённую запись через свойство шрифта CSS, чтобы начертание, размер, высота строки и семейство оставались связанными. В исходных данных также есть устаревшие псевдонимы заголовков; не подменяйте ими стили с другим масштабом без пояснений.

Прочитать вспомогательную спецификацию

Подключайте файлы шрифтов осознанно

Vibe не подключает рекомендованные файлы шрифтов автоматически. Добавьте в приложение HTML документированную ссылку на таблицу стилей Figtree/Poppins или разместите у себя файлы с подходящей лицензией. В автономном примере явно используются системные запасные шрифты, поэтому его отображение — это интерпретация, а не утверждение о точном соответствии типографике monday.com.

Прочитать вспомогательную спецификацию

Компактная доска без уменьшенных элементов управления — дизайн-система Monday Vibe

Ритм задаётся пронумерованными отступами

Используйте --space-8 между соседними действиями на панели инструментов, --space-16 для внутренних отступов панели и --space-24 между разделами доски. Это точные имена из актуального исходного кода. Их расположение — решение, принятое для этого приложения. В шкале также есть шаг в два пикселя для точного выравнивания и более крупные значения — до восьмидесяти пикселей — для композиции.

Прочитать вспомогательную спецификацию

Скругления помогают обозначить границы

Прочитать вспомогательную спецификацию

Редактируемая таблица с панелью пакетных действий — дизайн-система Monday Vibe

Явно задавайте структуру данных

У каждого элемента задачи есть постоянный id, название, владелец и статус. Заголовки столбцов поясняют эти значения. Флажок в строке добавляет id в Set; при изменении статуса нужный объект заменяется, а массив не изменяется напрямую. Действие «Завершить выбранные» использует тот же Set и обновляет только выбранные строки. Сводка выполненных задач формируется на основе строк.

  • Основная кнопка пакетных действий отключена, если Set выбора пуст.
  • Третичное действие в строке циклически меняет локальный статус для демонстрации.
  • Действие сброса восстанавливает исходные строки и очищает выбор.

Прочитать вспомогательную спецификацию

Передавайте состояние через настоящий Button API — дизайн-система Monday Vibe

Состояния «Отключено», «Загрузка» и «Нажато» различаются

В нативном примере свойство disabled отключает недоступное пакетное действие. Состояния загрузки и успеха не показываются, поскольку удалённой операции нет. При подключении реального слоя сохранения связывайте loading с жизненным циклом запроса и обновляйте состояние успеха только после подтверждения. В исходных данных Button также предусмотрено свойство active для оформления и aria-pressed для семантики переключателя; одно не заменяет другое.

Прочитать вспомогательную спецификацию

Не выдавайте локальные изменения за работу сервиса

В актуальном сообщении указано, сколько локальных элементов изменилось. В нём не говорится, что доска monday.com была обновлена. При перезагрузке восстанавливаются исходные демонстрационные данные. Для производственной интеграции потребуется отдельно реализовать разрешения для рабочего пространства, обработку ошибок и синхронизацию за пределами слоя дизайн-системы.

Прочитать вспомогательную спецификацию

Сохраняйте смысл строк при изменении ширины — дизайн-система Monday Vibe

Тщательно перестройте демонстрационный интерфейс

На узком экране автономная доска отображает каждую строку в виде карточки с подписями. Названия столбцов повторяются в виде видимых подписей, чтобы ответственные и статусы оставались понятными. Это решение по компоновке приложения, а не утверждение, что Vibe автоматически преобразует любую таблицу. В стандартном стартовом примере вместо этого используется семантическая таблица в подписанной области с горизонтальной прокруткой — такой вариант подходит для более плотных данных.

Прочитать вспомогательную спецификацию

Глобальная настройка box-sizing — необходимое условие

Перед использованием библиотеки задайте border-box для элементов и псевдоэлементов. Без этого ячейка фиксированной ширины с отступами может превысить заданный размер, особенно если внутри плотного столбца расположена кнопка. Сохраняйте гибкость внешнего контейнера и разрешайте перенос элементов панели инструментов.

Прочитать вспомогательную спецификацию

Дизайн-система Monday Vibe: выбор и статус должны иметь независимые названия

Добавьте подпись каждому элементу управления в строке

Флажок выбора включает название рабочего элемента в доступное имя. Каждое действие для изменения статуса содержит название элемента и его текущий статус. Вежливое сообщение о статусе сообщает результат пакетного действия. Пользователи клавиатуры могут выбирать строки, запускать пакетную команду и сбрасывать доску с помощью стандартных элементов управления; страница не имитирует навигацию по таблице стрелками, как в электронных таблицах.

  1. Выберите «Передача дизайна» и убедитесь, что пакетное действие стало доступным.
  2. Выберите все элементы и проверьте, что текст статуса совпадает с вычисленным количеством.
  3. Сбросьте доску и убедитесь, что данные и флажки выбора вернулись к исходному состоянию.

Прочитать вспомогательную спецификацию

Дизайн-система Monday Vibe: полноценная клиентская точка входа

Установка, импорт, монтирование

Приведённая ниже настройка — точка входа main.jsx для клиентского проекта на React с корневым элементом. Установите react, react-dom и @vibe/core@4, один раз загрузите токен CSS и подключите указанные глобальные стили. В текущем пакете используются экспорты ES-модулей. Извлечение стилей на стороне сервера описано как экспериментальная возможность; в этом стартовом примере используется клиентский рендеринг.

Прочитать вспомогательную спецификацию

Monday Vibe Примеры компонентов дизайн-системы

Полноценный автономный интерактивный пример

Сохраните весь документ как index.html и откройте его в браузере. Независимая интерпретация HTML/CSS с палитрой светлой темы Vibe, размерами интервалов и типографики, проверенными по официальным источникам; системный резервный шрифт.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Weekly delivery — Vibe study</title><style>*{box-sizing:border-box}body{margin:0;background:#f6f7fb;color:#323338;font:14px/20px Arial,sans-serif}button,input{font:inherit}button{cursor:pointer;border:0;border-radius:4px;padding:8px 16px;background:white;color:#323338}button:hover{background:#e7e9ef}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,input:focus-visible{outline:3px solid #0073ea;outline-offset:2px}.shell{display:grid;grid-template-columns:180px minmax(0,1fr);min-height:600px}aside{padding:24px 16px;border-right:1px solid #d0d4e4;background:#fff}.brand{font-size:20px;font-weight:bold;margin-bottom:40px}.brand span{color:#0073ea}aside p{font-size:12px;color:#676879}aside strong{display:block;background:#cce5ff;padding:12px;border-radius:4px;color:#323338}main{padding:32px;min-width:0}h1{font-size:32px;line-height:40px;font-weight:600;margin:0 0 8px}.sub{color:#676879}.overview{margin:24px 0;display:grid;grid-template-columns:1fr 2fr;gap:24px;align-items:center}.count{font-size:32px;line-height:40px}.count small{font-size:14px;color:#676879}.bar{display:flex;border-radius:8px;overflow:hidden;height:16px;background:#e7e9ef}.bar span{transition:width .15s}.legend{display:flex;gap:16px;font-size:12px;margin-top:8px}.legend span:before{content:'●';color:var(--c);margin-right:4px}.tools{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px}.primary{background:#0073ea;color:white}.primary:hover{background:#0060b9}h2{font-size:18px;line-height:24px;color:#784bd1;font-weight:600}.board{border-left:6px solid #784bd1;border-radius:8px;background:white;overflow:hidden}.row,.head{display:grid;grid-template-columns:36px minmax(180px,1fr) 90px 130px;align-items:center;min-height:52px;border-bottom:1px solid #d0d4e4}.head{color:#676879;min-height:36px;font-size:12px}.row>*{padding:12px}.head>*{padding:8px}.row label{display:flex;align-items:center;justify-content:center}.row input{accent-color:#0073ea}.row .status{border-radius:0;height:100%;font-weight:500}.status[data-status=Working]{background:#fdab3d}.status[data-status=Stuck]{background:#df2f4a;color:white}.status[data-status=Done]{background:#00c875}.person{display:inline-flex;align-items:center;gap:8px}.avatar{width:24px;height:24px;border-radius:50%;background:#eceff8;display:inline-grid;place-items:center;font-size:11px}.row.selected{background:#f0f7ff}#message{min-height:24px;margin-top:16px;color:#676879}.mobile-label{display:none}footer{padding:16px 24px;color:#676879;font-size:11px;border-top:1px solid #d0d4e4}@media(max-width:800px){.shell{grid-template-columns:1fr}aside{display:none}main{padding:24px}}@media(max-width:560px){main{padding:16px}.overview{grid-template-columns:1fr;gap:12px}.head{display:none}.row{grid-template-columns:36px 1fr}.row .person,.row .status{grid-column:2}.row .status{margin:0 12px 12px;width:calc(100% - 24px);border-radius:4px}.mobile-label{display:inline;color:#676879;margin-right:8px}.row{padding:8px 0}.legend{flex-wrap:wrap}}</style><div class="shell"><aside><div class="brand"><span>▰</span> workroom</div><p>TEAM WORKSPACE</p><strong>Weekly delivery</strong><p>Sample project<br>No external account</p></aside><main><h1>Weekly delivery</h1><div class="sub">A shared view of the work moving this week.</div><section class="overview" aria-label="Completion summary"><div class="count"><span id="done">1</span><small> / 3 completed</small></div><div><div class="bar" aria-hidden="true"><span id="working-bar" style="background:#fdab3d"></span><span id="stuck-bar" style="background:#df2f4a"></span><span id="done-bar" style="background:#00c875"></span></div><div class="legend"><span style="--c:#fdab3d">Working</span><span style="--c:#df2f4a">Stuck</span><span style="--c:#00c875">Done</span></div></div></section><div class="tools"><button class="primary" id="complete" disabled>Complete selected</button><button id="reset">Reset board</button><span id="selection" style="padding:8px;color:#676879">0 selected</span></div><h2>▼ This week</h2><div class="board"><div class="head" aria-hidden="true"><span></span><span>Item</span><span>Owner</span><span>Status</span></div><div id="rows"></div></div><p id="message" role="status">Select items or click a status to change it locally.</p></main></div><footer>Independent Vibe 4 HTML/CSS study. Published light-theme and board-label colors; system fallback fonts. No monday.com workspace connection.</footer><script>
const initial=[{id:1,title:'Design handoff',owner:'Maya',status:'Working'},{id:2,title:'Accessibility review',owner:'Theo',status:'Stuck'},{id:3,title:'Release notes',owner:'Sam',status:'Done'}],states=['Working','Stuck','Done'];let items=structuredClone(initial),selection=new Set();const $=id=>document.getElementById(id);function totals(){$('done').textContent=items.filter(x=>x.status==='Done').length;for(const state of states)$(state.toLowerCase()+'-bar').style.width=items.filter(x=>x.status===state).length/items.length*100+'%';$('complete').disabled=!selection.size;$('selection').textContent=selection.size+' selected'}function render(){$('rows').replaceChildren();for(const item of items){const row=document.createElement('div');row.className='row'+(selection.has(item.id)?' selected':'');const label=document.createElement('label'),check=document.createElement('input');check.type='checkbox';check.checked=selection.has(item.id);check.setAttribute('aria-label','Select '+item.title);check.onchange=()=>{check.checked?selection.add(item.id):selection.delete(item.id);row.classList.toggle('selected',check.checked);totals()};label.append(check);const name=document.createElement('span');name.textContent=item.title;const person=document.createElement('span');person.className='person';const av=document.createElement('span');av.className='avatar';av.setAttribute('aria-hidden','true');av.textContent=item.owner[0];const pl=document.createElement('span');pl.className='mobile-label';pl.textContent='Owner';person.append(pl,av,document.createTextNode(item.owner));const status=document.createElement('button');status.className='status';status.dataset.status=item.status;status.textContent=item.status;status.setAttribute('aria-label',item.title+': '+item.status+'. Change status');status.onclick=()=>{item.status=states[(states.indexOf(item.status)+1)%states.length];status.dataset.status=item.status;status.textContent=item.status;status.setAttribute('aria-label',item.title+': '+item.status+'. Change status');totals();$('message').textContent=item.title+' is now '+item.status+' locally.'};row.append(label,name,person,status);$('rows').append(row)}totals()}
$('complete').onclick=()=>{let n=selection.size;items.forEach(x=>{if(selection.has(x.id))x.status='Done'});selection.clear();render();$('message').textContent=n+' local items completed.'};$('reset').onclick=()=>{items=structuredClone(initial);selection.clear();render();$('message').textContent='Board reset.'};render();
</script></html>

Справочник по коду

  • Панель пакетных действий меняет статусы демонстрационных задач. Цвета меток описывают рабочий процесс этой доски и не заменяют семантические токены действий Vibe.

Полный пример нативной реализации

Полная реализация из раздела настройки собрана здесь вместе с пояснениями к отдельным частям API. Следуйте документированным требованиям к пакетам и сборке из раздела настройки.

jsx
// npm install react react-dom @vibe/core@4
// main.jsx in a client React project with <div id="root"></div>
import React, { useState } from 'react';
import { createRoot } from 'react-dom/client';
import { Button } from '@vibe/core';
import '@vibe/core/tokens';
import './board.css';
const initial=[{id:1,title:'Design handoff',owner:'Maya',status:'Working'},
{id:2,title:'Accessibility review',owner:'Theo',status:'Stuck'},
{id:3,title:'Release notes',owner:'Sam',status:'Done'}];
const states=['Working','Stuck','Done'];
function Board(){
 const [items,setItems]=useState(initial),[selected,setSelected]=useState(new Set()),[message,setMessage]=useState('');
 const toggle=id=>setSelected(old=>{const next=new Set(old);next.has(id)?next.delete(id):next.add(id);return next});
 const complete=()=>{setItems(old=>old.map(item=>selected.has(item.id)?{...item,status:'Done'}:item));setMessage(selected.size+' local items completed');setSelected(new Set())};
 return <main className="board"><h1>Weekly delivery</h1>
 <p>{items.filter(x=>x.status==='Done').length} of {items.length} items completed</p>
 <div className="toolbar"><Button disabled={!selected.size} onClick={complete}>Complete selected</Button>
 <Button kind="tertiary" onClick={()=>{setItems(initial);setSelected(new Set());setMessage('Board reset')}}>Reset</Button></div>
 <div className="table-scroll" role="region" aria-label="Delivery items" tabIndex={0}>
 <table><thead><tr><th>Select</th><th>Item</th><th>Owner</th><th>Status</th></tr></thead><tbody>
 {items.map(item=><tr key={item.id}><td><input type="checkbox" aria-label={'Select '+item.title} checked={selected.has(item.id)} onChange={()=>toggle(item.id)}/></td>
 <th scope="row">{item.title}</th><td>{item.owner}</td><td><Button kind="tertiary" size="small" aria-label={item.title+': '+item.status+'. Change status'} onClick={()=>setItems(old=>old.map(x=>x.id===item.id?{...x,status:states[(states.indexOf(x.status)+1)%states.length]}:x))}>{item.status}</Button></td></tr>)}
 </tbody></table></div><p role="status">{message}</p></main>
}
createRoot(document.getElementById('root')).render(<Board/>);

Справочник по коду

  • Полноценная локальная точка входа для доски; добавьте board.css из примера компонента. Шрифты не включаются в комплект автоматически. Нативный пакет API проверен по официальному источнику; в этой среде пример пакета не компилировался.

Стили доски на основе токенов

Используйте экспорт tokens для компоновки и типографики. Внешняя область сохраняет возможность работать с семантической таблицей на узких экранах.

css
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--allgrey-background-color);color:var(--primary-text-color);font:var(--font-text2-normal)}
.board{max-width:960px;margin:auto;padding:var(--space-24)}
h1{font:var(--font-h1-medium)}
.toolbar{display:flex;flex-wrap:wrap;gap:var(--space-8);margin-bottom:var(--space-16)}
.table-scroll{overflow:auto;border:1px solid var(--layout-border-color);border-radius:var(--border-radius-medium)}
table{width:100%;min-width:560px;border-collapse:collapse;background:var(--primary-background-color)}
th,td{text-align:left;padding:var(--space-12);border-bottom:1px solid var(--layout-border-color)}

Справочник по коду

  • Это приложение на CSS с реальными переменными Vibe.
  • Встроенный предпросмотр использует независимую адаптивную интерпретацию HTML.

Загрузка шрифтов в приложении HTML

Подключите обе рекомендованные гарнитуры явно: импорт токенов CSS их не загружает.

html
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Figtree:wght@400;500;600;700&family=Poppins:wght@400;500;600;700&display=swap">

Справочник по коду

  • Вместо этой внешней таблицы стилей можно настроить лицензированный шрифт с самостоятельным размещением.
04

Monday Vibe Настройка AI-агента для дизайн-системы

Отправная точка для реализации

Полноценная локальная точка входа для доски; добавьте board.css из примера компонента. Шрифты не включаются в комплект автоматически. Нативный пакет API проверен по официальному источнику; в этой среде пример пакета не компилировался.

jsx
// npm install react react-dom @vibe/core@4
// main.jsx in a client React project with <div id="root"></div>
import React, { useState } from 'react';
import { createRoot } from 'react-dom/client';
import { Button } from '@vibe/core';
import '@vibe/core/tokens';
import './board.css';
const initial=[{id:1,title:'Design handoff',owner:'Maya',status:'Working'},
{id:2,title:'Accessibility review',owner:'Theo',status:'Stuck'},
{id:3,title:'Release notes',owner:'Sam',status:'Done'}];
const states=['Working','Stuck','Done'];
function Board(){
 const [items,setItems]=useState(initial),[selected,setSelected]=useState(new Set()),[message,setMessage]=useState('');
 const toggle=id=>setSelected(old=>{const next=new Set(old);next.has(id)?next.delete(id):next.add(id);return next});
 const complete=()=>{setItems(old=>old.map(item=>selected.has(item.id)?{...item,status:'Done'}:item));setMessage(selected.size+' local items completed');setSelected(new Set())};
 return <main className="board"><h1>Weekly delivery</h1>
 <p>{items.filter(x=>x.status==='Done').length} of {items.length} items completed</p>
 <div className="toolbar"><Button disabled={!selected.size} onClick={complete}>Complete selected</Button>
 <Button kind="tertiary" onClick={()=>{setItems(initial);setSelected(new Set());setMessage('Board reset')}}>Reset</Button></div>
 <div className="table-scroll" role="region" aria-label="Delivery items" tabIndex={0}>
 <table><thead><tr><th>Select</th><th>Item</th><th>Owner</th><th>Status</th></tr></thead><tbody>
 {items.map(item=><tr key={item.id}><td><input type="checkbox" aria-label={'Select '+item.title} checked={selected.has(item.id)} onChange={()=>toggle(item.id)}/></td>
 <th scope="row">{item.title}</th><td>{item.owner}</td><td><Button kind="tertiary" size="small" aria-label={item.title+': '+item.status+'. Change status'} onClick={()=>setItems(old=>old.map(x=>x.id===item.id?{...x,status:states[(states.indexOf(x.status)+1)%states.length]}:x))}>{item.status}</Button></td></tr>)}
 </tbody></table></div><p role="status">{message}</p></main>
}
createRoot(document.getElementById('root')).render(<Board/>);

Запрос для вашего проекта

Промпт для AI-агента
Создайте указанную доску поставки Vibe 4. Импортируйте @vibe/core/tokens, используйте актуальные переменные нумерованных интервалов и полные сокращённые записи шрифтов; не смешивайте семантические цвета обратной связи с цветами меток доски. Реализуйте локальный выбор строк, изменение статусов и вычисление количества выполненных задач. Используйте disabled для кнопки пакетного действия; не имитируйте удалённое сохранение.
05

Monday Vibe Источники и границы применимости дизайн-системы

Независимый справочник по Vibe 4 и демонстрация локальной доски. Нет подключения к аккаунту monday.com, данным рабочего пространства или SDK. В стандартном стартовом примере используются реальные элементы управления Vibe Button и разметка таблицы, принадлежащая приложению.