- dockview टैब, समूह, ग्रिड और split-view को सपोर्ट करने वाला zero-dependency layout manager है, जिसे React, Vue, Angular और JavaScript में इस्तेमाल किया जा सकता है
- यह लेआउट serialization/deserialization, dockable view, टैब·समूह docking, drag and drop, floating group, और popout window सहित पूरा layout management फीचर सेट प्रदान करता है
- यह theme लागू करने और customization, Shadow DOM सपोर्ट, touch·mobile सपोर्ट, extension API, और live examples वाली documentation site प्रदान करता है
- पैकेज
dockview,dockview-react,dockview-vue,dockview-angularमें विभाजित हैं, और React के लिएreact16.8 या उससे ऊपर, Vue के लिएvue3.4 या उससे ऊपर, Angular के लिए@angular/core21 या उससे ऊपर peer dependency के रूप में आवश्यक है - development structure NX monorepo और Yarn v1 workspaces पर आधारित है, और build क्रम
dockview-core → dockview → framework bindingहै
dockview द्वारा प्रदान की जाने वाली लेआउट क्षमताएँ
- dockview टैब, समूह, ग्रिड और split-view को सपोर्ट करने वाला एक layout manager है
- JavaScript के लिए इसका बेस पैकेज zero dependencies के साथ आता है और पूरी functionality तुरंत इस्तेमाल की जा सकती है
- समर्थित फीचर:
- लेआउट serialization/deserialization
- split-view, grid-view, dockable view
- टैब और समूह docking
- drag and drop
- popout window
- floating group
- touch और mobile सपोर्ट
- Shadow DOM सपोर्ट
- theme लागू करना और customization
- extension API
- live examples वाली documentation site
समर्थित पैकेज और framework
dockview: JavaScript के लिए पैकेज, जो zero dependencies और पूरी functionality प्रदान करता हैdockview-react: React binding, जिसके लिए peer dependency के रूप मेंreact16.8 या उससे ऊपर आवश्यक हैdockview-vue: Vue 3 binding, जिसके लिए peer dependency के रूप मेंvue3.4 या उससे ऊपर आवश्यक हैdockview-angular: Angular binding, जिसके लिए peer dependency के रूप में@angular/core21 या उससे ऊपर आवश्यक है
इंस्टॉलेशन और React उपयोग उदाहरण
- इंस्टॉलेशन कमांड framework के अनुसार पैकेज चुनने के तरीके पर आधारित हैं
npm install dockviewnpm install dockview-reactnpm install dockview-vuenpm install dockview-angular
- React उदाहरण में
DockviewReactऔरdockview-react/dist/styles/dockview.cssको import करके उपयोग किया जाता है onReadycallback मेंevent.api.addPanelकॉल करकेid,component,paramsवाले panel जोड़े जाते हैं- Vue और Angular के उदाहरण documentation site में देखे जा सकते हैं
development structure और build
- प्रोजेक्ट एक NX monorepo है और Yarn v1 workspaces का उपयोग करता है
- development commands:
yarn install: dependencies इंस्टॉल करनाyarn build: सभी पैकेज build करनाyarn test: test चलानाyarn lint: ESLint चलानाyarn format: Prettier चलाना
- NX build order को अपने आप मैनेज करता है
dockview-core → dockview → dockview-reactdockview-core → dockview → dockview-vuedockview-core → dockview → dockview-angular
गुणवत्ता, सुरक्षा, लाइसेंस
- प्रोजेक्ट उच्च test coverage, transparent build, और code analysis पर जोर देता है
- GitHub Actions के जरिए verified publishing और build सहित security को ध्यान में रखता है
- build verification को npm के provenance संबंधित निर्देशों में देखा जा सकता है
- contribution issue या pull request के जरिए स्वीकार किए जाते हैं
- लाइसेंस MIT है
1 टिप्पणियां
Hacker News की राय
वाह, सच में शानदार काम। पहली नज़र में ही लगता है कि TypeScript ठीक से लिखा गया है, और समय की दिशा को भी सही पकड़ा गया है। आगे AI applications बनाने के लिए ऐसे बुनियादी टूल्स की बहुत ज़्यादा ज़रूरत पड़ेगी।
तकनीकी तौर पर मैं लंबे समय से यह जानना चाहता था कि panel को drag करने या उसकी visibility बदलने पर components को mount/unmount कैसे किया जाता है। कभी-कभी mount/unmount की तुलना में
display:noneसस्ता पड़ सकता है।साथ ही, panel structure असल में declarative है, इसलिए यह भी जानना चाहूँगा कि क्या saved TypeScript layout को export करने और functions, यानी TypeScript imports को panel content से map करने जैसा कोई Vite plugin expose करने की योजना है। मैं JSX के बाहर, ज़्यादा pure TypeScript तरीके से सोच रहा हूँ।
https://dockview.dev/docs/core/panels/rendering
panel content को हमेशा DOM के अंदर बनाए रखने का option है, और जैसा आपने कहा,
display: noneके क़रीब approach भी संभव है। इसके उलट DOM से content हटाने का option भी है।pure TypeScript के नज़रिए से, library का ज़्यादातर हिस्सा pure TypeScript में लिखा गया है, और Vue व React के लिए सिर्फ छोटे wrapper libraries हैं।
theoretically Angular जैसे दूसरे frameworks के लिए wrapper भी लिखा जा सकता है, और यह काम मैं इस साल के अंदर करके देखना चाहूँगा।
state load और save भी support हैं।
https://dockview.dev/docs/core/state/save
बताइएगा कि क्या इस जवाब से आपका सवाल हल होता है।
सच में impressive है। ख़ासकर कुछ चीज़ों की बहुत तारीफ़ करना चाहूँगा: zero dependencies JavaScript package के तौर पर बहुत अच्छी बात है, documentation साफ़ है और examples भी हैं। transparent build भी standard होना चाहिए।
काश और JavaScript packages भी ऐसे होते।
थोड़ी खोजबीन के बाद मेरी समझ में तो यह पहले से standard जैसा ही लगता है। अगर कोई package install करने के बाद उसे चलाने के लिए manual build process खुद समझना पड़े, तो मैं उसे इस्तेमाल ही नहीं करूँगा।
Dockview शानदार है, और @mathuo को इस बेहतरीन project के लिए बधाई। हाल ही में मैंने इस category की 6–7 libraries को काफ़ी thorough तरीके से test किया, और Dockview निश्चित रूप से top tier में है। GitHub भी बहुत active और अच्छी तरह maintained है।
हाल के project में मैंने अंततः FlexLayout(https://github.com/caplin/FlexLayout) सिर्फ इसलिए चुना क्योंकि predefined/limited size support नहीं था, लेकिन बाद में यह बहुत अच्छे तरीके से add हो गया। साथ ही FL जिस तरह vertical tabs और predefined behavior के साथ side panels handle करता है, वह मुझे पसंद आया।
अपनी अगली projects में से किसी एक में Dockview इस्तेमाल करने की मुझे बहुत उम्मीद है।
मैं अपने leisure project के तौर पर literally ऐसी ही चीज़ बना रहा था, और इसे पाकर सच में खुशी हुई। अब मैं अपना code फेंककर project के अगले phase पर जा सकता हूँ।
GoldenLayout से तुलना करें तो यह कैसा है? क्या उससे inspiration ली गई है?
पहले मुझे वह project सच में बहुत पसंद था, लेकिन दुर्भाग्य से support पूरी तरह बंद हो गया। कुछ लोगों ने उसे आगे बढ़ाया जरूर, लेकिन उत्साह से updates करने के बावजूद कोई practical upgrade path ज़्यादा नज़र नहीं आया।
यह अच्छा लग रहा है, और मैं इसे try करना चाहूँगा।
शुरुआत में GoldenLayout सहित दूसरे layout managers से inspiration ली गई थी। यहाँ मुख्य लक्ष्य zero dependencies रखना और pure TypeScript में लिखना था, साथ ही Vue और React जैसे frameworks के लिए wrapper libraries देना था।
कोई भी feedback welcome है, और website demo अभी की ज्यादातर functionality दिखाता है। Issues list में आगे planned चीज़ें भी बहुत हैं।
theoretically GoldenLayout के लिए adapter logic खुद maintain किया जा सकता है, लेकिन वह लगभग dead लगता है। इस library जैसी नई libraries हैं जिनका drag-and-drop feel भी बेहतर है।
करीब 6 साल पहले एक दूसरे project में GoldenLayout इस्तेमाल करने की कोशिश की थी, लेकिन कुछ महसूस होने वाली समस्याओं के कारण आखिरकार pure TypeScript में खुद implement किया था। यह widely used तो है, लेकिन actual experience में इतना शानदार नहीं था।
अच्छा project है। demo में video, dropdown, बहुत सारा text, बड़े size का text जैसे common content डाल दें तो यह कैसे handle करता है, यह दिखाने में अच्छा रहेगा।
और यह भी जानना चाहूँगा कि क्या window chrome के बिना सिर्फ panels वाला version भी है।
मैं Rust में लिखा एक tiling window manager maintain करता हूँ, और इस तरह का काम JS/TS में करने का धैर्य मेरे लिए कल्पना से बाहर है। mathuo को सम्मान। हाल में HN पर देखी सबसे cool चीज़ों में से एक है।
सच में अच्छा है। SolidJS support भी हो तो अच्छा होगा। आजकल React और Solid के बीच मेरी कोई खास preference नहीं है, लेकिन कुछ projects जिनमें इसका इस्तेमाल हो सकता है, SolidJS में हैं।
Mosaic को फिर से बनाने का समय आ गया है। https://github.com/mlajtos/mosaic
बेहतरीन। HTML जो देता है उससे आगे, menu जैसे common desktop controls के लिए क्या कोई ऐसी ही dependency-free pure library किसी को पता है?
0: https://daisyui.com