@morscherlab/mint-sdk 1.0.0-beta.3 → 1.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +9 -2
  2. package/dist/__tests__/composables/experiment-utils.test.d.ts +1 -0
  3. package/dist/__tests__/composables/useApi.test.d.ts +1 -0
  4. package/dist/components/AppContainer.vue.d.ts +1 -1
  5. package/dist/components/AppLayout.vue.d.ts +20 -1
  6. package/dist/components/AppSidebar.vue.d.ts +56 -4
  7. package/dist/components/AppTopBar.vue.d.ts +7 -25
  8. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +3 -1
  9. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +1 -0
  10. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +5 -0
  11. package/dist/components/ComponentBindingRenderer.vue.d.ts +44 -0
  12. package/dist/components/ControlWorkspaceView.vue.d.ts +24 -7
  13. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +149 -0
  14. package/dist/components/ExperimentTimeline.vue.d.ts +1 -1
  15. package/dist/components/FormBuilder.vue.d.ts +9 -9
  16. package/dist/components/PlateMapEditor.vue.d.ts +1 -1
  17. package/dist/components/PluginWorkspaceView.vue.d.ts +310 -0
  18. package/dist/components/SettingsModal.vue.d.ts +1 -1
  19. package/dist/components/WellPlate.vue.d.ts +2 -2
  20. package/dist/components/index.d.ts +3 -12
  21. package/dist/components/index.js +3 -3
  22. package/dist/components/{AppPageSelector.vue.d.ts → internal/AppPageSelectorInternal.vue.d.ts} +1 -1
  23. package/dist/components/{AppPillNav.vue.d.ts → internal/AppPillNavInternal.vue.d.ts} +3 -1
  24. package/dist/components/{CalendarGridPanel.vue.d.ts → internal/CalendarGridPanelInternal.vue.d.ts} +1 -1
  25. package/dist/components/internal/FormSectionRenderer.vue.d.ts +4 -4
  26. package/dist/components/{WellEditPopup.vue.d.ts → internal/WellEditPopupInternal.vue.d.ts} +1 -1
  27. package/dist/{components-D_Sr0adg.js → components-BkGF4B4y.js} +4484 -3967
  28. package/dist/components-BkGF4B4y.js.map +1 -0
  29. package/dist/composables/experiment-utils.d.ts +8 -0
  30. package/dist/composables/index.d.ts +5 -7
  31. package/dist/composables/index.js +4 -4
  32. package/dist/composables/useAppExperiment.d.ts +31 -2
  33. package/dist/composables/useBioTemplateComponents.d.ts +5 -3
  34. package/dist/composables/useBioTemplatePackWorkspace.d.ts +3 -2
  35. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +6 -5
  36. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -4
  37. package/dist/composables/useControlSchema.d.ts +43 -21
  38. package/dist/composables/usePluginClient.d.ts +5 -2
  39. package/dist/{composables-C3dpXQN5.js → composables-CHsME9H1.js} +40 -28
  40. package/dist/composables-CHsME9H1.js.map +1 -0
  41. package/dist/index.d.ts +5 -12
  42. package/dist/index.js +5 -5
  43. package/dist/install.js +2 -2
  44. package/dist/styles.css +3625 -3651
  45. package/dist/templates/componentBindings.d.ts +13 -0
  46. package/dist/templates/index.d.ts +3 -3
  47. package/dist/templates/index.js +2 -2
  48. package/dist/{templates-50NPjaxL.js → templates-B5jmTWuk.js} +111 -56
  49. package/dist/templates-B5jmTWuk.js.map +1 -0
  50. package/dist/types/components.d.ts +6 -25
  51. package/dist/types/index.d.ts +1 -1
  52. package/dist/{useScheduleDrag-D4oWdh41.js → useScheduleDrag-BgzpQT53.js} +160 -117
  53. package/dist/useScheduleDrag-BgzpQT53.js.map +1 -0
  54. package/package.json +1 -1
  55. package/src/__tests__/components/ActionItem.test.ts +6 -6
  56. package/src/__tests__/components/AppLayout.test.ts +44 -0
  57. package/src/__tests__/components/AppPageSelector.test.ts +8 -8
  58. package/src/__tests__/components/AppPillNav.test.ts +53 -6
  59. package/src/__tests__/components/AppSidebar.test.ts +126 -0
  60. package/src/__tests__/components/AppToastContainer.test.ts +0 -11
  61. package/src/__tests__/components/AppTopBar.test.ts +182 -119
  62. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +7 -1
  63. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +15 -1
  64. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +26 -1
  65. package/src/__tests__/components/CalendarGridPanel.test.ts +3 -3
  66. package/src/__tests__/components/ComponentBindingRenderer.test.ts +161 -0
  67. package/src/__tests__/components/ControlWorkspaceView.test.ts +134 -63
  68. package/src/__tests__/components/DateTimePicker.test.ts +2 -2
  69. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +185 -0
  70. package/src/__tests__/components/PluginWorkspaceView.test.ts +548 -0
  71. package/src/__tests__/composables/experiment-utils.test.ts +30 -0
  72. package/src/__tests__/composables/useApi.test.ts +30 -0
  73. package/src/__tests__/composables/useAppExperiment.test.ts +100 -1
  74. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +6 -3
  75. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +6 -6
  76. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +6 -1
  77. package/src/__tests__/composables/useControlSchema.test.ts +150 -36
  78. package/src/__tests__/composables/usePluginClient.test.ts +99 -2
  79. package/src/__tests__/docs/frontendDocsCatalog.test.ts +120 -25
  80. package/src/__tests__/templates/templates.test.ts +12 -0
  81. package/src/components/AppAvatarMenu.vue +3 -3
  82. package/src/components/AppLayout.story.vue +39 -0
  83. package/src/components/AppLayout.vue +83 -2
  84. package/src/components/AppPluginSwitcher.vue +5 -5
  85. package/src/components/AppSidebar.story.vue +113 -5
  86. package/src/components/AppSidebar.vue +144 -24
  87. package/src/components/AppTopBar.story.vue +2 -5
  88. package/src/components/AppTopBar.vue +35 -425
  89. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +2 -2
  90. package/src/components/BioTemplateExperimentWorkspaceView.vue +6 -0
  91. package/src/components/BioTemplatePackWorkspaceView.story.vue +4 -4
  92. package/src/components/BioTemplatePackWorkspaceView.vue +1 -0
  93. package/src/components/BioTemplatePresetWorkspaceView.story.vue +14 -2
  94. package/src/components/BioTemplatePresetWorkspaceView.vue +11 -2
  95. package/src/components/BioTemplateRenderer.vue +15 -227
  96. package/src/components/ComponentBindingRenderer.story.vue +57 -0
  97. package/src/components/ComponentBindingRenderer.vue +308 -0
  98. package/src/components/ControlWorkspaceView.story.vue +20 -9
  99. package/src/components/ControlWorkspaceView.vue +43 -12
  100. package/src/components/DatePicker.vue +2 -2
  101. package/src/components/DateTimePicker.vue +2 -2
  102. package/src/components/DoseDesignWorkspaceView.story.vue +77 -0
  103. package/src/components/DoseDesignWorkspaceView.vue +255 -0
  104. package/src/components/ExperimentPopover.vue +2 -6
  105. package/src/components/ExperimentSelectorModal.vue +6 -5
  106. package/src/components/FormBuilder.story.vue +190 -0
  107. package/src/components/PluginWorkspaceView.story.vue +334 -0
  108. package/src/components/PluginWorkspaceView.vue +708 -0
  109. package/src/components/SettingsModal.story.vue +87 -0
  110. package/src/components/WellPlate.vue +2 -2
  111. package/src/components/index.ts +3 -12
  112. package/src/components/{AppPageSelector.vue → internal/AppPageSelectorInternal.vue} +9 -9
  113. package/src/components/internal/AppPillNavInternal.vue +194 -0
  114. package/src/components/{CalendarGridPanel.vue → internal/CalendarGridPanelInternal.vue} +1 -1
  115. package/src/components/{WellEditPopup.vue → internal/WellEditPopupInternal.vue} +3 -3
  116. package/src/composables/experiment-utils.ts +26 -0
  117. package/src/composables/index.ts +21 -7
  118. package/src/composables/useApi.ts +9 -2
  119. package/src/composables/useAppExperiment.ts +85 -13
  120. package/src/composables/useBioTemplateComponents.ts +12 -0
  121. package/src/composables/useBioTemplatePackWorkspace.ts +6 -2
  122. package/src/composables/useBioTemplatePresetWorkspace.ts +10 -21
  123. package/src/composables/useBioTemplateWorkspace.ts +6 -4
  124. package/src/composables/useControlSchema.ts +157 -69
  125. package/src/composables/usePluginClient.ts +50 -9
  126. package/src/index.ts +6 -563
  127. package/src/styles/components/app-layout.css +82 -0
  128. package/src/styles/components/app-pill-nav.css +70 -0
  129. package/src/styles/components/app-sidebar.css +119 -0
  130. package/src/styles/components/app-top-bar.css +0 -235
  131. package/src/styles/index.css +0 -1
  132. package/src/templates/componentBindings.ts +38 -0
  133. package/src/templates/index.ts +4 -0
  134. package/src/types/components.ts +6 -31
  135. package/src/types/index.ts +2 -6
  136. package/dist/__tests__/composables/usePluginApi.test.d.ts +0 -13
  137. package/dist/components/FormFieldRenderer.vue.d.ts +0 -28
  138. package/dist/components/FormSection.vue.d.ts +0 -30
  139. package/dist/components/GroupingModal.vue.d.ts +0 -12
  140. package/dist/components/SettingsButton.vue.d.ts +0 -30
  141. package/dist/components/ToastNotification.vue.d.ts +0 -2
  142. package/dist/components-D_Sr0adg.js.map +0 -1
  143. package/dist/composables/usePluginApi.d.ts +0 -22
  144. package/dist/composables-C3dpXQN5.js.map +0 -1
  145. package/dist/templates-50NPjaxL.js.map +0 -1
  146. package/dist/useScheduleDrag-D4oWdh41.js.map +0 -1
  147. package/src/__tests__/components/FormCompatibility.test.ts +0 -94
  148. package/src/__tests__/components/GroupingModal.test.ts +0 -73
  149. package/src/__tests__/components/SettingsButton.test.ts +0 -44
  150. package/src/__tests__/composables/usePluginApi.test.ts +0 -81
  151. package/src/components/AppPillNav.vue +0 -71
  152. package/src/components/FormFieldRenderer.vue +0 -35
  153. package/src/components/FormSection.vue +0 -37
  154. package/src/components/GroupingModal.story.vue +0 -52
  155. package/src/components/GroupingModal.vue +0 -61
  156. package/src/components/SettingsButton.story.vue +0 -58
  157. package/src/components/SettingsButton.vue +0 -64
  158. package/src/components/ToastNotification.vue +0 -9
  159. package/src/composables/usePluginApi.ts +0 -32
  160. package/src/styles/components/settings-button.css +0 -31
  161. /package/dist/__tests__/components/{FormCompatibility.test.d.ts → ComponentBindingRenderer.test.d.ts} +0 -0
  162. /package/dist/__tests__/components/{GroupingModal.test.d.ts → DoseDesignWorkspaceView.test.d.ts} +0 -0
  163. /package/dist/__tests__/components/{SettingsButton.test.d.ts → PluginWorkspaceView.test.d.ts} +0 -0
  164. /package/dist/components/{ActionItem.vue.d.ts → internal/ActionItemInternal.vue.d.ts} +0 -0
  165. /package/src/components/{ActionItem.vue → internal/ActionItemInternal.vue} +0 -0
@@ -12,6 +12,15 @@ export interface BioTemplateComponentBinding {
12
12
  export interface BioTemplateComponentPropsBinding extends BioTemplateComponentBinding {
13
13
  propsObject: Record<string, unknown>;
14
14
  }
15
+ export interface BioTemplateResolvedComponentBinding extends Omit<BioTemplateComponentBinding, 'props'> {
16
+ /** Prop names advertised by the static template/component compatibility catalog. */
17
+ propNames: readonly string[];
18
+ /** Concrete props ready for direct `v-bind="componentBindingsById[id].props"` use. */
19
+ props: Record<string, unknown>;
20
+ /** Backward-compatible alias for callers that already consume componentProps entries. */
21
+ propsObject: Record<string, unknown>;
22
+ }
23
+ export type BioTemplateComponentBindingsById = Record<string, BioTemplateResolvedComponentBinding>;
15
24
  export type BioTemplateComponentPropsById = Record<string, Record<string, unknown>>;
16
25
  export type BioTemplateComponentPropsByComponent = Record<string, Record<string, unknown>[]>;
17
26
  export interface BioTemplateComponentPropsLookupOptions {
@@ -47,6 +56,10 @@ export interface BioTemplateComponentUsage {
47
56
  export declare function listBioTemplateComponentBindings(): Record<TemplateId, BioTemplateComponentBinding[]>;
48
57
  export declare function getBioTemplateComponentBindings(target: BioTemplateComponentTarget): BioTemplateComponentBinding[];
49
58
  export declare function toBioTemplateComponentProps(target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope): BioTemplateComponentPropsBinding[];
59
+ /** Return resolved component bindings with concrete props for direct slot rendering. */
60
+ export declare function toBioTemplateComponentBindings(target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope): BioTemplateResolvedComponentBinding[];
61
+ /** Return resolved component bindings keyed by stable template component id. */
62
+ export declare function toBioTemplateComponentBindingsById(target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope): BioTemplateComponentBindingsById;
50
63
  /** Return component props keyed by stable binding id for direct `v-bind="componentPropsById[id]"` use. */
51
64
  export declare function toBioTemplateComponentPropsById(target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope): BioTemplateComponentPropsById;
52
65
  /** Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding. */
@@ -2,14 +2,14 @@ export { assertTemplateEnvelope, bioTemplatePresetControlValuesToOptions, create
2
2
  export type { BioTemplateControlValues, } from './builders';
3
3
  export { bioTemplateCatalog, getBioTemplateInfo, listBioTemplateCatalog, searchBioTemplateCatalog, } from './catalog';
4
4
  export { bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, createBioTemplateControlToolkit, getBioTemplateControlDefaults, getBioTemplateControlSchema, listBioTemplateControlSchemas, listBioTemplatePresetControlSchemas, requireBioTemplateControlSchema, } from './controlSchemas';
5
- export { getBioTemplateComponentProps, getBioTemplateComponentBindings, listBioTemplateComponentBindings, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, } from './componentBindings';
6
- export type { BioTemplateComponentPropsByComponent, BioTemplateComponentPropsById, BioTemplateComponentPropsLookupOptions, } from './componentBindings';
5
+ export { getBioTemplateComponentProps, getBioTemplateComponentBindings, listBioTemplateComponentBindings, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, } from './componentBindings';
6
+ export type { BioTemplateComponentBindingsById, BioTemplateComponentPropsByComponent, BioTemplateComponentPropsById, BioTemplateComponentPropsLookupOptions, } from './componentBindings';
7
7
  export { bioTemplatePresets, getBioTemplatePresetInfo, listBioTemplatePresets, searchBioTemplatePresets, } from './presets';
8
8
  export { bioTemplatePacks, getBioTemplatePackInfo, listBioTemplatePacks, searchBioTemplatePacks, } from './packs';
9
9
  export { toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, } from './adapters';
10
10
  export type { AssayFeature, AssayFeatureType, AssayMatrixColumnsAdapterResult, AssayMatrixDataFrameAdapterResult, AssayMatrixRowsAdapterResult, AssayMatrixTemplate, AssayMatrixTemplateData, AssayMeasurement, AssaySample, BioTemplateEnvelope, CalibrationAcceptance, CalibrationAcceptanceInput, CalibrationCurveColumnsAdapterResult, CalibrationCurveDataFrameAdapterResult, CalibrationCurveRowsAdapterResult, CalibrationCurveTemplate, CalibrationCurveTemplateData, CalibrationModel, CalibrationPoint, CalibrationPointInput, CalibrationPointRole, CalibrationPointStatus, CompoundDoseSeries, ControlDefinition, ControlRole, CreateBioTemplatePackCollectionOptions, CreateAssayMatrixTemplateOptions, CreateCalibrationCurveTemplateOptions, CreateDoseResponseTemplateOptions, CreateElisaAssayCollectionOptions, CreateFlowCytometryAssayCollectionOptions, CreateWesternBlotAssayCollectionOptions, CreateFlowCytometryPanelTemplateOptions, CreateInstrumentRunTemplateOptions, CreateLcmsBatchCollectionOptions, CreatePlateMapTemplateOptions, CreateProtocolStepsTemplateOptions, CreateQpcrExpressionCollectionOptions, CreateQpcrPlateTemplateOptions, CreateReagentListTemplateOptions, CreateSampleSheetTemplateOptions, CreateSamplePrepTemplateOptions, CreateTimeCourseTemplateOptions, CreateWellPlateScreenCollectionOptions, DoseConditionsAdapterResult, DoseResponseTemplate, DoseResponseTemplateData, FlowControlKind, FlowCytometryPanelTemplate, FlowCytometryPanelTemplateData, FlowMarkerPurpose, FlowPanelColumnsAdapterResult, FlowPanelControl, FlowPanelDataFrameAdapterResult, FlowPanelMarker, FlowPanelRowsAdapterResult, InstrumentMethod, InstrumentMethodInput, InstrumentRunColumnsAdapterResult, InstrumentRunDataFrameAdapterResult, InstrumentRunItem, InstrumentRunItemInput, InstrumentRunItemKind, InstrumentRunRowsAdapterResult, InstrumentRunStatus, InstrumentRunTemplate, InstrumentRunTemplateData, DataFrameAdapterResult, DataFrameTemplate, PlateMapEditorAdapterResult, PlateMapTemplate, PlateMapTemplateData, ProtocolColumnsAdapterResult, ProtocolDataFrameAdapterResult, ProtocolRowsAdapterResult, ProtocolStepRecord, ProtocolStepsAdapterResult, ProtocolStepsTemplate, ProtocolStepsTemplateData, QpcrChemistry, QpcrColumnsAdapterResult, QpcrControlKind, QpcrDataFrameAdapterResult, QpcrPlateTemplate, QpcrPlateTemplateData, QpcrReaction, QpcrRowsAdapterResult, QpcrSample, QpcrTarget, QpcrWellMapAdapterResult, ReagentColumnsAdapterResult, ReagentDataFrameAdapterResult, ReagentKind, ReagentListItemsAdapterResult, ReagentListTemplate, ReagentListTemplateData, ReagentRecord, ReagentTemplateInput, ReagentRowsAdapterResult, SampleColumn, SampleColumnType, SampleColumnsAdapterResult, SampleDataFrameAdapterResult, SampleGroupDefinition, SampleOptionsAdapterResult, SamplePrepColumnsAdapterResult, SamplePrepDataFrameAdapterResult, SamplePrepRowsAdapterResult, SamplePrepStatus, SamplePrepStep, SamplePrepStepInput, SamplePrepStepType, SamplePrepTemplate, SamplePrepTemplateData, SampleRecord, SampleRowsAdapterResult, SampleSheetTemplate, SampleSheetTemplateData, TimeCourseColumnsAdapterResult, TimeCourseCondition, TimeCourseDataFrameAdapterResult, TimeCourseRowsAdapterResult, TimeCourseSample, TimeCourseStepsAdapterResult, TimeCourseTemplate, TimeCourseTemplateData, TimePoint, TimeUnit, TemplateId, TemplatePackId, TemplatePresetId, TemplateCollection, TemplateCollectionEnvelope, TemplateDataFrameAdapterResult, TemplateKind, TemplatePlateMap, TemplateSample, TemplateWell, WellMapAdapterResult, } from './types';
11
11
  export type { BioTemplateCatalogEntry, } from './catalog';
12
- export type { BioTemplateComponentBinding, BioTemplateComponentImport, BioTemplateComponentPropsBinding, BioTemplateComponentSnippet, BioTemplateComponentSnippetOptions, BioTemplateComponentTarget, BioTemplateComponentUsage, BioTemplateComponentUsageOptions, } from './componentBindings';
12
+ export type { BioTemplateComponentBinding, BioTemplateComponentImport, BioTemplateComponentPropsBinding, BioTemplateResolvedComponentBinding, BioTemplateComponentSnippet, BioTemplateComponentSnippetOptions, BioTemplateComponentTarget, BioTemplateComponentUsage, BioTemplateComponentUsageOptions, } from './componentBindings';
13
13
  export type { BioTemplateControlSchema, BioTemplateControlTarget, } from './controlSchemas';
14
14
  export type { BioTemplatePresetEntry, } from './presets';
15
15
  export type { BioTemplatePackEntry, } from './packs';
@@ -1,2 +1,2 @@
1
- import { $ as toTemplateDataFrame, $t as bioTemplatePacks, A as toInstrumentRunColumns, At as createTimeCourseTemplate, B as toQpcrRows, Bt as validateFlowCytometryPanelData, C as toCalibrationCurveDataFrame, Ct as createQpcrExpressionCollection, D as toFlowPanelColumns, Dt as createSampleSheetTemplate, E as toDoseLayoutState, Et as createSamplePrepTemplate, F as toProtocolDataFrame, Ft as extractTemplateCollection, G as toReagentRows, Gt as validateReagentListData, H as toReagentColumns, Ht as validatePlateMapData, I as toProtocolRows, It as getTemplateData, J as toSampleOptions, Jt as validateTimeCourseData, K as toSampleColumns, Kt as validateSamplePrepData, L as toProtocolSteps, Lt as validateAssayMatrixData, M as toInstrumentRunRows, Mt as createWesternBlotAssayCollection, N as toPlateMapEditorState, Nt as ensureTemplateEnvelope, O as toFlowPanelDataFrame, Ot as createTemplateCollection, P as toProtocolColumns, Pt as ensureTemplateFromCollection, Q as toSampleRows, Qt as searchBioTemplatePresets, R as toQpcrColumns, Rt as validateCalibrationCurveData, S as toCalibrationCurveColumns, St as createProtocolStepsTemplate, T as toDoseConditions, Tt as createReagentListTemplate, U as toReagentDataFrame, Ut as validateProtocolStepsData, V as toQpcrWellPlateWells, Vt as validateInstrumentRunData, W as toReagentListItems, Wt as validateQpcrPlateData, X as toSamplePrepDataFrame, Xt as getBioTemplatePresetInfo, Y as toSamplePrepColumns, Yt as bioTemplatePresets, Z as toSamplePrepRows, Zt as listBioTemplatePresets, _ as toBioTemplateComponentSnippets, _t as createFlowCytometryAssayCollection, a as getBioTemplateControlDefaults, an as listBioTemplateCatalog, at as toWellPlateWells, b as toAssayMatrixDataFrame, bt as createLcmsBatchCollection, c as listBioTemplatePresetControlSchemas, ct as bioTemplatePresetControlValuesToOptions, d as getBioTemplateComponentProps, dt as createBioTemplatePresetCollection, en as getBioTemplatePackInfo, et as toTimeCourseColumns, f as listBioTemplateComponentBindings, ft as createBioTemplatePresetCollectionFromControls, g as toBioTemplateComponentPropsById, gt as createElisaAssayCollection, h as toBioTemplateComponentPropsByComponent, ht as createDoseResponseTemplate, i as createBioTemplateControlToolkit, in as getBioTemplateInfo, it as toWellMapArray, j as toInstrumentRunDataFrame, jt as createWellPlateScreenCollection, k as toFlowPanelRows, kt as createTemplateEnvelope, l as requireBioTemplateControlSchema, lt as createAssayMatrixTemplate, m as toBioTemplateComponentProps, mt as createDefaultBioTemplate, n as bioTemplateControlsToSectionFormSchemas, nn as searchBioTemplatePacks, nt as toTimeCourseRows, o as getBioTemplateControlSchema, on as searchBioTemplateCatalog, ot as TEMPLATE_COLLECTION_KEY, p as toBioTemplateComponentImports, pt as createCalibrationCurveTemplate, q as toSampleDataFrame, qt as validateSampleSheetData, r as bioTemplateControlsToSidebarPanels, rn as bioTemplateCatalog, rt as toTimeCourseSteps, s as listBioTemplateControlSchemas, st as assertTemplateEnvelope, t as bioTemplateControlsToFormSchema, tn as listBioTemplatePacks, tt as toTimeCourseDataFrame, u as getBioTemplateComponentBindings, ut as createBioTemplatePackCollection, v as toBioTemplateComponentUsage, vt as createFlowCytometryPanelTemplate, w as toCalibrationCurveRows, wt as createQpcrPlateTemplate, x as toAssayMatrixRows, xt as createPlateMapTemplate, y as toAssayMatrixColumns, yt as createInstrumentRunTemplate, z as toQpcrDataFrame, zt as validateDoseResponseData } from "../templates-50NPjaxL.js";
2
- export { TEMPLATE_COLLECTION_KEY, assertTemplateEnvelope, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createPlateMapTemplate, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createSamplePrepTemplate, createSampleSheetTemplate, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWesternBlotAssayCollection, ensureTemplateEnvelope, ensureTemplateFromCollection, extractTemplateCollection, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getTemplateData, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, requireBioTemplateControlSchema, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData };
1
+ import { $ as toSamplePrepRows, $t as listBioTemplatePresets, A as toFlowPanelDataFrame, At as createTemplateCollection, B as toQpcrColumns, Bt as validateCalibrationCurveData, C as toAssayMatrixRows, Ct as createPlateMapTemplate, D as toDoseConditions, Dt as createReagentListTemplate, E as toCalibrationCurveRows, Et as createQpcrPlateTemplate, F as toPlateMapEditorState, Ft as ensureTemplateEnvelope, G as toReagentDataFrame, Gt as validateProtocolStepsData, H as toQpcrRows, Ht as validateFlowCytometryPanelData, I as toProtocolColumns, It as ensureTemplateFromCollection, J as toSampleColumns, Jt as validateSamplePrepData, K as toReagentListItems, Kt as validateQpcrPlateData, L as toProtocolDataFrame, Lt as extractTemplateCollection, M as toInstrumentRunColumns, Mt as createTimeCourseTemplate, N as toInstrumentRunDataFrame, Nt as createWellPlateScreenCollection, O as toDoseLayoutState, Ot as createSamplePrepTemplate, P as toInstrumentRunRows, Pt as createWesternBlotAssayCollection, Q as toSamplePrepDataFrame, Qt as getBioTemplatePresetInfo, R as toProtocolRows, Rt as getTemplateData, S as toAssayMatrixDataFrame, St as createLcmsBatchCollection, T as toCalibrationCurveDataFrame, Tt as createQpcrExpressionCollection, U as toQpcrWellPlateWells, Ut as validateInstrumentRunData, V as toQpcrDataFrame, Vt as validateDoseResponseData, W as toReagentColumns, Wt as validatePlateMapData, X as toSampleOptions, Xt as validateTimeCourseData, Y as toSampleDataFrame, Yt as validateSampleSheetData, Z as toSamplePrepColumns, Zt as bioTemplatePresets, _ as toBioTemplateComponentPropsByComponent, _t as createDoseResponseTemplate, a as getBioTemplateControlDefaults, an as bioTemplateCatalog, at as toTimeCourseSteps, b as toBioTemplateComponentUsage, bt as createFlowCytometryPanelTemplate, c as listBioTemplatePresetControlSchemas, cn as searchBioTemplateCatalog, ct as TEMPLATE_COLLECTION_KEY, d as getBioTemplateComponentProps, dt as createAssayMatrixTemplate, en as searchBioTemplatePresets, et as toSampleRows, f as listBioTemplateComponentBindings, ft as createBioTemplatePackCollection, g as toBioTemplateComponentProps, gt as createDefaultBioTemplate, h as toBioTemplateComponentImports, ht as createCalibrationCurveTemplate, i as createBioTemplateControlToolkit, in as searchBioTemplatePacks, it as toTimeCourseRows, j as toFlowPanelRows, jt as createTemplateEnvelope, k as toFlowPanelColumns, kt as createSampleSheetTemplate, l as requireBioTemplateControlSchema, lt as assertTemplateEnvelope, m as toBioTemplateComponentBindingsById, mt as createBioTemplatePresetCollectionFromControls, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplatePackInfo, nt as toTimeCourseColumns, o as getBioTemplateControlSchema, on as getBioTemplateInfo, ot as toWellMapArray, p as toBioTemplateComponentBindings, pt as createBioTemplatePresetCollection, q as toReagentRows, qt as validateReagentListData, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplatePacks, rt as toTimeCourseDataFrame, s as listBioTemplateControlSchemas, sn as listBioTemplateCatalog, st as toWellPlateWells, t as bioTemplateControlsToFormSchema, tn as bioTemplatePacks, tt as toTemplateDataFrame, u as getBioTemplateComponentBindings, ut as bioTemplatePresetControlValuesToOptions, v as toBioTemplateComponentPropsById, vt as createElisaAssayCollection, w as toCalibrationCurveColumns, wt as createProtocolStepsTemplate, x as toAssayMatrixColumns, xt as createInstrumentRunTemplate, y as toBioTemplateComponentSnippets, yt as createFlowCytometryAssayCollection, z as toProtocolSteps, zt as validateAssayMatrixData } from "../templates-B5jmTWuk.js";
2
+ export { TEMPLATE_COLLECTION_KEY, assertTemplateEnvelope, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createPlateMapTemplate, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createSamplePrepTemplate, createSampleSheetTemplate, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWesternBlotAssayCollection, ensureTemplateEnvelope, ensureTemplateFromCollection, extractTemplateCollection, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getTemplateData, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, requireBioTemplateControlSchema, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData };
@@ -1036,7 +1036,7 @@ function startOfDay(date) {
1036
1036
  return copy;
1037
1037
  }
1038
1038
  //#endregion
1039
- //#region src/components/CalendarGridPanel.vue?vue&type=script&setup=true&lang.ts
1039
+ //#region src/components/internal/CalendarGridPanelInternal.vue?vue&type=script&setup=true&lang.ts
1040
1040
  var _hoisted_1$11 = { class: "mint-calendar-grid-panel" };
1041
1041
  var _hoisted_2$10 = { class: "mint-date-picker__header" };
1042
1042
  var _hoisted_3$9 = ["aria-label"];
@@ -1051,9 +1051,9 @@ var _hoisted_8$5 = [
1051
1051
  "onClick"
1052
1052
  ];
1053
1053
  //#endregion
1054
- //#region src/components/CalendarGridPanel.vue
1055
- var CalendarGridPanel_default = /* @__PURE__ */ defineComponent({
1056
- __name: "CalendarGridPanel",
1054
+ //#region src/components/internal/CalendarGridPanelInternal.vue
1055
+ var CalendarGridPanelInternal_default = /* @__PURE__ */ defineComponent({
1056
+ __name: "CalendarGridPanelInternal",
1057
1057
  props: {
1058
1058
  weekDays: {},
1059
1059
  monthYear: {},
@@ -1286,7 +1286,7 @@ var DatePicker_default = /* @__PURE__ */ defineComponent({
1286
1286
  role: "dialog",
1287
1287
  "aria-modal": "true",
1288
1288
  "aria-label": "Date picker"
1289
- }, [createVNode(CalendarGridPanel_default, {
1289
+ }, [createVNode(CalendarGridPanelInternal_default, {
1290
1290
  "week-days": unref(weekDays),
1291
1291
  "month-year": unref(monthYear),
1292
1292
  days: unref(calendarDays),
@@ -2643,7 +2643,7 @@ var DateTimePicker_default = /* @__PURE__ */ defineComponent({
2643
2643
  "leave-to-class": "mint-datetime-picker__dropdown-leave-to"
2644
2644
  }, {
2645
2645
  default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
2646
- createElementVNode("div", _hoisted_4$4, [createVNode(CalendarGridPanel_default, {
2646
+ createElementVNode("div", _hoisted_4$4, [createVNode(CalendarGridPanelInternal_default, {
2647
2647
  "week-days": unref(weekDays),
2648
2648
  "month-year": unref(monthYear),
2649
2649
  days: unref(calendarDays),
@@ -4232,9 +4232,14 @@ function getTypeDefault(type) {
4232
4232
  function defineControls(controls) {
4233
4233
  return controls;
4234
4234
  }
4235
- /** Flatten a simple view/section control data model into ControlWorkspaceView props for generated forms and sidebars. */
4235
+ /** Preserve literal SDK component binding ids while marking an object as generated workspace component bindings. */
4236
+ function defineControlComponentBindings(bindings) {
4237
+ return bindings;
4238
+ }
4239
+ /** Create a complete workspace component binding from a simple controls data model for ControlWorkspaceView, generated forms, and sidebars. */
4236
4240
  function defineControlModel(model) {
4237
- const { controls: rootControls, sections: rootSections, views: modelViews, componentProps, componentPropsById, ...baseOptions } = model;
4241
+ const { controls: rootControls, sections: rootSections, views: modelViews, components, componentBindings, componentProps, componentPropsById, ...baseOptions } = model;
4242
+ const resolvedComponentBindings = componentBindings ?? components;
4238
4243
  const controls = {};
4239
4244
  const views = {};
4240
4245
  const sections = {};
@@ -4280,6 +4285,7 @@ function defineControlModel(model) {
4280
4285
  return {
4281
4286
  controls,
4282
4287
  controlOptions,
4288
+ ...resolvedComponentBindings === void 0 ? {} : { componentBindings: resolvedComponentBindings },
4283
4289
  ...componentProps === void 0 ? {} : { componentProps },
4284
4290
  ...componentPropsById === void 0 ? {} : { componentPropsById }
4285
4291
  };
@@ -4302,6 +4308,19 @@ function controlValuesToComponentProps(values, mapping) {
4302
4308
  for (const [prop, source] of Object.entries(mapping)) props[prop] = typeof source === "function" ? source(values) : values[source];
4303
4309
  return props;
4304
4310
  }
4311
+ /** Map control workspace values into named SDK component bindings for direct slot rendering. */
4312
+ function controlValuesToComponentBindings(values, bindings) {
4313
+ if (bindings === void 0) return [];
4314
+ return normalizeControlComponentBindingConfigs(bindings).map((binding) => ({
4315
+ id: binding.id,
4316
+ component: binding.component,
4317
+ props: controlValuesToComponentProps(values, binding.props)
4318
+ }));
4319
+ }
4320
+ /** Map control workspace values into SDK component bindings keyed by binding id. */
4321
+ function controlValuesToComponentBindingsById(values, bindings) {
4322
+ return Object.fromEntries(controlValuesToComponentBindings(values, bindings).map((binding) => [binding.id, binding]));
4323
+ }
4305
4324
  /** Return a default WellPlate prop mapping for generated control workspaces. */
4306
4325
  function defineWellPlateControlProps(options = {}) {
4307
4326
  const selectedWells = options.selectedWells ?? sourceKey("selectedWells");
@@ -4337,6 +4356,18 @@ function defineWellPlateDoseControlProps(options = {}) {
4337
4356
  [options.doseId ?? "dose"]: defineDoseCalculatorControlProps(options.dose)
4338
4357
  };
4339
4358
  }
4359
+ /** Return named WellPlate + DoseCalculator component bindings for one dose-design control model. */
4360
+ function defineWellPlateDoseComponentBindings(options = {}) {
4361
+ return [{
4362
+ id: options.plateId ?? "plate",
4363
+ component: "WellPlate",
4364
+ props: defineWellPlateControlProps(options.plate)
4365
+ }, {
4366
+ id: options.doseId ?? "dose",
4367
+ component: "DoseCalculator",
4368
+ props: defineDoseCalculatorControlProps(options.dose)
4369
+ }];
4370
+ }
4340
4371
  /** Return a complete ControlWorkspaceView model for WellPlate + DoseCalculator dose design. */
4341
4372
  function defineDoseDesignControlModel(options = {}) {
4342
4373
  const viewId = options.viewId ?? "design";
@@ -4372,14 +4403,16 @@ function defineDoseDesignControlModel(options = {}) {
4372
4403
  default: options.molecularWeight ?? 300,
4373
4404
  min: 0
4374
4405
  };
4406
+ const componentProps = {
4407
+ ...options.componentProps,
4408
+ dose: {
4409
+ ...options.componentProps?.dose ?? {},
4410
+ ...options.includeMolecularWeight && options.componentProps?.dose?.molecularWeight === void 0 ? { molecularWeight: "molecularWeight" } : {}
4411
+ }
4412
+ };
4375
4413
  return defineControlModel({
4376
- componentPropsById: defineWellPlateDoseControlProps({
4377
- ...options.componentProps,
4378
- dose: {
4379
- ...options.componentProps?.dose ?? {},
4380
- ...options.includeMolecularWeight && options.componentProps?.dose?.molecularWeight === void 0 ? { molecularWeight: "molecularWeight" } : {}
4381
- }
4382
- }),
4414
+ componentBindings: defineWellPlateDoseComponentBindings(componentProps),
4415
+ componentPropsById: defineWellPlateDoseControlProps(componentProps),
4383
4416
  views: { [viewId]: {
4384
4417
  label: options.viewLabel ?? "Design",
4385
4418
  sections: { [sectionId]: {
@@ -4483,14 +4516,10 @@ function controlsToTopBarSettingsConfig(controls, options = {}, config = {}) {
4483
4516
  function controlsToViewIds(controls, options = {}) {
4484
4517
  return controlsToViewItems(controls, options).map((item) => item.id);
4485
4518
  }
4486
- /** Return AppPillNav-compatible view items for switching generated control sidebars. */
4519
+ /** Return AppTopBar pillNav-compatible view items for switching generated control sidebars. */
4487
4520
  function controlsToViewItems(controls, options = {}) {
4488
4521
  return Object.entries(controlsToSidebarPanels(controls, options)).filter(([, sections]) => sections.length > 0).map(([id]) => controlViewItem(id, options));
4489
4522
  }
4490
- /** Return AppTopBar-compatible tabs for the same views that drive generated AppSidebar panels. */
4491
- function controlsToTopBarTabs(controls, options = {}) {
4492
- return Object.entries(controlsToSidebarPanels(controls, options)).filter(([, sections]) => sections.length > 0).map(([id]) => controlTopBarTab(id, options));
4493
- }
4494
4523
  /** Return the first generated sidebar view ID, or an empty string when controls render no sidebar panels. */
4495
4524
  function getDefaultControlView(controls, options = {}) {
4496
4525
  return controlsToViewIds(controls, options)[0] ?? "";
@@ -4533,7 +4562,6 @@ function useControlSchema(controls, options = {}) {
4533
4562
  const sidebarPanels = controlsToSidebarPanels(controls, options);
4534
4563
  const viewItems = controlsToViewItems(controls, options);
4535
4564
  const viewIds = viewItems.map((item) => item.id);
4536
- const topBarTabs = controlsToTopBarTabs(controls, options);
4537
4565
  const defaultView = viewIds[0] ?? "";
4538
4566
  const sectionSchemas = controlsToSectionFormSchemas(controls, options);
4539
4567
  return {
@@ -4551,7 +4579,6 @@ function useControlSchema(controls, options = {}) {
4551
4579
  sidebarPanels,
4552
4580
  viewIds,
4553
4581
  viewItems,
4554
- topBarTabs,
4555
4582
  defaultView,
4556
4583
  sectionSchemas,
4557
4584
  sidebar: {
@@ -4583,7 +4610,6 @@ function useControlWorkspace(controlsOrModel, options = {}) {
4583
4610
  if (!schema.viewIds.includes(viewId)) return;
4584
4611
  if (activeView.value !== viewId) activeView.value = viewId;
4585
4612
  if (sidebar.activeView !== viewId) sidebar.activeView = viewId;
4586
- if (topBar.currentTabId !== viewId) topBar.currentTabId = viewId;
4587
4613
  if (pillNav.currentItemId !== viewId) pillNav.currentItemId = viewId;
4588
4614
  }
4589
4615
  function setValues(nextValues) {
@@ -4602,8 +4628,16 @@ function useControlWorkspace(controlsOrModel, options = {}) {
4602
4628
  if (mappings === void 0) return {};
4603
4629
  return Object.fromEntries(Object.entries(mappings).map(([id, mapping]) => [id, controlValuesToComponentProps(values, mapping)]));
4604
4630
  }
4631
+ function getComponentBindings(bindings) {
4632
+ return controlValuesToComponentBindings(values, bindings);
4633
+ }
4634
+ function getComponentBindingsById(bindings) {
4635
+ return controlValuesToComponentBindingsById(values, bindings);
4636
+ }
4605
4637
  const componentProps = computed(() => model?.componentProps === void 0 ? {} : getComponentProps(model.componentProps));
4606
4638
  const componentPropsById = computed(() => getComponentPropsById(model?.componentPropsById));
4639
+ const componentBindings = computed(() => getComponentBindings(model?.componentBindings));
4640
+ const componentBindingsById = computed(() => getComponentBindingsById(model?.componentBindings));
4607
4641
  const form = {
4608
4642
  ...schema.form,
4609
4643
  modelValue: values,
@@ -4622,11 +4656,6 @@ function useControlWorkspace(controlsOrModel, options = {}) {
4622
4656
  values,
4623
4657
  "onUpdate:values": setValues
4624
4658
  });
4625
- const topBar = reactive({
4626
- tabs: schema.topBarTabs,
4627
- currentTabId: activeView.value,
4628
- onTabSelect: (tab) => setActiveView(tab.id)
4629
- });
4630
4659
  const pillNav = reactive({
4631
4660
  items: schema.viewItems,
4632
4661
  currentItemId: activeView.value,
@@ -4637,29 +4666,25 @@ function useControlWorkspace(controlsOrModel, options = {}) {
4637
4666
  settingsConfig: topBarSettingsConfig,
4638
4667
  onSettingsValuesChange: setValues
4639
4668
  };
4669
+ const topBarProps = computed(() => ({
4670
+ pillNav: pillNav.items,
4671
+ currentPillId: pillNav.currentItemId,
4672
+ onPillSelect: pillNav.onSelect,
4673
+ ...topBarSettingsBinding
4674
+ }));
4640
4675
  const bindings = {
4641
4676
  form,
4642
4677
  sidebar,
4643
- topBar: computed(() => ({
4644
- pillNav: pillNav.items,
4645
- currentPillId: pillNav.currentItemId,
4646
- onPillSelect: pillNav.onSelect,
4647
- ...topBarSettingsBinding
4648
- })),
4649
- topBarTabs: computed(() => ({
4650
- tabs: topBar.tabs,
4651
- currentTabId: topBar.currentTabId,
4652
- onTabSelect: topBar.onTabSelect,
4653
- ...topBarSettingsBinding
4654
- })),
4678
+ topBar: topBarProps,
4655
4679
  topBarSettings: topBarSettingsBinding,
4656
4680
  pillNav,
4681
+ componentBindings,
4682
+ componentBindingsById,
4657
4683
  componentProps,
4658
4684
  componentPropsById
4659
4685
  };
4660
4686
  watch(activeView, syncActiveView, { flush: "sync" });
4661
4687
  watch(() => sidebar.activeView, syncActiveView, { flush: "sync" });
4662
- watch(() => topBar.currentTabId, syncActiveView, { flush: "sync" });
4663
4688
  watch(() => pillNav.currentItemId, syncActiveView, { flush: "sync" });
4664
4689
  return {
4665
4690
  ...schema,
@@ -4669,17 +4694,21 @@ function useControlWorkspace(controlsOrModel, options = {}) {
4669
4694
  topBarSettingsConfig,
4670
4695
  form,
4671
4696
  sidebar,
4672
- topBar,
4697
+ topBar: topBarProps,
4673
4698
  pillNav,
4674
4699
  topBarSettings: topBarSettingsBinding,
4675
4700
  bindings,
4701
+ componentBindings,
4702
+ componentBindingsById,
4676
4703
  componentProps,
4677
4704
  componentPropsById,
4678
4705
  setActiveView,
4679
4706
  setValues,
4680
4707
  resetValues,
4681
4708
  getComponentProps,
4682
- getComponentPropsById
4709
+ getComponentPropsById,
4710
+ getComponentBindings,
4711
+ getComponentBindingsById
4683
4712
  };
4684
4713
  }
4685
4714
  function normalizeControls(controls, options = {}) {
@@ -4825,6 +4854,26 @@ function optionValue(option) {
4825
4854
  function compactComponentPropsMap(mapping) {
4826
4855
  return Object.fromEntries(Object.entries(mapping).filter((entry) => entry[1] !== void 0));
4827
4856
  }
4857
+ function normalizeControlComponentBindingConfigs(bindings) {
4858
+ if (Array.isArray(bindings)) {
4859
+ const usedIds = /* @__PURE__ */ new Map();
4860
+ return bindings.map((binding) => ({
4861
+ id: uniqueComponentBindingId(binding.id ?? binding.component, usedIds),
4862
+ component: binding.component,
4863
+ props: binding.props
4864
+ }));
4865
+ }
4866
+ return Object.entries(bindings).map(([id, binding]) => ({
4867
+ id,
4868
+ component: binding.component,
4869
+ props: binding.props
4870
+ }));
4871
+ }
4872
+ function uniqueComponentBindingId(id, usedIds) {
4873
+ const count = usedIds.get(id) ?? 0;
4874
+ usedIds.set(id, count + 1);
4875
+ return count === 0 ? id : `${id}-${count + 1}`;
4876
+ }
4828
4877
  function sourceKey(key) {
4829
4878
  return key;
4830
4879
  }
@@ -4880,17 +4929,6 @@ function controlViewItem(viewId, options) {
4880
4929
  ...config?.icon !== void 0 ? { icon: config.icon } : {},
4881
4930
  ...config?.to !== void 0 ? { to: config.to } : {},
4882
4931
  ...config?.href !== void 0 ? { href: config.href } : {},
4883
- ...config?.disabled !== void 0 ? { disabled: config.disabled } : {}
4884
- };
4885
- }
4886
- function controlTopBarTab(viewId, options) {
4887
- const config = options.views?.[viewId];
4888
- return {
4889
- id: viewId,
4890
- label: config?.label ?? humanize(viewId),
4891
- ...config?.to !== void 0 ? { to: config.to } : {},
4892
- ...config?.href !== void 0 ? { href: config.href } : {},
4893
- ...config?.icon !== void 0 ? { icon: config.icon } : {},
4894
4932
  ...config?.disabled !== void 0 ? { disabled: config.disabled } : {},
4895
4933
  ...config?.children !== void 0 ? { children: config.children } : {}
4896
4934
  };
@@ -8129,6 +8167,14 @@ function toBioTemplateComponentProps(target) {
8129
8167
  const collection = extractTemplateCollection(target);
8130
8168
  return Object.values(collection).flatMap((template) => propsForTemplate(template));
8131
8169
  }
8170
+ /** Return resolved component bindings with concrete props for direct slot rendering. */
8171
+ function toBioTemplateComponentBindings(target) {
8172
+ return toBioTemplateComponentProps(target).map(toResolvedComponentBinding);
8173
+ }
8174
+ /** Return resolved component bindings keyed by stable template component id. */
8175
+ function toBioTemplateComponentBindingsById(target) {
8176
+ return Object.fromEntries(toBioTemplateComponentBindings(target).map((binding) => [binding.id, binding]));
8177
+ }
8132
8178
  /** Return component props keyed by stable binding id for direct `v-bind="componentPropsById[id]"` use. */
8133
8179
  function toBioTemplateComponentPropsById(target) {
8134
8180
  return Object.fromEntries(toBioTemplateComponentProps(target).map((binding) => [binding.id, binding.propsObject]));
@@ -8152,6 +8198,15 @@ function getBioTemplateComponentProps(target, component, options = {}) {
8152
8198
  return true;
8153
8199
  })?.propsObject;
8154
8200
  }
8201
+ function toResolvedComponentBinding(binding) {
8202
+ const { props: propNames, propsObject, ...rest } = binding;
8203
+ return {
8204
+ ...rest,
8205
+ propNames,
8206
+ props: propsObject,
8207
+ propsObject
8208
+ };
8209
+ }
8155
8210
  function toBioTemplateComponentImports(target) {
8156
8211
  const groups = /* @__PURE__ */ new Map();
8157
8212
  for (const binding of getBioTemplateComponentBindings(target)) {
@@ -9328,6 +9383,6 @@ function capitalize(value) {
9328
9383
  return value.charAt(0).toUpperCase() + value.slice(1);
9329
9384
  }
9330
9385
  //#endregion
9331
- export { toTemplateDataFrame as $, generateTimeSlots as $n, bioTemplatePacks as $t, toInstrumentRunColumns as A, ConcentrationInput_default as An, createTimeCourseTemplate as At, toQpcrRows as B, FileUploader_default as Bn, validateFlowCytometryPanelData as Bt, toCalibrationCurveDataFrame as C, getControlDefaults as Cn, createQpcrExpressionCollection as Ct, toFlowPanelColumns as D, useControlWorkspace as Dn, createSampleSheetTemplate as Dt, toDoseLayoutState as E, useControlSchema as En, createSamplePrepTemplate as Et, toProtocolDataFrame as F, useSequenceUtils as Fn, extractTemplateCollection as Ft, toReagentRows as G, compareTime as Gn, validateReagentListData as Gt, toReagentColumns as H, TagsInput_default as Hn, validatePlateMapData as Ht, toProtocolRows as I, FormulaInput_default as In, getTemplateData as It, toSampleOptions as J, findNearestTimeSlotIndex as Jn, validateTimeCourseData as Jt, toSampleColumns as K, durationMinutes as Kn, validateSamplePrepData as Kt, toProtocolSteps as L, ATOMIC_WEIGHTS as Ln, validateAssayMatrixData as Lt, toInstrumentRunRows as M, useConcentrationUnits as Mn, createWesternBlotAssayCollection as Mt, toPlateMapEditorState as N, MoleculeInput_default as Nn, ensureTemplateEnvelope as Nt, toFlowPanelDataFrame as O, getFieldRegistryEntry as On, createTemplateCollection as Ot, toProtocolColumns as P, SequenceInput_default as Pn, ensureTemplateFromCollection as Pt, toSampleRows as Q, fromMinutes as Qn, searchBioTemplatePresets as Qt, toQpcrColumns as R, useChemicalFormula as Rn, validateCalibrationCurveData as Rt, toCalibrationCurveColumns as S, defineWellPlateDoseControlProps as Sn, createProtocolStepsTemplate as St, toDoseConditions as T, mergeControlWorkspaceOptions as Tn, createReagentListTemplate as Tt, toReagentDataFrame as U, TimePicker_default as Un, validateProtocolStepsData as Ut, toQpcrWellPlateWells as V, NumberInput_default as Vn, validateInstrumentRunData as Vt, toReagentListItems as W, addMinutes as Wn, validateQpcrPlateData as Wt, toSamplePrepDataFrame as X, formatTime as Xn, getBioTemplatePresetInfo as Xt, toSamplePrepColumns as Y, formatDuration as Yn, bioTemplatePresets as Yt, toSamplePrepRows as Z, formatTimeSlot as Zn, listBioTemplatePresets as Zt, toBioTemplateComponentSnippets as _, defineControlModel as _n, normalizeOptionInput as _r, createFlowCytometryAssayCollection as _t, getBioTemplateControlDefaults as a, listBioTemplateCatalog as an, useTimeUtils as ar, toWellPlateWells as at, toAssayMatrixDataFrame as b, defineDoseDesignControlModel as bn, createLcmsBatchCollection as bt, listBioTemplatePresetControlSchemas as c, controlsToFormSchema as cn, MultiSelect_default as cr, bioTemplatePresetControlValuesToOptions as ct, getBioTemplateComponentProps as d, controlsToSettingsSchema as dn, useEventListener as dr, createBioTemplatePresetCollection as dt, getBioTemplatePackInfo as en, isTimeInRange as er, toTimeCourseColumns as et, listBioTemplateComponentBindings as f, controlsToSidebarPanels as fn, BaseSlider_default as fr, createBioTemplatePresetCollectionFromControls as ft, toBioTemplateComponentPropsById as g, controlsToViewItems as gn, BaseSelect_default as gr, createElisaAssayCollection as gt, toBioTemplateComponentPropsByComponent as h, controlsToViewIds as hn, BaseCheckbox_default as hr, createDoseResponseTemplate as ht, createBioTemplateControlToolkit as i, getBioTemplateInfo as in, toMinutes as ir, toWellMapArray as it, toInstrumentRunDataFrame as j, UnitInput_default as jn, createWellPlateScreenCollection as jt, toFlowPanelRows as k, getTypeDefault as kn, createTemplateEnvelope as kt, requireBioTemplateControlSchema as l, controlsToSectionFormSchema as ln, useListSelection as lr, createAssayMatrixTemplate as lt, toBioTemplateComponentProps as m, controlsToTopBarTabs as mn, BaseToggle_default as mr, createDefaultBioTemplate as mt, bioTemplateControlsToSectionFormSchemas as n, searchBioTemplatePacks as nn, rangesOverlap as nr, toTimeCourseRows as nt, getBioTemplateControlSchema as o, searchBioTemplateCatalog as on, DatePicker_default as or, TEMPLATE_COLLECTION_KEY as ot, toBioTemplateComponentImports as p, controlsToTopBarSettingsConfig as pn, BaseRadioGroup_default as pr, createCalibrationCurveTemplate as pt, toSampleDataFrame as q, findAvailableSlots as qn, validateSampleSheetData as qt, bioTemplateControlsToSidebarPanels as r, bioTemplateCatalog as rn, snapToSlot as rr, toTimeCourseSteps as rt, listBioTemplateControlSchemas as s, controlValuesToComponentProps as sn, useDropdownState as sr, assertTemplateEnvelope as st, bioTemplateControlsToFormSchema as t, listBioTemplatePacks as tn, parseTime as tr, toTimeCourseDataFrame as tt, getBioTemplateComponentBindings as u, controlsToSectionFormSchemas as un, useSelectionLimit as ur, createBioTemplatePackCollection as ut, toBioTemplateComponentUsage as v, defineControls as vn, BaseTextarea_default as vr, createFlowCytometryPanelTemplate as vt, toCalibrationCurveRows as w, getDefaultControlView as wn, createQpcrPlateTemplate as wt, toAssayMatrixRows as x, defineWellPlateControlProps as xn, createPlateMapTemplate as xt, toAssayMatrixColumns as y, defineDoseCalculatorControlProps as yn, BaseInput_default as yr, createInstrumentRunTemplate as yt, toQpcrDataFrame as z, DateTimePicker_default as zn, validateDoseResponseData as zt };
9386
+ export { toSamplePrepRows as $, findNearestTimeSlotIndex as $n, listBioTemplatePresets as $t, toFlowPanelDataFrame as A, mergeControlWorkspaceOptions as An, createTemplateCollection as At, toQpcrColumns as B, useSequenceUtils as Bn, validateCalibrationCurveData as Bt, toAssayMatrixRows as C, defineDoseCalculatorControlProps as Cn, BaseTextarea_default as Cr, createPlateMapTemplate as Ct, toDoseConditions as D, defineWellPlateDoseControlProps as Dn, createReagentListTemplate as Dt, toCalibrationCurveRows as E, defineWellPlateDoseComponentBindings as En, createQpcrPlateTemplate as Et, toPlateMapEditorState as F, ConcentrationInput_default as Fn, ensureTemplateEnvelope as Ft, toReagentDataFrame as G, FileUploader_default as Gn, validateProtocolStepsData as Gt, toQpcrRows as H, ATOMIC_WEIGHTS as Hn, validateFlowCytometryPanelData as Ht, toProtocolColumns as I, UnitInput_default as In, ensureTemplateFromCollection as It, toSampleColumns as J, TimePicker_default as Jn, validateSamplePrepData as Jt, toReagentListItems as K, NumberInput_default as Kn, validateQpcrPlateData as Kt, toProtocolDataFrame as L, useConcentrationUnits as Ln, extractTemplateCollection as Lt, toInstrumentRunColumns as M, useControlWorkspace as Mn, createTimeCourseTemplate as Mt, toInstrumentRunDataFrame as N, getFieldRegistryEntry as Nn, createWellPlateScreenCollection as Nt, toDoseLayoutState as O, getControlDefaults as On, createSamplePrepTemplate as Ot, toInstrumentRunRows as P, getTypeDefault as Pn, createWesternBlotAssayCollection as Pt, toSamplePrepDataFrame as Q, findAvailableSlots as Qn, getBioTemplatePresetInfo as Qt, toProtocolRows as R, MoleculeInput_default as Rn, getTemplateData as Rt, toAssayMatrixDataFrame as S, defineControls as Sn, normalizeOptionInput as Sr, createLcmsBatchCollection as St, toCalibrationCurveDataFrame as T, defineWellPlateControlProps as Tn, createQpcrExpressionCollection as Tt, toQpcrWellPlateWells as U, useChemicalFormula as Un, validateInstrumentRunData as Ut, toQpcrDataFrame as V, FormulaInput_default as Vn, validateDoseResponseData as Vt, toReagentColumns as W, DateTimePicker_default as Wn, validatePlateMapData as Wt, toSampleOptions as X, compareTime as Xn, validateTimeCourseData as Xt, toSampleDataFrame as Y, addMinutes as Yn, validateSampleSheetData as Yt, toSamplePrepColumns as Z, durationMinutes as Zn, bioTemplatePresets as Zt, toBioTemplateComponentPropsByComponent as _, controlsToTopBarSettingsConfig as _n, BaseSlider_default as _r, createDoseResponseTemplate as _t, getBioTemplateControlDefaults as a, bioTemplateCatalog as an, isTimeInRange as ar, toTimeCourseSteps as at, toBioTemplateComponentUsage as b, defineControlComponentBindings as bn, BaseCheckbox_default as br, createFlowCytometryPanelTemplate as bt, listBioTemplatePresetControlSchemas as c, searchBioTemplateCatalog as cn, snapToSlot as cr, TEMPLATE_COLLECTION_KEY as ct, getBioTemplateComponentProps as d, controlValuesToComponentProps as dn, DatePicker_default as dr, createAssayMatrixTemplate as dt, searchBioTemplatePresets as en, formatDuration as er, toSampleRows as et, listBioTemplateComponentBindings as f, controlsToFormSchema as fn, useDropdownState as fr, createBioTemplatePackCollection as ft, toBioTemplateComponentProps as g, controlsToSidebarPanels as gn, useEventListener as gr, createDefaultBioTemplate as gt, toBioTemplateComponentImports as h, controlsToSettingsSchema as hn, useSelectionLimit as hr, createCalibrationCurveTemplate as ht, createBioTemplateControlToolkit as i, searchBioTemplatePacks as in, generateTimeSlots as ir, toTimeCourseRows as it, toFlowPanelRows as j, useControlSchema as jn, createTemplateEnvelope as jt, toFlowPanelColumns as k, getDefaultControlView as kn, createSampleSheetTemplate as kt, requireBioTemplateControlSchema as l, controlValuesToComponentBindings as ln, toMinutes as lr, assertTemplateEnvelope as lt, toBioTemplateComponentBindingsById as m, controlsToSectionFormSchemas as mn, useListSelection as mr, createBioTemplatePresetCollectionFromControls as mt, bioTemplateControlsToSectionFormSchemas as n, getBioTemplatePackInfo as nn, formatTimeSlot as nr, toTimeCourseColumns as nt, getBioTemplateControlSchema as o, getBioTemplateInfo as on, parseTime as or, toWellMapArray as ot, toBioTemplateComponentBindings as p, controlsToSectionFormSchema as pn, MultiSelect_default as pr, createBioTemplatePresetCollection as pt, toReagentRows as q, TagsInput_default as qn, validateReagentListData as qt, bioTemplateControlsToSidebarPanels as r, listBioTemplatePacks as rn, fromMinutes as rr, toTimeCourseDataFrame as rt, listBioTemplateControlSchemas as s, listBioTemplateCatalog as sn, rangesOverlap as sr, toWellPlateWells as st, bioTemplateControlsToFormSchema as t, bioTemplatePacks as tn, formatTime as tr, toTemplateDataFrame as tt, getBioTemplateComponentBindings as u, controlValuesToComponentBindingsById as un, useTimeUtils as ur, bioTemplatePresetControlValuesToOptions as ut, toBioTemplateComponentPropsById as v, controlsToViewIds as vn, BaseRadioGroup_default as vr, createElisaAssayCollection as vt, toCalibrationCurveColumns as w, defineDoseDesignControlModel as wn, BaseInput_default as wr, createProtocolStepsTemplate as wt, toAssayMatrixColumns as x, defineControlModel as xn, BaseSelect_default as xr, createInstrumentRunTemplate as xt, toBioTemplateComponentSnippets as y, controlsToViewItems as yn, BaseToggle_default as yr, createFlowCytometryAssayCollection as yt, toProtocolSteps as z, SequenceInput_default as zn, validateAssayMatrixData as zt };
9332
9387
 
9333
- //# sourceMappingURL=templates-50NPjaxL.js.map
9388
+ //# sourceMappingURL=templates-B5jmTWuk.js.map