UNPKG

@sveltestrap/sveltestrap

Version:

Bootstrap components for Svelte

53 lines (45 loc) 1.27 kB
import { createPopper } from '@popperjs/core'; // Code derived from https://github.com/bryanmylee/svelte-popperjs/blob/master/src/index.ts export function createPopperActions(initOptions) { let contentNode; let options = initOptions; let popperInstance = null; let referenceNode; const initPopper = () => { if (referenceNode && contentNode) { popperInstance = createPopper(referenceNode, contentNode, options); } }; const deinitPopper = () => { if (popperInstance) { popperInstance.destroy(); popperInstance = null; } }; const referenceAction = (node) => { referenceNode = node; initPopper(); return { destroy() { deinitPopper(); } }; }; const contentAction = (node, contentOptions) => { contentNode = node; options = Object.assign(Object.assign({}, initOptions), contentOptions); initPopper(); return { update(newContentOptions) { options = Object.assign(Object.assign({}, initOptions), newContentOptions); if (popperInstance && options) { popperInstance.setOptions(options); } }, destroy() { deinitPopper(); } }; }; return [referenceAction, contentAction, () => popperInstance]; }