@morscherlab/mint-sdk 1.0.0-rc.2 → 1.0.0-rc.5

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 (443) hide show
  1. package/dist/__tests__/components/AppTopBar.navigation.test.d.ts +1 -0
  2. package/dist/__tests__/components/DoseCalculatorVolumeField.test.d.ts +1 -0
  3. package/dist/__tests__/components/PlateMapEditorToolbarInternal.test.d.ts +1 -0
  4. package/dist/__tests__/components/PluginWorkspaceView.controls.test.d.ts +1 -0
  5. package/dist/__tests__/components/PluginWorkspaceView.navigation.test.d.ts +1 -0
  6. package/dist/__tests__/components/PluginWorkspaceView.shell.test.d.ts +1 -0
  7. package/dist/__tests__/components/ProtocolStep.presentation.test.d.ts +1 -0
  8. package/dist/__tests__/components/ProtocolStepEditor.state.test.d.ts +1 -0
  9. package/dist/__tests__/components/ProtocolStepParameterField.test.d.ts +1 -0
  10. package/dist/__tests__/components/ReagentList.presentation.test.d.ts +1 -0
  11. package/dist/__tests__/components/SampleSelector.colors.test.d.ts +1 -0
  12. package/dist/__tests__/components/SampleSelector.drag.test.d.ts +1 -0
  13. package/dist/__tests__/components/SampleSelector.groups.test.d.ts +1 -0
  14. package/dist/__tests__/components/SampleSelector.selection.test.d.ts +1 -0
  15. package/dist/__tests__/components/SampleSelectorSampleRow.test.d.ts +1 -0
  16. package/dist/__tests__/components/ScheduleCalendar.test.d.ts +1 -0
  17. package/dist/__tests__/components/SettingsModal.schema.test.d.ts +1 -0
  18. package/dist/__tests__/components/WellPlate.colors.test.d.ts +1 -0
  19. package/dist/__tests__/components/WellPlate.conditions.test.d.ts +1 -0
  20. package/dist/__tests__/components/WellPlate.geometry.test.d.ts +1 -0
  21. package/dist/__tests__/components/WellPlate.interaction.test.d.ts +1 -0
  22. package/dist/__tests__/components/WellPlate.legend.test.d.ts +1 -0
  23. package/dist/__tests__/components/WellPlate.rendering.test.d.ts +1 -0
  24. package/dist/__tests__/components/WellPlate.sampleDrop.test.d.ts +1 -0
  25. package/dist/__tests__/composables/autoGroup/classify.test.d.ts +1 -0
  26. package/dist/__tests__/composables/autoGroup/columns.test.d.ts +1 -0
  27. package/dist/__tests__/composables/autoGroup/compose.test.d.ts +1 -0
  28. package/dist/__tests__/composables/autoGroup/cooccurrence.test.d.ts +1 -0
  29. package/dist/__tests__/composables/autoGroup/fingerprint.test.d.ts +1 -0
  30. package/dist/__tests__/composables/autoGroup/integration.test.d.ts +1 -0
  31. package/dist/__tests__/composables/autoGroup/template.test.d.ts +1 -0
  32. package/dist/__tests__/composables/autoGroup/tokenize.test.d.ts +1 -0
  33. package/dist/__tests__/composables/useAutoGroupInputSources.test.d.ts +1 -0
  34. package/dist/__tests__/composables/useScheduleCalendarLayout.test.d.ts +1 -0
  35. package/dist/__tests__/docs/extractDocsComponents.test.d.ts +1 -0
  36. package/dist/__tests__/docs/extractDocsExports.test.d.ts +1 -0
  37. package/dist/__tests__/docs/extractDocsParsing.test.d.ts +1 -0
  38. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +1 -0
  39. package/dist/__tests__/docs/extractDocsTheme.test.d.ts +1 -0
  40. package/dist/components/AppTopBar.navigation.d.ts +11 -0
  41. package/dist/components/BaseButton.vue.d.ts +1 -1
  42. package/dist/components/BaseCheckbox.vue.d.ts +1 -1
  43. package/dist/components/BaseInput.vue.d.ts +2 -2
  44. package/dist/components/BasePill.vue.d.ts +1 -1
  45. package/dist/components/BaseRadioGroup.vue.d.ts +1 -1
  46. package/dist/components/BaseSelect.vue.d.ts +1 -1
  47. package/dist/components/BaseSlider.vue.d.ts +2 -2
  48. package/dist/components/BaseTextarea.vue.d.ts +2 -2
  49. package/dist/components/BaseToggle.vue.d.ts +1 -1
  50. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  51. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +1 -1
  52. package/dist/components/ColorSlider.vue.d.ts +2 -2
  53. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  54. package/dist/components/DatePicker.vue.d.ts +1 -1
  55. package/dist/components/DateTimePicker.vue.d.ts +2 -2
  56. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +15 -0
  57. package/dist/components/DropdownButton.vue.d.ts +1 -1
  58. package/dist/components/FileUploader.vue.d.ts +2 -2
  59. package/dist/components/FormulaInput.vue.d.ts +2 -2
  60. package/dist/components/IconButton.vue.d.ts +1 -1
  61. package/dist/components/LoadingSpinner.vue.d.ts +1 -1
  62. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  63. package/dist/components/MultiSelect.vue.d.ts +1 -1
  64. package/dist/components/NumberInput.vue.d.ts +1 -1
  65. package/dist/components/PlateMapEditor.vue.d.ts +6 -6
  66. package/dist/components/PluginWorkspaceView.controls.d.ts +28 -0
  67. package/dist/components/PluginWorkspaceView.navigation.d.ts +29 -0
  68. package/dist/components/PluginWorkspaceView.props.d.ts +151 -0
  69. package/dist/components/PluginWorkspaceView.shell.d.ts +19 -0
  70. package/dist/components/PluginWorkspaceView.vue.d.ts +46 -195
  71. package/dist/components/ProgressBar.vue.d.ts +1 -1
  72. package/dist/components/ProtocolStep.presentation.d.ts +4 -0
  73. package/dist/components/ProtocolStepEditor.state.d.ts +18 -0
  74. package/dist/components/ProtocolStepParameterField.vue.d.ts +12 -0
  75. package/dist/components/ReagentList.presentation.d.ts +16 -0
  76. package/dist/components/ResourceCard.vue.d.ts +1 -1
  77. package/dist/components/SampleSelector.colors.d.ts +13 -0
  78. package/dist/components/SampleSelector.drag.d.ts +24 -0
  79. package/dist/components/SampleSelector.groups.d.ts +15 -0
  80. package/dist/components/SampleSelector.selection.d.ts +26 -0
  81. package/dist/components/SampleSelector.vue.d.ts +4 -1
  82. package/dist/components/SampleSelectorSampleRow.vue.d.ts +21 -0
  83. package/dist/components/SegmentedControl.vue.d.ts +1 -1
  84. package/dist/components/SequenceInput.vue.d.ts +2 -2
  85. package/dist/components/SequenceProgressBar.vue.d.ts +1 -1
  86. package/dist/components/SettingsModal.schema.d.ts +9 -0
  87. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  88. package/dist/components/TagsInput.vue.d.ts +2 -2
  89. package/dist/components/TimePicker.vue.d.ts +2 -2
  90. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  91. package/dist/components/UnitInput.vue.d.ts +2 -2
  92. package/dist/components/WellPlate.colors.d.ts +9 -0
  93. package/dist/components/WellPlate.conditions.d.ts +26 -0
  94. package/dist/components/WellPlate.geometry.d.ts +23 -0
  95. package/dist/components/WellPlate.interaction.d.ts +71 -0
  96. package/dist/components/WellPlate.legend.d.ts +2 -0
  97. package/dist/components/WellPlate.rendering.d.ts +24 -0
  98. package/dist/components/WellPlate.sampleDrop.d.ts +8 -0
  99. package/dist/components/WellPlate.vue.d.ts +1 -1
  100. package/dist/components/index.js +2 -2
  101. package/dist/components/internal/ActionItemInternal.vue.d.ts +1 -1
  102. package/dist/components/internal/PlateMapEditorToolbarInternal.vue.d.ts +28 -0
  103. package/dist/{components-BhK-dW99.js → components-DtHA2bgp.js} +3754 -2991
  104. package/dist/components-DtHA2bgp.js.map +1 -0
  105. package/dist/composables/autoGroup/classKey.d.ts +4 -0
  106. package/dist/composables/autoGroup/classify.d.ts +28 -0
  107. package/dist/composables/autoGroup/colors.d.ts +2 -0
  108. package/dist/composables/autoGroup/columns.d.ts +10 -0
  109. package/dist/composables/autoGroup/compose.d.ts +8 -0
  110. package/dist/composables/autoGroup/cooccurrence.d.ts +2 -0
  111. package/dist/composables/autoGroup/csv-shim.d.ts +2 -0
  112. package/dist/composables/autoGroup/fingerprint.d.ts +3 -0
  113. package/dist/composables/autoGroup/index.d.ts +16 -0
  114. package/dist/composables/autoGroup/replicatePreGroup.d.ts +38 -0
  115. package/dist/composables/autoGroup/template.d.ts +15 -0
  116. package/dist/composables/autoGroup/tokenize.d.ts +8 -0
  117. package/dist/composables/autoGroupConstants.d.ts +1 -0
  118. package/dist/composables/autoGroupGrouping.d.ts +3 -0
  119. package/dist/composables/controlComponentBindings.d.ts +7 -0
  120. package/dist/composables/controlSchemaAdapters.d.ts +20 -0
  121. package/dist/composables/controlSchemaDoseDesign.d.ts +11 -0
  122. package/dist/composables/controlSchemaFormFields.d.ts +3 -0
  123. package/dist/composables/controlSchemaLayout.d.ts +7 -0
  124. package/dist/composables/controlSchemaModel.d.ts +5 -0
  125. package/dist/composables/controlSchemaNormalize.d.ts +15 -0
  126. package/dist/composables/controlSchemaTypes.d.ts +305 -0
  127. package/dist/composables/controlSchemaUtils.d.ts +9 -0
  128. package/dist/composables/controlWorkspaceOptions.d.ts +2 -0
  129. package/dist/composables/formBuilderSchema.d.ts +18 -0
  130. package/dist/composables/index.js +3 -3
  131. package/dist/composables/pluginEndpointBuilder.d.ts +13 -0
  132. package/dist/composables/protocolTemplateCatalog.d.ts +26 -0
  133. package/dist/composables/useAutoGroup.d.ts +61 -74
  134. package/dist/composables/useAutoGroupInputSources.d.ts +32 -0
  135. package/dist/composables/useBioTemplateControls.d.ts +1 -1
  136. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +1 -1
  137. package/dist/composables/useBioTemplateWorkspace.d.ts +1 -1
  138. package/dist/composables/useControlSchema.d.ts +8 -346
  139. package/dist/composables/useControlWorkspace.d.ts +5 -0
  140. package/dist/composables/useForm.d.ts +2 -33
  141. package/dist/composables/useFormBuilder.d.ts +2 -9
  142. package/dist/composables/useFormValidation.d.ts +34 -0
  143. package/dist/composables/usePluginClient.d.ts +1 -4
  144. package/dist/composables/useProtocolTemplates.d.ts +2 -24
  145. package/dist/composables/useScheduleCalendarLayout.d.ts +49 -0
  146. package/dist/{composables-Bg7CFuNz.js → composables-Dlg8jenH.js} +33 -31
  147. package/dist/composables-Dlg8jenH.js.map +1 -0
  148. package/dist/index.js +4 -4
  149. package/dist/install.js +2 -2
  150. package/dist/styles.css +547 -516
  151. package/dist/templates/adapters.d.ts +14 -47
  152. package/dist/templates/assayLookups.d.ts +3 -0
  153. package/dist/templates/assayMatrixAdapters.d.ts +6 -0
  154. package/dist/templates/assayMatrixBuilder.d.ts +2 -0
  155. package/dist/templates/assayNormalizers.d.ts +4 -0
  156. package/dist/templates/builderDefaults.d.ts +1 -0
  157. package/dist/templates/builderIdUtils.d.ts +4 -0
  158. package/dist/templates/builderPresetControls.d.ts +10 -0
  159. package/dist/templates/builderReadUtils.d.ts +8 -0
  160. package/dist/templates/builders.d.ts +26 -67
  161. package/dist/templates/calibrationCurveAdapters.d.ts +4 -0
  162. package/dist/templates/calibrationCurveBuilder.d.ts +2 -0
  163. package/dist/templates/calibrationNormalizers.d.ts +5 -0
  164. package/dist/templates/componentBindingCatalog.d.ts +25 -0
  165. package/dist/templates/componentBindingHelpers.d.ts +17 -0
  166. package/dist/templates/componentDoseResponseProps.d.ts +3 -0
  167. package/dist/templates/componentGenericProps.d.ts +8 -0
  168. package/dist/templates/componentPlateHelpers.d.ts +5 -0
  169. package/dist/templates/componentPlateMapProps.d.ts +3 -0
  170. package/dist/templates/componentPropsFactory.d.ts +3 -0
  171. package/dist/templates/componentQpcrPlateProps.d.ts +3 -0
  172. package/dist/templates/componentTargetResolvers.d.ts +5 -0
  173. package/dist/templates/componentTemplateProps.d.ts +3 -0
  174. package/dist/templates/controlSchemaClone.d.ts +4 -0
  175. package/dist/templates/controlSchemaConstants.d.ts +10 -0
  176. package/dist/templates/controlSchemaMerge.d.ts +3 -0
  177. package/dist/templates/controlSchemaTargets.d.ts +17 -0
  178. package/dist/templates/controlSchemaTypes.d.ts +4 -0
  179. package/dist/templates/controlSchemas.d.ts +4 -4
  180. package/dist/templates/defaultBioTemplateBuilder.d.ts +2 -0
  181. package/dist/templates/doseResponseAdapters.d.ts +4 -0
  182. package/dist/templates/doseResponseBuilder.d.ts +2 -0
  183. package/dist/templates/elisaAssayCollectionBuilder.d.ts +2 -0
  184. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +2 -0
  185. package/dist/templates/flowCytometryPanelBuilder.d.ts +2 -0
  186. package/dist/templates/flowNormalizers.d.ts +8 -0
  187. package/dist/templates/flowPanelAdapters.d.ts +4 -0
  188. package/dist/templates/index.js +1 -1
  189. package/dist/templates/instrumentRunAdapterHelpers.d.ts +8 -0
  190. package/dist/templates/instrumentRunAdapters.d.ts +8 -0
  191. package/dist/templates/instrumentRunBuilder.d.ts +2 -0
  192. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +2 -0
  193. package/dist/templates/plateGeometry.d.ts +4 -0
  194. package/dist/templates/plateMapAdapters.d.ts +3 -0
  195. package/dist/templates/plateMapBuilder.d.ts +2 -0
  196. package/dist/templates/presetControlSchemas.d.ts +534 -0
  197. package/dist/templates/protocolAdapters.d.ts +5 -0
  198. package/dist/templates/protocolNormalizers.d.ts +6 -0
  199. package/dist/templates/protocolStepsBuilder.d.ts +2 -0
  200. package/dist/templates/qpcrAdapters.d.ts +5 -0
  201. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +2 -0
  202. package/dist/templates/qpcrPlateBuilder.d.ts +2 -0
  203. package/dist/templates/reagentAdapters.d.ts +5 -0
  204. package/dist/templates/reagentListBuilder.d.ts +2 -0
  205. package/dist/templates/runNormalizers.d.ts +10 -0
  206. package/dist/templates/sampleNormalizers.d.ts +4 -0
  207. package/dist/templates/samplePrepAdapters.d.ts +4 -0
  208. package/dist/templates/samplePrepBuilder.d.ts +2 -0
  209. package/dist/templates/sampleSheetAdapters.d.ts +5 -0
  210. package/dist/templates/sampleSheetBuilder.d.ts +2 -0
  211. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +2 -0
  212. package/dist/templates/targetedMetabolomicsHelpers.d.ts +5 -0
  213. package/dist/templates/templateAdapterTypes.d.ts +48 -0
  214. package/dist/templates/templateControlSchemas.d.ts +400 -0
  215. package/dist/templates/templateCreateOptions.d.ts +165 -0
  216. package/dist/templates/templateEnvelopes.d.ts +9 -0
  217. package/dist/templates/templatePackCollectionBuilder.d.ts +2 -0
  218. package/dist/templates/templatePresetCollectionBuilder.d.ts +18 -0
  219. package/dist/templates/templateQpcrTypes.d.ts +42 -0
  220. package/dist/templates/templateValidators.d.ts +13 -0
  221. package/dist/templates/timeCourseAdapters.d.ts +5 -0
  222. package/dist/templates/timeCourseBuilder.d.ts +2 -0
  223. package/dist/templates/types.d.ts +5 -250
  224. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +2 -0
  225. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +2 -0
  226. package/dist/{templates-BorLR_7p.js → templates-DtdUvJ4c.js} +3565 -3411
  227. package/dist/templates-DtdUvJ4c.js.map +1 -0
  228. package/dist/types/auto-group.d.ts +79 -9
  229. package/dist/types/componentLabTypes.d.ts +161 -0
  230. package/dist/types/componentWorkflowTypes.d.ts +150 -0
  231. package/dist/types/components.d.ts +2 -311
  232. package/dist/{useProtocolTemplates-n6AJqSqv.js → useProtocolTemplates-Bm5vyH4_.js} +1220 -454
  233. package/dist/useProtocolTemplates-Bm5vyH4_.js.map +1 -0
  234. package/package.json +1 -1
  235. package/src/__tests__/components/AppTopBar.navigation.test.ts +70 -0
  236. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +53 -0
  237. package/src/__tests__/components/PlateMapEditorToolbarInternal.test.ts +54 -0
  238. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +156 -0
  239. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +102 -0
  240. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +41 -0
  241. package/src/__tests__/components/ProtocolStep.presentation.test.ts +31 -0
  242. package/src/__tests__/components/ProtocolStepEditor.state.test.ts +165 -0
  243. package/src/__tests__/components/ProtocolStepParameterField.test.ts +44 -0
  244. package/src/__tests__/components/ReagentList.presentation.test.ts +68 -0
  245. package/src/__tests__/components/SampleSelector.colors.test.ts +49 -0
  246. package/src/__tests__/components/SampleSelector.drag.test.ts +100 -0
  247. package/src/__tests__/components/SampleSelector.groups.test.ts +81 -0
  248. package/src/__tests__/components/SampleSelector.selection.test.ts +70 -0
  249. package/src/__tests__/components/SampleSelector.test.ts +32 -0
  250. package/src/__tests__/components/SampleSelectorSampleRow.test.ts +37 -0
  251. package/src/__tests__/components/ScheduleCalendar.test.ts +44 -0
  252. package/src/__tests__/components/SettingsModal.schema.test.ts +97 -0
  253. package/src/__tests__/components/WellPlate.colors.test.ts +28 -0
  254. package/src/__tests__/components/WellPlate.conditions.test.ts +68 -0
  255. package/src/__tests__/components/WellPlate.geometry.test.ts +54 -0
  256. package/src/__tests__/components/WellPlate.interaction.test.ts +171 -0
  257. package/src/__tests__/components/WellPlate.legend.test.ts +13 -0
  258. package/src/__tests__/components/WellPlate.rendering.test.ts +122 -0
  259. package/src/__tests__/components/WellPlate.sampleDrop.test.ts +70 -0
  260. package/src/__tests__/composables/autoGroup/classify.test.ts +107 -0
  261. package/src/__tests__/composables/autoGroup/columns.test.ts +135 -0
  262. package/src/__tests__/composables/autoGroup/compose.test.ts +227 -0
  263. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +91 -0
  264. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +50 -0
  265. package/src/__tests__/composables/autoGroup/integration.test.ts +79 -0
  266. package/src/__tests__/composables/autoGroup/template.test.ts +70 -0
  267. package/src/__tests__/composables/autoGroup/tokenize.test.ts +33 -0
  268. package/src/__tests__/composables/useAutoGroup.test.ts +129 -625
  269. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +107 -0
  270. package/src/__tests__/composables/useControlSchema.test.ts +23 -0
  271. package/src/__tests__/composables/useScheduleCalendarLayout.test.ts +89 -0
  272. package/src/__tests__/docs/extractDocsComponents.test.ts +142 -0
  273. package/src/__tests__/docs/extractDocsExports.test.ts +77 -0
  274. package/src/__tests__/docs/extractDocsParsing.test.ts +69 -0
  275. package/src/__tests__/docs/extractDocsTemplates.test.ts +54 -0
  276. package/src/__tests__/docs/extractDocsTheme.test.ts +89 -0
  277. package/src/__tests__/docs/frontendDocsCatalog.test.ts +1 -1
  278. package/src/__tests__/fixtures/auto-group/mixed-lc-ms-batch.txt +187 -0
  279. package/src/components/AppSidebar.vue +2 -6
  280. package/src/components/AppTopBar.navigation.ts +62 -0
  281. package/src/components/AppTopBar.vue +17 -44
  282. package/src/components/AutoGroupModal.story.vue +50 -0
  283. package/src/components/AutoGroupModal.vue +441 -158
  284. package/src/components/ControlWorkspaceView.vue +2 -6
  285. package/src/components/DoseCalculator.vue +13 -73
  286. package/src/components/DoseCalculatorVolumeField.vue +61 -0
  287. package/src/components/ExperimentTimeline.vue +6 -31
  288. package/src/components/FormBuilder.vue +2 -7
  289. package/src/components/PlateMapEditor.vue +32 -106
  290. package/src/components/PluginWorkspaceView.controls.ts +182 -0
  291. package/src/components/PluginWorkspaceView.navigation.ts +106 -0
  292. package/src/components/PluginWorkspaceView.props.ts +174 -0
  293. package/src/components/PluginWorkspaceView.shell.ts +66 -0
  294. package/src/components/PluginWorkspaceView.vue +85 -404
  295. package/src/components/ProtocolStep.presentation.ts +31 -0
  296. package/src/components/ProtocolStepEditor.state.ts +104 -0
  297. package/src/components/ProtocolStepEditor.vue +48 -179
  298. package/src/components/ProtocolStepParameterField.vue +134 -0
  299. package/src/components/ReagentList.presentation.ts +105 -0
  300. package/src/components/ReagentList.vue +16 -79
  301. package/src/components/SampleSelector.colors.ts +43 -0
  302. package/src/components/SampleSelector.drag.ts +164 -0
  303. package/src/components/SampleSelector.groups.ts +109 -0
  304. package/src/components/SampleSelector.selection.ts +103 -0
  305. package/src/components/SampleSelector.vue +82 -349
  306. package/src/components/SampleSelectorSampleRow.vue +64 -0
  307. package/src/components/ScheduleCalendar.vue +44 -199
  308. package/src/components/SettingsModal.schema.ts +71 -0
  309. package/src/components/SettingsModal.vue +16 -46
  310. package/src/components/WellPlate.colors.ts +56 -0
  311. package/src/components/WellPlate.conditions.ts +100 -0
  312. package/src/components/WellPlate.geometry.ts +91 -0
  313. package/src/components/WellPlate.interaction.ts +272 -0
  314. package/src/components/WellPlate.legend.ts +8 -0
  315. package/src/components/WellPlate.rendering.ts +105 -0
  316. package/src/components/WellPlate.sampleDrop.ts +73 -0
  317. package/src/components/WellPlate.vue +102 -550
  318. package/src/components/internal/PlateMapEditorToolbarInternal.vue +128 -0
  319. package/src/composables/autoGroup/classKey.ts +5 -0
  320. package/src/composables/autoGroup/classify.ts +205 -0
  321. package/src/composables/autoGroup/colors.ts +6 -0
  322. package/src/composables/autoGroup/columns.ts +226 -0
  323. package/src/composables/autoGroup/compose.ts +156 -0
  324. package/src/composables/autoGroup/cooccurrence.ts +46 -0
  325. package/src/composables/autoGroup/csv-shim.ts +44 -0
  326. package/src/composables/autoGroup/fingerprint.ts +49 -0
  327. package/src/composables/autoGroup/index.ts +20 -0
  328. package/src/composables/autoGroup/replicatePreGroup.ts +90 -0
  329. package/src/composables/autoGroup/template.ts +126 -0
  330. package/src/composables/autoGroup/tokenize.ts +41 -0
  331. package/src/composables/autoGroup/vocab.json +67 -0
  332. package/src/composables/autoGroupConstants.ts +4 -0
  333. package/src/composables/autoGroupGrouping.ts +148 -0
  334. package/src/composables/controlComponentBindings.ts +80 -0
  335. package/src/composables/controlSchemaAdapters.ts +196 -0
  336. package/src/composables/controlSchemaDoseDesign.ts +215 -0
  337. package/src/composables/controlSchemaFormFields.ts +61 -0
  338. package/src/composables/controlSchemaLayout.ts +59 -0
  339. package/src/composables/controlSchemaModel.ts +163 -0
  340. package/src/composables/controlSchemaNormalize.ts +101 -0
  341. package/src/composables/controlSchemaTypes.ts +364 -0
  342. package/src/composables/controlSchemaUtils.ts +36 -0
  343. package/src/composables/controlWorkspaceOptions.ts +21 -0
  344. package/src/composables/formBuilderSchema.ts +153 -0
  345. package/src/composables/pluginEndpointBuilder.ts +203 -0
  346. package/src/composables/protocolTemplateCatalog.ts +325 -0
  347. package/src/composables/useAutoGroup.ts +395 -549
  348. package/src/composables/useAutoGroupInputSources.ts +147 -0
  349. package/src/composables/useBioTemplateControls.ts +1 -1
  350. package/src/composables/useBioTemplatePresetWorkspace.ts +1 -1
  351. package/src/composables/useBioTemplateWorkspace.ts +1 -1
  352. package/src/composables/useControlSchema.ts +64 -1312
  353. package/src/composables/useControlWorkspace.ts +201 -0
  354. package/src/composables/useForm.ts +5 -187
  355. package/src/composables/useFormBuilder.ts +11 -153
  356. package/src/composables/useFormValidation.ts +154 -0
  357. package/src/composables/usePluginClient.ts +10 -193
  358. package/src/composables/useProtocolTemplates.ts +10 -328
  359. package/src/composables/useScheduleCalendarLayout.ts +287 -0
  360. package/src/styles/components/auto-group-modal.css +248 -310
  361. package/src/templates/adapters.ts +89 -930
  362. package/src/templates/assayLookups.ts +33 -0
  363. package/src/templates/assayMatrixAdapters.ts +78 -0
  364. package/src/templates/assayMatrixBuilder.ts +59 -0
  365. package/src/templates/assayNormalizers.ts +34 -0
  366. package/src/templates/builderDefaults.ts +11 -0
  367. package/src/templates/builderIdUtils.ts +20 -0
  368. package/src/templates/builderPresetControls.ts +165 -0
  369. package/src/templates/builderReadUtils.ts +57 -0
  370. package/src/templates/builders.ts +122 -2350
  371. package/src/templates/calibrationCurveAdapters.ts +59 -0
  372. package/src/templates/calibrationCurveBuilder.ts +99 -0
  373. package/src/templates/calibrationNormalizers.ts +60 -0
  374. package/src/templates/componentBindingCatalog.ts +90 -0
  375. package/src/templates/componentBindingHelpers.ts +93 -0
  376. package/src/templates/componentBindings.ts +12 -461
  377. package/src/templates/componentDoseResponseProps.ts +42 -0
  378. package/src/templates/componentGenericProps.ts +77 -0
  379. package/src/templates/componentPlateHelpers.ts +29 -0
  380. package/src/templates/componentPlateMapProps.ts +32 -0
  381. package/src/templates/componentPropsFactory.ts +21 -0
  382. package/src/templates/componentQpcrPlateProps.ts +28 -0
  383. package/src/templates/componentTargetResolvers.ts +69 -0
  384. package/src/templates/componentTemplateProps.ts +78 -0
  385. package/src/templates/controlSchemaClone.ts +32 -0
  386. package/src/templates/controlSchemaConstants.ts +11 -0
  387. package/src/templates/controlSchemaMerge.ts +40 -0
  388. package/src/templates/controlSchemaTargets.ts +87 -0
  389. package/src/templates/controlSchemaTypes.ts +20 -0
  390. package/src/templates/controlSchemas.ts +22 -704
  391. package/src/templates/defaultBioTemplateBuilder.ts +124 -0
  392. package/src/templates/doseResponseAdapters.ts +45 -0
  393. package/src/templates/doseResponseBuilder.ts +44 -0
  394. package/src/templates/elisaAssayCollectionBuilder.ts +62 -0
  395. package/src/templates/flowCytometryAssayCollectionBuilder.ts +41 -0
  396. package/src/templates/flowCytometryPanelBuilder.ts +53 -0
  397. package/src/templates/flowNormalizers.ts +58 -0
  398. package/src/templates/flowPanelAdapters.ts +58 -0
  399. package/src/templates/instrumentRunAdapterHelpers.ts +94 -0
  400. package/src/templates/instrumentRunAdapters.ts +163 -0
  401. package/src/templates/instrumentRunBuilder.ts +97 -0
  402. package/src/templates/lcmsBatchCollectionBuilder.ts +38 -0
  403. package/src/templates/plateGeometry.ts +62 -0
  404. package/src/templates/plateMapAdapters.ts +36 -0
  405. package/src/templates/plateMapBuilder.ts +43 -0
  406. package/src/templates/presetControlSchemas.ts +258 -0
  407. package/src/templates/protocolAdapters.ts +69 -0
  408. package/src/templates/protocolNormalizers.ts +37 -0
  409. package/src/templates/protocolStepsBuilder.ts +36 -0
  410. package/src/templates/qpcrAdapters.ts +104 -0
  411. package/src/templates/qpcrExpressionCollectionBuilder.ts +33 -0
  412. package/src/templates/qpcrPlateBuilder.ts +96 -0
  413. package/src/templates/reagentAdapters.ts +77 -0
  414. package/src/templates/reagentListBuilder.ts +30 -0
  415. package/src/templates/runNormalizers.ts +63 -0
  416. package/src/templates/sampleNormalizers.ts +58 -0
  417. package/src/templates/samplePrepAdapters.ts +63 -0
  418. package/src/templates/samplePrepBuilder.ts +51 -0
  419. package/src/templates/sampleSheetAdapters.ts +75 -0
  420. package/src/templates/sampleSheetBuilder.ts +23 -0
  421. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +79 -0
  422. package/src/templates/targetedMetabolomicsHelpers.ts +102 -0
  423. package/src/templates/templateAdapterTypes.ts +58 -0
  424. package/src/templates/templateControlSchemas.ts +320 -0
  425. package/src/templates/templateCreateOptions.ts +208 -0
  426. package/src/templates/templateEnvelopes.ts +137 -0
  427. package/src/templates/templatePackCollectionBuilder.ts +23 -0
  428. package/src/templates/templatePresetCollectionBuilder.ts +139 -0
  429. package/src/templates/templateQpcrTypes.ts +48 -0
  430. package/src/templates/templateValidators.ts +414 -0
  431. package/src/templates/timeCourseAdapters.ts +73 -0
  432. package/src/templates/timeCourseBuilder.ts +64 -0
  433. package/src/templates/types.ts +79 -275
  434. package/src/templates/wellPlateScreenCollectionBuilder.ts +36 -0
  435. package/src/templates/westernBlotAssayCollectionBuilder.ts +68 -0
  436. package/src/types/auto-group.ts +107 -9
  437. package/src/types/componentLabTypes.ts +235 -0
  438. package/src/types/componentWorkflowTypes.ts +190 -0
  439. package/src/types/components.ts +74 -424
  440. package/dist/components-BhK-dW99.js.map +0 -1
  441. package/dist/composables-Bg7CFuNz.js.map +0 -1
  442. package/dist/templates-BorLR_7p.js.map +0 -1
  443. package/dist/useProtocolTemplates-n6AJqSqv.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import type {
2
+ PillNavItem,
3
+ } from '../types'
4
+ import type {
5
+ NormalizedControl,
6
+ } from './controlSchemaNormalize'
7
+ import {
8
+ humanize,
9
+ } from './controlSchemaUtils'
10
+ import type {
11
+ ControlDefinition,
12
+ ControlSchemaOptions,
13
+ ControlSectionConfig,
14
+ ControlSidebarConfig,
15
+ } from './controlSchemaTypes'
16
+
17
+ export function sectionConfig(
18
+ sectionId: string,
19
+ controls: NormalizedControl[],
20
+ options: ControlSchemaOptions,
21
+ ): ControlSectionConfig {
22
+ const configured = options.sections?.[sectionId]
23
+ const first = controls[0]?.definition
24
+ return {
25
+ ...configured,
26
+ id: sectionId,
27
+ label: configured?.label ?? first?.sectionLabel,
28
+ title: configured?.title ?? first?.sectionLabel,
29
+ description: configured?.description ?? first?.sectionDescription,
30
+ subtitle: configured?.subtitle ?? first?.sectionSubtitle,
31
+ }
32
+ }
33
+
34
+ export function firstSidebarConfig(controls: NormalizedControl[]): ControlSidebarConfig | undefined {
35
+ for (const control of controls) {
36
+ const sidebar = control.definition.sidebar
37
+ if (sidebar && typeof sidebar === 'object' && sidebar.enabled !== false) return sidebar
38
+ }
39
+ return undefined
40
+ }
41
+
42
+ export function isSidebarEnabled(sidebar: ControlDefinition['sidebar']): boolean {
43
+ if (sidebar === false) return false
44
+ if (sidebar && typeof sidebar === 'object') return sidebar.enabled !== false
45
+ return true
46
+ }
47
+
48
+ export function controlViewItem(viewId: string, options: ControlSchemaOptions): PillNavItem {
49
+ const config = options.views?.[viewId]
50
+ return {
51
+ id: viewId,
52
+ label: config?.label ?? humanize(viewId),
53
+ ...(config?.icon !== undefined ? { icon: config.icon } : {}),
54
+ ...(config?.to !== undefined ? { to: config.to } : {}),
55
+ ...(config?.href !== undefined ? { href: config.href } : {}),
56
+ ...(config?.disabled !== undefined ? { disabled: config.disabled } : {}),
57
+ ...(config?.children !== undefined ? { children: config.children } : {}),
58
+ }
59
+ }
@@ -0,0 +1,163 @@
1
+ import type {
2
+ ControlModel,
3
+ ControlModelBinding,
4
+ ControlModelSectionConfig,
5
+ ControlSchema,
6
+ ControlSectionConfig,
7
+ ControlSidebarConfig,
8
+ ControlViewConfig,
9
+ ControlWorkspaceOptions,
10
+ } from './controlSchemaTypes'
11
+ import {
12
+ normalizeControlDefinition,
13
+ } from './controlSchemaNormalize'
14
+ import {
15
+ omitUndefined,
16
+ } from './controlSchemaUtils'
17
+
18
+ export function isControlModelBinding<TBinding extends ControlModelBinding = ControlModelBinding>(
19
+ model: unknown,
20
+ ): model is TBinding {
21
+ return (
22
+ typeof model === 'object'
23
+ && model !== null
24
+ && 'controls' in model
25
+ && 'controlOptions' in model
26
+ )
27
+ }
28
+
29
+ export function resolveControlModel(
30
+ model: ControlModel | ControlModelBinding | undefined,
31
+ ): ControlModelBinding | undefined {
32
+ if (model === undefined) return undefined
33
+ return isControlModelBinding(model) ? model : defineControlModel(model)
34
+ }
35
+
36
+ /** Create a complete workspace component binding from a simple controls data model for ControlWorkspaceView, generated forms, and sidebars. */
37
+ export function defineControlModel(model: ControlModel): ControlModelBinding {
38
+ const {
39
+ controls: rootControls,
40
+ sections: rootSections,
41
+ views: modelViews,
42
+ components,
43
+ componentBindings,
44
+ componentProps,
45
+ componentPropsById,
46
+ ...baseOptions
47
+ } = model
48
+ const resolvedComponentBindings = componentBindings ?? components
49
+ const controls: ControlSchema = {}
50
+ const views: Record<string, ControlViewConfig> = {}
51
+ const sections: Record<string, ControlSectionConfig> = {}
52
+
53
+ const defaultViewId = model.view ?? 'default'
54
+ const defaultSectionId = model.section ?? 'controls'
55
+
56
+ if (rootControls) {
57
+ registerSectionOptions(sections, defaultSectionId, {
58
+ id: defaultSectionId,
59
+ label: model.sectionLabel,
60
+ title: model.sectionLabel,
61
+ columns: model.columns,
62
+ })
63
+ appendModelControls(controls, rootControls, defaultViewId, defaultSectionId)
64
+ }
65
+
66
+ for (const [sectionId, section] of Object.entries(rootSections ?? {})) {
67
+ registerSectionOptions(sections, sectionId, controlModelSectionOptions(section))
68
+ appendModelControls(controls, section.controls, defaultViewId, sectionId, section.sidebar)
69
+ }
70
+
71
+ for (const [viewId, view] of Object.entries(modelViews ?? {})) {
72
+ const {
73
+ controls: viewControls,
74
+ sections: viewSections,
75
+ section,
76
+ sectionLabel,
77
+ sectionDescription,
78
+ ...viewConfig
79
+ } = view
80
+
81
+ views[viewId] = omitUndefined(viewConfig)
82
+
83
+ if (viewControls) {
84
+ const sectionId = section ?? `${viewId}-controls`
85
+ const label = sectionLabel ?? view.label
86
+ registerSectionOptions(sections, sectionId, {
87
+ id: sectionId,
88
+ label,
89
+ title: label,
90
+ description: sectionDescription,
91
+ columns: model.columns,
92
+ })
93
+ appendModelControls(controls, viewControls, viewId, sectionId)
94
+ }
95
+
96
+ for (const [sectionKey, sectionConfig] of Object.entries(viewSections ?? {})) {
97
+ const sectionId = sectionConfig.id ?? `${viewId}-${sectionKey}`
98
+ registerSectionOptions(sections, sectionId, controlModelSectionOptions(sectionConfig))
99
+ appendModelControls(controls, sectionConfig.controls, viewId, sectionId, sectionConfig.sidebar)
100
+ }
101
+ }
102
+
103
+ const controlOptions: ControlWorkspaceOptions = {
104
+ ...baseOptions,
105
+ }
106
+
107
+ if (Object.keys(views).length > 0) {
108
+ controlOptions.views = views
109
+ }
110
+
111
+ if (Object.keys(sections).length > 0) {
112
+ controlOptions.sections = sections
113
+ }
114
+
115
+ return {
116
+ controls,
117
+ controlOptions,
118
+ ...(resolvedComponentBindings === undefined ? {} : { componentBindings: resolvedComponentBindings }),
119
+ ...(componentProps === undefined ? {} : { componentProps }),
120
+ ...(componentPropsById === undefined ? {} : { componentPropsById }),
121
+ }
122
+ }
123
+
124
+ function appendModelControls(
125
+ target: ControlSchema,
126
+ source: ControlSchema,
127
+ viewId: string,
128
+ sectionId: string,
129
+ sidebar?: boolean | ControlSidebarConfig,
130
+ ): void {
131
+ for (const [name, input] of Object.entries(source)) {
132
+ if (Object.prototype.hasOwnProperty.call(target, name)) {
133
+ throw new Error(
134
+ `Duplicate control "${name}" in defineControlModel(). Control names must be unique across views and sections.`,
135
+ )
136
+ }
137
+
138
+ const definition = normalizeControlDefinition(input)
139
+ target[name] = omitUndefined({
140
+ ...definition,
141
+ view: definition.view ?? viewId,
142
+ section: definition.section ?? sectionId,
143
+ sidebar: definition.sidebar ?? sidebar,
144
+ })
145
+ }
146
+ }
147
+
148
+ function controlModelSectionOptions(section: ControlModelSectionConfig): ControlSectionConfig {
149
+ const { controls: _controls, sidebar: _sidebar, ...options } = section
150
+ return omitUndefined(options)
151
+ }
152
+
153
+ function registerSectionOptions(
154
+ target: Record<string, ControlSectionConfig>,
155
+ sectionId: string,
156
+ options: ControlSectionConfig,
157
+ ): void {
158
+ target[sectionId] = omitUndefined({
159
+ ...(target[sectionId] ?? {}),
160
+ ...options,
161
+ id: sectionId,
162
+ })
163
+ }
@@ -0,0 +1,101 @@
1
+ import type {
2
+ SelectOption,
3
+ } from '../types'
4
+ import type {
5
+ FormFieldType,
6
+ } from '../types/form-builder'
7
+ import {
8
+ getTypeDefault,
9
+ } from './formBuilderRegistry'
10
+ import {
11
+ humanize,
12
+ } from './controlSchemaUtils'
13
+ import type {
14
+ ControlDefinition,
15
+ ControlInput,
16
+ ControlOption,
17
+ ControlOptionValue,
18
+ ControlSchema,
19
+ ControlSchemaOptions,
20
+ } from './controlSchemaTypes'
21
+
22
+ export interface NormalizedControl {
23
+ name: string
24
+ definition: ControlDefinition
25
+ type: FormFieldType
26
+ sectionId: string
27
+ viewId: string
28
+ order: number
29
+ }
30
+
31
+ export function normalizeControls(
32
+ controls: ControlSchema,
33
+ options: ControlSchemaOptions = {},
34
+ ): NormalizedControl[] {
35
+ return Object.entries(controls)
36
+ .map(([name, input], index): NormalizedControl => {
37
+ const definition = normalizeControlDefinition(input)
38
+ const type = definition.type ?? inferControlType(definition)
39
+ return {
40
+ name,
41
+ definition,
42
+ type,
43
+ sectionId: definition.section ?? options.section ?? 'controls',
44
+ viewId: definition.view ?? options.view ?? 'default',
45
+ order: definition.order ?? index,
46
+ }
47
+ })
48
+ .sort((a, b) => a.order - b.order)
49
+ }
50
+
51
+ export function normalizeControlDefinition(input: ControlInput): ControlDefinition {
52
+ if (isControlOptionArray(input)) {
53
+ if (input.length === 0) return { type: 'tags', default: [] }
54
+ return {
55
+ default: optionValue(input[0]),
56
+ options: input,
57
+ }
58
+ }
59
+
60
+ if (typeof input === 'string' || typeof input === 'number' || typeof input === 'boolean') {
61
+ return { default: input }
62
+ }
63
+
64
+ return input
65
+ }
66
+
67
+ export function defaultValueForControl(definition: ControlDefinition, type: FormFieldType): unknown {
68
+ if (definition.default !== undefined) return definition.default
69
+ if (definition.defaultValue !== undefined) return definition.defaultValue
70
+ return getTypeDefault(type)
71
+ }
72
+
73
+ export function normalizeOption(option: ControlOption): SelectOption<unknown> {
74
+ if (typeof option === 'object' && option !== null && 'label' in option) {
75
+ return option
76
+ }
77
+ return {
78
+ value: option,
79
+ label: humanize(String(option)),
80
+ }
81
+ }
82
+
83
+ function isControlOptionArray(input: ControlInput): input is readonly ControlOption[] {
84
+ return Array.isArray(input)
85
+ }
86
+
87
+ function inferControlType(definition: ControlDefinition): FormFieldType {
88
+ const value = definition.default ?? definition.defaultValue
89
+ if (definition.options?.length) return Array.isArray(value) ? 'multiselect' : 'select'
90
+ if (typeof value === 'boolean') return 'toggle'
91
+ if (typeof value === 'number') return 'number'
92
+ if (Array.isArray(value)) return 'tags'
93
+ return 'text'
94
+ }
95
+
96
+ function optionValue(option: ControlOption): ControlOptionValue | unknown {
97
+ if (typeof option === 'object' && option !== null && 'value' in option) {
98
+ return option.value
99
+ }
100
+ return option
101
+ }
@@ -0,0 +1,364 @@
1
+ import type {
2
+ ComputedRef,
3
+ Ref,
4
+ } from 'vue'
5
+ import type {
6
+ PillNavItem,
7
+ SidebarToolSection,
8
+ SelectOption,
9
+ SettingsModalSchema,
10
+ TopBarSettingsConfig,
11
+ } from '../types'
12
+ import type { AccessPolicy, AccessAudienceInput } from '../permissions'
13
+ import type {
14
+ FieldCondition,
15
+ FieldValidation,
16
+ FormFieldSchema,
17
+ FormFieldType,
18
+ FormSchema,
19
+ FormSectionSchema,
20
+ } from '../types/form-builder'
21
+ import type { WellConcentration } from './useDoseCalculator'
22
+
23
+ export type ControlOptionValue = string | number | boolean
24
+ export type ControlOption = ControlOptionValue | SelectOption<unknown>
25
+ export type ControlPrimitive = string | number | boolean
26
+ export type ControlShorthand = ControlPrimitive | readonly ControlOption[]
27
+ export type ControlInput = ControlDefinition | ControlShorthand
28
+
29
+ export interface ControlSectionConfig {
30
+ id?: string
31
+ label?: string
32
+ title?: string
33
+ description?: string
34
+ subtitle?: string
35
+ icon?: string | string[]
36
+ iconColor?: string
37
+ iconBg?: string
38
+ columns?: 1 | 2 | 3
39
+ condition?: FieldCondition
40
+ access?: AccessPolicy
41
+ visibleFor?: AccessAudienceInput
42
+ requiresAdmin?: boolean
43
+ permissions?: readonly string[]
44
+ anyPermissions?: readonly string[]
45
+ defaultOpen?: boolean
46
+ showToggle?: boolean
47
+ }
48
+
49
+ export interface ControlViewConfig {
50
+ label?: string
51
+ icon?: string
52
+ to?: string
53
+ href?: string
54
+ disabled?: boolean
55
+ children?: PillNavItem['children']
56
+ }
57
+
58
+ export interface ControlSidebarConfig extends Omit<ControlSectionConfig, 'id' | 'title' | 'description' | 'columns'> {
59
+ enabled?: boolean
60
+ }
61
+
62
+ export interface ControlDefinition {
63
+ type?: FormFieldType
64
+ label?: string
65
+ default?: unknown
66
+ defaultValue?: unknown
67
+ placeholder?: string
68
+ hint?: string
69
+ size?: 'sm' | 'md' | 'lg'
70
+ disabled?: boolean
71
+ readonly?: boolean
72
+ required?: boolean | string
73
+ min?: number | { value: number; message: string }
74
+ max?: number | { value: number; message: string }
75
+ minLength?: number | { value: number; message: string }
76
+ maxLength?: number | { value: number; message: string }
77
+ email?: boolean | string
78
+ pattern?: string | { value: string; message: string }
79
+ validation?: FieldValidation
80
+ condition?: FieldCondition
81
+ access?: AccessPolicy
82
+ visibleFor?: AccessAudienceInput
83
+ requiresAdmin?: boolean
84
+ permissions?: readonly string[]
85
+ anyPermissions?: readonly string[]
86
+ options?: readonly ControlOption[]
87
+ section?: string
88
+ sectionLabel?: string
89
+ sectionDescription?: string
90
+ sectionSubtitle?: string
91
+ view?: string
92
+ order?: number
93
+ colSpan?: number
94
+ props?: Record<string, unknown>
95
+ sidebar?: boolean | ControlSidebarConfig
96
+ }
97
+
98
+ export type ControlSchema = Record<string, ControlInput>
99
+ export type ControlFormSchema = Extract<FormSchema, { sections: FormSectionSchema[] }>
100
+
101
+ export interface ControlSchemaOptions {
102
+ view?: string
103
+ views?: Record<string, ControlViewConfig>
104
+ section?: string
105
+ sectionLabel?: string
106
+ sections?: Record<string, ControlSectionConfig>
107
+ columns?: 1 | 2 | 3
108
+ submitLabel?: string
109
+ cancelLabel?: string
110
+ showCancel?: boolean
111
+ }
112
+
113
+ export interface ControlWorkspaceOptions extends ControlSchemaOptions {
114
+ initialValues?: Record<string, unknown>
115
+ topBarSettings?: Omit<TopBarSettingsConfig, 'schema' | 'controls' | 'controlOptions' | 'values'>
116
+ }
117
+
118
+ export interface ControlModelSectionConfig extends ControlSectionConfig {
119
+ controls: ControlSchema
120
+ sidebar?: boolean | ControlSidebarConfig
121
+ }
122
+
123
+ export interface ControlModelViewConfig extends ControlViewConfig {
124
+ controls?: ControlSchema
125
+ section?: string
126
+ sectionLabel?: string
127
+ sectionDescription?: string
128
+ sections?: Record<string, ControlModelSectionConfig>
129
+ }
130
+
131
+ export interface ControlModel extends Omit<ControlWorkspaceOptions, 'sections' | 'views'> {
132
+ controls?: ControlSchema
133
+ sections?: Record<string, ControlModelSectionConfig>
134
+ views?: Record<string, ControlModelViewConfig>
135
+ /** Optional SDK component bindings returned with generated component props for custom workspace slots. */
136
+ componentBindings?: ControlComponentBindingsConfig
137
+ /** Alias for componentBindings in raw control models. */
138
+ components?: ControlComponentBindingsConfig
139
+ /** Optional ControlWorkspaceView componentProps mapping returned with the generated controls/options. */
140
+ componentProps?: ControlComponentPropsMap
141
+ /** Optional named componentProps mappings returned for multiple SDK components. */
142
+ componentPropsById?: ControlComponentPropsByIdMap
143
+ }
144
+
145
+ export interface ControlModelBinding {
146
+ controls: ControlSchema
147
+ controlOptions: ControlWorkspaceOptions
148
+ componentBindings?: ControlComponentBindingsConfig
149
+ componentProps?: ControlComponentPropsMap
150
+ componentPropsById?: ControlComponentPropsByIdMap
151
+ }
152
+
153
+ export interface ControlSidebarBinding {
154
+ panels: Record<string, SidebarToolSection[]>
155
+ forms: Record<string, ControlFormSchema>
156
+ viewIds: string[]
157
+ viewItems: PillNavItem[]
158
+ defaultView: string
159
+ }
160
+
161
+ export interface ControlFormBinding {
162
+ schema: ControlFormSchema
163
+ }
164
+
165
+ export interface ControlSettingsBinding {
166
+ schema: SettingsModalSchema
167
+ }
168
+
169
+ export interface ControlTopBarSettingsBinding {
170
+ showSettings: true
171
+ settingsConfig: TopBarSettingsConfig
172
+ }
173
+
174
+ export interface ControlWorkspaceFormBinding extends ControlFormBinding {
175
+ modelValue: Record<string, unknown>
176
+ 'onUpdate:modelValue': (values: Record<string, unknown>) => void
177
+ }
178
+
179
+ export interface ControlWorkspaceSidebarBinding extends ControlSidebarBinding {
180
+ activeView: string
181
+ modelValue: Record<string, unknown>
182
+ 'onUpdate:modelValue': (values: Record<string, unknown>) => void
183
+ values: Record<string, unknown>
184
+ 'onUpdate:values': (values: Record<string, unknown>) => void
185
+ }
186
+
187
+ export interface ControlWorkspaceTopBarSettingsBinding extends ControlTopBarSettingsBinding {
188
+ onSettingsValuesChange: (values: Record<string, unknown>) => void
189
+ }
190
+
191
+ export interface ControlWorkspacePillNavBinding {
192
+ items: PillNavItem[]
193
+ currentItemId: string
194
+ onSelect: (item: PillNavItem) => void
195
+ }
196
+
197
+ export interface ControlWorkspaceTopBarBinding extends ControlWorkspaceTopBarSettingsBinding {
198
+ pillNav: PillNavItem[]
199
+ currentPillId: string
200
+ onPillSelect: (item: PillNavItem) => void
201
+ }
202
+
203
+ export type ControlWorkspaceAppTopBarPillBinding = ControlWorkspaceTopBarBinding
204
+
205
+ export interface ControlWorkspaceComponentBindings {
206
+ form: ControlWorkspaceFormBinding
207
+ sidebar: ControlWorkspaceSidebarBinding
208
+ topBar: ComputedRef<ControlWorkspaceTopBarBinding>
209
+ topBarSettings: ControlWorkspaceTopBarSettingsBinding
210
+ pillNav: ControlWorkspacePillNavBinding
211
+ componentBindings: ComputedRef<ControlComponentBinding[]>
212
+ componentBindingsById: ComputedRef<ControlComponentBindingsById>
213
+ componentProps: ComputedRef<Record<string, unknown>>
214
+ componentPropsById: ComputedRef<Record<string, Record<string, unknown>>>
215
+ }
216
+
217
+ export type ControlComponentPropSource<TValues extends Record<string, unknown> = Record<string, unknown>> =
218
+ | (keyof TValues & string)
219
+ | ((values: TValues) => unknown)
220
+
221
+ export type ControlComponentPropsMap<TValues extends Record<string, unknown> = Record<string, unknown>> =
222
+ | readonly (keyof TValues & string)[]
223
+ | Record<string, ControlComponentPropSource<TValues>>
224
+
225
+ export type ControlComponentPropsByIdMap<TValues extends Record<string, unknown> = Record<string, unknown>> =
226
+ Record<string, ControlComponentPropsMap<TValues>>
227
+
228
+ export interface ControlComponentBindingConfig<TValues extends Record<string, unknown> = Record<string, unknown>> {
229
+ id?: string
230
+ component: string
231
+ props?: ControlComponentPropsMap<TValues>
232
+ }
233
+
234
+ export interface ControlComponentBindingRecordConfig<TValues extends Record<string, unknown> = Record<string, unknown>> {
235
+ component: string
236
+ props?: ControlComponentPropsMap<TValues>
237
+ }
238
+
239
+ export type ControlComponentBindingsConfig<TValues extends Record<string, unknown> = Record<string, unknown>> =
240
+ | readonly ControlComponentBindingConfig<TValues>[]
241
+ | Record<string, ControlComponentBindingRecordConfig<TValues>>
242
+
243
+ export interface ControlComponentBinding {
244
+ id: string
245
+ component: string
246
+ props: Record<string, unknown>
247
+ }
248
+
249
+ export type ControlComponentBindingsById = Record<string, ControlComponentBinding>
250
+
251
+ export interface WellPlateControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
252
+ selectedWells?: ControlComponentPropSource<TValues>
253
+ format?: ControlComponentPropSource<TValues>
254
+ wells?: ControlComponentPropSource<TValues>
255
+ disabled?: ControlComponentPropSource<TValues>
256
+ readonly?: ControlComponentPropSource<TValues>
257
+ showLegend?: ControlComponentPropSource<TValues>
258
+ showSampleTypeIndicator?: ControlComponentPropSource<TValues>
259
+ /** Listener for WellPlate v-model updates. Set false to keep generated props one-way. */
260
+ onUpdateModelValue?: ((values: TValues) => (wellIds: string[]) => void) | false
261
+ }
262
+
263
+ export interface DoseCalculatorControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
264
+ mode?: ControlComponentPropSource<TValues>
265
+ targetWells?: ControlComponentPropSource<TValues>
266
+ /** Control value key used by the default apply-to-wells handler. */
267
+ wells?: ControlComponentPropSource<TValues>
268
+ disabled?: ControlComponentPropSource<TValues>
269
+ molecularWeight?: ControlComponentPropSource<TValues>
270
+ /** Listener for DoseCalculator apply-to-wells. Set false to keep generated props one-way. */
271
+ onApplyToWells?: ((values: TValues) => (results: WellConcentration[]) => void) | false
272
+ }
273
+
274
+ export interface WellPlateDoseControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
275
+ plateId?: string
276
+ doseId?: string
277
+ plate?: WellPlateControlPropsOptions<TValues>
278
+ dose?: DoseCalculatorControlPropsOptions<TValues>
279
+ }
280
+
281
+ export interface DoseDesignControlModelOptions {
282
+ viewId?: string
283
+ viewLabel?: string
284
+ sectionId?: string
285
+ sectionLabel?: string
286
+ sectionDescription?: string
287
+ selectedWells?: readonly string[]
288
+ plateFormat?: number
289
+ plateFormats?: readonly number[]
290
+ doseMode?: 'serial' | 'dilution' | 'conversion'
291
+ doseModes?: readonly ('serial' | 'dilution' | 'conversion')[]
292
+ disabled?: boolean
293
+ includeMolecularWeight?: boolean
294
+ molecularWeight?: number
295
+ componentProps?: WellPlateDoseControlPropsOptions
296
+ }
297
+
298
+ export interface UseControlSchemaReturn<TControls extends ControlSchema> {
299
+ controls: TControls
300
+ fields: FormFieldSchema[]
301
+ formSchema: ControlFormSchema
302
+ form: ControlFormBinding
303
+ settingsSchema: SettingsModalSchema
304
+ settings: ControlSettingsBinding
305
+ topBarSettingsConfig: TopBarSettingsConfig
306
+ topBarSettings: ControlTopBarSettingsBinding
307
+ sidebarPanels: Record<string, SidebarToolSection[]>
308
+ viewIds: string[]
309
+ viewItems: PillNavItem[]
310
+ defaultView: string
311
+ sectionSchemas: Record<string, ControlFormSchema>
312
+ sidebar: ControlSidebarBinding
313
+ initialValues: ControlValues<TControls>
314
+ sectionSchema: (sectionId: string) => ControlFormSchema
315
+ }
316
+
317
+ export interface UseControlWorkspaceReturn<TControls extends ControlSchema>
318
+ extends Omit<UseControlSchemaReturn<TControls>, 'form' | 'sidebar' | 'topBarSettings'> {
319
+ schema: UseControlSchemaReturn<TControls>
320
+ values: ControlValues<TControls> & Record<string, unknown>
321
+ activeView: Ref<string>
322
+ form: ControlWorkspaceFormBinding
323
+ sidebar: ControlWorkspaceSidebarBinding
324
+ topBar: ComputedRef<ControlWorkspaceTopBarBinding>
325
+ pillNav: ControlWorkspacePillNavBinding
326
+ topBarSettings: ControlWorkspaceTopBarSettingsBinding
327
+ bindings: ControlWorkspaceComponentBindings
328
+ componentBindings: ComputedRef<ControlComponentBinding[]>
329
+ componentBindingsById: ComputedRef<ControlComponentBindingsById>
330
+ componentProps: ComputedRef<Record<string, unknown>>
331
+ componentPropsById: ComputedRef<Record<string, Record<string, unknown>>>
332
+ setActiveView: (viewId: string) => void
333
+ setValues: (values: Record<string, unknown>) => void
334
+ resetValues: (values?: Record<string, unknown>) => void
335
+ getComponentProps: (
336
+ mapping?: ControlComponentPropsMap<ControlValues<TControls> & Record<string, unknown>>
337
+ ) => Record<string, unknown>
338
+ getComponentPropsById: (
339
+ mappings?: ControlComponentPropsByIdMap<ControlValues<TControls> & Record<string, unknown>>
340
+ ) => Record<string, Record<string, unknown>>
341
+ getComponentBindings: (
342
+ bindings?: ControlComponentBindingsConfig<ControlValues<TControls> & Record<string, unknown>>
343
+ ) => ControlComponentBinding[]
344
+ getComponentBindingsById: (
345
+ bindings?: ControlComponentBindingsConfig<ControlValues<TControls> & Record<string, unknown>>
346
+ ) => ControlComponentBindingsById
347
+ }
348
+
349
+ export type ControlValues<TControls extends ControlSchema> = {
350
+ [K in keyof TControls]: ControlValue<TControls[K]>
351
+ }
352
+
353
+ type ControlValue<TControl> =
354
+ TControl extends { default: infer TDefault }
355
+ ? TDefault
356
+ : TControl extends { defaultValue: infer TDefaultValue }
357
+ ? TDefaultValue
358
+ : TControl extends readonly [infer First, ...unknown[]]
359
+ ? OptionValue<First>
360
+ : TControl extends ControlPrimitive
361
+ ? TControl
362
+ : unknown
363
+
364
+ type OptionValue<TOption> = TOption extends SelectOption<infer TValue> ? TValue : TOption