From cc2641095fb381307aa16ac097fe82e4963b8b65 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Fri, 6 Aug 2021 03:53:44 +0200 Subject: [PATCH] Fix automatic positioning of ButtonDropdown after changing float property --- ts/components/WithDropdown.svelte | 30 +++++++++++++++++-- ts/editor/HandleControl.svelte | 4 +++ ts/editor/ImageHandle.svelte | 50 ++++++++++++++++++++----------- ts/editor/ImageHandleFloat.svelte | 20 +++++++++---- 4 files changed, 79 insertions(+), 25 deletions(-) diff --git a/ts/components/WithDropdown.svelte b/ts/components/WithDropdown.svelte index 487f7fa61..cf14700f5 100644 --- a/ts/components/WithDropdown.svelte +++ b/ts/components/WithDropdown.svelte @@ -8,27 +8,51 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import { setContext, onDestroy } from "svelte"; import { dropdownKey } from "./context-keys"; + export let autoOpen = false; + export let autoClose: boolean | "inside" | "outside" = true; + + export let placement = "bottom-start"; + setContext(dropdownKey, { dropdown: true, "data-bs-toggle": "dropdown", }); let dropdown: Dropdown; + let dropdownObject: Dropdown; const noop = () => {}; function createDropdown(toggle: HTMLElement): Dropdown { /* avoid focusing element toggle on menu activation */ toggle.focus = noop; - dropdown = new Dropdown(toggle, {} as any); + dropdown = new Dropdown(toggle, { + autoClose, + popperConfig: (defaultConfig: Record) => ({ + ...defaultConfig, + placement, + }), + } as any); - return dropdown; + if (autoOpen) { + dropdown.show(); + } + + dropdownObject = { + show: dropdown.show.bind(dropdown), + toggle: dropdown.toggle.bind(dropdown), + hide: dropdown.hide.bind(dropdown), + update: dropdown.update.bind(dropdown), + dispose: dropdown.dispose.bind(dropdown), + }; + + return dropdownObject; } onDestroy(() => dropdown?.dispose());