diff --git a/src/components/graph/vueWidgets/widgetRegistry.ts b/src/components/graph/vueWidgets/widgetRegistry.ts new file mode 100644 index 000000000..0eede8b8d --- /dev/null +++ b/src/components/graph/vueWidgets/widgetRegistry.ts @@ -0,0 +1,80 @@ +/** + * Widget type registry and component mapping for Vue-based widgets + */ +import type { Component } from 'vue' + +// Component imports +import WidgetButton from './WidgetButton.vue' +import WidgetChart from './WidgetChart.vue' +import WidgetColorPicker from './WidgetColorPicker.vue' +import WidgetFileUpload from './WidgetFileUpload.vue' +import WidgetGalleria from './WidgetGalleria.vue' +import WidgetImage from './WidgetImage.vue' +import WidgetImageCompare from './WidgetImageCompare.vue' +import WidgetInputText from './WidgetInputText.vue' +import WidgetMultiSelect from './WidgetMultiSelect.vue' +import WidgetSelect from './WidgetSelect.vue' +import WidgetSelectButton from './WidgetSelectButton.vue' +import WidgetSlider from './WidgetSlider.vue' +import WidgetTextarea from './WidgetTextarea.vue' +import WidgetToggleSwitch from './WidgetToggleSwitch.vue' +import WidgetTreeSelect from './WidgetTreeSelect.vue' + +/** + * Enum of all available widget types + */ +export enum WidgetType { + BUTTON = 'BUTTON', + STRING = 'STRING', + INT = 'INT', + FLOAT = 'FLOAT', + NUMBER = 'NUMBER', + BOOLEAN = 'BOOLEAN', + COMBO = 'COMBO', + COLOR = 'COLOR', + MULTISELECT = 'MULTISELECT', + SELECTBUTTON = 'SELECTBUTTON', + SLIDER = 'SLIDER', + TEXTAREA = 'TEXTAREA', + TOGGLESWITCH = 'TOGGLESWITCH', + CHART = 'CHART', + IMAGE = 'IMAGE', + IMAGECOMPARE = 'IMAGECOMPARE', + GALLERIA = 'GALLERIA', + FILEUPLOAD = 'FILEUPLOAD', + TREESELECT = 'TREESELECT' +} + +/** + * Maps widget types to their corresponding Vue components + * Components will be added as they are implemented + */ +export const widgetTypeToComponent: Record = { + // Components will be uncommented as they are implemented + [WidgetType.BUTTON]: WidgetButton, + [WidgetType.STRING]: WidgetInputText, + [WidgetType.INT]: WidgetSlider, + [WidgetType.FLOAT]: WidgetSlider, + [WidgetType.NUMBER]: WidgetSlider, // For compatibility + [WidgetType.BOOLEAN]: WidgetToggleSwitch, + [WidgetType.COMBO]: WidgetSelect, + [WidgetType.COLOR]: WidgetColorPicker, + [WidgetType.MULTISELECT]: WidgetMultiSelect, + [WidgetType.SELECTBUTTON]: WidgetSelectButton, + [WidgetType.SLIDER]: WidgetSlider, + [WidgetType.TEXTAREA]: WidgetTextarea, + [WidgetType.TOGGLESWITCH]: WidgetToggleSwitch, + [WidgetType.CHART]: WidgetChart, + [WidgetType.IMAGE]: WidgetImage, + [WidgetType.IMAGECOMPARE]: WidgetImageCompare, + [WidgetType.GALLERIA]: WidgetGalleria, + [WidgetType.FILEUPLOAD]: WidgetFileUpload, + [WidgetType.TREESELECT]: WidgetTreeSelect +} + +/** + * Helper function to get widget component by type + */ +export function getWidgetComponent(type: string): Component | undefined { + return widgetTypeToComponent[type] +}