:warning: Warning: This library is still in development. Expect breaking changes and unstable features. Use at your own risk.
There is has been a movement taking place over many years of the web moving into the world of full-fledged applications. I suspect that this trend will continue alongside Progressive Web Apps (for example take a look at the new Window Management API). I think that multi-window applications will become a desirable quite soon.
Svelte Popout is a Svelte component designed to create and manage popout windows, allowing for a seamless integration of detached UI elements into Svelte applications. This library provides a straightforward way to dynamically control popout windows with features such as sizing, positioning, and lifecycle callbacks.
To install svelte-popout, use npm or yarn:
npm install svelte-popout
# OR
yarn add svelte-popout
Import Popout.svelte in your Svelte component and use it as a wrapper around any content you wish to display in a popout window.
<script>
import Popout from 'svelte-popout';
let width = 400;
let height = 300;
let top = 100;
let left = 100;
function onWindowInitialised(popupWindow) {
if (popupWindow) {
console.log('Popout window has been initialised');
} else {
console.error('Failed to open popout window');
}
}
function onClose() {
console.log("Popout window closed")
}
</script>
<Popout {width} {height} {top} {left} windowInitialised={onWindowInitialised} on:close={onClose}>
<div>Your content here</div>
</Popout>
width (optional): The width of the popout window. Minimum value is 100.height (optional): The height of the popout window. Minimum value is 100.left (optional): The left position of the popout window relative to the screen.top (optional): The top position of the popout window relative to the screen.positionPolling (optional): Enables polling to update the popout window's position. Defaults to true.positionPollingMs (optional): Sets the polling interval in milliseconds. Defaults to 100.copyStyles (default true): Sets a mutation observer on the top window's head and syncs the stylesheets with the child window. This is necessary for proper component styling.windowInitialised (optional): A callback function that is called when the popout window is initialised.close: Dispatched when the popout window is closed.beforeunload: Dispatched before the popout window unloads, good for saving data.This library includes commands for development and testing:
npm run dev: Starts the development server.npm run build: Builds the library for production.npm run preview: Serves the built app for preview.npm run test: Runs integration and unit tests.npm run lint: Lints the codebase.npm run format: Formats the codebase using Prettier.Contributions are welcome! Please feel free to submit a pull request or open an issue if you have feedback or ideas to improve svelte-popout.
svelte-popout is MIT licensed.