Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | /** * Widget registry — central map of widget type → React component. * Can be extended per suite using registry.register(). */ import type {IWidgetProps, IWidgetRegistry, WidgetType} from '@feasibleone/blong'; import type React from 'react'; import {AutoCompleteWidget} from './AutoCompleteWidget.js'; import {BooleanWidget} from './BooleanWidget.js'; import {ChipsWidget} from './ChipsWidget.js'; import {ComponentWidget} from './ComponentWidget.js'; import {CurrencyWidget} from './CurrencyWidget.js'; import {DateRangeWidget} from './DateRangeWidget.js'; import {DateTimeWidget} from './DateTimeWidget.js'; import {DateWidget} from './DateWidget.js'; import {DropdownTreeWidget} from './DropdownTreeWidget.js'; import {DropdownWidget} from './DropdownWidget.js'; import {FileWidget} from './FileWidget.js'; import {ImageUploadWidget} from './ImageUploadWidget.js'; import {ImageWidget} from './ImageWidget.js'; import {IntegerWidget} from './IntegerWidget.js'; import {JsonWidget} from './JsonWidget.js'; import {MaskWidget} from './MaskWidget.js'; import {MultiSelectTreeTableWidget} from './MultiSelectTreeTableWidget.js'; import {MultiSelectTreeWidget} from './MultiSelectTreeWidget.js'; import {MultiSelectWidget} from './MultiSelectWidget.js'; import {NavigatorWidget} from './NavigatorWidget.js'; import {NumberWidget} from './NumberWidget.js'; import {PasswordWidget} from './PasswordWidget.js'; import {SelectTableWidget} from './SelectTableWidget.js'; import {SelectWidget} from './SelectWidget.js'; import {TableWidget} from './TableWidget.js'; import {TextWidget} from './TextWidget.js'; import {TextareaWidget} from './TextareaWidget.js'; import {TimeWidget} from './TimeWidget.js'; class WidgetRegistryImpl implements IWidgetRegistry { private map = new Map<string, React.ComponentType<IWidgetProps>>(); register(type: string, component: React.ComponentType<IWidgetProps>): void { this.map.set(type, component); } get(type: string): React.ComponentType<IWidgetProps> | undefined { return this.map.get(type); } list(): string[] { return [...this.map.keys()]; } } /** Global singleton widget registry */ export const widgetRegistry = new WidgetRegistryImpl(); const builtins: Array<[WidgetType, React.ComponentType<IWidgetProps>]> = [ ['input', TextWidget as React.ComponentType<IWidgetProps>], ['text', TextareaWidget as React.ComponentType<IWidgetProps>], ['textArea', TextareaWidget as React.ComponentType<IWidgetProps>], ['number', NumberWidget as React.ComponentType<IWidgetProps>], ['currency', CurrencyWidget as React.ComponentType<IWidgetProps>], ['percent', NumberWidget as React.ComponentType<IWidgetProps>], ['integer', IntegerWidget as React.ComponentType<IWidgetProps>], ['boolean', BooleanWidget as React.ComponentType<IWidgetProps>], ['checkbox', BooleanWidget as React.ComponentType<IWidgetProps>], ['date', DateWidget as React.ComponentType<IWidgetProps>], ['time', TimeWidget as React.ComponentType<IWidgetProps>], ['dateTime', DateTimeWidget as React.ComponentType<IWidgetProps>], ['dateRange', DateRangeWidget as React.ComponentType<IWidgetProps>], ['password', PasswordWidget as React.ComponentType<IWidgetProps>], ['mask', MaskWidget as React.ComponentType<IWidgetProps>], ['chips', ChipsWidget as React.ComponentType<IWidgetProps>], ['autocomplete', AutoCompleteWidget as React.ComponentType<IWidgetProps>], ['dropdown', DropdownWidget as React.ComponentType<IWidgetProps>], ['dropdownTree', DropdownTreeWidget as React.ComponentType<IWidgetProps>], ['multiSelect', MultiSelectWidget as React.ComponentType<IWidgetProps>], ['multiSelectTree', MultiSelectTreeWidget as React.ComponentType<IWidgetProps>], ['multiSelectPanel', MultiSelectWidget as React.ComponentType<IWidgetProps>], ['multiSelectTreeTable', MultiSelectTreeTableWidget as React.ComponentType<IWidgetProps>], ['select', SelectWidget as React.ComponentType<IWidgetProps>], ['selectTable', SelectTableWidget as React.ComponentType<IWidgetProps>], ['table', TableWidget as React.ComponentType<IWidgetProps>], ['navigator', NavigatorWidget as React.ComponentType<IWidgetProps>], ['json', JsonWidget as React.ComponentType<IWidgetProps>], ['file', FileWidget as React.ComponentType<IWidgetProps>], ['image', ImageWidget as React.ComponentType<IWidgetProps>], ['imageUpload', ImageUploadWidget as React.ComponentType<IWidgetProps>], ['component', ComponentWidget as React.ComponentType<IWidgetProps>], ]; /** Register all built-in widgets synchronously */ export function registerBuiltinWidgets(): void { for (const [type, component] of builtins) { widgetRegistry.register(type, component); } } // Auto-register on module load so widgets are always available registerBuiltinWidgets(); |