/** * Pure JSON components - no TypeScript wrappers needed * Interfaces are defined in src/lib/json-ui/interfaces/ * JSON definitions are in src/components/json-definitions/ */ import { createJsonComponent } from './create-json-component' import { createJsonComponentWithHooks } from './create-json-component-with-hooks' import type { LoadingFallbackProps, NavigationItemProps, PageHeaderContentProps, SaveIndicatorProps, LazyBarChartProps, LazyLineChartProps, LazyD3BarChartProps, SeedDataManagerProps, StorageSettingsProps, GitHubBuildStatusProps, ComponentBindingDialogProps, DataSourceEditorDialogProps, ComponentTreeProps, TreeCardProps, FilterInputProps, CopyButtonProps, InputProps, PasswordInputProps, ImageProps, PopoverProps, MenuProps, FileUploadProps, AccordionProps, BindingEditorProps, AppLayoutProps, AppRouterLayoutProps, AppMainPanelProps, AppDialogsProps, } from './interfaces' // Import JSON definitions import loadingFallbackDef from '@/components/json-definitions/loading-fallback.json' import navigationItemDef from '@/components/json-definitions/navigation-item.json' import pageHeaderContentDef from '@/components/json-definitions/page-header-content.json' import componentBindingDialogDef from '@/components/json-definitions/component-binding-dialog.json' import dataSourceEditorDialogDef from '@/components/json-definitions/data-source-editor-dialog.json' import githubBuildStatusDef from '@/components/json-definitions/github-build-status.json' import saveIndicatorDef from '@/components/json-definitions/save-indicator.json' import componentTreeDef from '@/components/json-definitions/component-tree.json' import seedDataManagerDef from '@/components/json-definitions/seed-data-manager.json' import lazyD3BarChartDef from '@/components/json-definitions/lazy-d3-bar-chart.json' import storageSettingsDef from '@/components/json-definitions/storage-settings.json' import treeCardDef from '@/components/json-definitions/tree-card.json' import filterInputDef from '@/components/json-definitions/filter-input.json' import copyButtonDef from '@/components/json-definitions/copy-button.json' import inputDef from '@/components/json-definitions/input.json' import passwordInputDef from '@/components/json-definitions/password-input.json' import imageDef from '@/components/json-definitions/image.json' import popoverDef from '@/components/json-definitions/popover.json' import menuDef from '@/components/json-definitions/menu.json' import fileUploadDef from '@/components/json-definitions/file-upload.json' import accordionDef from '@/components/json-definitions/accordion.json' import bindingEditorDef from '@/components/json-definitions/binding-editor.json' import appLayoutDef from '@/components/json-definitions/app-layout.json' import appRouterLayoutDef from '@/components/json-definitions/app-router-layout.json' import appMainPanelDef from '@/components/json-definitions/app-main-panel.json' // Create pure JSON components (no hooks) export const LoadingFallback = createJsonComponent(loadingFallbackDef) export const NavigationItem = createJsonComponent(navigationItemDef) export const PageHeaderContent = createJsonComponent(pageHeaderContentDef) export const ComponentBindingDialog = createJsonComponent(componentBindingDialogDef) export const DataSourceEditorDialog = createJsonComponent(dataSourceEditorDialogDef) export const GitHubBuildStatus = createJsonComponent(githubBuildStatusDef) export const SeedDataManager = createJsonComponent(seedDataManagerDef) export const TreeCard = createJsonComponent(treeCardDef) // Create JSON components with hooks export const SaveIndicator = createJsonComponentWithHooks(saveIndicatorDef, { hooks: { hookData: { hookName: 'useSaveIndicator', args: (props) => [props.lastSaved ?? null] } } }) export const ComponentTree = createJsonComponentWithHooks(componentTreeDef, { hooks: { treeData: { hookName: 'useComponentTree', args: (props) => [props.components || [], props.selectedId || null] } } }) export const LazyD3BarChart = createJsonComponentWithHooks(lazyD3BarChartDef, { hooks: { chartData: { hookName: 'useD3BarChart', args: (props) => [props.data, props.width, props.height] } } }) export const StorageSettings = createJsonComponentWithHooks(storageSettingsDef, { hooks: { backendInfo: { hookName: 'useStorageBackendInfo', args: (props) => [props.backend || null] } } }) export const FilterInput = createJsonComponentWithHooks(filterInputDef, { hooks: { focusState: { hookName: 'useFocusState', args: () => [] } } }) export const CopyButton = createJsonComponentWithHooks(copyButtonDef, { hooks: { copyState: { hookName: 'useCopyState', args: (props) => [props.text] } } }) export const Input = createJsonComponent(inputDef) export const PasswordInput = createJsonComponentWithHooks(passwordInputDef, { hooks: { visibility: { hookName: 'usePasswordVisibility', args: () => [] } } }) export const Image = createJsonComponentWithHooks(imageDef, { hooks: { imageState: { hookName: 'useImageState', args: (props) => [props.onLoad, props.onError] } } }) export const Popover = createJsonComponentWithHooks(popoverDef, { hooks: { state: { hookName: 'usePopoverState', args: () => [] } } }) export const Menu = createJsonComponentWithHooks(menuDef, { hooks: { menuState: { hookName: 'useMenuState', args: () => [] } } }) export const FileUpload = createJsonComponentWithHooks(fileUploadDef, { hooks: { uploadState: { hookName: 'useFileUpload', args: (props) => [props.onFilesSelected, props.maxSize, props.disabled] } } }) export const Accordion = createJsonComponentWithHooks(accordionDef, { hooks: { accordionState: { hookName: 'useAccordion', args: (props) => [props.type || 'single', props.defaultOpen || []] } } }) export const BindingEditor = createJsonComponentWithHooks(bindingEditorDef, { hooks: { editorState: { hookName: 'useBindingEditor', args: (props) => [props.bindings, props.onChange] } } }) export const AppLayout = createJsonComponentWithHooks(appLayoutDef, { hooks: { hookData: { hookName: 'useAppLayout', args: (props) => [props] } } }) export const AppRouterLayout = createJsonComponentWithHooks(appRouterLayoutDef, { hooks: { hookData: { hookName: 'useAppRouterLayout', args: (props) => [props] } } }) export const AppMainPanel = createJsonComponent(appMainPanelDef) // All components converted to pure JSON! 🎉