import { defaultValueForControl, normalizeControls, } from './controlSchemaNormalize' import { controlToFormField, } from './controlSchemaFormFields' import { controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewItems, } from './controlSchemaAdapters' import type { ControlComponentBindingsConfig, ControlSchema, ControlSchemaOptions, ControlValues, UseControlSchemaReturn, } from './controlSchemaTypes' export type * from './controlSchemaTypes' export { mergeControlWorkspaceOptions, } from './controlWorkspaceOptions' export { useControlWorkspace, } from './useControlWorkspace' export { controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, } from './controlComponentBindings' export { controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, getDefaultControlView, } from './controlSchemaAdapters' export { defineControlModel, isControlModelBinding, resolveControlModel, } from './controlSchemaModel' export { defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, } from './controlSchemaDoseDesign' /** Preserve literal control keys while marking an object as a MINT control schema. */ export function defineControls(controls: TControls): TControls { return controls } /** Preserve literal SDK component binding ids while marking an object as generated workspace component bindings. */ export function defineControlComponentBindings( bindings: TBindings, ): TBindings { return bindings } /** Build default values for a control schema, matching FormBuilder field defaults. */ export function getControlDefaults( controls: TControls, ): ControlValues { const values: Record = {} for (const control of normalizeControls(controls)) { values[control.name] = defaultValueForControl(control.definition, control.type) } return values as ControlValues } /** Prepare FormBuilder, SettingsModal, AppTopBar settings, AppSidebar, and initial values from one compact control model. */ export function useControlSchema( controls: TControls, options: ControlSchemaOptions = {}, ): UseControlSchemaReturn { const formSchema = controlsToFormSchema(controls, options) const settingsSchema = controlsToSettingsSchema(controls, options) const topBarSettingsConfig = controlsToTopBarSettingsConfig(controls, options) const sidebarPanels = controlsToSidebarPanels(controls, options) const viewItems = controlsToViewItems(controls, options) const viewIds = viewItems.map(item => item.id) const defaultView = viewIds[0] ?? '' const sectionSchemas = controlsToSectionFormSchemas(controls, options) return { controls, fields: normalizeControls(controls, options).map(controlToFormField), formSchema, form: { schema: formSchema, }, settingsSchema, settings: { schema: settingsSchema, }, topBarSettingsConfig, topBarSettings: { showSettings: true, settingsConfig: topBarSettingsConfig, }, sidebarPanels, viewIds, viewItems, defaultView, sectionSchemas, sidebar: { panels: sidebarPanels, forms: sectionSchemas, viewIds, viewItems, defaultView, }, initialValues: getControlDefaults(controls), sectionSchema: (sectionId: string) => controlsToSectionFormSchema(controls, sectionId, options), } }