@morscherlab/mint-sdk 1.2.0-beta.1 → 1.2.0-beta.11

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 (408) hide show
  1. package/README.md +35 -5
  2. package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-oL0fg_A0.js} +6 -4
  3. package/dist/ExperimentPopover-oL0fg_A0.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DyPAUCLw.js → ExperimentSelectorModal-BeEOomw_.js} +5 -5
  5. package/dist/ExperimentSelectorModal-BeEOomw_.js.map +1 -0
  6. package/dist/{SettingsModal-BgKY93zh.js → SettingsModal-Dphh3RrI.js} +5 -8
  7. package/dist/SettingsModal-Dphh3RrI.js.map +1 -0
  8. package/dist/{EmptyState-p90quq8Z.js → Skeleton-DxtwJ5gt.js} +111 -93
  9. package/dist/Skeleton-DxtwJ5gt.js.map +1 -0
  10. package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
  11. package/dist/__tests__/components/PluginWorkspaceView.internal.test.d.ts +1 -0
  12. package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
  14. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  15. package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
  16. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  17. package/dist/components/ActionMenu.vue.d.ts +1 -1
  18. package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
  19. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  20. package/dist/components/AppSidebar.vue.d.ts +1 -1
  21. package/dist/components/AuditTrail.vue.d.ts +13 -0
  22. package/dist/components/AutoGroupModal.vue.d.ts +1 -1
  23. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  24. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  25. package/dist/components/DataFrame.vue.d.ts +14 -2
  26. package/dist/components/DatePicker.vue.d.ts +1 -1
  27. package/dist/components/DateTimePicker.vue.d.ts +2 -0
  28. package/dist/components/DropdownButton.vue.d.ts +2 -0
  29. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  30. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  31. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  32. package/dist/components/FitPanel.vue.d.ts +1 -1
  33. package/dist/components/JobsStatusTray.vue.d.ts +9 -2
  34. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  35. package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
  36. package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
  37. package/dist/components/ProgressBar.vue.d.ts +1 -1
  38. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  39. package/dist/components/ReagentList.vue.d.ts +29 -1
  40. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  41. package/dist/components/SampleLegend.vue.d.ts +1 -1
  42. package/dist/components/SampleSelector.drag.d.ts +13 -0
  43. package/dist/components/SampleSelector.tree.d.ts +2 -0
  44. package/dist/components/SampleSelector.vue.d.ts +35 -2
  45. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  46. package/dist/components/SecretInput.vue.d.ts +28 -0
  47. package/dist/components/SettingsModal.vue.d.ts +1 -1
  48. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -1
  49. package/dist/components/TimePicker.vue.d.ts +1 -0
  50. package/dist/components/WellPlate.geometry.d.ts +15 -0
  51. package/dist/components/WellPlate.interaction.d.ts +13 -0
  52. package/dist/components/WellPlate.vue.d.ts +29 -0
  53. package/dist/components/index.d.ts +9 -0
  54. package/dist/components/index.js +8 -8
  55. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  56. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  57. package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
  58. package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
  59. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
  60. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
  61. package/dist/{components-DkHddRMl.js → components-CgAUzF8F.js} +2497 -2235
  62. package/dist/components-CgAUzF8F.js.map +1 -0
  63. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  64. package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
  65. package/dist/composables/index.d.ts +9 -2
  66. package/dist/composables/index.js +10 -10
  67. package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
  68. package/dist/composables/useAsync.d.ts +5 -1
  69. package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
  70. package/dist/composables/useCommandHistory.d.ts +5 -1
  71. package/dist/composables/useDropdownState.d.ts +18 -2
  72. package/dist/composables/useEventStream.d.ts +9 -0
  73. package/dist/composables/useFocusTrap.d.ts +21 -0
  74. package/dist/composables/useGeneratedAnalysis.d.ts +3 -1
  75. package/dist/composables/useJobsStatusTray.d.ts +25 -1
  76. package/dist/composables/useListReorder.d.ts +90 -0
  77. package/dist/composables/useMenuKeyboard.d.ts +29 -0
  78. package/dist/composables/useOptimisticMutation.d.ts +5 -1
  79. package/dist/composables/usePluginClient.d.ts +2 -0
  80. package/dist/composables/usePluginConfig.d.ts +27 -0
  81. package/dist/composables/usePluginWorkspace.d.ts +51 -0
  82. package/dist/composables/useRequestSyncState.d.ts +42 -2
  83. package/dist/composables/useResourceCrud.d.ts +5 -1
  84. package/dist/composables/useRovingFocus.d.ts +24 -0
  85. package/dist/composables/useScheduleDrag.d.ts +1 -0
  86. package/dist/composables/useWellPainting.d.ts +5 -1
  87. package/dist/composables/useWellPlateAdapter.d.ts +5 -1
  88. package/dist/composables/useWellPlateValidation.d.ts +5 -1
  89. package/dist/composables/workspaceRecipes.d.ts +188 -0
  90. package/dist/{composables-C_i90sGS.js → composables-B_pia3hO.js} +209 -82
  91. package/dist/composables-B_pia3hO.js.map +1 -0
  92. package/dist/{useApi-J6zFkHmn.js → errors-_W0-LbA6.js} +103 -3
  93. package/dist/errors-_W0-LbA6.js.map +1 -0
  94. package/dist/{experiment-Cq145oEW.js → experiment-Cwl9AYxw.js} +3 -8
  95. package/dist/experiment-Cwl9AYxw.js.map +1 -0
  96. package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-DV3DrvE_.js} +70 -51
  97. package/dist/experiment-utils-DV3DrvE_.js.map +1 -0
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +15 -15
  100. package/dist/install.js +2 -7
  101. package/dist/install.js.map +1 -1
  102. package/dist/permissions.d.ts +42 -1
  103. package/dist/permissions.js +20 -10
  104. package/dist/permissions.js.map +1 -1
  105. package/dist/stores/auth.d.ts +6 -0
  106. package/dist/stores/index.d.ts +1 -1
  107. package/dist/stores/index.js +3 -3
  108. package/dist/stores/settings.d.ts +31 -1
  109. package/dist/styles.css +11247 -29501
  110. package/dist/templates/builderReadUtils.d.ts +1 -1
  111. package/dist/templates/index.js +2 -4
  112. package/dist/{templates-DsP51i-S.js → templates-Qq113pyZ.js} +303 -106
  113. package/dist/templates-Qq113pyZ.js.map +1 -0
  114. package/dist/types/auth.d.ts +1 -0
  115. package/dist/types/form-builder.d.ts +1 -1
  116. package/dist/{useControlSchema-BDx2Olha.js → useControlSchema-aMZlb4Sc.js} +462 -1130
  117. package/dist/useControlSchema-aMZlb4Sc.js.map +1 -0
  118. package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-DitCtrTT.js} +22 -6
  119. package/dist/useDropdownState-DitCtrTT.js.map +1 -0
  120. package/dist/{useExperimentSelector-CV4iNfMS.js → useExperimentSelector-I8HC8hUu.js} +4 -4
  121. package/dist/{useExperimentSelector-CV4iNfMS.js.map → useExperimentSelector-I8HC8hUu.js.map} +1 -1
  122. package/dist/{useFormBuilder-BLxG3BOX.js → useFormBuilder-TCxNnqeb.js} +2 -2
  123. package/dist/{useFormBuilder-BLxG3BOX.js.map → useFormBuilder-TCxNnqeb.js.map} +1 -1
  124. package/dist/{useProtocolTemplates-CS_SQl6U.js → useProtocolTemplates-BmX_iVBR.js} +766 -212
  125. package/dist/useProtocolTemplates-BmX_iVBR.js.map +1 -0
  126. package/dist/utils/color.d.ts +13 -0
  127. package/dist/utils/errors.d.ts +9 -0
  128. package/dist/utils/pluginSecrets.d.ts +53 -0
  129. package/dist/utils/records.d.ts +4 -0
  130. package/package.json +1 -1
  131. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  132. package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
  133. package/src/__tests__/components/BaseTabs.test.ts +67 -0
  134. package/src/__tests__/components/DataFrame.test.ts +183 -11
  135. package/src/__tests__/components/DataStates.test.ts +176 -0
  136. package/src/__tests__/components/DatePicker.test.ts +76 -0
  137. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  138. package/src/__tests__/components/DropdownButton.test.ts +134 -0
  139. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  140. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  141. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  142. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
  143. package/src/__tests__/components/RackEditor.test.ts +35 -0
  144. package/src/__tests__/components/ReagentList.test.ts +64 -2
  145. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  146. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  147. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  148. package/src/__tests__/components/SecretInput.test.ts +87 -0
  149. package/src/__tests__/components/SegmentedControl.test.ts +88 -0
  150. package/src/__tests__/components/TimePicker.test.ts +61 -0
  151. package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
  152. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  153. package/src/__tests__/composables/useAuth.test.ts +2 -0
  154. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  155. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  156. package/src/__tests__/composables/usePluginClient.test.ts +140 -0
  157. package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
  158. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  159. package/src/__tests__/docs/frontendDocsCatalog.test.ts +39 -7
  160. package/src/__tests__/stores/settings.test.ts +71 -1
  161. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  162. package/src/__tests__/utils/permissions.test.ts +68 -0
  163. package/src/components/ActionMenu.vue +45 -88
  164. package/src/components/AlertBox.vue +0 -4
  165. package/src/components/AppAvatarMenu.vue +26 -7
  166. package/src/components/AppLayout.vue +0 -4
  167. package/src/components/AppPluginSwitcher.story.vue +87 -0
  168. package/src/components/AppPluginSwitcher.vue +2 -5
  169. package/src/components/AppSidebar.vue +0 -4
  170. package/src/components/AppToastContainer.vue +6 -8
  171. package/src/components/AppTopBar.vue +0 -4
  172. package/src/components/ArtifactSaveDialog.vue +0 -4
  173. package/src/components/ArtifactSelectorModal.vue +0 -4
  174. package/src/components/AuditTrail.story.vue +18 -0
  175. package/src/components/AuditTrail.vue +27 -7
  176. package/src/components/AutoGroupModal.vue +0 -4
  177. package/src/components/Avatar.vue +0 -4
  178. package/src/components/BaseButton.vue +0 -4
  179. package/src/components/BaseCheckbox.vue +0 -4
  180. package/src/components/BaseInput.vue +0 -4
  181. package/src/components/BaseModal.vue +8 -60
  182. package/src/components/BasePill.vue +0 -4
  183. package/src/components/BaseRadioGroup.vue +0 -4
  184. package/src/components/BaseSelect.vue +0 -4
  185. package/src/components/BaseSlider.vue +0 -4
  186. package/src/components/BaseTabs.vue +26 -5
  187. package/src/components/BaseTextarea.vue +0 -4
  188. package/src/components/BaseToggle.vue +0 -4
  189. package/src/components/BatchProgressList.story.vue +18 -0
  190. package/src/components/BatchProgressList.vue +32 -4
  191. package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
  192. package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
  193. package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
  194. package/src/components/Breadcrumb.vue +0 -4
  195. package/src/components/Calendar.vue +0 -4
  196. package/src/components/ChartContainer.story.vue +1 -1
  197. package/src/components/ChartContainer.vue +0 -4
  198. package/src/components/ChemicalFormula.vue +0 -4
  199. package/src/components/CollapsibleCard.vue +0 -4
  200. package/src/components/ColorSlider.vue +0 -4
  201. package/src/components/ComponentBindingRenderer.vue +1 -3
  202. package/src/components/ConcentrationInput.vue +0 -4
  203. package/src/components/ConfirmDialog.vue +0 -4
  204. package/src/components/ControlWorkspaceView.vue +11 -22
  205. package/src/components/DataFrame.story.vue +14 -0
  206. package/src/components/DataFrame.vue +97 -23
  207. package/src/components/DatePicker.vue +73 -27
  208. package/src/components/DateTimePicker.vue +45 -17
  209. package/src/components/Divider.vue +0 -4
  210. package/src/components/DoseCalculator.vue +0 -4
  211. package/src/components/DoseDesignWorkspaceView.vue +6 -25
  212. package/src/components/DropdownButton.vue +24 -6
  213. package/src/components/EmptyState.vue +0 -4
  214. package/src/components/ExperimentCodeBadge.vue +0 -4
  215. package/src/components/ExperimentDataViewer.story.vue +3 -0
  216. package/src/components/ExperimentDataViewer.vue +33 -13
  217. package/src/components/ExperimentPopover.vue +2 -5
  218. package/src/components/ExperimentSelectorModal.vue +0 -4
  219. package/src/components/ExperimentTimeline.story.vue +18 -0
  220. package/src/components/ExperimentTimeline.vue +81 -75
  221. package/src/components/FileUploader.vue +0 -4
  222. package/src/components/FitPanel.vue +0 -4
  223. package/src/components/FormActions.story.vue +96 -0
  224. package/src/components/FormActions.vue +0 -4
  225. package/src/components/FormBuilder.vue +0 -4
  226. package/src/components/FormField.vue +0 -4
  227. package/src/components/FormulaInput.vue +0 -4
  228. package/src/components/GeneratedPathInput.story.vue +68 -0
  229. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  230. package/src/components/GeneratedPlotlyResult.vue +3 -3
  231. package/src/components/GeneratedPluginView.story.vue +145 -0
  232. package/src/components/GeneratedPluginView.vue +10 -10
  233. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  234. package/src/components/GeneratedResultRenderer.vue +4 -4
  235. package/src/components/GroupAssigner.vue +67 -5
  236. package/src/components/IconButton.vue +0 -4
  237. package/src/components/InstrumentAlertLog.vue +0 -4
  238. package/src/components/InstrumentStateBadge.vue +0 -4
  239. package/src/components/InstrumentStatusCard.vue +0 -4
  240. package/src/components/JobsStatusTray.vue +16 -5
  241. package/src/components/LcmsSequenceTable.vue +81 -50
  242. package/src/components/LoadingSpinner.vue +0 -4
  243. package/src/components/MobileSupportGate.vue +0 -4
  244. package/src/components/MoleculeInput.vue +0 -4
  245. package/src/components/MultiSelect.vue +0 -4
  246. package/src/components/NumberInput.vue +0 -4
  247. package/src/components/PlateMapEditor.vue +3 -14
  248. package/src/components/PluginIcon.vue +0 -4
  249. package/src/components/PluginWorkspaceView.props.ts +38 -0
  250. package/src/components/PluginWorkspaceView.vue +53 -224
  251. package/src/components/ProgressBar.vue +0 -4
  252. package/src/components/ProtocolStepEditor.vue +2 -4
  253. package/src/components/RackEditor.vue +51 -70
  254. package/src/components/ReagentEditor.vue +0 -4
  255. package/src/components/ReagentList.story.vue +18 -0
  256. package/src/components/ReagentList.vue +127 -82
  257. package/src/components/ResourceCard.vue +0 -4
  258. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  259. package/src/components/RuntimeUpdateNotice.vue +4 -4
  260. package/src/components/SampleHierarchyTree.story.vue +18 -0
  261. package/src/components/SampleHierarchyTree.vue +32 -9
  262. package/src/components/SampleLegend.vue +2 -8
  263. package/src/components/SampleSelector.drag.ts +51 -0
  264. package/src/components/SampleSelector.story.vue +6 -0
  265. package/src/components/SampleSelector.tree.ts +2 -0
  266. package/src/components/SampleSelector.vue +49 -10
  267. package/src/components/SampleSelectorGroupNode.vue +19 -0
  268. package/src/components/ScheduleCalendar.story.vue +6 -0
  269. package/src/components/ScheduleCalendar.vue +82 -7
  270. package/src/components/ScientificNumber.vue +0 -4
  271. package/src/components/SecretInput.story.vue +79 -0
  272. package/src/components/SecretInput.vue +150 -0
  273. package/src/components/SectionCard.vue +0 -4
  274. package/src/components/SegmentedControl.vue +48 -5
  275. package/src/components/SequenceInput.vue +0 -4
  276. package/src/components/SequenceProgressBar.story.vue +110 -0
  277. package/src/components/SequenceProgressBar.vue +0 -4
  278. package/src/components/SettingsModal.vue +0 -4
  279. package/src/components/Skeleton.vue +0 -4
  280. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  281. package/src/components/SmartGroupManual.vue +0 -4
  282. package/src/components/StatusIndicator.vue +0 -4
  283. package/src/components/StepWizard.vue +0 -4
  284. package/src/components/TagsInput.vue +4 -6
  285. package/src/components/ThemeToggle.vue +0 -4
  286. package/src/components/TimePicker.vue +36 -7
  287. package/src/components/TimeRangeInput.vue +0 -4
  288. package/src/components/Tooltip.story.vue +3 -3
  289. package/src/components/Tooltip.vue +0 -4
  290. package/src/components/UnitInput.vue +0 -4
  291. package/src/components/WellPlate.geometry.ts +60 -1
  292. package/src/components/WellPlate.interaction.ts +44 -0
  293. package/src/components/WellPlate.story.vue +8 -0
  294. package/src/components/WellPlate.vue +53 -7
  295. package/src/components/index.ts +9 -0
  296. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  297. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  298. package/src/components/internal/DataStateInternal.vue +74 -0
  299. package/src/components/internal/FormSectionRenderer.vue +0 -4
  300. package/src/components/internal/WellEditPopupInternal.vue +20 -5
  301. package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
  302. package/src/components/internal/WorkspaceShellInternal.vue +125 -0
  303. package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
  304. package/src/composables/controlSchemaTypes.ts +34 -0
  305. package/src/composables/experimentDesignData.ts +1 -3
  306. package/src/composables/flattenWorkspaceBindings.ts +104 -0
  307. package/src/composables/formBuilderRegistry.ts +5 -0
  308. package/src/composables/index.ts +43 -0
  309. package/src/composables/pluginWorkspaceModel.ts +182 -0
  310. package/src/composables/useAsync.ts +5 -1
  311. package/src/composables/useAuth.ts +3 -0
  312. package/src/composables/useBioTemplatePackWorkspace.ts +15 -9
  313. package/src/composables/useBioTemplatePresetWorkspace.ts +14 -15
  314. package/src/composables/useBioTemplateWorkspace.ts +18 -43
  315. package/src/composables/useCommandHistory.ts +5 -1
  316. package/src/composables/useDropdownState.ts +35 -5
  317. package/src/composables/useEventStream.ts +14 -2
  318. package/src/composables/useFileImport.ts +2 -7
  319. package/src/composables/useFocusTrap.ts +91 -0
  320. package/src/composables/useGeneratedAnalysis.ts +22 -10
  321. package/src/composables/useJobsStatusTray.ts +184 -17
  322. package/src/composables/useListReorder.story.vue +143 -0
  323. package/src/composables/useListReorder.ts +242 -0
  324. package/src/composables/useMenuKeyboard.ts +90 -0
  325. package/src/composables/useOptimisticMutation.ts +6 -16
  326. package/src/composables/usePluginClient.ts +47 -4
  327. package/src/composables/usePluginConfig.ts +252 -0
  328. package/src/composables/usePluginWorkspace.ts +208 -0
  329. package/src/composables/useRackEditor.ts +2 -11
  330. package/src/composables/useRequestSyncState.ts +98 -28
  331. package/src/composables/useResourceCrud.ts +6 -16
  332. package/src/composables/useRovingFocus.ts +66 -0
  333. package/src/composables/useScheduleDrag.ts +37 -0
  334. package/src/composables/useWellPainting.ts +10 -30
  335. package/src/composables/useWellPlateAdapter.ts +5 -1
  336. package/src/composables/useWellPlateEditor.ts +1 -11
  337. package/src/composables/useWellPlateValidation.ts +5 -1
  338. package/src/composables/workspaceRecipes.ts +267 -0
  339. package/src/index.ts +16 -0
  340. package/src/permissions.ts +48 -9
  341. package/src/stores/auth.ts +1 -0
  342. package/src/stores/experiment.ts +2 -7
  343. package/src/stores/index.ts +9 -1
  344. package/src/stores/settings.ts +93 -1
  345. package/src/styles/components/audit-trail.css +5 -5
  346. package/src/styles/components/batch-progress-list.css +7 -0
  347. package/src/styles/components/color-slider.css +2 -2
  348. package/src/styles/components/data-state.css +30 -0
  349. package/src/styles/components/dataframe.css +29 -35
  350. package/src/styles/components/experiment-data-viewer.css +4 -4
  351. package/src/styles/components/experiment-timeline.css +3 -30
  352. package/src/styles/components/form-builder.css +5 -5
  353. package/src/styles/components/lcms-sequence-table.css +16 -1
  354. package/src/styles/components/multi-select.css +1 -1
  355. package/src/styles/components/reagent-list.css +38 -31
  356. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  357. package/src/styles/components/sample-selector.css +9 -2
  358. package/src/styles/components/schedule-calendar.css +8 -0
  359. package/src/styles/components/scientific-number.css +1 -1
  360. package/src/styles/components/secret-input.css +60 -0
  361. package/src/styles/components/well-plate.css +8 -0
  362. package/src/styles/index.css +9 -0
  363. package/src/styles/variables.css +29 -0
  364. package/src/templates/builderPresetControls.ts +1 -1
  365. package/src/templates/builderReadUtils.ts +1 -3
  366. package/src/templates/componentPlateHelpers.ts +3 -1
  367. package/src/templates/componentTargetResolvers.ts +1 -3
  368. package/src/templates/controlSchemaTargets.ts +1 -3
  369. package/src/templates/doseResponseAdapters.ts +2 -13
  370. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  371. package/src/templates/plateMapBuilder.ts +2 -2
  372. package/src/templates/qpcrPlateBuilder.ts +1 -1
  373. package/src/templates/templateValidators.ts +1 -1
  374. package/src/templates/timeCourseBuilder.ts +2 -2
  375. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  376. package/src/types/auth.ts +1 -0
  377. package/src/types/form-builder.ts +1 -0
  378. package/src/utils/color.ts +51 -0
  379. package/src/utils/errors.ts +29 -0
  380. package/src/utils/formModelSync.ts +1 -3
  381. package/src/utils/pluginIcon.ts +1 -3
  382. package/src/utils/pluginSecrets.ts +102 -0
  383. package/src/utils/records.ts +9 -0
  384. package/dist/EmptyState-p90quq8Z.js.map +0 -1
  385. package/dist/ExperimentPopover-tLwJ7XF4.js.map +0 -1
  386. package/dist/ExperimentSelectorModal-DyPAUCLw.js.map +0 -1
  387. package/dist/SettingsModal-BgKY93zh.js.map +0 -1
  388. package/dist/components-DkHddRMl.js.map +0 -1
  389. package/dist/composables/autoGroupConstants.d.ts +0 -1
  390. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  391. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  392. package/dist/composables-C_i90sGS.js.map +0 -1
  393. package/dist/experiment-Cq145oEW.js.map +0 -1
  394. package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
  395. package/dist/templates/builderDefaults.d.ts +0 -1
  396. package/dist/templates/plateGeometry.d.ts +0 -4
  397. package/dist/templates-DsP51i-S.js.map +0 -1
  398. package/dist/useApi-J6zFkHmn.js.map +0 -1
  399. package/dist/useControlSchema-BDx2Olha.js.map +0 -1
  400. package/dist/useDropdownState-DSb3BC3N.js.map +0 -1
  401. package/dist/useProtocolTemplates-CS_SQl6U.js.map +0 -1
  402. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  403. package/src/composables/autoGroupConstants.ts +0 -4
  404. package/src/composables/autoGroupGrouping.ts +0 -148
  405. package/src/composables/useAutoGroupInputSources.ts +0 -147
  406. package/src/templates/builderDefaults.ts +0 -11
  407. package/src/templates/plateGeometry.ts +0 -62
  408. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → components/DataStates.test.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- export declare function isRecord(value: unknown): value is Record<string, unknown>;
1
+ export { isRecord } from '../utils/records';
2
2
  export declare function readStringList(value: unknown, fallback: string[]): string[];
3
3
  export declare function readNumberList(value: unknown, fallback: number[]): number[];
4
4
  export declare function readString(value: unknown, fallback: string): string;
@@ -1,5 +1,3 @@
1
- import "../experiment-utils-CLnzPPq5.js";
2
- import "../EmptyState-p90quq8Z.js";
3
- import "../useControlSchema-BDx2Olha.js";
4
- import { $ as toTimeCourseRows, $t as listBioTemplatePacks, A as createSamplePrepTemplate, At as toCalibrationCurveRows, B as toBioTemplateComponentProps, Bt as validatePlateMapData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunScheduleEvents, D as createTimeCourseTemplate, Dt as toFlowPanelRows, E as createProtocolStepsTemplate, Et as toFlowPanelDataFrame, F as getBioTemplateComponentProps, Ft as validateAssayMatrixData, G as toTemplateDataFrame, Gt as validateSampleSheetData, H as toBioTemplateComponentPropsById, Ht as validateQpcrPlateData, I as listBioTemplateComponentBindings, It as validateCalibrationCurveData, J as toDoseLayoutState, Jt as getBioTemplatePresetInfo, K as toWellMapArray, Kt as validateTimeCourseData, L as toBioTemplateComponentBindings, Lt as validateDoseResponseData, M as createPlateMapTemplate, Mt as toAssayMatrixDataFrame, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixRows, O as createCalibrationCurveTemplate, Ot as toCalibrationCurveColumns, P as getBioTemplateComponentBindings, Pt as toAssayMatrixSampleOptions, Q as toTimeCourseDataFrame, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, Rt as validateFlowCytometryPanelData, S as createInstrumentRunTemplate, St as toInstrumentRunRows, T as createAssayMatrixTemplate, Tt as toFlowPanelColumns, U as toBioTemplateComponentSnippets, Ut as validateReagentListData, V as toBioTemplateComponentPropsByComponent, Vt as validateProtocolStepsData, W as toBioTemplateComponentUsage, Wt as validateSamplePrepData, X as toWellPlateWells, Xt as searchBioTemplatePresets, Y as toPlateMapEditorState, Yt as listBioTemplatePresets, Z as toTimeCourseColumns, Zt as bioTemplatePacks, _ as createElisaAssayCollection, _t as toProtocolDataFrame, a as getBioTemplateControlDefaults, an as TEMPLATE_COLLECTION_KEY, at as toSamplePrepColumns, b as createQpcrExpressionCollection, bt as toInstrumentRunColumns, c as listBioTemplatePresetControlSchemas, cn as createTemplateEnvelope, ct as toReagentColumns, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, dt as toReagentRows, en as searchBioTemplatePacks, et as toTimeCourseSteps, f as createWellPlateScreenCollection, fn as getTemplateData, ft as toQpcrColumns, g as createFlowCytometryAssayCollection, gt as toProtocolColumns, h as createWesternBlotAssayCollection, ht as toQpcrWellPlateWells, i as createBioTemplateControlToolkit, in as searchBioTemplateCatalog, it as toSampleRows, j as createSampleSheetTemplate, jt as toAssayMatrixColumns, k as createDoseResponseTemplate, kt as toCalibrationCurveDataFrame, l as requireBioTemplateControlSchema, ln as ensureTemplateEnvelope, lt as toReagentDataFrame, m as createDefaultBioTemplate, mt as toQpcrRows, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplateInfo, nt as toSampleDataFrame, o as getBioTemplateControlSchema, on as assertTemplateEnvelope, ot as toSamplePrepDataFrame, p as createBioTemplatePackCollection, pt as toQpcrDataFrame, q as toDoseConditions, qt as bioTemplatePresets, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplateCatalog, rt as toSampleOptions, s as listBioTemplateControlSchemas, sn as createTemplateCollection, st as toSamplePrepRows, t as bioTemplateControlsToFormSchema, tn as bioTemplateCatalog, tt as toSampleColumns, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, ut as toReagentListItems, v as createTargetedMetabolomicsCollection, vt as toProtocolRows, w as createReagentListTemplate, wt as toInstrumentRunSteps, x as createQpcrPlateTemplate, xt as toInstrumentRunDataFrame, y as createLcmsBatchCollection, yt as toProtocolSteps, z as toBioTemplateComponentImports, zt as validateInstrumentRunData } from "../templates-DsP51i-S.js";
1
+ import "../useControlSchema-aMZlb4Sc.js";
2
+ import { $ as toTimeCourseRows, $t as listBioTemplatePacks, A as createSamplePrepTemplate, At as toCalibrationCurveRows, B as toBioTemplateComponentProps, Bt as validatePlateMapData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunScheduleEvents, D as createTimeCourseTemplate, Dt as toFlowPanelRows, E as createProtocolStepsTemplate, Et as toFlowPanelDataFrame, F as getBioTemplateComponentProps, Ft as validateAssayMatrixData, G as toTemplateDataFrame, Gt as validateSampleSheetData, H as toBioTemplateComponentPropsById, Ht as validateQpcrPlateData, I as listBioTemplateComponentBindings, It as validateCalibrationCurveData, J as toDoseLayoutState, Jt as getBioTemplatePresetInfo, K as toWellMapArray, Kt as validateTimeCourseData, L as toBioTemplateComponentBindings, Lt as validateDoseResponseData, M as createPlateMapTemplate, Mt as toAssayMatrixDataFrame, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixRows, O as createCalibrationCurveTemplate, Ot as toCalibrationCurveColumns, P as getBioTemplateComponentBindings, Pt as toAssayMatrixSampleOptions, Q as toTimeCourseDataFrame, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, Rt as validateFlowCytometryPanelData, S as createInstrumentRunTemplate, St as toInstrumentRunRows, T as createAssayMatrixTemplate, Tt as toFlowPanelColumns, U as toBioTemplateComponentSnippets, Ut as validateReagentListData, V as toBioTemplateComponentPropsByComponent, Vt as validateProtocolStepsData, W as toBioTemplateComponentUsage, Wt as validateSamplePrepData, X as toWellPlateWells, Xt as searchBioTemplatePresets, Y as toPlateMapEditorState, Yt as listBioTemplatePresets, Z as toTimeCourseColumns, Zt as bioTemplatePacks, _ as createElisaAssayCollection, _t as toProtocolDataFrame, a as getBioTemplateControlDefaults, an as TEMPLATE_COLLECTION_KEY, at as toSamplePrepColumns, b as createQpcrExpressionCollection, bt as toInstrumentRunColumns, c as listBioTemplatePresetControlSchemas, cn as createTemplateEnvelope, ct as toReagentColumns, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, dt as toReagentRows, en as searchBioTemplatePacks, et as toTimeCourseSteps, f as createWellPlateScreenCollection, fn as getTemplateData, ft as toQpcrColumns, g as createFlowCytometryAssayCollection, gt as toProtocolColumns, h as createWesternBlotAssayCollection, ht as toQpcrWellPlateWells, i as createBioTemplateControlToolkit, in as searchBioTemplateCatalog, it as toSampleRows, j as createSampleSheetTemplate, jt as toAssayMatrixColumns, k as createDoseResponseTemplate, kt as toCalibrationCurveDataFrame, l as requireBioTemplateControlSchema, ln as ensureTemplateEnvelope, lt as toReagentDataFrame, m as createDefaultBioTemplate, mt as toQpcrRows, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplateInfo, nt as toSampleDataFrame, o as getBioTemplateControlSchema, on as assertTemplateEnvelope, ot as toSamplePrepDataFrame, p as createBioTemplatePackCollection, pt as toQpcrDataFrame, q as toDoseConditions, qt as bioTemplatePresets, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplateCatalog, rt as toSampleOptions, s as listBioTemplateControlSchemas, sn as createTemplateCollection, st as toSamplePrepRows, t as bioTemplateControlsToFormSchema, tn as bioTemplateCatalog, tt as toSampleColumns, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, ut as toReagentListItems, v as createTargetedMetabolomicsCollection, vt as toProtocolRows, w as createReagentListTemplate, wt as toInstrumentRunSteps, x as createQpcrPlateTemplate, xt as toInstrumentRunDataFrame, y as createLcmsBatchCollection, yt as toProtocolSteps, z as toBioTemplateComponentImports, zt as validateInstrumentRunData } from "../templates-Qq113pyZ.js";
5
3
  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, createTargetedMetabolomicsCollection, 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, toAssayMatrixSampleOptions, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toInstrumentRunScheduleEvents, toInstrumentRunSteps, 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,8 +1,287 @@
1
- import { _ as controlsToFormSchema, i as useControlSchema, r as getControlDefaults, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas } from "./useControlSchema-BDx2Olha.js";
2
- //#region src/templates/builderReadUtils.ts
3
- function isRecord$2(value) {
4
- return typeof value === "object" && value !== null && !Array.isArray(value);
1
+ import { _ as controlsToFormSchema, i as useControlSchema, nt as isObjectLike, r as getControlDefaults, rt as isRecord, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas } from "./useControlSchema-aMZlb4Sc.js";
2
+ //#region src/utils/color.ts
3
+ /**
4
+ * Canonical categorical scale for sample types, plate maps, dose-response
5
+ * series and legends. Mirrors `--mint-sample-1` … `--mint-sample-9`.
6
+ */
7
+ var SAMPLE_COLOR_SCALE = [
8
+ "#3B82F6",
9
+ "#10B981",
10
+ "#EF4444",
11
+ "#F59E0B",
12
+ "#8B5CF6",
13
+ "#F97316",
14
+ "#06B6D4",
15
+ "#14B8A6",
16
+ "#6B7280"
17
+ ];
18
+ /**
19
+ * Slot-position colors shared by `PlateMapEditor` and `RackEditor`.
20
+ * Mirrors `--mint-slot-r`, `--mint-slot-g`, `--mint-slot-b`, `--mint-slot-y`.
21
+ */
22
+ var SLOT_COLORS = {
23
+ R: "#ef4444",
24
+ G: "#22c55e",
25
+ B: "#3b82f6",
26
+ Y: "#eab308"
27
+ };
28
+ /** Slot positions in their canonical display order. */
29
+ var SLOT_ORDER = [
30
+ "R",
31
+ "G",
32
+ "B",
33
+ "Y"
34
+ ];
35
+ var HEX_RE = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
36
+ function clamp(n, min, max) {
37
+ return Math.min(max, Math.max(min, n));
38
+ }
39
+ function hexToHsl(hex) {
40
+ const match = HEX_RE.exec(hex.trim());
41
+ if (!match) return {
42
+ h: 0,
43
+ s: 0,
44
+ l: 50
45
+ };
46
+ let raw = match[1];
47
+ if (raw.length === 3) raw = raw.split("").map((c) => c + c).join("");
48
+ const r = parseInt(raw.slice(0, 2), 16) / 255;
49
+ const g = parseInt(raw.slice(2, 4), 16) / 255;
50
+ const b = parseInt(raw.slice(4, 6), 16) / 255;
51
+ const max = Math.max(r, g, b);
52
+ const min = Math.min(r, g, b);
53
+ const delta = max - min;
54
+ let h = 0;
55
+ if (delta !== 0) if (max === r) h = (g - b) / delta % 6;
56
+ else if (max === g) h = (b - r) / delta + 2;
57
+ else h = (r - g) / delta + 4;
58
+ h = (h * 60 + 360) % 360;
59
+ const l = (max + min) / 2;
60
+ const s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
61
+ return {
62
+ h,
63
+ s: s * 100,
64
+ l: l * 100
65
+ };
66
+ }
67
+ function hslToHex(h, s, l) {
68
+ const sNorm = clamp(s, 0, 100) / 100;
69
+ const lNorm = clamp(l, 0, 100) / 100;
70
+ const hNorm = (h % 360 + 360) % 360;
71
+ const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm;
72
+ const x = c * (1 - Math.abs(hNorm / 60 % 2 - 1));
73
+ const m = lNorm - c / 2;
74
+ let r = 0, g = 0, b = 0;
75
+ if (hNorm < 60) [r, g, b] = [
76
+ c,
77
+ x,
78
+ 0
79
+ ];
80
+ else if (hNorm < 120) [r, g, b] = [
81
+ x,
82
+ c,
83
+ 0
84
+ ];
85
+ else if (hNorm < 180) [r, g, b] = [
86
+ 0,
87
+ c,
88
+ x
89
+ ];
90
+ else if (hNorm < 240) [r, g, b] = [
91
+ 0,
92
+ x,
93
+ c
94
+ ];
95
+ else if (hNorm < 300) [r, g, b] = [
96
+ x,
97
+ 0,
98
+ c
99
+ ];
100
+ else [r, g, b] = [
101
+ c,
102
+ 0,
103
+ x
104
+ ];
105
+ const toHex = (n) => Math.round((n + m) * 255).toString(16).padStart(2, "0");
106
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
107
+ }
108
+ /**
109
+ * Derive a same-hue-family shade of `parentHex` for child at `index` of `total`.
110
+ *
111
+ * Lightness is distributed evenly within [35, 75] so all children remain
112
+ * readable on light/dark backgrounds. Hue and saturation are inherited from
113
+ * the parent. With `total <= 1`, returns the parent unchanged.
114
+ *
115
+ * Children are ordered light → dark by index, so index 0 is the brightest
116
+ * sibling and index `total - 1` is the darkest.
117
+ */
118
+ function deriveShade(parentHex, index, total) {
119
+ if (total <= 1) return parentHex;
120
+ const { h, s, l } = hexToHsl(parentHex);
121
+ const L_MIN = 35;
122
+ const L_MAX = 75;
123
+ const spread = Math.min(L_MAX - L_MIN, 40);
124
+ const center = clamp(l, L_MIN + spread / 2, L_MAX - spread / 2);
125
+ const top = center + spread / 2;
126
+ const bot = center - spread / 2;
127
+ const childL = top - (total === 1 ? .5 : index / (total - 1)) * (top - bot);
128
+ return hslToHex(h, clamp(s, 35, 100), childL);
129
+ }
130
+ //#endregion
131
+ //#region src/components/WellPlate.geometry.ts
132
+ var PLATE_CONFIGS = {
133
+ 6: {
134
+ rows: 2,
135
+ cols: 3
136
+ },
137
+ 12: {
138
+ rows: 3,
139
+ cols: 4
140
+ },
141
+ 24: {
142
+ rows: 4,
143
+ cols: 6
144
+ },
145
+ 48: {
146
+ rows: 6,
147
+ cols: 8
148
+ },
149
+ 54: {
150
+ rows: 6,
151
+ cols: 9
152
+ },
153
+ 96: {
154
+ rows: 8,
155
+ cols: 12
156
+ },
157
+ 384: {
158
+ rows: 16,
159
+ cols: 24
160
+ }
161
+ };
162
+ var WELL_PLATE_SIZE_CONFIGS = {
163
+ sm: {
164
+ cellWidth: "40px",
165
+ cellHeight: "40px",
166
+ headerWidth: "32px",
167
+ headerHeight: "32px",
168
+ fontSize: "0.625rem",
169
+ gap: "2px"
170
+ },
171
+ md: {
172
+ cellWidth: "56px",
173
+ cellHeight: "32px",
174
+ headerWidth: "32px",
175
+ headerHeight: "24px",
176
+ fontSize: "0.75rem",
177
+ gap: "3px"
178
+ },
179
+ lg: {
180
+ cellWidth: "80px",
181
+ cellHeight: "40px",
182
+ headerWidth: "40px",
183
+ headerHeight: "32px",
184
+ fontSize: "0.875rem",
185
+ gap: "4px"
186
+ },
187
+ xl: {
188
+ cellWidth: "96px",
189
+ cellHeight: "48px",
190
+ headerWidth: "48px",
191
+ headerHeight: "40px",
192
+ fontSize: "1rem",
193
+ gap: "4px"
194
+ },
195
+ fill: {
196
+ cellWidth: "100%",
197
+ cellHeight: "32px",
198
+ headerWidth: "32px",
199
+ headerHeight: "24px",
200
+ fontSize: "0.75rem",
201
+ gap: "2px"
202
+ }
203
+ };
204
+ /**
205
+ * Spreadsheet-style row label for a zero-based row index: A…Z, then AA, AB, …
206
+ *
207
+ * This is the single row-label generator for the SDK — plate grids, rack
208
+ * grids, well-id parsing and the template builders all go through it.
209
+ */
210
+ function rowLabel(index) {
211
+ let label = "";
212
+ let current = index;
213
+ for (;;) {
214
+ label = String.fromCharCode(65 + current % 26) + label;
215
+ current = Math.floor(current / 26) - 1;
216
+ if (current < 0) return label;
217
+ }
218
+ }
219
+ /** Inverse of {@link rowLabel}: 'A' → 0, 'Z' → 25, 'AA' → 26. */
220
+ function rowIndex(label) {
221
+ return [...label].reduce((value, char) => value * 26 + char.charCodeAt(0) - 64, 0) - 1;
222
+ }
223
+ function createPlateRowLabels(config) {
224
+ return Array.from({ length: config.rows }, (_, index) => rowLabel(index));
225
+ }
226
+ function plateConfigOrThrow(format) {
227
+ const config = PLATE_CONFIGS[format];
228
+ if (!config) throw new Error(`Unsupported plate format '${format}'.`);
229
+ return config;
230
+ }
231
+ /** Every well id of a plate, row-major (A1, A2, … B1, …). */
232
+ function wellIdsForFormat(format) {
233
+ const { rows, cols } = plateConfigOrThrow(format);
234
+ return Array.from({ length: rows }, (_, row) => Array.from({ length: cols }, (_col, col) => `${rowLabel(row)}${col + 1}`)).flat();
235
+ }
236
+ /** Throw unless `wellId` names a well that exists on a `format`-well plate. */
237
+ function assertWellInFormat(wellId, format) {
238
+ const { rows, cols } = plateConfigOrThrow(format);
239
+ const match = /^([A-Z]+)([1-9][0-9]*)$/.exec(wellId.toUpperCase());
240
+ if (!match) throw new Error(`Invalid well id '${wellId}'.`);
241
+ const row = rowIndex(match[1]);
242
+ const col = Number(match[2]) - 1;
243
+ if (row < 0 || col < 0 || row >= rows || col >= cols) throw new Error(`Well '${wellId}' is outside a ${format}-well plate.`);
244
+ }
245
+ /** Coerce an unknown value to a supported plate format, else `fallback`. */
246
+ function readPlateFormat(value, fallback) {
247
+ const parsed = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
248
+ return parsed in PLATE_CONFIGS ? parsed : fallback;
249
+ }
250
+ function createPlateColumnLabels(config) {
251
+ return Array.from({ length: config.cols }, (_, index) => index + 1);
252
+ }
253
+ function createWellGrid(config, rowLabels, wells) {
254
+ const grid = [];
255
+ for (let row = 0; row < config.rows; row++) {
256
+ const rowWells = [];
257
+ for (let col = 0; col < config.cols; col++) {
258
+ const id = `${rowLabels[row]}${col + 1}`;
259
+ const wellData = wells[id] || {};
260
+ rowWells.push({
261
+ id,
262
+ row,
263
+ col,
264
+ state: wellData.state || "empty",
265
+ sampleType: wellData.sampleType,
266
+ value: wellData.value,
267
+ metadata: wellData.metadata
268
+ });
269
+ }
270
+ grid.push(rowWells);
271
+ }
272
+ return grid;
273
+ }
274
+ function getRectangleWellIds(start, end, rowLabels) {
275
+ const minRow = Math.min(start.row, end.row);
276
+ const maxRow = Math.max(start.row, end.row);
277
+ const minCol = Math.min(start.col, end.col);
278
+ const maxCol = Math.max(start.col, end.col);
279
+ const wells = /* @__PURE__ */ new Set();
280
+ for (let row = minRow; row <= maxRow; row++) for (let col = minCol; col <= maxCol; col++) wells.add(`${rowLabels[row]}${col + 1}`);
281
+ return wells;
5
282
  }
283
+ //#endregion
284
+ //#region src/templates/builderReadUtils.ts
6
285
  function readStringList(value, fallback) {
7
286
  if (Array.isArray(value)) {
8
287
  const items = value.map((item) => String(item).trim()).filter(Boolean);
@@ -65,10 +344,10 @@ function extractTemplateCollection(value) {
65
344
  assertGenericTemplateEnvelope(value);
66
345
  return { [value.template_id]: value };
67
346
  }
68
- if (!isRecord$2(value)) throw new Error("Template collection payload must be an object.");
347
+ if (!isRecord(value)) throw new Error("Template collection payload must be an object.");
69
348
  const rawCollection = value[TEMPLATE_COLLECTION_KEY];
70
349
  if (rawCollection === void 0) return {};
71
- if (!isRecord$2(rawCollection)) throw new Error("Template collection must be an object.");
350
+ if (!isRecord(rawCollection)) throw new Error("Template collection must be an object.");
72
351
  const collection = {};
73
352
  for (const [templateId, template] of Object.entries(rawCollection)) {
74
353
  assertGenericTemplateEnvelope(template);
@@ -99,14 +378,14 @@ function getTemplateData(template, templateId) {
99
378
  return template;
100
379
  }
101
380
  function assertGenericTemplateEnvelope(value) {
102
- if (!isRecord$2(value)) throw new Error("Template envelope must be an object.");
381
+ if (!isRecord(value)) throw new Error("Template envelope must be an object.");
103
382
  if (typeof value.template_id !== "string" || value.template_id.length === 0) throw new Error("Template envelope requires a template_id string.");
104
383
  if (typeof value.template_version !== "string" || value.template_version.length === 0) throw new Error("Template envelope requires a template_version string.");
105
- if (!isRecord$2(value.data)) throw new Error("Template envelope data must be an object.");
106
- if ("metadata" in value && !isRecord$2(value.metadata)) throw new Error("Template envelope metadata must be an object.");
384
+ if (!isRecord(value.data)) throw new Error("Template envelope data must be an object.");
385
+ if ("metadata" in value && !isRecord(value.metadata)) throw new Error("Template envelope metadata must be an object.");
107
386
  }
108
387
  function isEnvelope(value) {
109
- return isRecord$2(value) && "template_id" in value && "data" in value;
388
+ return isRecord(value) && "template_id" in value && "data" in value;
110
389
  }
111
390
  //#endregion
112
391
  //#region src/templates/lookup.ts
@@ -956,19 +1235,16 @@ function resolveComponentTemplateIds(target) {
956
1235
  return Object.keys(extractTemplateCollection(target)).map((templateId) => getBioTemplateInfo(templateId)?.template_id).filter((templateId) => templateId !== void 0);
957
1236
  }
958
1237
  function isTemplateEnvelope$1(value) {
959
- return isRecord$1(value) && typeof value.template_id === "string" && "data" in value;
1238
+ return isObjectLike(value) && typeof value.template_id === "string" && "data" in value;
960
1239
  }
961
1240
  function collectionPresetName$1(value) {
962
- if (!isRecord$1(value) || !isRecord$1(value.metadata)) return void 0;
1241
+ if (!isObjectLike(value) || !isObjectLike(value.metadata)) return void 0;
963
1242
  return typeof value.metadata.preset === "string" ? value.metadata.preset : void 0;
964
1243
  }
965
1244
  function collectionPackName$1(value) {
966
- if (!isRecord$1(value) || !isRecord$1(value.metadata)) return void 0;
1245
+ if (!isObjectLike(value) || !isObjectLike(value.metadata)) return void 0;
967
1246
  return typeof value.metadata.pack === "string" ? value.metadata.pack : void 0;
968
1247
  }
969
- function isRecord$1(value) {
970
- return typeof value === "object" && value !== null;
971
- }
972
1248
  //#endregion
973
1249
  //#region src/templates/componentBindingHelpers.ts
974
1250
  function cloneBindingMap(bindings) {
@@ -1126,49 +1402,6 @@ function binding(templateId, component, adapters, props, description) {
1126
1402
  };
1127
1403
  }
1128
1404
  //#endregion
1129
- //#region src/templates/plateGeometry.ts
1130
- var PLATE_DIMENSIONS = {
1131
- 6: [2, 3],
1132
- 12: [3, 4],
1133
- 24: [4, 6],
1134
- 48: [6, 8],
1135
- 54: [6, 9],
1136
- 96: [8, 12],
1137
- 384: [16, 24]
1138
- };
1139
- function wellIdsForFormat(format) {
1140
- const dimensions = PLATE_DIMENSIONS[format];
1141
- if (!dimensions) throw new Error(`Unsupported plate format '${format}'.`);
1142
- const [rows, cols] = dimensions;
1143
- return Array.from({ length: rows }, (_, row) => Array.from({ length: cols }, (_col, col) => `${rowLabel(row)}${col + 1}`)).flat();
1144
- }
1145
- function assertWellInFormat(wellId, format) {
1146
- const dimensions = PLATE_DIMENSIONS[format];
1147
- if (!dimensions) throw new Error(`Unsupported plate format '${format}'.`);
1148
- const match = /^([A-Z]+)([1-9][0-9]*)$/.exec(wellId.toUpperCase());
1149
- if (!match) throw new Error(`Invalid well id '${wellId}'.`);
1150
- const row = rowIndex(match[1]);
1151
- const col = Number(match[2]) - 1;
1152
- const [rows, cols] = dimensions;
1153
- if (row < 0 || col < 0 || row >= rows || col >= cols) throw new Error(`Well '${wellId}' is outside a ${format}-well plate.`);
1154
- }
1155
- function readPlateFormat(value, fallback) {
1156
- const parsed = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
1157
- return parsed in PLATE_DIMENSIONS ? parsed : fallback;
1158
- }
1159
- function rowLabel(index) {
1160
- let label = "";
1161
- let current = index;
1162
- while (true) {
1163
- label = String.fromCharCode(65 + current % 26) + label;
1164
- current = Math.floor(current / 26) - 1;
1165
- if (current < 0) return label;
1166
- }
1167
- }
1168
- function rowIndex(label) {
1169
- return [...label].reduce((value, char) => value * 26 + char.charCodeAt(0) - 64, 0) - 1;
1170
- }
1171
- //#endregion
1172
1405
  //#region src/templates/templateValidators.ts
1173
1406
  function validatePlateMapData(data) {
1174
1407
  if (!Array.isArray(data.plates) || data.plates.length === 0) throw new Error("Plate-map template requires at least one plate.");
@@ -2319,23 +2552,12 @@ function toWellPlateWells(template, plateId) {
2319
2552
  }
2320
2553
  //#endregion
2321
2554
  //#region src/templates/doseResponseAdapters.ts
2322
- var CONDITION_COLORS = [
2323
- "#3B82F6",
2324
- "#10B981",
2325
- "#EF4444",
2326
- "#F59E0B",
2327
- "#8B5CF6",
2328
- "#F97316",
2329
- "#06B6D4",
2330
- "#14B8A6",
2331
- "#6B7280"
2332
- ];
2333
2555
  function toDoseConditions(template) {
2334
2556
  const data = getTemplateData(template, "dose-response");
2335
2557
  validateDoseResponseData(data);
2336
2558
  return data.compounds.map((compound, index) => ({
2337
2559
  label: compound.name,
2338
- color: String(compound.metadata?.color ?? CONDITION_COLORS[index % CONDITION_COLORS.length]),
2560
+ color: String(compound.metadata?.color ?? SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length]),
2339
2561
  concentrations: compound.concentrations,
2340
2562
  unit: data.unit
2341
2563
  }));
@@ -2381,16 +2603,7 @@ function legendItemsFromPlateState(state) {
2381
2603
  }));
2382
2604
  }
2383
2605
  function colorForIndex(index) {
2384
- const colors = [
2385
- "#3B82F6",
2386
- "#10B981",
2387
- "#EF4444",
2388
- "#F59E0B",
2389
- "#8B5CF6",
2390
- "#F97316",
2391
- "#06B6D4",
2392
- "#14B8A6"
2393
- ];
2606
+ const colors = SAMPLE_COLOR_SCALE.slice(0, 8);
2394
2607
  return colors[index % colors.length];
2395
2608
  }
2396
2609
  //#endregion
@@ -2734,19 +2947,6 @@ function bioTemplatePresetControlValuesToOptions(name, values) {
2734
2947
  throw new Error(`Unknown template preset '${name}'.`);
2735
2948
  }
2736
2949
  //#endregion
2737
- //#region src/templates/builderDefaults.ts
2738
- var DEFAULT_SAMPLE_COLORS = [
2739
- "#3B82F6",
2740
- "#10B981",
2741
- "#EF4444",
2742
- "#F59E0B",
2743
- "#8B5CF6",
2744
- "#F97316",
2745
- "#06B6D4",
2746
- "#14B8A6",
2747
- "#6B7280"
2748
- ];
2749
- //#endregion
2750
2950
  //#region src/templates/builderIdUtils.ts
2751
2951
  function sampleIdFromName(name, index) {
2752
2952
  return idFromName(name, `sample-${index + 1}`);
@@ -2770,7 +2970,7 @@ function createPlateMapTemplate(options = {}) {
2770
2970
  return {
2771
2971
  id: sampleIdFromName(sample, index),
2772
2972
  name: sample,
2773
- color: DEFAULT_SAMPLE_COLORS[index % DEFAULT_SAMPLE_COLORS.length]
2973
+ color: SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length]
2774
2974
  };
2775
2975
  });
2776
2976
  return createTemplateEnvelope("plate-map", {
@@ -3073,7 +3273,7 @@ function createTimeCourseTemplate(options) {
3073
3273
  return {
3074
3274
  id: idFromName(condition, `condition-${index + 1}`),
3075
3275
  name: condition,
3076
- color: DEFAULT_SAMPLE_COLORS[index % DEFAULT_SAMPLE_COLORS.length],
3276
+ color: SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length],
3077
3277
  metadata: {}
3078
3278
  };
3079
3279
  });
@@ -3688,7 +3888,7 @@ function createElisaAssayCollection(options = {}) {
3688
3888
  ...sampleRecords.map((sample, index) => ({
3689
3889
  id: sample.sampleId,
3690
3890
  name: sample.name ?? sample.sampleId,
3691
- color: DEFAULT_SAMPLE_COLORS[index % DEFAULT_SAMPLE_COLORS.length]
3891
+ color: SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length]
3692
3892
  }))
3693
3893
  ]
3694
3894
  }),
@@ -4030,7 +4230,7 @@ function createWellPlateScreenCollection(options = {}) {
4030
4230
  samples: sampleRecords.map((sample, index) => ({
4031
4231
  id: sample.sampleId,
4032
4232
  name: sample.name ?? sample.sampleId,
4033
- color: DEFAULT_SAMPLE_COLORS[index % DEFAULT_SAMPLE_COLORS.length]
4233
+ color: SAMPLE_COLOR_SCALE[index % SAMPLE_COLOR_SCALE.length]
4034
4234
  }))
4035
4235
  });
4036
4236
  return createTemplateCollection([
@@ -4167,19 +4367,16 @@ function describeControlTarget(target) {
4167
4367
  return collectionPresetName(target) ?? collectionPackName(target) ?? "template collection";
4168
4368
  }
4169
4369
  function isTemplateEnvelope(value) {
4170
- return isRecord(value) && typeof value.template_id === "string" && "data" in value;
4370
+ return isObjectLike(value) && typeof value.template_id === "string" && "data" in value;
4171
4371
  }
4172
4372
  function collectionPresetName(value) {
4173
- if (!isRecord(value) || !isRecord(value.metadata)) return void 0;
4373
+ if (!isObjectLike(value) || !isObjectLike(value.metadata)) return void 0;
4174
4374
  return typeof value.metadata.preset === "string" ? value.metadata.preset : void 0;
4175
4375
  }
4176
4376
  function collectionPackName(value) {
4177
- if (!isRecord(value) || !isRecord(value.metadata)) return void 0;
4377
+ if (!isObjectLike(value) || !isObjectLike(value.metadata)) return void 0;
4178
4378
  return typeof value.metadata.pack === "string" ? value.metadata.pack : void 0;
4179
4379
  }
4180
- function isRecord(value) {
4181
- return typeof value === "object" && value !== null;
4182
- }
4183
4380
  //#endregion
4184
4381
  //#region src/templates/controlSchemaConstants.ts
4185
4382
  var ICONS = {
@@ -5058,6 +5255,6 @@ function getBioTemplateControlDefaults(target) {
5058
5255
  return getControlDefaults(requireBioTemplateControlSchema(target));
5059
5256
  }
5060
5257
  //#endregion
5061
- export { toTimeCourseRows as $, listBioTemplatePacks as $t, createSamplePrepTemplate as A, toCalibrationCurveRows as At, toBioTemplateComponentProps as B, validatePlateMapData as Bt, createFlowCytometryPanelTemplate as C, toInstrumentRunScheduleEvents as Ct, createTimeCourseTemplate as D, toFlowPanelRows as Dt, createProtocolStepsTemplate as E, toFlowPanelDataFrame as Et, getBioTemplateComponentProps as F, validateAssayMatrixData as Ft, toTemplateDataFrame as G, validateSampleSheetData as Gt, toBioTemplateComponentPropsById as H, validateQpcrPlateData as Ht, listBioTemplateComponentBindings as I, validateCalibrationCurveData as It, toDoseLayoutState as J, getBioTemplatePresetInfo as Jt, toWellMapArray as K, validateTimeCourseData as Kt, toBioTemplateComponentBindings as L, validateDoseResponseData as Lt, createPlateMapTemplate as M, toAssayMatrixDataFrame as Mt, bioTemplatePresetControlValuesToOptions as N, toAssayMatrixRows as Nt, createCalibrationCurveTemplate as O, toCalibrationCurveColumns as Ot, getBioTemplateComponentBindings as P, toAssayMatrixSampleOptions as Pt, toTimeCourseDataFrame as Q, getBioTemplatePackInfo as Qt, toBioTemplateComponentBindingsById as R, validateFlowCytometryPanelData as Rt, createInstrumentRunTemplate as S, toInstrumentRunRows as St, createAssayMatrixTemplate as T, toFlowPanelColumns as Tt, toBioTemplateComponentSnippets as U, validateReagentListData as Ut, toBioTemplateComponentPropsByComponent as V, validateProtocolStepsData as Vt, toBioTemplateComponentUsage as W, validateSamplePrepData as Wt, toWellPlateWells as X, searchBioTemplatePresets as Xt, toPlateMapEditorState as Y, listBioTemplatePresets as Yt, toTimeCourseColumns as Z, bioTemplatePacks as Zt, createElisaAssayCollection as _, toProtocolDataFrame as _t, getBioTemplateControlDefaults as a, TEMPLATE_COLLECTION_KEY as an, toSamplePrepColumns as at, createQpcrExpressionCollection as b, toInstrumentRunColumns as bt, listBioTemplatePresetControlSchemas as c, createTemplateEnvelope as cn, toReagentColumns as ct, createBioTemplatePresetCollectionFromControls as d, extractTemplateCollection as dn, toReagentRows as dt, searchBioTemplatePacks as en, toTimeCourseSteps as et, createWellPlateScreenCollection as f, getTemplateData as fn, toQpcrColumns as ft, createFlowCytometryAssayCollection as g, toProtocolColumns as gt, createWesternBlotAssayCollection as h, toQpcrWellPlateWells as ht, createBioTemplateControlToolkit as i, searchBioTemplateCatalog as in, toSampleRows as it, createSampleSheetTemplate as j, toAssayMatrixColumns as jt, createDoseResponseTemplate as k, toCalibrationCurveDataFrame as kt, requireBioTemplateControlSchema as l, ensureTemplateEnvelope as ln, toReagentDataFrame as lt, createDefaultBioTemplate as m, toQpcrRows as mt, bioTemplateControlsToSectionFormSchemas as n, getBioTemplateInfo as nn, toSampleDataFrame as nt, getBioTemplateControlSchema as o, assertTemplateEnvelope as on, toSamplePrepDataFrame as ot, createBioTemplatePackCollection as p, toQpcrDataFrame as pt, toDoseConditions as q, bioTemplatePresets as qt, bioTemplateControlsToSidebarPanels as r, listBioTemplateCatalog as rn, toSampleOptions as rt, listBioTemplateControlSchemas as s, createTemplateCollection as sn, toSamplePrepRows as st, bioTemplateControlsToFormSchema as t, bioTemplateCatalog as tn, toSampleColumns as tt, createBioTemplatePresetCollection as u, ensureTemplateFromCollection as un, toReagentListItems as ut, createTargetedMetabolomicsCollection as v, toProtocolRows as vt, createReagentListTemplate as w, toInstrumentRunSteps as wt, createQpcrPlateTemplate as x, toInstrumentRunDataFrame as xt, createLcmsBatchCollection as y, toProtocolSteps as yt, toBioTemplateComponentImports as z, validateInstrumentRunData as zt };
5258
+ export { toTimeCourseRows as $, listBioTemplatePacks as $t, createSamplePrepTemplate as A, toCalibrationCurveRows as At, toBioTemplateComponentProps as B, validatePlateMapData as Bt, createFlowCytometryPanelTemplate as C, SLOT_ORDER as Cn, toInstrumentRunScheduleEvents as Ct, createTimeCourseTemplate as D, toFlowPanelRows as Dt, createProtocolStepsTemplate as E, hslToHex as En, toFlowPanelDataFrame as Et, getBioTemplateComponentProps as F, validateAssayMatrixData as Ft, toTemplateDataFrame as G, validateSampleSheetData as Gt, toBioTemplateComponentPropsById as H, validateQpcrPlateData as Ht, listBioTemplateComponentBindings as I, validateCalibrationCurveData as It, toDoseLayoutState as J, getBioTemplatePresetInfo as Jt, toWellMapArray as K, validateTimeCourseData as Kt, toBioTemplateComponentBindings as L, validateDoseResponseData as Lt, createPlateMapTemplate as M, toAssayMatrixDataFrame as Mt, bioTemplatePresetControlValuesToOptions as N, toAssayMatrixRows as Nt, createCalibrationCurveTemplate as O, toCalibrationCurveColumns as Ot, getBioTemplateComponentBindings as P, toAssayMatrixSampleOptions as Pt, toTimeCourseDataFrame as Q, getBioTemplatePackInfo as Qt, toBioTemplateComponentBindingsById as R, validateFlowCytometryPanelData as Rt, createInstrumentRunTemplate as S, SLOT_COLORS as Sn, toInstrumentRunRows as St, createAssayMatrixTemplate as T, hexToHsl as Tn, toFlowPanelColumns as Tt, toBioTemplateComponentSnippets as U, validateReagentListData as Ut, toBioTemplateComponentPropsByComponent as V, validateProtocolStepsData as Vt, toBioTemplateComponentUsage as W, validateSamplePrepData as Wt, toWellPlateWells as X, searchBioTemplatePresets as Xt, toPlateMapEditorState as Y, listBioTemplatePresets as Yt, toTimeCourseColumns as Z, bioTemplatePacks as Zt, createElisaAssayCollection as _, createWellGrid as _n, toProtocolDataFrame as _t, getBioTemplateControlDefaults as a, TEMPLATE_COLLECTION_KEY as an, toSamplePrepColumns as at, createQpcrExpressionCollection as b, rowLabel as bn, toInstrumentRunColumns as bt, listBioTemplatePresetControlSchemas as c, createTemplateEnvelope as cn, toReagentColumns as ct, createBioTemplatePresetCollectionFromControls as d, extractTemplateCollection as dn, toReagentRows as dt, searchBioTemplatePacks as en, toTimeCourseSteps as et, createWellPlateScreenCollection as f, getTemplateData as fn, toQpcrColumns as ft, createFlowCytometryAssayCollection as g, createPlateRowLabels as gn, toProtocolColumns as gt, createWesternBlotAssayCollection as h, createPlateColumnLabels as hn, toQpcrWellPlateWells as ht, createBioTemplateControlToolkit as i, searchBioTemplateCatalog as in, toSampleRows as it, createSampleSheetTemplate as j, toAssayMatrixColumns as jt, createDoseResponseTemplate as k, toCalibrationCurveDataFrame as kt, requireBioTemplateControlSchema as l, ensureTemplateEnvelope as ln, toReagentDataFrame as lt, createDefaultBioTemplate as m, WELL_PLATE_SIZE_CONFIGS as mn, toQpcrRows as mt, bioTemplateControlsToSectionFormSchemas as n, getBioTemplateInfo as nn, toSampleDataFrame as nt, getBioTemplateControlSchema as o, assertTemplateEnvelope as on, toSamplePrepDataFrame as ot, createBioTemplatePackCollection as p, PLATE_CONFIGS as pn, toQpcrDataFrame as pt, toDoseConditions as q, bioTemplatePresets as qt, bioTemplateControlsToSidebarPanels as r, listBioTemplateCatalog as rn, toSampleOptions as rt, listBioTemplateControlSchemas as s, createTemplateCollection as sn, toSamplePrepRows as st, bioTemplateControlsToFormSchema as t, bioTemplateCatalog as tn, toSampleColumns as tt, createBioTemplatePresetCollection as u, ensureTemplateFromCollection as un, toReagentListItems as ut, createTargetedMetabolomicsCollection as v, getRectangleWellIds as vn, toProtocolRows as vt, createReagentListTemplate as w, deriveShade as wn, toInstrumentRunSteps as wt, createQpcrPlateTemplate as x, SAMPLE_COLOR_SCALE as xn, toInstrumentRunDataFrame as xt, createLcmsBatchCollection as y, rowIndex as yn, toProtocolSteps as yt, toBioTemplateComponentImports as z, validateInstrumentRunData as zt };
5062
5259
 
5063
- //# sourceMappingURL=templates-DsP51i-S.js.map
5260
+ //# sourceMappingURL=templates-Qq113pyZ.js.map