dockview – TypeScript/React/Vue-Fenster-Layout-Manager (Tabs, Floating, Pop-outs)
(github.com/mathuo)- dockview ist ein abhängigkeitsfreier Layout-Manager, der Tabs, Gruppen, Grids und Split-Views unterstützt und in React, Vue, Angular und JavaScript genutzt werden kann
- Bietet umfassende Layout-Management-Funktionen, darunter Serialisierung/Deserialisierung von Layouts, dockable Views, Docking von Tabs und Gruppen, Drag-and-drop, Floating Groups und Pop-out-Fenster
- Bietet Themes und Customizing, Shadow-DOM-Unterstützung, Touch- und Mobile-Support, eine Erweiterungs-API sowie eine Dokumentationsseite mit Live-Beispielen
- Die Pakete sind in
dockview,dockview-react,dockview-vueunddockview-angularaufgeteilt; React erfordertreact16.8 oder höher, Vuevue3.4 oder höher und Angular@angular/core21 oder höher als Peer Dependency - Die Entwicklungsstruktur basiert auf einem NX-Monorepo und Yarn-v1-Workspaces; gebaut wird in der Reihenfolge
dockview-core → dockview → Framework-Bindings
Von dockview bereitgestellte Layout-Funktionen
- dockview ist ein Layout-Manager mit Unterstützung für Tabs, Gruppen, Grids und Split-Views
- Das Basispaket für JavaScript hat zero dependencies und stellt den vollen Funktionsumfang direkt bereit
- Unterstützte Funktionen:
- Serialisierung/Deserialisierung von Layouts
- Split-View, Grid-View, dockable View
- Docking von Tabs und Gruppen
- Drag-and-drop
- Pop-out-Fenster
- Floating Groups
- Touch- und Mobile-Support
- Shadow-DOM-Unterstützung
- Themes und Customizing
- Erweiterungs-API
- Dokumentationsseite mit Live-Beispielen
Unterstützte Pakete und Frameworks
dockview: Paket für JavaScript, bietet Abhängigkeitsfreiheit und den vollen Funktionsumfangdockview-react: React-Binding, erfordertreact16.8 oder höher als Peer Dependencydockview-vue: Vue-3-Binding, erfordertvue3.4 oder höher als Peer Dependencydockview-angular: Angular-Binding, erfordert@angular/core21 oder höher als Peer Dependency
Installation und React-Nutzungsbeispiel
- Bei den Installationsbefehlen wird das jeweilige Framework-Paket ausgewählt
npm install dockviewnpm install dockview-reactnpm install dockview-vuenpm install dockview-angular
- Das React-Beispiel importiert und nutzt
DockviewReactsowiedockview-react/dist/styles/dockview.css - Im
onReady-Callback wirdevent.api.addPanelaufgerufen, um ein Panel mitid,componentundparamshinzuzufügen - Vue- und Angular-Beispiele sind auf der Dokumentationsseite zu finden
Entwicklungsstruktur und Build
- Das Projekt ist ein NX-Monorepo und verwendet Yarn v1-Workspaces
- Entwicklungsbefehle:
yarn install: Abhängigkeiten installierenyarn build: alle Pakete bauenyarn test: Tests ausführenyarn lint: ESLint ausführenyarn format: Prettier ausführen
- NX verwaltet die Build-Reihenfolge automatisch
dockview-core → dockview → dockview-reactdockview-core → dockview → dockview-vuedockview-core → dockview → dockview-angular
Qualität, Sicherheit und Lizenz
- Das Projekt betont hohe Testabdeckung, transparente Builds und Code-Analyse
- Berücksichtigt Sicherheit, einschließlich verifiziertem Publishing und Builds über GitHub Actions
- Die Build-Verifizierung ist in den npm-Hinweisen zu provenance zu finden
- Beiträge können über Issues oder Pull Requests eingereicht werden
- Die Lizenz ist MIT
1 Kommentare
Hacker-News-Kommentare
Wow, wirklich hervorragende Arbeit. Schon auf den ersten Blick wirkt es so, als wäre TypeScript richtig sauber geschrieben, und es scheint auch den Zeitgeist gut zu treffen. Wenn man künftig AI-Anwendungen bauen will, wird man wohl viel mehr von solchen grundlegenden Werkzeugen brauchen
Technisch habe ich mich schon lange gefragt, wie Komponenten gemountet bzw. unmountet werden, wenn Panels gezogen werden oder ihren Sichtbarkeitsstatus ändern. Manchmal kann
display:nonegünstiger sein als Mount/UnmountDa die Panel-Struktur außerdem im Grunde deklarativ ist, frage ich mich, ob geplant ist, gespeicherte TypeScript-Layouts exportieren zu können und eine Art Vite-Plugin bereitzustellen, bei dem Funktionen, also TypeScript-Imports, den Panel-Inhalten zugeordnet werden. Ich denke gerade darüber nach, das außerhalb von JSX als reineren TypeScript-Ansatz zu betrachten
https://dockview.dev/docs/core/panels/rendering
Es gibt eine Option, den Panel-Inhalt immer im DOM zu halten, was wie erwähnt einem Ansatz nahe an
display: noneentspricht. Umgekehrt gibt es auch eine Option, den Inhalt aus dem DOM zu entfernenAus Sicht von reinem TypeScript ist der Großteil der Bibliothek bereits in reinem TypeScript geschrieben, dazu kommen nur kleine Wrapper-Bibliotheken für Vue und React
Theoretisch könnte man auch Wrapper für andere Frameworks wie Angular schreiben, und das ist etwas, das ich dieses Jahr noch gern ausprobieren würde
Laden und Speichern des Zustands wird ebenfalls unterstützt
https://dockview.dev/docs/core/state/save
Sag gern Bescheid, ob das deine Frage beantwortet
Wirklich beeindruckend. Vor allem ein paar Dinge möchte ich besonders loben: 0 Abhängigkeiten ist für ein JavaScript-Paket großartig, die Dokumentation ist sauber und enthält Beispiele. Auch transparente Builds sollten Standard sein
Ich wünschte, mehr JavaScript-Pakete wären so
Nach meinem kurzen Suchen scheint das bereits Standard zu sein. Wenn ein Paket verlangt, dass ich erst selbst einen manuellen Build-Prozess herausfinden muss, nur damit es nach der Installation läuft, benutze ich es einfach nicht
Dockview ist hervorragend, und Glückwunsch an @mathuo zu diesem tollen Projekt. Ich habe vor Kurzem 6 oder 7 Bibliotheken aus dieser Kategorie ziemlich gründlich getestet, und Dockview gehört ganz klar zur Spitzengruppe. Auch das GitHub-Repo ist sehr aktiv und gut gepflegt
Der einzige Grund, warum wir uns in einem aktuellen Projekt am Ende für FlexLayout(https://github.com/caplin/FlexLayout) entschieden haben, war das Fehlen von Unterstützung für vordefinierte/eingeschränkte Größen, aber das wurde inzwischen auf sehr gute Weise ergänzt. Außerdem gefiel mir, wie FL mit vertikalen Tabs und Side-Panels mit vordefiniertem Verhalten umgeht
Ich freue mich sehr darauf, Dockview in einem der nächsten Projekte einzusetzen
Ich habe in einem Freizeitprojekt buchstäblich genau so etwas gebaut, deshalb freue ich mich riesig, das hier zu entdecken. Jetzt kann ich meinen eigenen Code wegwerfen und zum nächsten Schritt des Projekts übergehen
Wie ist der Vergleich zu GoldenLayout? War das eine Inspirationsquelle?
Früher mochte ich dieses Projekt wirklich sehr, aber leider ist der Support komplett eingeschlafen. Ein paar Leute haben es zwar weitergeführt und mit viel Einsatz aktualisiert, aber ein realistischer Upgrade-Pfad war nicht wirklich zu erkennen
Das hier sieht gut aus, ich würde es gern ausprobieren
Anfangs war es tatsächlich von GoldenLayout und anderen Layout-Managern inspiriert. Das Hauptziel hier war 0 Abhängigkeiten und eine Implementierung in reinem TypeScript, mit Wrapper-Bibliotheken für Frameworks wie Vue und React
Ich freue mich über jedes Feedback, und die Demo auf der Website zeigt die meisten aktuellen Funktionen. In der Issues-Liste steht auch vieles, was noch geplant ist
Theoretisch könnte man die Adapter-Logik für GoldenLayout selbst weiterpflegen, aber praktisch wirkt es wie tot. Es gibt Bibliotheken wie diese hier, die neuer sind und sich beim Drag-and-Drop auch besser anfühlen
Ich erinnere mich außerdem daran, dass ich GoldenLayout vor etwa 6 Jahren in einem anderen Projekt verwenden wollte, es dann aber wegen einiger gefühlter Probleme letztlich selbst in reinem TypeScript umgesetzt habe. Es ist zwar weit verbreitet, aber in der Praxis war meine Erfahrung damit nicht besonders gut
Gutes Projekt. Es wäre schön, wenn die Demo gewöhnliche Inhalte wie Videos, Dropdowns, große Textmengen oder Text in großer Schrift enthalten würde, um zu zeigen, wie damit umgegangen wird
Und ich frage mich, ob es auch eine Version nur mit Panels ohne Window-Chrome gibt
Ich pflege einen in Rust geschriebenen Tiling Window Manager, und ich kann mir wirklich nicht vorstellen, die Geduld für solche Arbeit in JS/TS aufzubringen. Großen Respekt an mathuo. Das ist eines der coolsten Dinge, die ich in letzter Zeit auf HN gesehen habe
Wirklich schön. SolidJS-Unterstützung wäre auch toll. Ich habe derzeit keine starke Präferenz zwischen React und Solid, aber ein paar Projekte, in denen ich das einsetzen könnte, sind in SolidJS geschrieben
Es ist Zeit, Mosaic neu zu bauen. https://github.com/mlajtos/mosaic
Hervorragend. Kennt jemand eine ähnliche reine Library ohne Abhängigkeiten für allgemeine Desktop-Steuerelemente wie Menüs, also über das hinaus, was HTML von sich aus bietet?
0: https://daisyui.com