import type { BioTemplateEnvelope, TemplateCollectionEnvelope, } from '../templates' import type { ControlWorkspaceFormBinding, ControlWorkspaceOptions, ControlWorkspacePillNavBinding, ControlWorkspaceSidebarBinding, ControlWorkspaceTopBarSettingsBinding, UseControlSchemaReturn, UseControlWorkspaceReturn, } from './controlSchemaTypes' import { useControlWorkspace, } from './useControlSchema' import { useBioTemplateControls, type BioTemplateControlSchema, type BioTemplateControlTarget, } from './useBioTemplateControls' import { useBioTemplateComponents, type UseBioTemplateComponentsReturn, } from './useBioTemplateComponents' import { flattenWorkspaceComponentBindings, type BioTemplateWorkspaceComponentBindings, } from './flattenWorkspaceBindings' export type BioTemplateWorkspaceTarget = BioTemplateControlTarget export interface BioTemplateRendererBinding { target: BioTemplateEnvelope | TemplateCollectionEnvelope } export interface BioTemplateWorkspaceBindings extends BioTemplateWorkspaceComponentBindings { renderer: BioTemplateRendererBinding | null form: ControlWorkspaceFormBinding sidebar: ControlWorkspaceSidebarBinding topBar: UseControlWorkspaceReturn['bindings']['topBar'] topBarSettings: ControlWorkspaceTopBarSettingsBinding pillNav: ControlWorkspacePillNavBinding } export interface UseBioTemplateWorkspaceReturn extends BioTemplateWorkspaceComponentBindings { target: BioTemplateWorkspaceTarget controls: UseControlSchemaReturn workspace: UseControlWorkspaceReturn controlSchema: BioTemplateControlSchema components: UseBioTemplateComponentsReturn values: UseControlWorkspaceReturn['values'] activeView: UseControlWorkspaceReturn['activeView'] form: ControlWorkspaceFormBinding sidebar: ControlWorkspaceSidebarBinding topBar: UseControlWorkspaceReturn['topBar'] pillNav: ControlWorkspacePillNavBinding topBarSettings: ControlWorkspaceTopBarSettingsBinding bindings: BioTemplateWorkspaceBindings renderer: BioTemplateRendererBinding | null } /** * One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components. * * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */ export function useBioTemplateWorkspace( target: BioTemplateWorkspaceTarget, options: ControlWorkspaceOptions = {} ): UseBioTemplateWorkspaceReturn { const controls = useBioTemplateControls(target, options) const workspace = useControlWorkspace(controls.controls, options) const components = useBioTemplateComponents(target) const renderer = isTemplateObjectTarget(target) ? { target } : null const componentBindings = flattenWorkspaceComponentBindings({ componentBindings: components.bindings, componentBindingsById: components.componentBindingsById, componentImports: components.imports, componentProps: components.componentProps, componentPropsById: components.componentPropsById, componentPropsByComponent: components.componentPropsByComponent, componentSnippets: components.snippets, componentUsage: components.usage, getComponentProps: components.getComponentProps, }) const bindings: BioTemplateWorkspaceBindings = { renderer, form: workspace.bindings.form, sidebar: workspace.bindings.sidebar, topBar: workspace.bindings.topBar, topBarSettings: workspace.bindings.topBarSettings, pillNav: workspace.bindings.pillNav, ...componentBindings, } return { target, controls, workspace, controlSchema: controls.controls, components, values: workspace.values, activeView: workspace.activeView, form: workspace.form, sidebar: workspace.sidebar, topBar: workspace.topBar, pillNav: workspace.pillNav, topBarSettings: workspace.topBarSettings, bindings, renderer, ...componentBindings, } } function isTemplateObjectTarget( target: BioTemplateWorkspaceTarget ): target is BioTemplateEnvelope | TemplateCollectionEnvelope { return typeof target !== 'string' }