UNPKG

svelte-golden-layout

Version:
97 lines (73 loc) 2.84 kB
# svelte-golden-layout [GoldenLayout 2.x](https://github.com/golden-layout/golden-layout) Wrapper for Svelte. The `GoldenLayout` component accepts child content (i.e. a slot) that renders each tab. This was extracted from a personal project, so its initial scope was rather limited. Expect rough edges, but bug reports and contributions are welcome! [**Live Demo**](https://sillyfreak.github.io/svelte-golden-layout/) **Features** - pass the layout (`config`) via props - render tab content via the default [slot](https://svelte.dev/docs#slot_let); `let:id`, `let:componentType`, and `let:componentState` contain the specific tab's content - automatic resizing of the layout within its containing HTML element **Known limitations** - changing the layout recreates the whole thing, i.e. new components are created for each tab - popout of tabs does not work yet - dragging the tabset dividers results in text selection ## Installation & development This library can be installed from NPM: ```sh # from NPM npm i svelte-golden-layout ``` For development, clone the repo and add the dependency as shown: ```sh # clone this repo and package the library git clone https://github.com/SillyFreak/svelte-golden-layout cd svelte-golden-layout npm i npm run package # add it & golden-layout to your own project cd ../your-own-project npm i golden-layout ../svelte-golden-layout/package ``` ## simple example In this example, `svelte:component` is used to select a specific component for each tab, and the `componentState` object is passed as props to that component: ```svelte <script lang="ts"> import type { LayoutConfig } from 'golden-layout'; import 'svelte-golden-layout/css/themes/goldenlayout-light-theme.css'; import GoldenLayout from 'svelte-golden-layout'; // ... import a Test component const components = { Test }; const layout: LayoutConfig = { root: { type: 'row', content: [ { type: 'component', componentType: 'Test', componentState: { someProp = 1, anotherProp = 1, } }, { type: 'component', componentType: 'Test', }, ], }, }; </script> <div class="layout-container"> <GoldenLayout config={layout} let:componentType let:componentState> <svelte:component this={components[componentType]} {...componentState} /> </GoldenLayout> </div> <style> .layout-container { width: 800px; height: 600px; margin: 150px auto; border: 1px solid black; } </style> ``` You can also run this repo as an app ([live demo](https://sillyfreak.github.io/svelte-golden-layout/)); the example code is in [index.svelte](src/routes/index.svelte) and [\_Test.svelte](src/routes/_Test.svelte), and demonstates both features and shortcomings of the library.