Tipografi
Display: Oswald, Body: Inter, Mono: JetBrains Mono. Heading'ler için .ui-h1....ui-h4, eyebrow için .ui-eyebrow.
Bölüm Başlığı
Şehir bir hikayedir.
Başlık seviye 2
Başlık seviye 3
Caps Letter — Etiket Tarzı
Bu bir gövde paragrafıdır. Inter, modern, geniş çaplı, web için optimize edilmiş bir font. Türkçe karakterler (ç, ş, ğ, ü, ö, ı, İ) çok temiz görünür.
// Bu mono. JetBrains Mono — kod ve sayısal veri için.
Soluk metin — yardımcı bilgiler için.
Butonlar
5 variant + outline + ghost + 3 boyut. data-icon ile FA ikonu, data-ui-ajax ile otomatik loading state.
Variants
HTML
<button class="ui-btn ui-btn-confirm" data-icon="fa-solid fa-check"> Onayla</button> <button class="ui-btn ui-btn-error" data-icon="fa-solid fa-trash"> Error</button>
Outline
Ghost & Sizes
AjaxButton — otomatik loading state
Tıkla → 1.5sn'lik sahte istek. Buton disable + spinner + text "Kaydediliyor..." olur, finally orijinaline döner.
JS — manuel kontrol
const btn = document.getElementById('fakeAjaxBtn');
btn.addEventListener('click', () => {
DuckUI.Button.withLoading(btn, async () => {
await new Promise(r => setTimeout(r, 1500));
});
}); Modals
Promise tabanlı API. DuckUI.confirm({...}).then(yes => ...) şeklinde kullan. Backdrop tıkla / Esc → false döner.
5 Variant
JS — Promise API
// confirm — true/false döner
const yes = await DuckUI.confirm({
title: 'Silmek istediğine emin misin?',
body: 'Bu işlem geri alınamaz.',
okText: 'Evet, sil', cancelText: 'Vazgeç',
variant: 'error'
});
if (yes) { /* ... */ }
// alert/info/success/error — sadece OK
await DuckUI.success({ title: 'Başarılı', body: 'Kaydedildi.' }); Custom modal — kendi içeriğin
Cards
Hover'da translate + shadow. .ui-card-hover veya <a class="ui-card"> ile etkileşimli.
Basic
Alerts
Sayfa içinde inline mesaj. Toast değil — kalıcı.
Masked Inputs
data-ui-mask="date | currency | km | plate-tr | custom". Custom için data-ui-pattern="^[A-Z]{3}\d{4}$" regex verebilirsin.
5 mask tipi
^TR\d{0,24}$HTML
<input class="ui-input" data-ui-mask="date" />
<input class="ui-input" data-ui-mask="currency" />
<input class="ui-input" data-ui-mask="plate-tr" />
<input class="ui-input" data-ui-mask="km" />
<input class="ui-input" data-ui-mask="custom" data-ui-pattern="^TR\d{0,24}$" /> Select (single + multi)
Native <select data-ui-select> üzerinden enhance. Search, keyboard nav (↑↓ Enter Esc), tag chips, programmatic erişim — hepsi dahil. Form submit'inde native select aynı şekilde çalışır.
Single
Multi (chip / tag rendering)
HTML
<select data-ui-select multiple data-ui-placeholder="Etiket ekle…">
<option value="urgent">Acil</option>
<option value="dev" selected>Geliştirme</option>
...
</select> File Upload
data-ui-upload + data-ui-preview="thumbnail | iframe | row". Drag-drop alanı, çoklu dosya, X ile sil, image için thumbnail, PDF için iframe.
Image upload (thumbnail grid)
File upload (satır listesi)
PDF preview (iframe — sadece son seçilen)
PDF seçildiğinde alt kısımda 480px iframe önizlemesi görünür.Tables (CRUD)
.ui-table + sortable header + search + pagination + inline edit + row actions. Cell tıkla → input olur, Enter/blur kaydet, Esc vazgeç.
Sortable + Search + Pagination
| Ad Soyad | Şehir | Bakiye | Durum | |
|---|---|---|---|---|
| Ali Veli | ali@example.com | İstanbul | 1.250,50 ₺ | aktif |
| Ayşe Yılmaz | ayse@example.com | Ankara | 3.450,00 ₺ | aktif |
| Mehmet Demir | mehmet@example.com | İzmir | 0,00 ₺ | beklemede |
| Fatma Şahin | fatma@example.com | Bursa | 780,25 ₺ | aktif |
| Hasan Kaya | hasan@example.com | Antalya | -420,00 ₺ | borçlu |
| Zeynep Akın | zeynep@example.com | Adana | 9.200,00 ₺ | aktif |
| Murat Polat | murat@example.com | Konya | 150,75 ₺ | beklemede |
| Selin Çetin | selin@example.com | Eskişehir | 2.100,00 ₺ | aktif |
| Emre Aydın | emre@example.com | Trabzon | 500,00 ₺ | aktif |
| Burcu Ergin | burcu@example.com | Diyarbakır | 0,00 ₺ | pasif |
| Onur Yıldız | onur@example.com | Mersin | 3.300,00 ₺ | aktif |
| Deniz Sezer | deniz@example.com | Gaziantep | 640,00 ₺ | aktif |
Inline Edit (cell tıkla → düzenle, Enter kaydet)
data-ui-save="/api/url" ile sunucuya POST eder. Bu demo URL'siz — sadece görsel commit + flash.
| Ürün | Stok | Birim Fiyat | Açıklama |
|---|---|---|---|
| Vidalı Cıvata M8 | 245 | 12,50 ₺ | Galvanizli, paket: 100 adet |
| Somun M8 | 410 | 3,20 ₺ | Standart altı köşe |
| Pul M8 | 820 | 0,80 ₺ | Düz pul, çelik |
Row Actions (edit / delete)
| ID | Ad | Tarih | Durum | Eylem |
|---|---|---|---|---|
| #1001 | Sipariş #A001 | 2026-04-22 | hazırlanıyor | |
| #1002 | Sipariş #A002 | 2026-04-23 | tamamlandı | |
| #1003 | Sipariş #A003 | 2026-04-24 | beklemede |
JS — silme butonuna confirm modal bağlama
document.querySelectorAll('[data-row-action="delete"]').forEach(btn => {
btn.addEventListener('click', async () => {
const yes = await DuckUI.confirm({
title: 'Silmek istediğine emin misin?',
variant: 'error', okText: 'Sil', okVariant: 'error'
});
if (yes) btn.closest('tr').remove();
});
}); Toggle Buttons
Switch (boolean), button group (single/multi state). ui:toggle ve ui:switch custom event'leriyle dinleyebilirsin.
Switch (boolean)
Button group — single state (radyo gibi)
Aktif: grid
Button group — multi state (checkbox gibi)
Seçili izinler: read, write
Pill variant
Tooltip
Herhangi bir element'e data-ui-title="..." ekle — hover'da popup görünür. Mobile'da tap. Position auto-flip (ekranda yer yoksa otomatik diğer tarafa).
Hover / focus'ta göster
HTML
<button data-ui-title="Bu kayıt arşive taşınır.">Arşivle</button> <button data-ui-title="Yardım metni." data-ui-title-pos="bottom">Bilgi</button>
Rich content (HTML body)
data-ui-title-html ile HTML içerik gösterebilirsin — başlık, kod, link.
Date Picker
data-ui-date ile takvim popup. TR formatı (gg.aa.yyyy), ay/yıl navigation, "Bugün" + "Temizle" kısayolları, min/max destekli.
3 örnek
HTML + Event
<input data-ui-date placeholder="gg.aa.yyyy" />
<input data-ui-date data-ui-min="2026-01-01" data-ui-max="2026-12-31" />
input.addEventListener('ui:date-change', e => {
console.log(e.detail.date, e.detail.iso);
}); Draggable Panel
.ui-panel + data-ui-panel="id" = sürüklenebilir, daraltılabilir, konumu localStorage'da saklı (sayfayı yenile, panel aynı yerde).
2 panel — head'i tut sürükle
Sayfayı kaydır + paneli sürükle + bırak. F5 → konum hatırlanır. Sıfırlamak için panel head sağındaki ↻ butonuna tıkla.
Bu panel sürüklenebilir.
HTML
<div class="ui-panel" data-ui-panel="my-tools">
<div class="ui-panel-head">
<span class="ui-panel-title">Tools</span>
</div>
<div class="ui-panel-body">
...
</div>
</div> Layout Şablonları
Sık kullanılan sayfa iskeletleri tek-kullanımlık CSS class'ları olarak. Hepsi composable; istediğin gibi nest edebilirsin.
Stat cards (KPI tile)
Toolbar
Section card (titled card)
Gelir Grafiği Son 30 gün
Henüz veri yok
İlk işlemini yaptığında grafikler burada belirir.
Wizard (step indicator + content)
Adım 1
Hesap bilgileri
Adım 2
Profil tercihleri
Adım 3
Ödeme yöntemi
Adım 4
Onay
Adım 3 / 4
Ödeme yöntemini seç
Aboneliğin için varsayılan ödeme aracı.
Split (iki kolon)
Listele
- Madde A
- Madde B (seçili)
- Madde C
- Madde D
Detay panel
Sol listeden bir madde seçince burada detay görünür. .ui-split-3070 sol %30, sağ %70 verir; .ui-split %50/%50, .ui-split-7030 tam tersi.
Shell (sidebar + topbar + main) — mini önizleme
Ana içerik burada — dashboard, formlar, tablolar...
PWA (Progressive Web App)
Tek satır DuckUI.PWA.register() → service worker + manifest + install prompt. Bu demo sayfası şu anda installable (Chrome/Edge → adres çubuğu sağında install ikonu).
Install butonu (otomatik gösterilir)
Buton sadece tarayıcı beforeinstallprompt event'i verince görünür hale gelir. iOS Safari API'yi desteklemediği için manuel "Add to Home Screen" gerekir.
Bağımsız mod (standalone) tespiti
Service worker
Strateji: /uikit/* → cache-first, /UiKit HTML → network-first. Kapatınca / offline'a geçince son ziyaret edilen sürüm açılır.
Tabs
Yatay veya dikey. data-ui-tabs attribute auto-init eder. Klavye: ←/→ · Home/End. ARIA full.
Yatay tabs
Dikey tabs
Accordion
Tek seferde tek panel (default) veya çoklu (data-multi="1"). ARIA aria-expanded + aria-controls otomatik.
Single (radio)
data-ui-* attribute API'si. Sayfa yüklenince auto-init eder, ek konfig gerekmez. html[data-theme="dark"] ile dark mode aktif olur. Tüm renkler CSS değişkeni. Multi (checkbox)
Skeleton Loader
Veri yüklenmeden önce boyut sabitleyici placeholder. Shimmer animasyonu otomatik; prefers-reduced-motion ile durur.
Kart placeholder
Progress Bar
Determinate (style="width: X%") veya indeterminate (.is-indeterminate).
Avatar
İmaj veya initials. 5 boyut (xs/sm/md/lg/xl), 6 otomatik renk.
Boyutlar
Avatar group
Kare varyant + image
Breadcrumb
Hiyerarşik navigasyon. aria-current="page" son adımda.
Form Validation States
.is-valid / .is-invalid input ve field'a uygulanır. Field-level invalid help-text'i otomatik gizler, hata mesajı gösterir.
Format doğru
Eposta adresi girin (yardım metni).
Geçerli bir e-posta adresi değil
Form kayıtlanana kadar nötr kalır.
Dark Mode
html[data-theme="dark"] ile aktif. localStorage persist + sistem prefers-color-scheme default. Sağ üstteki ile değiştir.
Aktif tema: …
Sortable (Drag & Drop)
Native HTML5 DnD. data-ui-sortable attribute ile aktif olur. Reorder sonrası ui-sort:change event ile yeni sırayı dinleyebilirsin. data-handle="selector" ile sadece belirli bir handle'dan sürüklenmeyi sınırla.
Tüm satırı sürükle
- Veritabanı seçimiDB
- Frontend frameworkUI
- Backend frameworkAPI
- Hosting platformuOPS
Sıra: a · b · c · d
Yalnız handle'dan sürükle (data-handle="i.ui-drag-handle")
- 📋 Görev: README yaz
- ⚙️ Görev: CI/CD kur
- 🐛 Görev: Auth bug'ı çöz
Buton tıklanabilir kalır — yalnızca handle ikonu sürüklenir.
WYSIWYG Editor
Minimal contenteditable editör. Bold/İtalik/Underline/Strike, H2/H3/P/Quote, ul/ol, link, inline code, undo/redo, biçimi temizle. data-ui-editor auto-init.
Ctrl+B/I/U tarayıcı default'u; Ctrl+Z/Y undo.
Boş editör (placeholder)
İçerikli editör + canlı HTML çıktı
Mini bir blog yazısı
Bu editör vanilla JS ile yazıldı, execCommand kullanır ama gelecekte Selection API'a geçiş kolay.
- Native browser undo
- Klavye: Bold/İtalik/Underline shortcut'ları
- Toolbar buton state'i seçime göre güncellenir
Sadelik en sofistike sofistikasyondur. — Da Vinci
Canlı HTML çıktısı (yaz/sil → otomatik güncellenir)
HTML Inspector
Herhangi bir bileşene data-ui-inspect attribute ekle — sağ üst köşesinde butonu çıkar. Tıklayınca o bileşenin biçimlenmiş HTML'i modal'da açılır + panoya kopyalama. Layout şablonlarına otomatik eklenmiş; üzerlerine hover ederek dene.
Programmatik kullanım
// Tek bir element
DuckUI.HtmlInspector.attach(document.querySelector('.my-component'));
// Selector ile çoklu
DuckUI.HtmlInspector.attachAll('.demo-block');
// Modal'ı manuel aç
DuckUI.HtmlInspector.show(document.querySelector('.ui-card')); Örnek — bu blok'un üzerine gel, sağ üst köşede görünecek
Çağrımı bul
Sağ üstteki ikona tıkla → modal'da formatlanmış HTML kodu çıkar.
İpucu: Layout demo'larındaki Stat / Toolbar / Section card / Wizard / Split / Shell blokları üzerinde gez — hepsinde <> butonu görünür ve HTML'i kopyalanabilir.
Badges
Etiket / status göstergesi.
Toast Notifications
DuckUI.toast({ variant, title, message, duration }) — sağ üstte stack, otomatik kapanır, ARIA live region.
Pagination
Standalone sayfa navigasyonu — table dışı listeler için. Pencere boyutu, ellipsis, ARIA destekli.
Mevcut sayfa: 3
Drawer (Off-canvas)
Side panel — mobile menu, filtre paneli için. right / left / top / bottom varyantları.
Command Palette (Ctrl+K)
Fuzzy arama, klavye nav (↑↓), Enter'la tetikle. Ctrl/Cmd + K kısayolu otomatik bağlı.
Örnek 12 komut: navigasyon, hızlı eylem, kullanıcı, dokümantasyon.
Tag Input (Combobox)
Enter / virgül ile yeni tag ekle, Backspace'le sonu sil. data-tags="..." ile preset.
Mevcut: postgresql, redis
Markdown Viewer
Inline parser — heading/list/quote/code/table/link/bold/italic. CDN gerektirmez.
Tree View
Klasör/hiyerarşi görüntüleyici. Tıkla = aç/kapa, seçimi ui-tree:select event'i ile dinle.
Seçili: —
Code Block
Pretty-formatted kod, dil etiketi, tek-tık panoya kopyala.
const recommend = await engine.score({ domain: 'backend', experience: 'senior', constraints: ['low-latency', 'gdpr'] }); console.log(recommend.top(5));Time Picker
HH:MM scrollable popup — saat/dk kolonları.
Slider & Number Step
Range input görselleştirilmiş + qty +/- input.
Banner
Site-wide announcement strip, dismiss persisting localStorage.
Stepper (Status flow)
Sipariş takip / progress timeline — yatay veya dikey.
- Sipariş2 gün önce
- Hazırlık1 gün önce
- KargodaBugün
- TeslimYarın
Segment Control
Pill segmented buttons — view mode, sort, kompakt seçici.
Aktif: day
Bulk Action Bar
Tabloda multi-select sticky-bottom toolbar — N seçili görünür.
| Ad | ||
|---|---|---|
| Ali Veli | ali@x.com | |
| Ayşe Y. | ayse@x.com | |
| Mehmet K. | mehmet@x.com |
Form Error Summary
Submit'te tüm .is-invalid alanlarını liste olarak yukarı taşır, link'le focus.
Lightbox
Görsele tıkla → tam ekran. ←→ ile gez, esc ile kapa. data-ui-lightbox="grup" ile gruplandır.
Empty State Presets
Anlamlı varyantlar: no-results / error / no-perm / first-run.
Font Type Selector
10 hazır preset, localStorage'da persist. Seçim CSS variable'ları override eder.
★ Darkwing Pastel Palette
Royal purple cape, golden DW emblem, pastel night-sky cyan. Tüm token'lar `--ui-*` üzerinden çalışır; mevcut sayfaları otomatik etkiler.
Sticker Badges
Rotate -2°, dashed border, chunky shadow. Hover'da küçük wiggle. .ui-sticker + variant.
Comic Speech Bubbles
Tooltip benzeri ama karakterli. Tail yön: bottom (varsayılan), top, left, right. .ui-bubble.
✓ Next.js (10/10)
✓ React (10/10)
Skor ortalaması 9.2
POW! Stickers
Comic-book celebration sticker. Rotate -6°, chunky border + shadow, gold halo, pop-in animation. .ui-pop.
Cape Cards
Asimetrik dramatic shadow — kart sanki cape giymiş gibi. Hover'da kart 2px yukarı kalkar, cape büyür. .ui-cape-card.
Sıradan Cape Card
Cape-style asymmetric shadow + thick border + soft radius.
Pop variant
Border ve shadow accent (mor) renginde. Vurgu için kullan.
Halftone + Cape
Comic-book noktalı pattern overlay'i ile.
Top-Pick + Halo
Wizard'da ★ ÖNERİM kartı için: altın halka pulse + sticker badge köşede. .ui-top-pick veya `.ui-halo` (sadece halka).
minimal-flat
Düz, sade modern stil.
✓ Çok Uyumlu · 9.8/10dark-mode-first
Karanlık zemin önceliği.
✓ Uyumlu · 9.0/10glassmorphism
Cam efekti, modern UI.
~ Orta · 7.8/10Halftone Overlay
Comic-book noktalı pattern. Hero, banner veya kartlara dramatic comic-vibe katar. .ui-halftone.
Default Halftone
Gri noktalı pattern, %60 opacity.
is-accent variant
Mor renkli noktalar.
is-gold variant
Altın halftone (yıldız patlaması).
Stack Score Bar (Wizard alt-cep)
Anlık yığın uyumluluğu + faz mini-barlar + what-if alternatifler. Wizard sayfasının altında sticky duracak. .ui-stack-bar.
★ Cartoon Animation Pack
Disney 12 prensibinden ilham: squash-stretch, anticipation, exaggeration. CSS-only, prefers-reduced-motion uyumlu.
Hover-trigger flavors
Üzerine gel, hayata gelsinler.
Entrance animations (sayfa yüklenince doğal)
overshoot + settle
küçükten büyüye + zıplama
3D Y ekseninde dönüş
Idle/state animations
Top-pick + Sparkle (Wizard's "★ ÖNERİM")
Altın halka pulse + 4 köşe sparkle pırıltısı + sticker badge — hepsi auto.
minimal-flat
Sade modern — 9.8/10
sparkles ekstra
.ui-sparkles ile pulse'a iki yıldız daha
sıradan kart
karşılaştırma için