canvas
base-widget
export interface BaseWidgetPropertiesInterface<T> extends RenderableComponentProperties { // <...> subProperties: T}
subProperties
export interface BaseWidgetPropertiesInterface extends RenderableComponentProperties { getWidth: () => number, getHeight: () => number, getOffset: () => [number, number], isWidgetPicked: () => boolean, setIsWidgetPicked: (val: boolean) => void, setOffset: (val: [number, number]) => void, setHeight: (val: number) => void, setWidth: (val: number) => void, getTitle: () => string, setTitle: (val: string) => void, getIsActive: () => boolean, setIsActive: (val: boolean) => void, getContent: () => () => JSXElement, setContent: (value: () => JSXElement) => void, isSelectable: boolean}
createContextBoilerplate<T>
import {Context, createContext, JSXElement, useContext} from "solid-js";import {BaseWidgetPropertiesInterface} from "./BaseWidgetCreator.tsx";export const BaseWidgetContext: Context<BaseWidgetPropertiesInterface | undefined> = createContext();export function useBaseWidgetContext(): BaseWidgetPropertiesInterface { const context: BaseWidgetPropertiesInterface | undefined = useContext(BaseWidgetContext); if (!context) throw new Error("useBaseWidgetContext must be used within a BaseWidgetProvider"); return context;}export function BaseWidgetProvider(props: { properties: BaseWidgetPropertiesInterface; children: JSXElement }) { return ( <BaseWidgetContext.Provider value={props.properties}> {props.children} </BaseWidgetContext.Provider> );}