- Jelly UI v1.1, gerçek form kontrolleri ile yumuşak gövde fiziği efektlerini birleştiren, bağımlılıksız bir web component kütüphanesidir ve 40 özel element sunar
- Tek bir modül script’i ile kurulur; dark mode, işletim sistemi temasını otomatik izleme, vurgu rengi değiştirme ve sağdan sola yazılan RTL düzenini destekler
- Düğmeler yerel
<button>, kaydırıcılar ise gizlirangegirdisi kullanarak klavye kullanımı, ekran okuyucu ve form katılımı için yerel anlamsal yapıyı korur - Onay kutuları ve giriş alanlarından toast, sekme ve diyaloglara kadar çeşitli öğelere basılma, esneme, dalga ve sekme gibi dokunsal animasyonlar uygular
- Yerleşik WCAG AA renk token’ları ve ARIA kalıpları sayesinde yumuşak görsel efektleri korurken erişilebilir ürün arayüzleri oluşturmayı mümkün kılar
Kurulum ve tema
- Jelly UI, bağımlılık olmadan, 40 özel element ve tek bir
<script type="module">etiketiyle kullanılabilir<script type="module" src="https://jelly-ui.com/package.js"></script> <jelly-theme mode="auto"> <jelly-button variant="mint">Publish</jelly-button> </jelly-theme> <jelly-theme>, tasarım token’larını alt ağaçta sınırlı olarak uygulayan bir tema sağlayıcısıdırmode,auto,light,darkseçeneklerini destekler; böylece işletim sistemi ayarını izleyebilir veya belirli bir temayı zorlayabilirsinizaccentile vurgu rengini yeniden belirleyebilirsiniz
- Yaygın renk varyantları
azure,rose,amber,mint,graphite,platinum,white; boyutlar ise çoğunluklasmall,medium,largeşeklindedir
Düğmeler ve etkileşim öğeleri
<jelly-button>, içinde gerçek yerel<button>barındıran, klavye ve ekran okuyucu desteği sunan kapsül biçimli bir düğmedir- Renk, boyut,
pillvesquareşekilleri ile devre dışı bırakma ve blok yerleşimi ayarlanabilir
- Renk, boyut,
<jelly-icon-button>, tek bir ikona göre tasarlanmış kare veya dairesel düğmedirlabelniteliğiyle ekran okuyucuların algılayacağı ad belirlenir
Form giriş kontrolleri
<jelly-checkbox>, forma katılır,checkedve belirsiz durumu (indeterminate) destekler; durum değiştiğinde jelimsi kare yukarı sıçrar<jelly-input>,text,email,passwordiçin tek satırlı giriş alanıdır- Odak alınca yüzeyi yükselir ve kenarlık görünür; her yazımda imleç konumundan dalga yayılır
disabledvereadonlydesteklenir
<jelly-label>,forile kontrolle bağlanır- Tıklandığında hedefe odaklanır, etiket metni erişilebilir ad olur ve zorunluluk ile boyut belirtilebilir
<jelly-otp>, her rakam için bir kutu sunan tek kullanımlık kod girişidir- Giriş, backspace, ok tuşları ve yapıştırmayı işler; uzunluk, renk, boyut ve devre dışı durumu ayarlanabilir
<jelly-radio>, aynı kökte aynınamedeğerini paylaşan öğelerle grup oluşturur- Hareketli
tabindexve belge yönünü dikkate alan ok tuşu gezinmesini destekler
- Hareketli
<jelly-radio-group>,jelly-radioiçin etiketli birradiogroupkapsayıcısıdır- Başlık, yatay-dikey akış düzeni ve boyutun alt öğelere aktarımını sağlar
<jelly-range>, minimum ve maksimum aralığını seçen çift kulplu bir slider’dır- İki tutacağa da
role="slider", odak ve ARIA uygulanır; sürüklenirken jelimsi tutacak içe çöker
- İki tutacağa da
<jelly-segmented>, birbirini dışlayan seçenekleri içeren kapsül biçimli bir raydır- Seçim göstergesi, bölümler arasında hareket ederken eğilen ve esneyen jelimsi hap formunda davranır
<jelly-select>, ARIAcomboboxvelistboxkalıplarını kullanan, formla entegre bir açılır seçimdir- Hem tetikleyici hem seçenek paneli yumuşak gövde yüzeyiyle tasarlanmıştır
- Panel, alandan açılır; altta yeterli boşluk yoksa yukarı açılmaya geçer
<jelly-slider>, tek bir değer seçen slider’dır- Gizli yerel
rangegirdisi anlamsal yapı ve form katılımını üstlenir; ekranda ise içe çöken jelimsi tutacak gösterilir
- Gizli yerel
<jelly-switch>, sürüklenebilir bir anahtardır; tutacak sıvı damla gibi uzar ve kapalı-açık renkleri çapraz geçiş yapar<jelly-textarea>, çok satırlı girişe göre minimum ve maksimum yükseklik arasında otomatik büyür- Yüzey de yüksekliğe uyacak şekilde uzar, yazarken imleç konumundan dalga oluşur ve
disabledilereadonlydesteklenir
- Yüzey de yüksekliğe uyacak şekilde uzar, yazarken imleç konumundan dalga oluşur ve
Durum ve geri bildirim
<jelly-alert>,info,success,warning,dangerolmak üzere dört ton ve isteğe bağlı kapatma düğmesi sunan bir bannerdır<jelly-badge>, rozet, etiket ve durum göstergesi için kullanılan küçük bir öğedir; metin değiştiğinde yukarı sıçrar- Dolgu/çerçeve, hap/kare şekilleri ile
live,instantdavranışları ayarlanabilir
- Dolgu/çerçeve, hap/kare şekilleri ile
<jelly-progress>, ilerleme arttıkça dolgunun ön kısmı sallanan bir ilerleme çubuğudur- Belirsiz modda kütle iki duvar arasında seker
<jelly-skeleton>, parıltı yerine yumuşakça nefes alır gibi salınan bir yükleme yer tutucusudurline,rect,circlebiçimlerini destekler
<jelly-spinner>, üç nokta arasında hareket eden sümüksü kütle biçimlidotsve şekil değiştirerek dönenblobgöstergeleri sunar<jelly-toaster>, satır sonu yönünden belirip kaybolan toast bildirimlerini yönetir- Genellikle
jellyToast('Saved!', { tone: 'success' })yardımcı işleviyle çağrılır - Yerleştirilen öğeye
position="bottom"verilirse bildirim yığını yukarı doğru büyür
- Genellikle
İçerik yüzeyleri
<jelly-accordion>, birden fazla<jelly-collapsible>öğesini gruplaştırırsinglemodunda biri açıldığında diğerleri sekerek kapanır
<jelly-card>, içeriğin altında yer alan jelimsi yüzey kapsayıcısıdırsquisheklendiğinde yumuşak yastık gibi içe çöker ve düğme görevi görür
<jelly-chip>, statik etiket, açılıp kapanabilen filtre veya kaldırılabilir etiket olarak kullanılabilir- Seçilebilirlik, seçili durum, kaldırılabilirlik ve devre dışı bırakma ayarlanabilir
<jelly-collapsible>, başlık düğmesiyle paneli sekerek açıp kapatan bir açılır/kapanır alandır- Metnin değil, yüzeyin hareket etmesi hedeflenmiştir
<jelly-divider>, yatay, dikey veya etiketli ince bir ayırıcıdır<jelly-kbd>, basılabiliyormuş hissi veren jelimsi bir tuş kapağıdırkeyile gerçek tuşa bağlanırsa sayfanın herhangi bir yerinde o tuşa basıldığı sürece tuş kapağı da aşağı iner
Gezinme ve düzen
<jelly-resizable>, jelimsi ayırıcıyı sürükleyerek veya klavyeyle boyutlandırılan bir panel ızgarasıdırrow,vertical,bothyönlerini destekler
<jelly-tabs>, gerçektablistanlamsal yapısını kullanan sekmeli görünümdür- Jel kapsül biçimli seçim göstergesi hareket eder ve sekme panelleri sekerek görünür
Katmanlar
<jelly-dialog>, jel gibi sekerek beliren bir modal diyalogdur- Sayfayı kilitler ve kapandıktan sonra odağı önceki konuma geri verir
- Escape tuşu, kapatma düğmesi veya arka plana tıklama ile kapatılabilir
<jelly-drawer>, uç noktayı biraz aşıp geri dönen yay efektiyle beliren yüzen bir sheet’tir- Satır içi başlangıç, bitiş veya alttan açılabilir
<jelly-popover>, tıklamayla açılan modal olmayan bir paneldir- Tetikleyiciye sabitlenir ve Escape tuşu ya da dışarı tıklamayla kapanır
top,bottom,start,endyerleşimlerini destekler
<jelly-tooltip>, fare üzerine gelindiğinde veya klavye odağı alındığında tetikleyicinin üstünde temalı bir baloncuk gösterir- Dört yönlü yerleşim ve üç farklı boyutu destekler
1 yorum
Hacker News yorumları
Pencere biraz takıldığı için nedenini kurcaladım; bu kütüphane sayfadaki tüm bileşenler genelinde her 8 ms’de bir requestAnimationFrame (RAF) animasyon döngüsü çalıştırıyor ve tüm belgeyi yeniden çizdiriyor.
Yukarıdaki “aktif bileşenleri tek bir karede birlikte işler ve boştayken durur” yorumu da yapay zeka tarafından üretilmiş gibi.
JellyEngine, jöle animasyonunu yalnızca pointer event olduğunda hesaplamıyor; sayfadaki tüm aktif bileşenleri her karede yeniden hesaplıyor. Sıradan birinin bakıp “böyle yapılmaz, bu çok abartı” diyeceği türden bir uygulama.Set()ile yönetiyor ve hareket durduğunda kaldırıyor gibi görünüyor.Yorumun biraz yapay zekanın üstünkörü üretimi gibi durduğuna katılıyorum ama yaklaşımın kendisinde bariz bir sorun bulamadım; hiçbir eylem yokken çekirdek döngü birkaç mikrosaniye içinde bitiyor.
Hoşuma gitti ama standart UX pratiklerine pek uymuyor gibi.
Basılı tutarken fareyi öğenin dışına taşırsanız bunun tıklama olarak işlenmemesi gerektiğini düşünüyorum. Şu anda buton bunu tıklama olarak işliyor ama checkbox işlemiyor; bu da tutarsız.
Gerçekten çok sevimli;
@media (prefers-reduced-motion: reduce)içinde doğal biçimde özelliği azaltması da güzel.Yine de demo sitesinde, sistem ayarını değiştirmeden kullanıcının bunu geçersiz kılabilmesi ya da en azından animasyonun gösterilmediğine dair bir bilgilendirme olması iyi olurdu.
Böyle güzel bir demo çıktığında ayarı hatırlamam biraz zaman alıyor; o sırada da hayal kırıklığıyla “bunun nesi özel?” diye tıklayıp duruyorum.
Gençken olsam buna bayılırdım ama bugünlerde yerel stylesheet ile böyle efektleri kaldırmaya ya da karanlık mod ve okuma modu kullanmaya daha çok zaman harcıyorum. Zaman çok değişti.
Fareyle üzerine gelindiğinde de daha düşük yoğunlukta efekt görünse güzel olurdu. İlerleme çubuğu ve toast gibi bazı kontrollerde jöle efekti yok gibi.
Demo sayfasının performansı da pek iyi değil ve kaydırmayı ele geçiriyormuş hissi veriyor; ama genel olarak sevimli ve oyun arayüzlerine iyi yakışır gibi.
Chipöğesi yerinde kalıp geçiş yapmalı; tıklayınca sınırların dışına taşması hoşuma gitmiyor.Sevimli ama bazı kontrollerin tepki hızı çok kötü. Slider’ı ileri geri sürükleyince fare imlecinin çok gerisinde kalıyor; yapıştırıcıyla tutturulmuş gibi imleci takip etmesi gerek.
Buna karşılık
jelly-resizablegibi diğer kontroller imlece iyi tutunup hareket ediyor."Placeholder"kontrolünde tıklayınca placeholder kaybolmuyor gibi.2007–2010 civarında Paul Neave’in web sitesinde, blogunda ve showcase’inde sayfa kenarlarında buna benzer bir jöle efekti olduğunu hatırlayan var mı merak ediyorum. O dönemde Flash ile yapılmıştı.
O zamanlar Paul Neave benim kişisel kahramanlarımdandı; bunu okuyorsa umarım iyidir.
Bu UI tasarım sisteminde fizik efekti denebilecek hiçbir şey bulmak zor.
Benim renk görme bozukluğu türümden ya da monitör ayarlarımdan kaynaklanıyor olabilir ama kırmızı ile kehribar rengi o kadar benziyor ki butona basıp basmadığımı bile ayırt edemedim.