İş birliği yazılımı · Yeni kaynak

Monday Vibe Tasarım Sistemi.

Vibe 4 tasarım belirteçleri ve React kontrolleriyle çalışan bir teslimat panosu oluşturun. Anlamsal eylem renklerini pano etiketlerinden, adlandırılmış boşluk adımlarını, yazı tipi kısaltmalarını ve yeni bir uygulamanın gerektirdiği açık CSS kurulumundan ayırt edin.

OpenDesign Kılavuzu9 Bölüm49 Başvuru KaydıÖzgün Uygulama Kılavuzu
01

Monday Vibe Tasarım Sistemi Arayüz Önizlemesi

Satır durumunu düzenleyin ve seçili öğeleri tamamlayın; özet sayıları yerel olarak güncellenir.

Haftalık teslimat panosuÖrneğin Tamamını Aç
Doğrulanmış Vibe açık tema paleti, aralıkları ve tipografi ölçülerini kullanan bağımsız HTML/CSS yorumu; sistem yedek yazı tipi. · Uygulama başvurusu
02

Monday Vibe Tasarım Sistemi Tasarım Başvurusu

Vibe 4 herkese açık kaynak kodu ve @vibe/core entegrasyonu. Aşağıdaki değerler, doğrulanmış açık tema ve stil tanımlarıdır; pano etiketi renkleri anlamsal başarı/hata rollerinden farklıdır. Yerel örnekte, uygulamaya ait bir HTML tablo içinde gerçek Vibe Button kontrolleri kullanılır.

Geçerli aralık değişkenleri

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--space-22pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-44pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-88pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-1212pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-1616pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-2020pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-2424pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-3232pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-4040pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-4848pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-6464pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.
--space-8080pxUygulama aralıkları için kullanın; sayısal belirteç adı, kaynaktaki güncel yazımıyla verilmiştir.

Eylem ve yüzey renkleri

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--primary-color#0073ea Birincil eylemler.
--primary-hover-color#0060b9 Üzerine gelindiğinde birincil eylem.
--primary-selected-color#cce5ff Seçili içerik arka planı.
--primary-text-color#323338 Varsayılan, okunabilir metin.
--secondary-text-color#676879 İkincil etiketler.
--primary-background-color#ffffff Ana yüzey.
--allgrey-background-color#f6f7fb Uygulama arka planı.
--ui-border-color#c3c6d4 Kontrol sınırı.
--positive-color#00854d Anlamsal olumlu eylem.
--negative-color#d83a52 Anlamsal olumsuz eylem.

Pano etiketi paleti

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--color-done-green#00c875 Anlamsal olumlu renk değil, kategorik Tamamlandı etiketi.
--color-working_orange#fdab3d Kategorik Devam Ediyor etiketi; tam kaynak adı alt çizgi içerir.
--color-stuck-red#df2f4a Kategorik Takıldı etiketi.
--color-dark_purple#784bd1 Grup kimliği örneği.

Tipografi kısa yazımları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--font-familyFigtree, Roboto, Noto script fallbacks, sans-serifGövde yazı tipi ailesi; yazı tipi dosyaları ayrıca yüklenir.
--title-font-familyPoppins, Roboto, Noto script fallbacks, sans-serifBaşlık yazı tipi ailesi.
--font-h1-medium600 32px/40px; title familyPano başlığı.
--font-h2-medium600 24px/30px; title familyGrup başlığı.
--font-h3-medium600 18px/24px; title familyKompakt alt bölüm.
--font-text1-normal400 16px/22px; body familyNormal içerik.
--font-text2-normal400 14px/20px; body familyYoğun satır içeriği.
--font-text3-normal400 12px/16px; body familyDestekleyici ayrıntı.

Köşeler

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--border-radius-44pxKüçük kontroller.
--border-radius-88pxOrta boy kapsayıcılar.
--border-radius-1212pxKullanılabilir sayısal köşe adımı.
--border-radius-1616pxBüyük kapsayıcılar.
--border-radius-smallvar(--border-radius-4)Adlandırılmış küçük takma ad.
--border-radius-mediumvar(--border-radius-8)Adlandırılmış orta boy takma ad.
--border-radius-bigvar(--border-radius-16)Adlandırılmış büyük takma ad.

Düğme API

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
kindDefault: primaryBu örnekte kullanılan üçüncül eylemler dâhil, görsel vurgu.
sizeDefault: mediumKompakt satır eylemleri için small kullanın.
typeDefault: buttonForm gönderimi için submit değerini açıkça ayarlayın.
disabledbooleanHiç satır seçili olmadığında toplu işlemi devre dışı bırakır.
loadingbooleanGerçek bir bekleyen işlem sırasında yükleme göstergesi gösterir.
activebooleanGörsel etkin durumu belirtir; geçiş denetimi için aria-pressed değerini de kullanın.
onClickReact mouse-event callbackUygulama durumunu burada güncelleyin.
aria-pressedARIA pressed stateDüğme geçişleri kullanıyorsanız satır seçiminin değiştiğini belirtin.
03

Monday Vibe Tasarım Sistemi Eksiksiz Kılavuzu

Bu sistemi gerçek bir arayüz için seçmeye, uygulamaya ve gözden geçirmeye yönelik pratik bir kılavuz.

DESIGN-monday-vibe.md

Eksiksiz yönlendirme, uygulama için başlangıç noktası ve kaynak bağlantıları.

Kılavuzu İndir

Monday Vibe Tasarım Sistemi Güncel Vibe giriş noktalarını kullanarak oluşturun

Temel bileşenler ve belirteç CSS ayrı içe aktarımlardır

Vibe 4, @vibe/core üzerinden adlandırılmış React bileşenlerini; @vibe/core/tokens üzerinden ise CSS değişkenlerini sunar. Yeni bir istemci uygulamasında ikisini de içe aktarın. Bir bileşen, belirteç dosyasının sağladığı değişkenlere bağlı kalırken kendi stillerini ekleyebilir. Pano örneğinde yerel satır verileri ve seçim durumu kullanılır; tablo yapısı yerel HTML öğelerinden, kontroller ise gerçek Vibe Button bileşenlerinden oluşur.

Bu OpenDesign kılavuzundan

Destekleyici belirtimi okuyun

Eski paket nesillerini birlikte kullanmaktan kaçının

Eski monday-ui-react-core paketi Vibe 2'ye aittir. Vibe 3, yeni özellikler yerine kritik düzeltmeler için sürdürülmektedir. Bu kılavuzda güncel Vibe 4 arayüzü ve numaralı aralık değişkenleri kullanılır. Bu entegrasyon, monday.com SDK istemcisi değildir; hesap, çalışma alanı veya öğe API bağlantısı içermez.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Eylem renkleriyle pano etiketleri farklı işlevlere sahiptir

Kontrollerde anlamsal rolleri kullanın

Birincil eylemlerde, eşleşen üzerine gelme rengiyle birlikte birincil rolü kullanın. Seçim için seçili arka planı, normal metinler içinse birincil ve ikincil metin rollerini kullanın. Gövde arka planını tek başına değiştirmek yerine tema değerlerini birbiriyle uyumlu bir bütün olarak kullanın. Bu yerel incelemede doğrulanmış açık tema kullanılır.

Destekleyici belirtimi okuyun

Tamamlandı hücresi, başarı düğmesi değildir

Kaynakta anlamsal geri bildirim renklerinin yanı sıra kategorik pano renkleri de bulunur. Tamamlandı için kullanılan yeşil #00c875, anlamsal olumlu renk olan #00854d'den farklıdır. Satır durumu hücrelerinde pano renklerini, okunaklılığı koruyan karşıt metinlerle birlikte kullanın. Devam Ediyor, Takıldı ve Tamamlandı metinlerini koruyun; durumu yalnızca renkle belirtmeyin.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Tam yazı tipi kısa yazımını kullanın

Başlıklar ve iş satırları farklı bir görsel dile sahiptir

Kaynakta başlıklar için Poppins, gövde içeriği için Figtree; ayrıca betiklere uygun yedek yazı tipleri tanımlanır. Güncel h1-medium kısa yazımı 600 32px/40px, text2-normal ise 400 14px/20px değerlerini kullanır. Kalınlık, boyut, satır yüksekliği ve aile değerlerinin bir arada kalması için kısa yazımı CSS font özelliğiyle uygulayın. Kaynakta eski başlık takma adları da bulunur; bunların farklı ölçeklerini sessizce kullanmayın.

Destekleyici belirtimi okuyun

Yazı tipi dosyalarını bilinçli biçimde yükleyin

Vibe, önerilen yazı tipi dosyalarını sizin için içe aktarmaz. Belgelenmiş Figtree/Poppins stil sayfası bağlantısını uygulamanın HTML öğesine ekleyin veya uygun lisanslı dosyaları kendiniz barındırın. Çevrimdışı örnekte sistem yedek yazı tipleri açıkça kullanılır; bu nedenle görüntüleme, monday.com tipografisinin birebir aynısı olduğu iddiasını taşımaz.

Destekleyici belirtimi okuyun

Monday Vibe tasarım sistemi Kontrolleri sıkıştırmadan kompakt bir pano

Ritmi numaralı aralıklar belirler

Bitişik araç çubuğu eylemleri için --space-8, panel dolgusu için --space-16 ve pano bölgeleri arasındaki boşluk için --space-24 kullanın. Bunlar güncel kaynakta yer alan tam adlardır. Bu yerleşimler uygulama için yapılmış tercihlerdir. Ölçek, hassas hizalama için iki piksellik bir adımın yanı sıra kompozisyon için seksen piksele kadar daha büyük değerler de içerir.

Destekleyici belirtimi okuyun

Köşeler kapsayıcılığı belirler

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Toplu işlem araç çubuğuna sahip düzenlenebilir tablo

Veri yapısını açıkça tanımlayın

Her iş öğesinin sabit bir kimliği, başlığı, sahibi ve durumu vardır. Yerel sütun başlıkları bu değerleri açıklar. Satır onay kutusu kimliği bir Set'e ekler; durum değişikliği diziyi değiştirmek yerine eşleşen nesneyi yenisiyle değiştirir. Seçilenleri tamamla eylemi aynı Set'i okur ve yalnızca seçili satırları günceller. Tamamlanma özeti satırlardaki verilerden türetilir.

  • Seçim Set'i boşken birincil toplu işlem düğmesi devre dışıdır.
  • Satır başına sunulan üçüncül eylem, gösterim amacıyla yerel durumu sırayla değiştirir.
  • Sıfırlama eylemi ilk satırları geri yükler ve seçimi temizler.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Durumu gerçek Button API aracılığıyla belirtin

Devre dışı, yükleniyor ve basılı durumları birbirinden farklıdır

Yerel örnekte, kullanılamayan bir toplu işlem için disabled kullanılır. Uzak bir işlem olmadığından yükleniyor veya başarı durumu gösterilmez. Gerçek bir kalıcı depolama katmanı bağlarsanız yükleniyor durumunu istek yaşam döngüsüne bağlayın ve başarı durumunu yalnızca onay alındıktan sonra güncelleyin. Button kaynağı, görünüm için active ve geçiş denetimi anlamı için aria-pressed özelliklerini de sunar; biri diğerinin yerini tutmaz.

Destekleyici belirtimi okuyun

Yerel düzenlemeleri hizmet iddiasına dönüştürmeyin

Canlı ileti, yerel olarak kaç öğenin değiştiğini söyler. monday.com panosunun güncellendiğini söylemez. Sayfa yeniden yüklendiğinde örnek veriler başlangıç durumuna döner. Üretim ortamında entegrasyon için tasarım sistemi katmanının dışında açık çalışma alanı izinleri, hata yönetimi ve eşitleme gerekir.

Destekleyici belirtimi okuyun

Monday Vibe tasarım sistemi Satır anlamını farklı genişliklerde koruyun

Gösterimi yeniden akışa duyarlı biçimde düzenleyin

Çevrimdışı pano, dar ekranda her satırı etiketli bir öğe kartı olarak gösterir. Sahip ve durum bilgilerinin anlaşılır kalması için sütun adları görünür etiketler olarak yinelenir. Bu, uygulamaya özgü bir yerleşim tercihidir; Vibe'ın her tabloyu otomatik olarak dönüştürdüğü iddiası değildir. Yerel başlangıç şablonu, daha yoğun veriler için alternatif olarak etiketli bir yatay kaydırma alanında anlamsal tabloyu korur.

Destekleyici belirtimi okuyun

Genel kutu boyutlandırması ön koşuldur

Kitaplığı kullanmadan önce öğelere ve sözde öğelere border-box uygulayın. Aksi hâlde, sabit genişlikli bir hücreye eklenen dolgu, özellikle yoğun bir sütunun içine düğme yerleştirildiğinde, hücrenin amaçlanan boyutunu aşabilir. Dış kapsayıcıyı esnek tutun ve araç çubuğundaki eylemlerin alt satıra geçmesine izin verin.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Seçim ve durumun birbirinden bağımsız adları olmalı

Her satır kontrolünü etiketleyin

Bir seçim kutusunun erişilebilir adı, iş öğesinin başlığını içerir. Her durum eyleminin adı, öğe adını ve mevcut durumu da içerir. Kibar bir durum iletisi toplu işlemin sonucunu bildirir. Klavye kullananlar yerel kontrollerle satırları seçebilir, toplu komutu etkinleştirebilir ve panoyu sıfırlayabilir; sayfa, elektronik tabloya özgü ok tuşu davranışları uydurmaz.

  1. Design handoff öğesini seçin ve toplu işlemin kullanılabilir hâle geldiğini doğrulayın.
  2. Seçimi tamamlayın; durum metni ile hesaplanan sayının birbiriyle eşleştiğini kontrol edin.
  3. Sıfırlayın ve hem verilerin hem de onay kutusu seçiminin başlangıç durumuna döndüğünü doğrulayın.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Tam bir istemci tarafı giriş noktası

Yükleme, içe aktarma ve bağlama

Aşağıdaki kurulum, kök öğe içeren bir React istemci projesi için main.jsx giriş noktasıdır. react, react-dom ve @vibe/core@4 paketlerini yükleyin, token CSS değerini bir kez içe aktarın ve listelenen genel stil sayfasını uygulayın. Mevcut paket ES modülü dışa aktarımlarını kullanır. Sunucu tarafında stil çıkarma deneysel olarak belgelenmiştir; bu başlangıç şablonu özellikle istemci tarafında görüntüleme kullanır.

Destekleyici belirtimi okuyun

Monday Vibe Tasarım Sistemi Bileşen Örnekleri

Tamamlanmış, bağımsız ve etkileşimli örnek

Belgenin tamamını index.html adıyla kaydedip tarayıcıda açın. Doğrulanmış Vibe açık tema paleti, boşluk ve tipografi ölçülerini kullanan bağımsız HTML/CSS yorumu; sistem yedek yazı tipi.

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>

Kod referansı

  • Toplu işlem araç çubuğu, örnek görevlerin durumlarını değiştirir. Etiket renkleri bu panonun iş akışını tanımlar; Vibe anlamsal eylem tokenlarının yerine geçmez.

Tam yerel uygulama girişi

Kurulumdan itibaren tam uygulama; odaklanmış API açıklamalarının yanında burada bir araya getirilmiştir. Kurulum bölümünde belgelenen paket ve derleme ön koşullarını izleyin.

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/>);

Kod referansı

  • Eksiksiz yerel pano giriş noktası; bileşen örneğindeki board.css dosyasını ekleyin. Yazı tipleri otomatik olarak pakete dahil edilmez. Yerel API paketi resmî kaynağa göre denetlendi; bu ortamda paket örneği derlenmedi.

Token tabanlı pano stil sayfası

Yerleşim ve tipografi için tokens dışa aktarımını kullanın. Üst bölge, dar genişliklerde anlamsal tablonun kullanılabilir kalmasını sağlar.

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

Kod referansı

  • Bu, gerçek Vibe değişkenlerini kullanan uygulama CSS'dır.
  • Gömülü önizleme, bağımsız ve duyarlı bir HTML yorumudur.

Uygulama HTML içinde yazı tipi yükleme

Önerilen iki yazı tipi ailesini açıkça yükleyin; CSS token içe aktarımı bunları indirmez.

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

Kod referansı

  • Bu harici stil sayfasının yerine lisanslı, kendi sunucunuzda barındırılan bir yazı tipi kurulumu kullanılabilir.
04

Monday Vibe Tasarım Sistemi AI Ajanı Kurulumu

Uygulamaya Başlangıç Noktası

Eksiksiz yerel pano giriş noktası; bileşen örneğindeki board.css dosyasını ekleyin. Yazı tipleri otomatik olarak pakete dahil edilmez. Yerel API paketi resmî kaynağa göre denetlendi; bu ortamda paket örneği derlenmedi.

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/>);

Projeniz İçin Bir İstem

Ajan İstemi
Sağlanan Vibe 4 teslimat panosunu oluşturun. @vibe/core/tokens paketini içe aktarın, güncel numaralı boşluk değişkenlerini ve eksiksiz yazı tipi kısaltmalarını kullanın; anlamsal geri bildirim renklerini pano etiketi renklerinden ayrı tutun. Satır seçimini, durum düzenlemelerini ve türetilmiş tamamlanma sayısını yerel olarak uygulayın. Toplu işlem düğmesinde disabled kullanın; uzaktan kaydetme davranışını taklit etmeyin.
05

Monday Vibe Tasarım Sistemi Kaynakları ve Kapsamı

Bağımsız Vibe 4 referansı ve yerel pano gösterimi. monday.com hesabı, çalışma alanı verisi veya SDK bağlantısı yoktur. Yerel başlangıç şablonu, gerçek Vibe Button kontrollerini ve uygulamanın kendi tablo işaretlemesini kullanır.