File size: 1,437 Bytes
c6535db | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import { BaseWidget } from "./BaseWidget.js";
import { ButtonWidget } from "./ButtonWidget.js";
import { BooleanWidget } from "./BooleanWidget.js";
import { SliderWidget } from "./SliderWidget.js";
import { KnobWidget } from "./KnobWidget.js";
import { ComboWidget } from "./ComboWidget.js";
import { NumberWidget } from "./NumberWidget.js";
import { TextWidget } from "./TextWidget.js";
import { LegacyWidget } from "./LegacyWidget.js";
export function toClass(cls, ...args) {
return args[0] instanceof cls ? args[0] : new cls(...args);
}
export function toConcreteWidget(widget, node, wrapLegacyWidgets = true) {
if (widget instanceof BaseWidget) return widget
const narrowedWidget = widget
switch (narrowedWidget.type) {
case "button": return toClass(ButtonWidget, narrowedWidget, node)
case "toggle": return toClass(BooleanWidget, narrowedWidget, node)
case "slider": return toClass(SliderWidget, narrowedWidget, node)
case "knob": return toClass(KnobWidget, narrowedWidget, node)
case "combo": return toClass(ComboWidget, narrowedWidget, node)
case "number": return toClass(NumberWidget, narrowedWidget, node)
case "string": return toClass(TextWidget, narrowedWidget, node)
case "text": return toClass(TextWidget, narrowedWidget, node)
default: {
if (wrapLegacyWidgets) return toClass(LegacyWidget, widget, node)
}
}
} |