UNPKG

js-draw

Version:

Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript.

58 lines (57 loc) 2.39 kB
import { ReactiveValue } from '../../../util/ReactiveValue.mjs'; export default class EdgeToolbarLayoutManager { // @internal constructor(setSidebarContent, sidebarTitle, sidebarVisibility, announceForAccessibility, localization) { this.setSidebarContent = setSidebarContent; this.sidebarTitle = sidebarTitle; this.sidebarVisibility = sidebarVisibility; this.announceForAccessibility = announceForAccessibility; this.localization = localization; this.visibleWidgetContent = ReactiveValue.fromInitialValue(null); } /** Creates a dropdown within `parent`. */ createToolMenu(parent) { const contentElem = document.createElement('div'); let result = null; const visible = ReactiveValue.fromCallback(() => { return this.visibleWidgetContent.get() === result && this.sidebarVisibility.get(); }, [this.visibleWidgetContent, this.sidebarVisibility]); result = { visible, requestShow: () => { this.setSidebarContent(contentElem); this.sidebarTitle.set(parent.getTitle()); // Set visibleWidgetContent first -- this causes the previously visible (if any) // item to not be sent a shown event. this.visibleWidgetContent.set(result); this.sidebarVisibility.set(true); this.announceForAccessibility(this.localization.dropdownShown(parent.getTitle())); }, onActivated: () => { // TODO: Only request show when in sidebar mode //result?.requestShow(); }, requestHide: () => { if (visible.get()) { this.sidebarVisibility.set(false); } }, appendChild: (item) => { contentElem.appendChild(item); }, clearChildren: () => { contentElem.replaceChildren(); }, destroy: () => { result?.requestHide(); if (contentElem.parentElement) { contentElem.remove(); } if (this.visibleWidgetContent.get() === result) { this.visibleWidgetContent.set(null); } }, }; return result; } }