/** * Stores all DOM widgets that are used in the canvas. */ import { defineStore } from 'pinia' import { markRaw, ref } from 'vue' import type { PositionConfig } from '@/composables/element/useAbsolutePosition' import type { BaseDOMWidget } from '@/scripts/domWidget' export interface DomWidgetState extends PositionConfig { // Raw widget instance widget: BaseDOMWidget visible: boolean readonly: boolean zIndex: number } export const useDomWidgetStore = defineStore('domWidget', () => { const widgetStates = ref>(new Map()) // Register a widget with the store const registerWidget = ( widget: BaseDOMWidget ) => { widgetStates.value.set(widget.id, { widget: markRaw(widget) as unknown as BaseDOMWidget, visible: true, readonly: false, zIndex: 0, pos: [0, 0], size: [0, 0] }) } // Unregister a widget from the store const unregisterWidget = (widgetId: string) => { widgetStates.value.delete(widgetId) } return { widgetStates, registerWidget, unregisterWidget } })