docview - TypeScript/React/Vue pencere yerleşim yöneticisi (sekme, floating, pop-out)
(github.com/mathuo)- dockview; sekme, grup, grid ve split-view destekleyen bağımlılıksız bir yerleşim yöneticisi olup React, Vue, Angular ve JavaScript ile kullanılabilir
- Yerleşim serileştirme/deserileştirme, dock edilebilir view'ler, sekme ve grup dock etme, sürükle-bırak, floating gruplar ve pop-out pencereler dahil kapsamlı yerleşim yönetimi özellikleri sunar
- Tema uygulama ve özelleştirme, Shadow DOM desteği, dokunmatik ve mobil desteği, genişletme API'si ve canlı örnekler içeren bir dokümantasyon sitesi sağlar
- Paketler
dockview,dockview-react,dockview-vue,dockview-angularolarak ayrılır; React için peer dependency olarakreact16.8+, Vue içinvue3.4+, Angular için@angular/core21+ gereklidir - Geliştirme yapısı NX monorepo ve Yarn v1 workspaces tabanlıdır; derleme sırası
dockview-core → dockview → framework bindingşeklindedir
dockview'in sunduğu yerleşim özellikleri
- dockview, sekme, grup, grid ve split-view destekleyen bir yerleşim yöneticisidir
- JavaScript için temel paket zero dependencies yapısındadır ve tüm özellikleri doğrudan kullanıma sunar
- Desteklenen özellikler:
- Yerleşim serileştirme/deserileştirme
- split-view, grid-view, dock edilebilir view
- Sekme ve grup dock etme
- Sürükle-bırak
- Pop-out pencereler
- Floating gruplar
- Dokunmatik ve mobil desteği
- Shadow DOM desteği
- Tema uygulama ve özelleştirme
- Genişletme API'si
- Canlı örnekler içeren dokümantasyon sitesi
Desteklenen paketler ve framework'ler
dockview: JavaScript paketi; bağımlılıksızdır ve tüm özellikleri sunardockview-react: React binding'i; peer dependency olarakreact16.8+ gerektirirdockview-vue: Vue 3 binding'i; peer dependency olarakvue3.4+ gerektirirdockview-angular: Angular binding'i; peer dependency olarak@angular/core21+ gerektirir
Kurulum ve React kullanım örneği
- Kurulum komutları, framework'e göre paket seçilerek kullanılır
npm install dockviewnpm install dockview-reactnpm install dockview-vuenpm install dockview-angular
- React örneğinde
DockviewReactvedockview-react/dist/styles/dockview.cssiçe aktarılıp kullanılır onReadycallback'indeevent.api.addPanelçağrılarakid,component,paramsiçeren bir panel eklenir- Vue ve Angular örnekleri dokümantasyon sitesinde görülebilir
Geliştirme yapısı ve derleme
- Proje bir NX monorepo olup Yarn v1 workspaces kullanır
- Geliştirme komutları:
yarn install: Bağımlılıkları kuraryarn build: Tüm paketleri derleryarn test: Testleri çalıştırıryarn lint: ESLint'i çalıştırıryarn format: Prettier'ı çalıştırır
- NX derleme sırasını otomatik olarak yönetir
dockview-core → dockview → dockview-reactdockview-core → dockview → dockview-vuedockview-core → dockview → dockview-angular
Kalite, güvenlik, lisans
- Proje; yüksek test kapsamı, şeffaf derleme ve kod analizine vurgu yapar
- GitHub Actions üzerinden doğrulanan publishing ve derlemeleri içerecek şekilde güvenlik gözetilir
- Derleme doğrulaması npm'nin provenance ile ilgili rehberinde incelenebilir
- Katkılar issue veya pull request ile kabul edilir
- Lisans MIT'tir
1 yorum
Hacker News yorumları
Vay canına, gerçekten müthiş bir iş. İlk bakışta bile TypeScript’in düzgün yazıldığı hissini veriyor ve zamanın ruhunu da yakalamış gibi. İleriye dönük olarak yapay zeka uygulamaları geliştirmek için bu tür temel araçlara çok daha fazla ihtiyaç duyulacak gibi görünüyor
Teknik tarafta ise, paneller sürüklenirken veya görünürlük durumu değişirken bileşenleri mount/unmount etme yaklaşımını uzun zamandır merak ediyordum. Bazen
display:none, mount/unmount’tan daha düşük maliyetli olabilirAyrıca panel yapısı özünde deklaratif olduğundan, kaydedilmiş TypeScript yerleşimlerini dışa aktarıp işlevlerin, yani TypeScript import’larının panel içeriğine eşlendiği bir Vite eklentisi sunmayı düşünüp düşünmediğinizi de merak ediyorum. JSX dışında daha saf bir TypeScript yaklaşımı üzerine düşünüyorum
https://dockview.dev/docs/core/panels/rendering
Panel içeriğini her zaman DOM içinde tutma seçeneği var; dediğiniz gibi
display: none’a yakın bir yaklaşım da mümkün. Tersine, içeriği DOM’dan kaldıran bir seçenek de mevcutSaf TypeScript açısından bakarsak, kütüphanenin büyük kısmı saf TypeScript ile yazıldı ve yalnızca Vue ile React için küçük wrapper kütüphaneleri var
Teorik olarak Angular gibi başka framework’ler için de wrapper yazılabilir; bunu bu yıl içinde denemek istediğim işler arasında
Durum yükleme ve kaydetme de destekleniyor
https://dockview.dev/docs/core/state/save
Umarım bu yanıt soruyu açıklığa kavuşturur; işe yarayıp yaramadığını söylerseniz sevinirim
Gerçekten etkileyici. Özellikle birkaç noktayı çok övmek istiyorum: sıfır bağımlılık, bir JavaScript paketi için harika; dokümantasyon temiz ve örnekler içeriyor. Şeffaf build de standart hâline gelmeli
Keşke daha fazla JavaScript paketi böyle olsa
Kısaca aratınca edindiğim izlenime göre bu zaten standart gibi görünüyor. Kurduktan sonra çalıştırmak için manuel build sürecini benim çözmem gereken bir paketse zaten kullanmam
Dockview harika ve @mathuo’nun müthiş projesini tebrik ederim. Son dönemde bu kategorideki 6-7 kütüphaneyi oldukça kapsamlı test ettim; Dockview kesinlikle üst sıralarda. GitHub deposu da çok aktif ve iyi yönetiliyor
Son projemizde sonunda FlexLayout(https://github.com/caplin/FlexLayout) seçmemizin tek nedeni, önceden tanımlı/kısıtlı boyut desteğinin olmamasıydı; ama bu özellik daha sonra oldukça iyi bir şekilde eklendi. Ayrıca FL’nin dikey sekmeleri ve yan panelleri önceden tanımlı davranışlarla ele alma biçimini de beğendim
Bir sonraki projelerimden birinde Dockview kullanmayı gerçekten dört gözle bekliyorum
Boş zaman projesi olarak kelimenin tam anlamıyla böyle bir şey yapıyordum; bunu bulduğuma gerçekten sevindim. Artık kendi kodumu çöpe atıp projenin bir sonraki aşamasına geçebilirim
GoldenLayout ile karşılaştırınca nasıl? Ondan ilham alındı mı?
Eskiden o projeyi gerçekten çok severdim ama ne yazık ki desteği tamamen durdu. Bazıları devam ettirmeye çalıştı ama hevesli güncellemelere rağmen gerçekçi bir upgrade yolu pek görünmüyordu
Bu iyi görünüyor, denemek isterim
Başlangıçta GoldenLayout dâhil diğer yerleşim yöneticilerinden ilham alındığı doğru. Buradaki ana hedef sıfır bağımlılık, saf TypeScript ile yazılmış olmak ve Vue ile React gibi framework’ler için wrapper kütüphaneleri sunmaktı
Her türlü geri bildirime açığım ve web sitesindeki demo şu anki özelliklerin çoğunu gösteriyor. Issues listesinde de ilerisi için planlanan pek çok şey var
Teorik olarak GoldenLayout için adaptör mantığını kendiniz sürdürebilirsiniz ama pratikte ölü durumda gibi görünüyor. Bunun gibi daha yeni ve drag-and-drop hissi daha iyi olan kütüphaneler var
Yaklaşık 6 yıl önce başka bir projede GoldenLayout kullanmaya çalıştığımı, ama hissedilen bazı sorunlar yüzünden sonunda saf TypeScript ile kendim yazdığımı da hatırlıyorum. Yaygın kullanılıyor olabilir ama gerçek deneyim açısından o kadar da harika değildi
Güzel proje. Demoda video, açılır menü, büyük miktarda metin, büyük boyutlu yazı gibi genel içeriklerin de yer alması, bunları nasıl ele aldığını göstermek açısından iyi olurdu
Bir de pencere chrome’u olmadan sadece panellerin olduğu bir sürüm var mı diye merak ediyorum
Rust ile yazılmış bir tiling pencere yöneticisi sürdürüyorum; bu tür bir şeyi JS/TS ile yapacak sabrı gösterebilmek gerçekten hayal gücümün ötesinde. mathuo’ya saygılar. Son zamanlarda HN’de gördüğüm en havalı şeylerden biri
Gerçekten çok iyi. SolidJS desteği de olsa harika olurdu. Bu aralar React ile Solid arasında özel bir tercihim yok ama bunu kullanabileceğim birkaç proje SolidJS ile yazılmış durumda
Mosaic’i yeniden yapmanın zamanı gelmişti. https://github.com/mlajtos/mosaic
Harika. HTML’in sunduklarının ötesinde, menüler gibi genel masaüstü kontrolleri için benzer, bağımlılıksız saf bir kütüphane bilen var mı?
0: https://daisyui.com