@morscherlab/mint-sdk 1.3.9 → 1.4.0-beta.1

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 (966) hide show
  1. package/README.md +152 -177
  2. package/dist/ActionMenu-CScINahU.js +445 -0
  3. package/dist/ActionMenu-CScINahU.js.map +1 -0
  4. package/dist/AppSidebar-BmiiPfz9.js +3514 -0
  5. package/dist/AppSidebar-BmiiPfz9.js.map +1 -0
  6. package/dist/{experiment-utils-DTANyVKV.js → BaseModal-DfRIuVoj.js} +74 -149
  7. package/dist/BaseModal-DfRIuVoj.js.map +1 -0
  8. package/dist/ConfirmDialog-CJ7hqYUP.js +102 -0
  9. package/dist/ConfirmDialog-CJ7hqYUP.js.map +1 -0
  10. package/dist/ExperimentPopover-C4sGw-is.js +359 -0
  11. package/dist/ExperimentPopover-C4sGw-is.js.map +1 -0
  12. package/dist/ExperimentSelectorModal-D-9z7cNx.js +527 -0
  13. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +1 -0
  14. package/dist/SegmentedControl-DERBN-Xd.js +129 -0
  15. package/dist/SegmentedControl-DERBN-Xd.js.map +1 -0
  16. package/dist/SettingsModal-CSLE31yg.js +666 -0
  17. package/dist/SettingsModal-CSLE31yg.js.map +1 -0
  18. package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
  19. package/dist/auth-SliLnFre.js +65 -0
  20. package/dist/auth-SliLnFre.js.map +1 -0
  21. package/dist/components/ActionMenu.vue.d.ts +1 -1
  22. package/dist/components/AdductText.vue.d.ts +1 -1
  23. package/dist/components/AlertBox.vue.d.ts +3 -3
  24. package/dist/components/AppContainer.vue.d.ts +1 -1
  25. package/dist/components/AppSidebar.vue.d.ts +14 -94
  26. package/dist/components/AppTopBar.vue.d.ts +16 -70
  27. package/dist/components/ArtifactSaveDialog.vue.d.ts +4 -4
  28. package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
  29. package/dist/components/AuditTrail.vue.d.ts +2 -2
  30. package/dist/components/BaseButton.vue.d.ts +11 -4
  31. package/dist/components/BaseCheckbox.vue.d.ts +9 -3
  32. package/dist/components/BaseInput.vue.d.ts +13 -9
  33. package/dist/components/BaseModal.vue.d.ts +4 -4
  34. package/dist/components/BasePill.vue.d.ts +15 -8
  35. package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
  36. package/dist/components/BaseSelect.vue.d.ts +51 -19
  37. package/dist/components/BaseTabs.vue.d.ts +6 -5
  38. package/dist/components/BatchProgressList.vue.d.ts +2 -2
  39. package/dist/components/ChartContainer.vue.d.ts +2 -2
  40. package/dist/components/ChemicalFormula.vue.d.ts +2 -2
  41. package/dist/components/CollapsibleCard.vue.d.ts +3 -3
  42. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
  43. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  44. package/dist/components/ConfirmDialog.vue.d.ts +8 -7
  45. package/dist/components/DataFrame.vue.d.ts +32 -74
  46. package/dist/components/DatePicker.vue.d.ts +24 -2
  47. package/dist/components/DoseCalculator.vue.d.ts +1 -1
  48. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
  49. package/dist/components/EmptyState.vue.d.ts +3 -2
  50. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -3
  51. package/dist/components/FormBuilder.vue.d.ts +17 -74
  52. package/dist/components/FormulaInput.vue.d.ts +2 -2
  53. package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
  54. package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
  55. package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
  56. package/dist/components/JobsStatusTray.vue.d.ts +2 -9
  57. package/dist/components/LoadingSpinner.vue.d.ts +3 -3
  58. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  59. package/dist/components/NumberInput.vue.d.ts +19 -5
  60. package/dist/components/PlateEditor.vue.d.ts +11 -61
  61. package/dist/components/PlotlyChart.vue.d.ts +2 -2
  62. package/dist/components/PluginIcon.vue.d.ts +5 -1
  63. package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
  64. package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
  65. package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
  66. package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
  67. package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
  68. package/dist/components/PresenceAvatars.vue.d.ts +31 -0
  69. package/dist/components/ProgressBar.vue.d.ts +3 -2
  70. package/dist/components/ProtocolStep.presentation.d.ts +0 -1
  71. package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
  72. package/dist/components/SampleSelector.vue.d.ts +3 -3
  73. package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
  74. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  75. package/dist/components/SecretInput.vue.d.ts +2 -2
  76. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  77. package/dist/components/SequenceInput.vue.d.ts +2 -2
  78. package/dist/components/SettingsModal.vue.d.ts +12 -20
  79. package/dist/components/SmartGroup.types.d.ts +0 -1
  80. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  81. package/dist/components/StaleFormBanner.vue.d.ts +20 -0
  82. package/dist/components/TagsInput.vue.d.ts +4 -3
  83. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  84. package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
  85. package/dist/components/WellPlate.geometry.d.ts +0 -6
  86. package/dist/components/WellPlate.rendering.d.ts +0 -2
  87. package/dist/components/WellPlate.vue.d.ts +7 -52
  88. package/dist/components/index.d.ts +0 -90
  89. package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
  90. package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
  91. package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
  92. package/dist/components/internal/DatePickerDateInternal.vue.d.ts +22 -0
  93. package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
  94. package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +3 -3
  95. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
  96. package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
  97. package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
  98. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
  99. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +3 -3
  100. package/dist/components/{MultiSelect.vue.d.ts → internal/SelectMultipleInternal.vue.d.ts} +11 -8
  101. package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
  102. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
  103. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
  104. package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
  105. package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
  106. package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
  107. package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
  108. package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
  109. package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
  110. package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
  111. package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
  112. package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
  113. package/dist/components/internal/generatedJobsApi.d.ts +1 -1
  114. package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
  115. package/dist/composables/componentSpecs.d.ts +41 -0
  116. package/dist/composables/controlComponentBindings.d.ts +6 -0
  117. package/dist/composables/controlSchemaAdapters.d.ts +28 -2
  118. package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
  119. package/dist/composables/controlSchemaModel.d.ts +1 -1
  120. package/dist/composables/controlSchemaTypes.d.ts +35 -23
  121. package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +20 -49
  122. package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
  123. package/dist/composables/experiment-utils.d.ts +1 -6
  124. package/dist/composables/index.d.ts +6 -59
  125. package/dist/composables/platformContextHelpers.d.ts +0 -11
  126. package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
  127. package/dist/composables/pluginWorkspaceModel.d.ts +14 -97
  128. package/dist/composables/useApi.d.ts +1 -3
  129. package/dist/composables/useAppExperiment.d.ts +1 -1
  130. package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
  131. package/dist/composables/useExperiment.d.ts +30 -0
  132. package/dist/composables/useFilePicker.d.ts +2 -2
  133. package/dist/composables/useJobCenter.d.ts +63 -0
  134. package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
  135. package/dist/composables/useMenuKeyboard.d.ts +1 -1
  136. package/dist/composables/usePlatform.d.ts +63 -0
  137. package/dist/composables/usePluginWorkspace.d.ts +6 -11
  138. package/dist/composables/usePresence.d.ts +41 -0
  139. package/dist/composables/useRackEditor.d.ts +2 -2
  140. package/dist/composables/useRealtime.d.ts +71 -0
  141. package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
  142. package/dist/composables/useToast.d.ts +7 -5
  143. package/dist/composables/useVersionedSave.d.ts +76 -0
  144. package/dist/controlSchemaModel-CP5-_nAj.js +95 -0
  145. package/dist/controlSchemaModel-CP5-_nAj.js.map +1 -0
  146. package/dist/data-C2PwI_dn.js +3811 -0
  147. package/dist/data-C2PwI_dn.js.map +1 -0
  148. package/dist/data.d.ts +32 -0
  149. package/dist/data.js +10 -0
  150. package/dist/deprecatedRootExports.d.ts +191 -0
  151. package/dist/experiment-43OJtH7R.js +673 -0
  152. package/dist/experiment-43OJtH7R.js.map +1 -0
  153. package/dist/experimentStatus-BZmU4czV.js +60 -0
  154. package/dist/experimentStatus-BZmU4czV.js.map +1 -0
  155. package/dist/host.d.ts +10 -0
  156. package/dist/host.js +26 -0
  157. package/dist/host.js.map +1 -0
  158. package/dist/index.d.ts +1 -12
  159. package/dist/index.js +65 -277
  160. package/dist/index.js.map +1 -1
  161. package/dist/install-DAID6c2-.js +668 -0
  162. package/dist/install-DAID6c2-.js.map +1 -0
  163. package/dist/install.d.ts +2 -1
  164. package/dist/install.js +1 -21
  165. package/dist/instrument.d.ts +0 -6
  166. package/dist/lab-DLwRl_Ql.js +7513 -0
  167. package/dist/lab-DLwRl_Ql.js.map +1 -0
  168. package/dist/lab.d.ts +42 -0
  169. package/dist/lab.js +4 -0
  170. package/dist/permissions.d.ts +0 -4
  171. package/dist/permissions.js +1 -20
  172. package/dist/permissions.js.map +1 -1
  173. package/dist/records-BzTcxekG.js +3070 -0
  174. package/dist/records-BzTcxekG.js.map +1 -0
  175. package/dist/runtime-D6gVat6r.js +1495 -0
  176. package/dist/runtime-D6gVat6r.js.map +1 -0
  177. package/dist/runtime.d.ts +25 -0
  178. package/dist/runtime.js +8 -0
  179. package/dist/shell-5ju97nOS.js +197 -0
  180. package/dist/shell-5ju97nOS.js.map +1 -0
  181. package/dist/shell.d.ts +16 -0
  182. package/dist/shell.js +8 -0
  183. package/dist/stores/auth.d.ts +13 -35
  184. package/dist/stores/experiment.d.ts +4 -0
  185. package/dist/stores/index.js +2 -2
  186. package/dist/styles.css +12030 -14845
  187. package/dist/types/analysisArtifactTypes.d.ts +1 -1
  188. package/dist/types/auth.d.ts +0 -8
  189. package/dist/types/componentLabTypes.d.ts +98 -34
  190. package/dist/types/componentWorkflowTypes.d.ts +0 -27
  191. package/dist/types/components.d.ts +145 -74
  192. package/dist/types/form-builder.d.ts +4 -0
  193. package/dist/types/generated/platformContext.d.ts +52 -0
  194. package/dist/types/generated-ui.d.ts +2 -2
  195. package/dist/types/index.d.ts +4 -5
  196. package/dist/types/instrument.d.ts +41 -0
  197. package/dist/types/platform.d.ts +20 -58
  198. package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
  199. package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
  200. package/dist/useExpansionSet-CvoNMZJi.js +68 -0
  201. package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
  202. package/dist/useExperimentSamples-CxcnxZ8h.js +366 -0
  203. package/dist/useExperimentSamples-CxcnxZ8h.js.map +1 -0
  204. package/dist/useListReorder-CcbEYxX-.js +5462 -0
  205. package/dist/useListReorder-CcbEYxX-.js.map +1 -0
  206. package/dist/useRackEditor-BD5NIo5s.js +5916 -0
  207. package/dist/useRackEditor-BD5NIo5s.js.map +1 -0
  208. package/dist/useRealtime-PalKue84.js +696 -0
  209. package/dist/useRealtime-PalKue84.js.map +1 -0
  210. package/dist/useRequest-D5JDfsgZ.js +76 -0
  211. package/dist/useRequest-D5JDfsgZ.js.map +1 -0
  212. package/dist/utils/color.d.ts +0 -5
  213. package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
  214. package/dist/utils/experimentStatus.d.ts +9 -0
  215. package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
  216. package/dist/utils/integrationHost.d.ts +18 -0
  217. package/dist/utils/plotlyTemplate.d.ts +2 -0
  218. package/dist/utils/pluginSecrets.d.ts +12 -12
  219. package/dist/utils/presenceAvatars.d.ts +30 -0
  220. package/dist/utils/records.d.ts +0 -2
  221. package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +0 -18
  222. package/package.json +20 -17
  223. package/src/__tests__/components/ActionMenu.test.ts +0 -13
  224. package/src/__tests__/components/AlertBox.test.ts +1 -1
  225. package/src/__tests__/components/AppSidebar.test.ts +119 -167
  226. package/src/__tests__/components/AppToastContainer.test.ts +2 -2
  227. package/src/__tests__/components/AppTopBar.test.ts +181 -176
  228. package/src/__tests__/components/ArtifactSaveDialog.test.ts +5 -3
  229. package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
  230. package/src/__tests__/components/AuditTrail.test.ts +1 -1
  231. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
  232. package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
  233. package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
  234. package/src/__tests__/components/BaseButton.test.ts +51 -0
  235. package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
  236. package/src/__tests__/components/BaseInput.test.ts +13 -34
  237. package/src/__tests__/components/BaseModal.test.ts +6 -6
  238. package/src/__tests__/components/BasePill.test.ts +33 -39
  239. package/src/__tests__/components/{MultiSelect.test.ts → BaseSelect.multiple.test.ts} +16 -7
  240. package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
  241. package/src/__tests__/components/BaseSelect.test.ts +10 -0
  242. package/src/__tests__/components/BaseTabs.test.ts +13 -13
  243. package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
  244. package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
  245. package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
  246. package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
  247. package/src/__tests__/components/DataFrame.test.ts +140 -142
  248. package/src/__tests__/components/DataStates.test.ts +6 -22
  249. package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +9 -7
  250. package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +18 -17
  251. package/src/__tests__/components/DoseCalculator.test.ts +12 -7
  252. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
  253. package/src/__tests__/components/ExperimentSelectorModal.test.ts +15 -15
  254. package/src/__tests__/components/FormBuilder.test.ts +49 -167
  255. package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
  256. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
  257. package/src/__tests__/components/GeneratedPluginView.test.ts +38 -24
  258. package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
  259. package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
  260. package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
  261. package/src/__tests__/components/NumberInput.test.ts +28 -0
  262. package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
  263. package/src/__tests__/components/PlateEditor.test.ts +108 -108
  264. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
  265. package/src/__tests__/components/PlotlyChart.test.ts +1 -1
  266. package/src/__tests__/components/PluginIcon.test.ts +9 -4
  267. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
  268. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
  269. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
  270. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
  271. package/src/__tests__/components/PluginWorkspaceView.test.ts +176 -155
  272. package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
  273. package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
  274. package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
  275. package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
  276. package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -2
  277. package/src/__tests__/components/RetiredStyles.test.ts +0 -18
  278. package/src/__tests__/components/SampleSelector.test.ts +17 -17
  279. package/src/__tests__/components/SecretInput.test.ts +14 -19
  280. package/src/__tests__/components/SettingsModal.test.ts +76 -84
  281. package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
  282. package/src/__tests__/components/ThemeToggle.test.ts +1 -1
  283. package/src/__tests__/components/WellPlate.decoration.test.ts +10 -8
  284. package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
  285. package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
  286. package/src/__tests__/components/deprecationTags.test.ts +90 -0
  287. package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
  288. package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
  289. package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
  290. package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
  291. package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
  292. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
  293. package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
  294. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
  295. package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
  296. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
  297. package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
  298. package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
  299. package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
  300. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
  301. package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
  302. package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
  303. package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
  304. package/src/__tests__/composables/experiment-utils.test.ts +13 -14
  305. package/src/__tests__/composables/useApi.test.ts +32 -21
  306. package/src/__tests__/composables/useAppExperiment.test.ts +19 -2
  307. package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
  308. package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
  309. package/src/__tests__/composables/useControlSchema.test.ts +41 -99
  310. package/src/__tests__/composables/useExperiment.test.ts +63 -0
  311. package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
  312. package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
  313. package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
  314. package/src/__tests__/composables/usePlatform.test.ts +102 -0
  315. package/src/__tests__/composables/usePresence.test.ts +164 -0
  316. package/src/__tests__/composables/useRackEditor.test.ts +2 -2
  317. package/src/__tests__/composables/useRealtime.test.ts +196 -0
  318. package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
  319. package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
  320. package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
  321. package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
  322. package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
  323. package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
  324. package/src/__tests__/styles/baseControlsRules.test.ts +1 -1
  325. package/src/__tests__/styles/darkModeRules.test.ts +0 -6
  326. package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
  327. package/src/__tests__/utils/permissions.test.ts +1 -36
  328. package/src/__tests__/utils/plotlyTemplate.test.ts +16 -1
  329. package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +2 -9
  330. package/src/components/ActionMenu.vue +7 -13
  331. package/src/components/AlertBox.story.vue +25 -25
  332. package/src/components/AlertBox.vue +8 -8
  333. package/src/components/AppLayout.story.vue +33 -44
  334. package/src/components/AppLayout.vue +1 -1
  335. package/src/components/AppSidebar.story.vue +40 -73
  336. package/src/components/AppSidebar.vue +66 -147
  337. package/src/components/AppToastContainer.story.vue +1 -1
  338. package/src/components/AppTopBar.story.vue +51 -100
  339. package/src/components/AppTopBar.vue +74 -198
  340. package/src/components/ArtifactSaveDialog.story.vue +9 -9
  341. package/src/components/ArtifactSaveDialog.vue +23 -26
  342. package/src/components/ArtifactSelectorModal.story.vue +4 -4
  343. package/src/components/ArtifactSelectorModal.vue +10 -10
  344. package/src/components/AuditTrail.story.vue +4 -4
  345. package/src/components/AuditTrail.vue +3 -3
  346. package/src/components/Avatar.story.vue +2 -3
  347. package/src/components/Avatar.vue +1 -2
  348. package/src/components/BaseButton.story.vue +25 -0
  349. package/src/components/BaseButton.vue +39 -10
  350. package/src/components/BaseCheckbox.story.vue +2 -2
  351. package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
  352. package/src/components/BaseCheckbox.vue +39 -7
  353. package/src/components/BaseInput.story.vue +3 -15
  354. package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
  355. package/src/components/BaseInput.vue +53 -26
  356. package/src/components/BaseModal.story.vue +11 -11
  357. package/src/components/BaseModal.vue +8 -8
  358. package/src/components/BasePill.story.vue +48 -28
  359. package/src/components/BasePill.vue +22 -11
  360. package/src/components/BaseRadioGroup.story.vue +4 -4
  361. package/src/components/BaseRadioGroup.vue +3 -3
  362. package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +20 -14
  363. package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
  364. package/src/components/BaseSelect.story.vue +2 -2
  365. package/src/components/BaseSelect.vue +117 -22
  366. package/src/components/BaseTabs.story.vue +20 -20
  367. package/src/components/BaseTabs.vue +17 -9
  368. package/src/components/BatchProgressList.vue +3 -3
  369. package/src/components/ChartContainer.story.vue +8 -13
  370. package/src/components/ChartContainer.vue +3 -3
  371. package/src/components/ChemicalFormula.vue +1 -2
  372. package/src/components/CollapsibleCard.vue +5 -4
  373. package/src/components/ComponentBindingRenderer.story.vue +0 -29
  374. package/src/components/ComponentBindingRenderer.vue +15 -39
  375. package/src/components/ConcentrationInput.story.vue +2 -2
  376. package/src/components/ConcentrationInput.vue +9 -9
  377. package/src/components/ConfirmDialog.story.vue +21 -21
  378. package/src/components/ConfirmDialog.vue +15 -14
  379. package/src/components/DataFrame.story.vue +28 -40
  380. package/src/components/DataFrame.vue +112 -128
  381. package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
  382. package/src/components/DatePicker.story.vue +2 -2
  383. package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
  384. package/src/components/DatePicker.vue +82 -220
  385. package/src/components/DoseCalculator.vue +13 -19
  386. package/src/components/DoseCalculatorVolumeField.vue +6 -6
  387. package/src/components/EmptyState.story.vue +17 -17
  388. package/src/components/EmptyState.vue +5 -4
  389. package/src/components/ExperimentPopover.story.vue +1 -1
  390. package/src/components/ExperimentPopover.vue +4 -4
  391. package/src/components/ExperimentSelectorModal.story.vue +5 -5
  392. package/src/components/ExperimentSelectorModal.vue +11 -13
  393. package/src/components/FilePicker.vue +1 -1
  394. package/src/components/FormBuilder.story.vue +9 -4
  395. package/src/components/FormBuilder.vue +46 -253
  396. package/src/components/FormField.story.vue +1 -2
  397. package/src/components/FormulaInput.story.vue +2 -2
  398. package/src/components/FormulaInput.vue +5 -6
  399. package/src/components/GeneratedPathInput.vue +8 -9
  400. package/src/components/GeneratedPluginView.story.vue +1 -1
  401. package/src/components/GeneratedPluginView.vue +23 -22
  402. package/src/components/GeneratedResultRenderer.vue +16 -17
  403. package/src/components/InstrumentStatusPanels.story.vue +64 -0
  404. package/src/components/InstrumentStatusPanels.vue +133 -0
  405. package/src/components/JobsStatusTray.story.vue +2 -2
  406. package/src/components/JobsStatusTray.vue +4 -19
  407. package/src/components/LoadingSpinner.story.vue +11 -11
  408. package/src/components/LoadingSpinner.vue +6 -4
  409. package/src/components/MoleculeInput.story.vue +2 -2
  410. package/src/components/MoleculeInput.vue +3 -3
  411. package/src/components/NumberInput.story.vue +55 -15
  412. package/src/components/NumberInput.vue +80 -18
  413. package/src/components/PlateEditor.story.vue +51 -43
  414. package/src/components/PlateEditor.vue +97 -128
  415. package/src/components/PlotlyChart.story.vue +1 -1
  416. package/src/components/PlotlyChart.vue +6 -4
  417. package/src/components/PluginIcon.story.vue +9 -6
  418. package/src/components/PluginIcon.vue +7 -2
  419. package/src/components/PluginWorkspaceView.controls.ts +9 -29
  420. package/src/components/PluginWorkspaceView.navigation.ts +2 -23
  421. package/src/components/PluginWorkspaceView.props.ts +17 -151
  422. package/src/components/PluginWorkspaceView.shell.ts +13 -24
  423. package/src/components/PluginWorkspaceView.story.vue +64 -62
  424. package/src/components/PluginWorkspaceView.vue +21 -78
  425. package/src/components/PresenceAvatars.story.vue +75 -0
  426. package/src/components/PresenceAvatars.vue +114 -0
  427. package/src/components/ProgressBar.story.vue +7 -7
  428. package/src/components/ProgressBar.vue +4 -3
  429. package/src/components/ProtocolStep.presentation.ts +0 -11
  430. package/src/components/ProtocolStepEditor.vue +6 -5
  431. package/src/components/ProtocolStepParameterField.vue +15 -12
  432. package/src/components/SampleSelector.colors.ts +1 -1
  433. package/src/components/SampleSelector.vue +6 -6
  434. package/src/components/ScheduleCalendar.vue +4 -4
  435. package/src/components/SecretInput.story.vue +1 -1
  436. package/src/components/SecretInput.vue +16 -25
  437. package/src/components/SegmentedControl.story.vue +7 -7
  438. package/src/components/SegmentedControl.vue +5 -3
  439. package/src/components/SequenceInput.story.vue +2 -2
  440. package/src/components/SequenceInput.vue +3 -3
  441. package/src/components/SettingsModal.story.vue +13 -14
  442. package/src/components/SettingsModal.vue +29 -47
  443. package/src/components/SmartGroup.types.ts +4 -6
  444. package/src/components/SmartGroupFieldRecipe.vue +7 -5
  445. package/src/components/StaleFormBanner.story.vue +90 -0
  446. package/src/components/StaleFormBanner.vue +83 -0
  447. package/src/components/TagsInput.story.vue +7 -7
  448. package/src/components/TagsInput.vue +7 -6
  449. package/src/components/ThemeToggle.vue +5 -30
  450. package/src/components/TimeRangeInput.story.vue +1 -1
  451. package/src/components/TimeRangeInput.vue +10 -8
  452. package/src/components/VersionConflictDialog.story.vue +60 -0
  453. package/src/components/VersionConflictDialog.vue +79 -0
  454. package/src/components/WellPlate.geometry.ts +0 -38
  455. package/src/components/WellPlate.rendering.ts +0 -13
  456. package/src/components/WellPlate.story.vue +61 -50
  457. package/src/components/WellPlate.vue +61 -87
  458. package/src/components/index.ts +3 -105
  459. package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
  460. package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
  461. package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
  462. package/src/components/internal/DataStateInternal.vue +1 -1
  463. package/src/components/internal/DatePickerDateInternal.vue +243 -0
  464. package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +9 -9
  465. package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +7 -7
  466. package/src/components/internal/FilePickerListInternal.vue +8 -14
  467. package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
  468. package/src/components/internal/FormFieldRendererInternal.vue +1 -1
  469. package/src/components/internal/FormSchemaInternal.vue +253 -0
  470. package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
  471. package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
  472. package/src/components/internal/ResourcePickerListInternal.vue +4 -4
  473. package/src/components/{MultiSelect.vue → internal/SelectMultipleInternal.vue} +21 -15
  474. package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +24 -8
  475. package/src/components/internal/WellEditPopupInternal.vue +4 -9
  476. package/src/components/internal/WorkspaceShellInternal.vue +3 -36
  477. package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
  478. package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
  479. package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
  480. package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
  481. package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
  482. package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
  483. package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
  484. package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
  485. package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
  486. package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
  487. package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
  488. package/src/components/internal/generatedJobsApi.ts +1 -1
  489. package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
  490. package/src/composables/componentSpecs.ts +62 -0
  491. package/src/composables/controlComponentBindings.ts +7 -0
  492. package/src/composables/controlSchemaAdapters.ts +45 -7
  493. package/src/composables/controlSchemaDoseDesign.ts +16 -5
  494. package/src/composables/controlSchemaModel.ts +1 -1
  495. package/src/composables/controlSchemaTypes.ts +31 -22
  496. package/src/composables/{usePluginClient.ts → createClient.ts} +52 -190
  497. package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
  498. package/src/composables/experiment-utils.ts +1 -39
  499. package/src/composables/formBuilderRegistry.ts +6 -12
  500. package/src/composables/index.ts +16 -480
  501. package/src/composables/platformContextHelpers.ts +0 -57
  502. package/src/composables/pluginEndpointBuilder.ts +8 -10
  503. package/src/composables/pluginWorkspaceModel.ts +14 -105
  504. package/src/composables/useApi.ts +18 -30
  505. package/src/composables/useAppExperiment.ts +6 -5
  506. package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
  507. package/src/composables/useControlSchema.ts +5 -9
  508. package/src/composables/useControlWorkspace.ts +4 -7
  509. package/src/composables/useExperiment.ts +49 -0
  510. package/src/composables/useExperimentData.ts +4 -4
  511. package/src/composables/useExperimentSelector.ts +5 -5
  512. package/src/composables/useFileBrowser.ts +5 -13
  513. package/src/composables/useFilePicker.ts +2 -2
  514. package/src/composables/useFormBuilder.ts +3 -4
  515. package/src/composables/useJobCenter.ts +324 -0
  516. package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
  517. package/src/composables/useMenuKeyboard.ts +1 -1
  518. package/src/composables/usePlatform.ts +95 -0
  519. package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
  520. package/src/composables/usePluginWorkspace.ts +62 -107
  521. package/src/composables/usePresence.ts +110 -0
  522. package/src/composables/useRackEditor.ts +3 -3
  523. package/src/composables/useRealtime.ts +194 -0
  524. package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
  525. package/src/composables/useScheduleCalendarLayout.ts +1 -1
  526. package/src/composables/useToast.ts +14 -11
  527. package/src/composables/useVersionedSave.ts +165 -0
  528. package/src/data.ts +130 -0
  529. package/src/deprecatedRootExports.ts +226 -0
  530. package/src/generated/schema.ts +1 -0
  531. package/src/host.ts +27 -0
  532. package/src/index.ts +2 -71
  533. package/src/install.ts +15 -2
  534. package/src/instrument.ts +1 -6
  535. package/src/lab.ts +128 -0
  536. package/src/permissions.ts +0 -27
  537. package/src/runtime.ts +145 -0
  538. package/src/shell.ts +103 -0
  539. package/src/stores/auth.ts +26 -162
  540. package/src/stores/experiment.ts +27 -1
  541. package/src/styles/components/action-menu.css +0 -5
  542. package/src/styles/components/alert-box.css +18 -0
  543. package/src/styles/components/app-top-bar.css +7 -48
  544. package/src/styles/components/button.css +12 -0
  545. package/src/styles/components/checkbox.css +1 -1
  546. package/src/styles/components/collapsible-card.css +1 -1
  547. package/src/styles/components/confirm-dialog.css +18 -2
  548. package/src/styles/components/empty-state.css +4 -2
  549. package/src/styles/components/file-picker.css +1 -1
  550. package/src/styles/components/icon-button.css +1 -1
  551. package/src/styles/components/loading-spinner.css +9 -12
  552. package/src/styles/components/multi-select.css +6 -1
  553. package/src/styles/components/pill.css +40 -35
  554. package/src/styles/components/plugin-icon.css +9 -0
  555. package/src/styles/components/presence-avatars.css +194 -0
  556. package/src/styles/components/progress-bar.css +2 -0
  557. package/src/styles/components/searchable-select.css +3 -0
  558. package/src/styles/components/smart-group.css +1 -6
  559. package/src/styles/components/textarea.css +1 -1
  560. package/src/styles/components/toggle.css +2 -2
  561. package/src/styles/components/version-conflict.css +122 -0
  562. package/src/styles/components/well-plate.css +0 -7
  563. package/src/styles/index.css +2 -11
  564. package/src/styles/variables.css +1 -527
  565. package/src/types/analysisArtifactTypes.ts +1 -1
  566. package/src/types/auth.ts +0 -10
  567. package/src/types/componentLabTypes.ts +103 -53
  568. package/src/types/componentWorkflowTypes.ts +2 -33
  569. package/src/types/components.ts +148 -114
  570. package/src/types/form-builder.ts +4 -0
  571. package/src/types/generated/platformContext.ts +59 -0
  572. package/src/types/generated-ui.ts +2 -2
  573. package/src/types/index.ts +15 -53
  574. package/src/types/instrument.ts +27 -0
  575. package/src/types/platform.ts +25 -89
  576. package/src/utils/color.ts +1 -12
  577. package/src/utils/dose.ts +335 -0
  578. package/src/utils/experimentStatus.ts +43 -0
  579. package/src/utils/formula.ts +292 -0
  580. package/src/utils/integrationHost.ts +27 -0
  581. package/src/utils/plotlyTemplate.ts +6 -0
  582. package/src/utils/pluginSecrets.ts +23 -23
  583. package/src/utils/presenceAvatars.ts +53 -0
  584. package/src/utils/records.ts +0 -5
  585. package/src/{composables/useTimeUtils.ts → utils/time.ts} +0 -21
  586. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
  587. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
  588. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
  589. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
  590. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
  591. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
  592. package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
  593. package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
  594. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
  595. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
  596. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
  597. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
  598. package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
  599. package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
  600. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
  601. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
  602. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
  603. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
  604. package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
  605. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
  606. package/dist/__tests__/templates/templates.test.d.ts +0 -1
  607. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
  608. package/dist/__tests__/utils/lcms.test.d.ts +0 -1
  609. package/dist/__tests__/utils/rack.test.d.ts +0 -1
  610. package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
  611. package/dist/components/AppTopBar.navigation.d.ts +0 -10
  612. package/dist/components/BaseTextarea.vue.d.ts +0 -31
  613. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
  614. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
  615. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
  616. package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
  617. package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
  618. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
  619. package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
  620. package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
  621. package/dist/components/FitPanel.vue.d.ts +0 -56
  622. package/dist/components/GroupAssigner.vue.d.ts +0 -26
  623. package/dist/components/IconButton.vue.d.ts +0 -30
  624. package/dist/components/MobileSupportGate.vue.d.ts +0 -32
  625. package/dist/components/ReagentEditor.vue.d.ts +0 -31
  626. package/dist/components/ReagentList.presentation.d.ts +0 -17
  627. package/dist/components/ReagentList.vue.d.ts +0 -58
  628. package/dist/components/SampleLegend.vue.d.ts +0 -33
  629. package/dist/components/SmartGroupModal.vue.d.ts +0 -29
  630. package/dist/components/index.js +0 -5
  631. package/dist/components-BOA5e7kb.js +0 -23137
  632. package/dist/components-BOA5e7kb.js.map +0 -1
  633. package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
  634. package/dist/composables/index.js +0 -7
  635. package/dist/composables/useBioTemplateComponents.d.ts +0 -34
  636. package/dist/composables/useBioTemplateControls.d.ts +0 -10
  637. package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
  638. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
  639. package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
  640. package/dist/composables/useExperimentSave.d.ts +0 -69
  641. package/dist/composables/useGroupAssignment.d.ts +0 -35
  642. package/dist/composables/useJobsStatusTray.d.ts +0 -87
  643. package/dist/composables/useMobileSupportGate.d.ts +0 -14
  644. package/dist/composables/usePlatformContext.d.ts +0 -218
  645. package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
  646. package/dist/composables/useRuntimeAlignment.d.ts +0 -44
  647. package/dist/composables/useTemplateCollection.d.ts +0 -62
  648. package/dist/composables/workspaceRecipes.d.ts +0 -189
  649. package/dist/composables-izSQH8Ky.js +0 -591
  650. package/dist/composables-izSQH8Ky.js.map +0 -1
  651. package/dist/experiment-D49y_Kro.js +0 -459
  652. package/dist/experiment-D49y_Kro.js.map +0 -1
  653. package/dist/experiment-utils-DTANyVKV.js.map +0 -1
  654. package/dist/install.js.map +0 -1
  655. package/dist/lcms.d.ts +0 -38
  656. package/dist/settings-BG6v13Zq.js +0 -341
  657. package/dist/settings-BG6v13Zq.js.map +0 -1
  658. package/dist/tailwind.preset.d.ts +0 -63
  659. package/dist/tailwind.preset.js +0 -71
  660. package/dist/tailwind.preset.js.map +0 -1
  661. package/dist/templates/adapters.d.ts +0 -19
  662. package/dist/templates/assayLookups.d.ts +0 -3
  663. package/dist/templates/assayMatrixAdapters.d.ts +0 -13
  664. package/dist/templates/assayMatrixBuilder.d.ts +0 -3
  665. package/dist/templates/assayNormalizers.d.ts +0 -4
  666. package/dist/templates/builderIdUtils.d.ts +0 -4
  667. package/dist/templates/builderPresetControls.d.ts +0 -11
  668. package/dist/templates/builderReadUtils.d.ts +0 -8
  669. package/dist/templates/builders.d.ts +0 -26
  670. package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
  671. package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
  672. package/dist/templates/calibrationNormalizers.d.ts +0 -5
  673. package/dist/templates/catalog.d.ts +0 -192
  674. package/dist/templates/componentBindingCatalog.d.ts +0 -25
  675. package/dist/templates/componentBindingHelpers.d.ts +0 -17
  676. package/dist/templates/componentBindings.d.ts +0 -97
  677. package/dist/templates/componentDoseResponseProps.d.ts +0 -3
  678. package/dist/templates/componentGenericProps.d.ts +0 -8
  679. package/dist/templates/componentPlateHelpers.d.ts +0 -11
  680. package/dist/templates/componentPlateMapProps.d.ts +0 -3
  681. package/dist/templates/componentPropsFactory.d.ts +0 -3
  682. package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
  683. package/dist/templates/componentTargetResolvers.d.ts +0 -5
  684. package/dist/templates/componentTemplateProps.d.ts +0 -3
  685. package/dist/templates/controlSchemaClone.d.ts +0 -4
  686. package/dist/templates/controlSchemaConstants.d.ts +0 -10
  687. package/dist/templates/controlSchemaMerge.d.ts +0 -3
  688. package/dist/templates/controlSchemaTargets.d.ts +0 -17
  689. package/dist/templates/controlSchemaTypes.d.ts +0 -4
  690. package/dist/templates/controlSchemas.d.ts +0 -34
  691. package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
  692. package/dist/templates/doseResponseAdapters.d.ts +0 -6
  693. package/dist/templates/doseResponseBuilder.d.ts +0 -3
  694. package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
  695. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
  696. package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
  697. package/dist/templates/flowNormalizers.d.ts +0 -8
  698. package/dist/templates/flowPanelAdapters.d.ts +0 -7
  699. package/dist/templates/index.d.ts +0 -15
  700. package/dist/templates/index.js +0 -2
  701. package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
  702. package/dist/templates/instrumentRunAdapters.d.ts +0 -19
  703. package/dist/templates/instrumentRunBuilder.d.ts +0 -3
  704. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
  705. package/dist/templates/lookup.d.ts +0 -4
  706. package/dist/templates/packs.d.ts +0 -21
  707. package/dist/templates/plateMapAdapters.d.ts +0 -5
  708. package/dist/templates/plateMapBuilder.d.ts +0 -3
  709. package/dist/templates/presetControlSchemas.d.ts +0 -534
  710. package/dist/templates/presets.d.ts +0 -106
  711. package/dist/templates/protocolAdapters.d.ts +0 -9
  712. package/dist/templates/protocolNormalizers.d.ts +0 -6
  713. package/dist/templates/protocolStepsBuilder.d.ts +0 -3
  714. package/dist/templates/qpcrAdapters.d.ts +0 -9
  715. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
  716. package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
  717. package/dist/templates/reagentAdapters.d.ts +0 -9
  718. package/dist/templates/reagentListBuilder.d.ts +0 -3
  719. package/dist/templates/runNormalizers.d.ts +0 -10
  720. package/dist/templates/sampleNormalizers.d.ts +0 -4
  721. package/dist/templates/samplePrepAdapters.d.ts +0 -7
  722. package/dist/templates/samplePrepBuilder.d.ts +0 -3
  723. package/dist/templates/sampleSheetAdapters.d.ts +0 -9
  724. package/dist/templates/sampleSheetBuilder.d.ts +0 -3
  725. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
  726. package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
  727. package/dist/templates/templateAdapterTypes.d.ts +0 -48
  728. package/dist/templates/templateControlSchemas.d.ts +0 -400
  729. package/dist/templates/templateCreateOptions.d.ts +0 -165
  730. package/dist/templates/templateEnvelopes.d.ts +0 -17
  731. package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
  732. package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
  733. package/dist/templates/templateQpcrTypes.d.ts +0 -42
  734. package/dist/templates/templateValidators.d.ts +0 -25
  735. package/dist/templates/timeCourseAdapters.d.ts +0 -9
  736. package/dist/templates/timeCourseBuilder.d.ts +0 -3
  737. package/dist/templates/types.d.ts +0 -304
  738. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
  739. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
  740. package/dist/templates-B2DB0MCM.js +0 -12304
  741. package/dist/templates-B2DB0MCM.js.map +0 -1
  742. package/dist/utils/rack.d.ts +0 -63
  743. package/dist/validation-C_eH_vIg.js +0 -7999
  744. package/dist/validation-C_eH_vIg.js.map +0 -1
  745. package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
  746. package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
  747. package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
  748. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
  749. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
  750. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
  751. package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
  752. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
  753. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
  754. package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
  755. package/src/__tests__/components/FitPanel.test.ts +0 -96
  756. package/src/__tests__/components/GroupAssigner.test.ts +0 -101
  757. package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
  758. package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
  759. package/src/__tests__/components/ReagentList.test.ts +0 -167
  760. package/src/__tests__/components/SampleLegend.test.ts +0 -18
  761. package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
  762. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
  763. package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
  764. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
  765. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
  766. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
  767. package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
  768. package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
  769. package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
  770. package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
  771. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
  772. package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
  773. package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
  774. package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
  775. package/src/__tests__/fixtures/templates/dose-response.json +0 -81
  776. package/src/__tests__/fixtures/templates/plate-map.json +0 -54
  777. package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
  778. package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
  779. package/src/__tests__/templates/templates.test.ts +0 -1235
  780. package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
  781. package/src/__tests__/utils/lcms.test.ts +0 -73
  782. package/src/__tests__/utils/rack.test.ts +0 -120
  783. package/src/components/AppAvatarMenu.story.vue +0 -155
  784. package/src/components/AppAvatarMenu.vue +0 -154
  785. package/src/components/AppTopBar.navigation.ts +0 -60
  786. package/src/components/AutoGroupModal.story.vue +0 -458
  787. package/src/components/BaseTextarea.vue +0 -58
  788. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
  789. package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
  790. package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
  791. package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
  792. package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
  793. package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
  794. package/src/components/BioTemplateRenderer.story.vue +0 -57
  795. package/src/components/BioTemplateRenderer.vue +0 -64
  796. package/src/components/ControlWorkspaceView.story.vue +0 -347
  797. package/src/components/ControlWorkspaceView.vue +0 -370
  798. package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
  799. package/src/components/DoseDesignWorkspaceView.vue +0 -243
  800. package/src/components/ExperimentDataViewer.story.vue +0 -177
  801. package/src/components/ExperimentDataViewer.vue +0 -313
  802. package/src/components/ExperimentTimeline.story.vue +0 -208
  803. package/src/components/ExperimentTimeline.vue +0 -383
  804. package/src/components/FitPanel.story.vue +0 -191
  805. package/src/components/FitPanel.vue +0 -168
  806. package/src/components/FormActions.story.vue +0 -96
  807. package/src/components/GroupAssigner.story.vue +0 -83
  808. package/src/components/GroupAssigner.vue +0 -319
  809. package/src/components/IconButton.story.vue +0 -140
  810. package/src/components/IconButton.vue +0 -69
  811. package/src/components/MobileSupportGate.story.vue +0 -52
  812. package/src/components/MobileSupportGate.vue +0 -111
  813. package/src/components/ReagentEditor.story.vue +0 -153
  814. package/src/components/ReagentEditor.vue +0 -414
  815. package/src/components/ReagentList.presentation.ts +0 -106
  816. package/src/components/ReagentList.story.vue +0 -155
  817. package/src/components/ReagentList.vue +0 -438
  818. package/src/components/SampleLegend.story.vue +0 -91
  819. package/src/components/SampleLegend.vue +0 -121
  820. package/src/components/SmartGroupModal.story.vue +0 -61
  821. package/src/components/SmartGroupModal.vue +0 -61
  822. package/src/components/StatusIndicator.story.vue +0 -99
  823. package/src/components/StatusIndicator.vue +0 -36
  824. package/src/components/UnitInput.story.vue +0 -194
  825. package/src/composables/flattenWorkspaceBindings.ts +0 -104
  826. package/src/composables/useBioTemplateComponents.ts +0 -117
  827. package/src/composables/useBioTemplateControls.ts +0 -45
  828. package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
  829. package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
  830. package/src/composables/useBioTemplateWorkspace.ts +0 -120
  831. package/src/composables/useChemicalFormula.ts +0 -301
  832. package/src/composables/useDoseCalculator.ts +0 -370
  833. package/src/composables/useExperimentSave.ts +0 -348
  834. package/src/composables/useGroupAssignment.ts +0 -152
  835. package/src/composables/useJobsStatusTray.ts +0 -493
  836. package/src/composables/useMobileSupportGate.ts +0 -80
  837. package/src/composables/usePlatformContext.ts +0 -299
  838. package/src/composables/usePresenceHeartbeat.ts +0 -201
  839. package/src/composables/useRuntimeAlignment.ts +0 -184
  840. package/src/composables/useTemplateCollection.ts +0 -233
  841. package/src/composables/workspaceRecipes.ts +0 -268
  842. package/src/lcms.ts +0 -119
  843. package/src/styles/components/app-avatar-menu.css +0 -121
  844. package/src/styles/components/experiment-data-viewer.css +0 -138
  845. package/src/styles/components/experiment-timeline.css +0 -572
  846. package/src/styles/components/fit-panel.css +0 -153
  847. package/src/styles/components/group-assigner.css +0 -198
  848. package/src/styles/components/mobile-support-gate.css +0 -117
  849. package/src/styles/components/reagent-editor.css +0 -501
  850. package/src/styles/components/reagent-list.css +0 -408
  851. package/src/styles/components/sample-legend.css +0 -212
  852. package/src/styles/components/status-indicator.css +0 -66
  853. package/src/styles/components/theme-toggle.css +0 -6
  854. package/src/tailwind.preset.ts +0 -66
  855. package/src/templates/adapters.ts +0 -141
  856. package/src/templates/assayLookups.ts +0 -33
  857. package/src/templates/assayMatrixAdapters.ts +0 -85
  858. package/src/templates/assayMatrixBuilder.ts +0 -60
  859. package/src/templates/assayNormalizers.ts +0 -34
  860. package/src/templates/builderIdUtils.ts +0 -20
  861. package/src/templates/builderPresetControls.ts +0 -166
  862. package/src/templates/builderReadUtils.ts +0 -55
  863. package/src/templates/builders.ts +0 -122
  864. package/src/templates/calibrationCurveAdapters.ts +0 -62
  865. package/src/templates/calibrationCurveBuilder.ts +0 -100
  866. package/src/templates/calibrationNormalizers.ts +0 -60
  867. package/src/templates/catalog.ts +0 -249
  868. package/src/templates/componentBindingCatalog.ts +0 -90
  869. package/src/templates/componentBindingHelpers.ts +0 -93
  870. package/src/templates/componentBindings.ts +0 -279
  871. package/src/templates/componentDoseResponseProps.ts +0 -41
  872. package/src/templates/componentGenericProps.ts +0 -77
  873. package/src/templates/componentPlateHelpers.ts +0 -52
  874. package/src/templates/componentPlateMapProps.ts +0 -34
  875. package/src/templates/componentPropsFactory.ts +0 -21
  876. package/src/templates/componentQpcrPlateProps.ts +0 -27
  877. package/src/templates/componentTargetResolvers.ts +0 -67
  878. package/src/templates/componentTemplateProps.ts +0 -78
  879. package/src/templates/controlSchemaClone.ts +0 -32
  880. package/src/templates/controlSchemaConstants.ts +0 -11
  881. package/src/templates/controlSchemaMerge.ts +0 -40
  882. package/src/templates/controlSchemaTargets.ts +0 -85
  883. package/src/templates/controlSchemaTypes.ts +0 -20
  884. package/src/templates/controlSchemas.ts +0 -113
  885. package/src/templates/defaultBioTemplateBuilder.ts +0 -125
  886. package/src/templates/doseResponseAdapters.ts +0 -36
  887. package/src/templates/doseResponseBuilder.ts +0 -45
  888. package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
  889. package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
  890. package/src/templates/flowCytometryPanelBuilder.ts +0 -54
  891. package/src/templates/flowNormalizers.ts +0 -58
  892. package/src/templates/flowPanelAdapters.ts +0 -61
  893. package/src/templates/index.ts +0 -330
  894. package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
  895. package/src/templates/instrumentRunAdapters.ts +0 -174
  896. package/src/templates/instrumentRunBuilder.ts +0 -98
  897. package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
  898. package/src/templates/lookup.ts +0 -18
  899. package/src/templates/packs.ts +0 -166
  900. package/src/templates/plateMapAdapters.ts +0 -38
  901. package/src/templates/plateMapBuilder.ts +0 -44
  902. package/src/templates/presetControlSchemas.ts +0 -258
  903. package/src/templates/presets.ts +0 -183
  904. package/src/templates/protocolAdapters.ts +0 -73
  905. package/src/templates/protocolNormalizers.ts +0 -37
  906. package/src/templates/protocolStepsBuilder.ts +0 -37
  907. package/src/templates/qpcrAdapters.ts +0 -108
  908. package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
  909. package/src/templates/qpcrPlateBuilder.ts +0 -97
  910. package/src/templates/reagentAdapters.ts +0 -81
  911. package/src/templates/reagentListBuilder.ts +0 -31
  912. package/src/templates/runNormalizers.ts +0 -63
  913. package/src/templates/sampleNormalizers.ts +0 -58
  914. package/src/templates/samplePrepAdapters.ts +0 -66
  915. package/src/templates/samplePrepBuilder.ts +0 -52
  916. package/src/templates/sampleSheetAdapters.ts +0 -79
  917. package/src/templates/sampleSheetBuilder.ts +0 -24
  918. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
  919. package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
  920. package/src/templates/templateAdapterTypes.ts +0 -58
  921. package/src/templates/templateControlSchemas.ts +0 -320
  922. package/src/templates/templateCreateOptions.ts +0 -208
  923. package/src/templates/templateEnvelopes.ts +0 -145
  924. package/src/templates/templatePackCollectionBuilder.ts +0 -24
  925. package/src/templates/templatePresetCollectionBuilder.ts +0 -141
  926. package/src/templates/templateQpcrTypes.ts +0 -48
  927. package/src/templates/templateValidators.ts +0 -426
  928. package/src/templates/timeCourseAdapters.ts +0 -77
  929. package/src/templates/timeCourseBuilder.ts +0 -65
  930. package/src/templates/types.ts +0 -493
  931. package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
  932. package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
  933. package/src/utils/rack.ts +0 -225
  934. /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
  935. /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
  936. /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
  937. /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
  938. /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
  939. /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
  940. /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
  941. /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
  942. /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
  943. /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
  944. /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
  945. /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
  946. /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
  947. /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
  948. /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
  949. /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
  950. /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
  951. /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
  952. /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
  953. /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
  954. /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
  955. /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
  956. /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
  957. /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
  958. /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
  959. /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
  960. /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
  961. /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
  962. /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
  963. /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
  964. /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
  965. /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
  966. /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
@@ -76,7 +76,7 @@ describe('PlateEditor — controlled data', () => {
76
76
  it('should leave modelValue untouched when a well is edited', async () => {
77
77
  const racks = makeRacks()
78
78
  const snapshot = structuredClone(racks)
79
- const wrapper = mountEditor({ modelValue: racks, sampleDrop: true, fillSeries: true, clear: 'undo' })
79
+ const wrapper = mountEditor({ spec: { sampleDrop: true, fillSeries: true, clear: 'undo' }, modelValue: racks })
80
80
 
81
81
  plate(wrapper).vm.$emit('well-edit', 'A2', editData)
82
82
  plate(wrapper).vm.$emit('well-move', 'A1', 'B1')
@@ -119,43 +119,43 @@ describe('PlateEditor — controlled data', () => {
119
119
  })
120
120
 
121
121
  it('should hide the toolbar in readonly mode', () => {
122
- const wrapper = mountEditor({ readonly: true, slots: true, fillSeries: true })
122
+ const wrapper = mountEditor({ spec: { slots: true, fillSeries: true }, readonly: true })
123
123
 
124
124
  expect(wrapper.find('.mint-plate-editor__toolbar').exists()).toBe(false)
125
125
  })
126
126
  })
127
127
 
128
128
  describe('PlateEditor — plate tabs', () => {
129
- it('should emit update:activeRackId when a tab is clicked', async () => {
129
+ it('should emit update:activeRack when a tab is clicked', async () => {
130
130
  const wrapper = mountEditor()
131
131
 
132
132
  await tabs(wrapper)[1].trigger('click')
133
133
 
134
- expect(wrapper.emitted('update:activeRackId')?.[0]).toEqual(['rack-2'])
134
+ expect(wrapper.emitted('update:activeRack')?.[0]).toEqual(['rack-2'])
135
135
  })
136
136
 
137
- it('should show the second rack after its tab is clicked without a bound activeRackId', async () => {
137
+ it('should show the second rack after its tab is clicked without a bound activeRack', async () => {
138
138
  const wrapper = mountEditor()
139
139
 
140
140
  await tabs(wrapper)[1].trigger('click')
141
141
 
142
- expect(plate(wrapper).props('format')).toBe(96)
142
+ expect(plate(wrapper).props('spec')?.format).toBe(96)
143
143
  })
144
144
 
145
145
  it('should keep showing the bound rack when the parent ignores a tab change', async () => {
146
- const wrapper = mountEditor({ activeRackId: 'rack-1', 'onUpdate:activeRackId': () => {} })
146
+ const wrapper = mountEditor({ activeRack: 'rack-1', 'onUpdate:activeRack': () => {} })
147
147
 
148
148
  await tabs(wrapper)[1].trigger('click')
149
149
 
150
- expect(plate(wrapper).props('format')).toBe(54)
150
+ expect(plate(wrapper).props('spec')?.format).toBe(54)
151
151
  })
152
152
 
153
- it('should show the rack named by a new activeRackId', async () => {
154
- const wrapper = mountEditor({ activeRackId: 'rack-1' })
153
+ it('should show the rack named by a new activeRack', async () => {
154
+ const wrapper = mountEditor({ activeRack: 'rack-1' })
155
155
 
156
- await wrapper.setProps({ activeRackId: 'rack-2' })
156
+ await wrapper.setProps({ activeRack: 'rack-2' })
157
157
 
158
- expect(plate(wrapper).props('format')).toBe(96)
158
+ expect(plate(wrapper).props('spec')?.format).toBe(96)
159
159
  })
160
160
 
161
161
  it('should render the well count as a bare mono count', () => {
@@ -185,7 +185,7 @@ describe('PlateEditor — plate tabs', () => {
185
185
  })
186
186
 
187
187
  it('should hide the close button at minRacks', () => {
188
- const wrapper = mountEditor({ minRacks: 2 })
188
+ const wrapper = mountEditor({ spec: { minRacks: 2 } })
189
189
 
190
190
  expect(wrapper.find('.mint-plate-editor__tab-close').exists()).toBe(false)
191
191
  })
@@ -199,7 +199,7 @@ describe('PlateEditor — plate tabs', () => {
199
199
  })
200
200
 
201
201
  it('should hide the add button at maxRacks', () => {
202
- const wrapper = mountEditor({ maxRacks: 2 })
202
+ const wrapper = mountEditor({ spec: { maxRacks: 2 } })
203
203
 
204
204
  expect(wrapper.find('.mint-plate-editor__add').exists()).toBe(false)
205
205
  })
@@ -213,7 +213,7 @@ describe('PlateEditor — plate tabs', () => {
213
213
  })
214
214
 
215
215
  it('should not reorder when reorder is off', async () => {
216
- const wrapper = mountEditor({ reorder: false })
216
+ const wrapper = mountEditor({ spec: { reorder: false } })
217
217
 
218
218
  await tabs(wrapper)[0].trigger('keydown', { key: 'ArrowRight', altKey: true })
219
219
 
@@ -243,13 +243,13 @@ describe('PlateEditor — toolbar', () => {
243
243
  })
244
244
 
245
245
  it('should hide the format control when only one format is allowed', () => {
246
- const wrapper = mountEditor({ formats: [54] })
246
+ const wrapper = mountEditor({ spec: { formats: [54] } })
247
247
 
248
248
  expect(wrapper.find('.mint-plate-editor__toolbar [role="radio"]').exists()).toBe(false)
249
249
  })
250
250
 
251
251
  it('should emit update:slot from a slot button', async () => {
252
- const wrapper = mountEditor({ slots: true })
252
+ const wrapper = mountEditor({ spec: { slots: true } })
253
253
 
254
254
  await wrapper.findAll('.mint-plate-editor__slot')[2].trigger('click')
255
255
 
@@ -257,19 +257,19 @@ describe('PlateEditor — toolbar', () => {
257
257
  })
258
258
 
259
259
  it('should limit slot buttons to the listed slots', () => {
260
- const wrapper = mountEditor({ slots: ['R', 'G'] })
260
+ const wrapper = mountEditor({ spec: { slots: ['R', 'G'] } })
261
261
 
262
262
  expect(wrapper.findAll('.mint-plate-editor__slot')).toHaveLength(2)
263
263
  })
264
264
 
265
265
  it('should mark the active slot as pressed', () => {
266
- const wrapper = mountEditor({ slots: true })
266
+ const wrapper = mountEditor({ spec: { slots: true } })
267
267
 
268
268
  expect(wrapper.get('.mint-plate-editor__slot--active').text()).toBe('R')
269
269
  })
270
270
 
271
271
  it('should emit fill-series from its button', async () => {
272
- const wrapper = mountEditor({ fillSeries: true })
272
+ const wrapper = mountEditor({ spec: { fillSeries: true } })
273
273
 
274
274
  await wrapper.get('[data-action="fill-series"]').trigger('click')
275
275
 
@@ -280,7 +280,7 @@ describe('PlateEditor — toolbar', () => {
280
280
  const racks = makeRacks()
281
281
  racks[0].format = 6
282
282
  racks[0].wells = Object.fromEntries(['A1', 'A2', 'A3', 'B1', 'B2', 'B3'].map(id => [id, { sampleType: 'sample' }]))
283
- const wrapper = mountEditor({ modelValue: racks, fillSeries: true })
283
+ const wrapper = mountEditor({ spec: { fillSeries: true }, modelValue: racks })
284
284
 
285
285
  expect(wrapper.get('[data-action="fill-series"]').attributes('disabled')).toBeDefined()
286
286
  })
@@ -303,7 +303,7 @@ describe('PlateEditor — toolbar', () => {
303
303
  })
304
304
 
305
305
  it('should emit clear at once when clear is undo', async () => {
306
- const wrapper = mountEditor({ clear: 'undo' })
306
+ const wrapper = mountEditor({ spec: { clear: 'undo' } })
307
307
 
308
308
  await wrapper.get('.mint-plate-editor__action--danger').trigger('click')
309
309
 
@@ -311,7 +311,7 @@ describe('PlateEditor — toolbar', () => {
311
311
  })
312
312
 
313
313
  it('should emit undo from the undo button', async () => {
314
- const wrapper = mountEditor({ clear: 'undo', canUndo: true })
314
+ const wrapper = mountEditor({ spec: { clear: 'undo' }, canUndo: true })
315
315
 
316
316
  await wrapper.get('[aria-label="Undo"]').trigger('click')
317
317
 
@@ -319,7 +319,7 @@ describe('PlateEditor — toolbar', () => {
319
319
  })
320
320
 
321
321
  it('should emit undo on Ctrl+Z inside the editor', async () => {
322
- const wrapper = mountEditor({ clear: 'undo', canUndo: true })
322
+ const wrapper = mountEditor({ spec: { clear: 'undo' }, canUndo: true })
323
323
 
324
324
  await wrapper.get('.mint-plate-editor').trigger('keydown', { key: 'z', ctrlKey: true })
325
325
 
@@ -327,13 +327,13 @@ describe('PlateEditor — toolbar', () => {
327
327
  })
328
328
 
329
329
  it('should hide the clear button when clear is false', () => {
330
- const wrapper = mountEditor({ clear: false })
330
+ const wrapper = mountEditor({ spec: { clear: false } })
331
331
 
332
332
  expect(wrapper.find('.mint-plate-editor__action--danger').exists()).toBe(false)
333
333
  })
334
334
 
335
335
  it('should emit the chosen file from import', async () => {
336
- const wrapper = mountEditor({ import: true })
336
+ const wrapper = mountEditor({ spec: { import: true } })
337
337
  const file = new File(['a,b'], 'plate.csv')
338
338
  const input = wrapper.get('input[type="file"]')
339
339
  Object.defineProperty(input.element, 'files', { value: [file] })
@@ -352,15 +352,15 @@ describe('PlateEditor — toolbar', () => {
352
352
 
353
353
  describe('PlateEditor — wells', () => {
354
354
  it('should switch the plate into drag mode from the Drag toggle', async () => {
355
- const wrapper = mountEditor({ wellDrag: true })
355
+ const wrapper = mountEditor({ spec: { wellDrag: true } })
356
356
 
357
357
  await wrapper.get('[data-action="drag"]').trigger('click')
358
358
 
359
- expect(plate(wrapper).props('selectionMode')).toBe('drag')
359
+ expect(plate(wrapper).props('spec')?.selectionMode).toBe('drag')
360
360
  })
361
361
 
362
362
  it('should show the hint prop in the footer until drag mode replaces it', async () => {
363
- const wrapper = mountEditor({ wellDrag: true, hint: 'Drop samples here' })
363
+ const wrapper = mountEditor({ spec: { wellDrag: true }, hint: 'Drop samples here' })
364
364
 
365
365
  expect(wrapper.get('.mint-plate-editor__hint').text()).toBe('Drop samples here')
366
366
 
@@ -370,7 +370,7 @@ describe('PlateEditor — wells', () => {
370
370
  })
371
371
 
372
372
  it('should emit well-move with the active rack id', () => {
373
- const wrapper = mountEditor({ wellDrag: true })
373
+ const wrapper = mountEditor({ spec: { wellDrag: true } })
374
374
 
375
375
  plate(wrapper).vm.$emit('well-move', 'A1', 'B2')
376
376
 
@@ -378,29 +378,29 @@ describe('PlateEditor — wells', () => {
378
378
  })
379
379
 
380
380
  it('should emit sample-drop for a JSON sample payload', () => {
381
- const wrapper = mountEditor({ sampleDrop: true })
382
- const parser = plate(wrapper).props('sampleDropParser') as (e: DragEvent) => unknown
381
+ const wrapper = mountEditor({ spec: { sampleDrop: true } })
382
+ const parser = plate(wrapper).props('spec')?.sampleDropParser as (e: DragEvent) => unknown
383
383
  const data = parser(dropEvent({ 'application/json': JSON.stringify({ id: 's1', sampleName: 'Liver' }) }))
384
384
 
385
385
  expect(data).toMatchObject({ id: 's1', sampleName: 'Liver' })
386
386
  })
387
387
 
388
388
  it('should reject a plain-text drop', () => {
389
- const wrapper = mountEditor({ sampleDrop: true })
390
- const parser = plate(wrapper).props('sampleDropParser') as (e: DragEvent) => unknown
389
+ const wrapper = mountEditor({ spec: { sampleDrop: true } })
390
+ const parser = plate(wrapper).props('spec')?.sampleDropParser as (e: DragEvent) => unknown
391
391
 
392
392
  expect(parser(dropEvent({ 'text/plain': 'Liver' }))).toBeNull()
393
393
  })
394
394
 
395
395
  it('should pass a custom drop parser through', () => {
396
396
  const custom = vi.fn(() => null)
397
- const wrapper = mountEditor({ sampleDrop: custom })
397
+ const wrapper = mountEditor({ spec: { sampleDrop: custom } })
398
398
 
399
- expect(plate(wrapper).props('sampleDropParser')).toBe(custom)
399
+ expect(plate(wrapper).props('spec')?.sampleDropParser).toBe(custom)
400
400
  })
401
401
 
402
402
  it('should forward sample-drop with the active rack id', () => {
403
- const wrapper = mountEditor({ sampleDrop: true })
403
+ const wrapper = mountEditor({ spec: { sampleDrop: true } })
404
404
  const event = dropEvent({})
405
405
 
406
406
  plate(wrapper).vm.$emit('sample-drop', 'B1', { sampleName: 'Liver' }, event)
@@ -409,9 +409,9 @@ describe('PlateEditor — wells', () => {
409
409
  })
410
410
 
411
411
  it('should turn off the inspector when wellFields is false', () => {
412
- const wrapper = mountEditor({ wellFields: false })
412
+ const wrapper = mountEditor({ spec: { wellFields: false } })
413
413
 
414
- expect(plate(wrapper).props('editable')).toBe(false)
414
+ expect(plate(wrapper).props('spec')?.editable).toBe(false)
415
415
  })
416
416
 
417
417
  it('should pass rack-aware props to the #well-editor slot', async () => {
@@ -432,7 +432,7 @@ describe('PlateEditor — groups', () => {
432
432
  ]
433
433
 
434
434
  it('should show the selection bar once wells are selected', async () => {
435
- const wrapper = mountEditor({ groups })
435
+ const wrapper = mountEditor({ spec: { groups } })
436
436
 
437
437
  plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
438
438
  await nextTick()
@@ -441,7 +441,7 @@ describe('PlateEditor — groups', () => {
441
441
  })
442
442
 
443
443
  it('should emit assign with the chosen group', async () => {
444
- const wrapper = mountEditor({ groups })
444
+ const wrapper = mountEditor({ spec: { groups } })
445
445
  plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
446
446
  await nextTick()
447
447
 
@@ -451,7 +451,7 @@ describe('PlateEditor — groups', () => {
451
451
  })
452
452
 
453
453
  it('should emit assign without a group from the clear button', async () => {
454
- const wrapper = mountEditor({ groups })
454
+ const wrapper = mountEditor({ spec: { groups } })
455
455
  plate(wrapper).vm.$emit('selection-change', ['A1'])
456
456
  await nextTick()
457
457
 
@@ -461,7 +461,7 @@ describe('PlateEditor — groups', () => {
461
461
  })
462
462
 
463
463
  it('should drop the selection bar on cancel', async () => {
464
- const wrapper = mountEditor({ groups })
464
+ const wrapper = mountEditor({ spec: { groups } })
465
465
  plate(wrapper).vm.$emit('selection-change', ['A1'])
466
466
  await nextTick()
467
467
 
@@ -471,13 +471,13 @@ describe('PlateEditor — groups', () => {
471
471
  })
472
472
 
473
473
  it('should color wells by group id', () => {
474
- const wrapper = mountEditor({ groups })
474
+ const wrapper = mountEditor({ spec: { groups } })
475
475
 
476
- expect(plate(wrapper).props('sampleColors')).toEqual({ ctrl: 'var(--mint-sample-1)', trt: 'var(--mint-sample-3)' })
476
+ expect(plate(wrapper).props('spec')?.sampleColors).toEqual({ ctrl: 'var(--mint-sample-1)', trt: 'var(--mint-sample-3)' })
477
477
  })
478
478
 
479
479
  it('should emit selection-change', () => {
480
- const wrapper = mountEditor({ groups })
480
+ const wrapper = mountEditor({ spec: { groups } })
481
481
 
482
482
  plate(wrapper).vm.$emit('selection-change', ['A1'])
483
483
 
@@ -502,7 +502,7 @@ describe('PlateEditor — groups and the inspector', () => {
502
502
  ]
503
503
 
504
504
  it('should keep a grouped well saved without a name', () => {
505
- const wrapper = mountEditor({ modelValue: grouped(), groups })
505
+ const wrapper = mountEditor({ spec: { groups }, modelValue: grouped() })
506
506
 
507
507
  plate(wrapper).vm.$emit('well-edit', 'A1', { ...editData, wellId: 'A1', label: '', sampleType: 'sample' })
508
508
 
@@ -510,13 +510,13 @@ describe('PlateEditor — groups and the inspector', () => {
510
510
  })
511
511
 
512
512
  it('should keep the type field in the inspector when there are groups', () => {
513
- const wrapper = mountEditor({ groups })
513
+ const wrapper = mountEditor({ spec: { groups } })
514
514
 
515
- expect(plate(wrapper).props('editFields')).toContain('sampleType')
515
+ expect(plate(wrapper).props('spec')?.editFields).toContain('sampleType')
516
516
  })
517
517
 
518
518
  it('should clear the selection when the plate format changes', async () => {
519
- const wrapper = mountEditor({ modelValue: grouped(), groups, formats: [96, 384] })
519
+ const wrapper = mountEditor({ spec: { groups, formats: [96, 384] }, modelValue: grouped() })
520
520
  plate(wrapper).vm.$emit('selection-change', ['A1'])
521
521
  await nextTick()
522
522
 
@@ -526,7 +526,7 @@ describe('PlateEditor — groups and the inspector', () => {
526
526
  })
527
527
 
528
528
  it('should report the cleared selection when switching plates', async () => {
529
- const wrapper = mountEditor({ modelValue: grouped(), groups })
529
+ const wrapper = mountEditor({ spec: { groups }, modelValue: grouped() })
530
530
  plate(wrapper).vm.$emit('selection-change', ['A1'])
531
531
  await nextTick()
532
532
 
@@ -544,19 +544,19 @@ describe('PlateEditor — history and import / export (7a)', () => {
544
544
  })
545
545
 
546
546
  it('should show redo with history', () => {
547
- const wrapper = mountEditor({ history: true })
547
+ const wrapper = mountEditor({ spec: { history: true } })
548
548
 
549
549
  expect(wrapper.find('[aria-label="Redo"]').exists()).toBe(true)
550
550
  })
551
551
 
552
552
  it('should disable undo when canUndo is false', () => {
553
- const wrapper = mountEditor({ history: true })
553
+ const wrapper = mountEditor({ spec: { history: true } })
554
554
 
555
555
  expect(wrapper.get('[aria-label="Undo"]').attributes('disabled')).toBeDefined()
556
556
  })
557
557
 
558
558
  it('should keep focus in the editor when undo runs out of steps', async () => {
559
- const wrapper = mountEditor({ history: true, canUndo: true }, { attachTo: document.body })
559
+ const wrapper = mountEditor({ spec: { history: true }, canUndo: true }, { attachTo: document.body })
560
560
  ;(wrapper.get('[aria-label="Undo"]').element as HTMLElement).focus()
561
561
 
562
562
  await wrapper.setProps({ canUndo: false })
@@ -566,7 +566,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
566
566
  })
567
567
 
568
568
  it('should keep focus in the editor when redo runs out of steps', async () => {
569
- const wrapper = mountEditor({ history: true, canRedo: true }, { attachTo: document.body })
569
+ const wrapper = mountEditor({ spec: { history: true }, canRedo: true }, { attachTo: document.body })
570
570
  ;(wrapper.get('[aria-label="Redo"]').element as HTMLElement).focus()
571
571
 
572
572
  await wrapper.setProps({ canRedo: false })
@@ -576,7 +576,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
576
576
  })
577
577
 
578
578
  it('should emit redo from the redo button', async () => {
579
- const wrapper = mountEditor({ history: true, canRedo: true })
579
+ const wrapper = mountEditor({ spec: { history: true }, canRedo: true })
580
580
 
581
581
  await wrapper.get('[aria-label="Redo"]').trigger('click')
582
582
 
@@ -584,7 +584,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
584
584
  })
585
585
 
586
586
  it('should emit redo on Ctrl+Shift+Z inside the editor', async () => {
587
- const wrapper = mountEditor({ history: true, canRedo: true })
587
+ const wrapper = mountEditor({ spec: { history: true }, canRedo: true })
588
588
 
589
589
  await wrapper.get('.mint-plate-editor').trigger('keydown', { key: 'Z', ctrlKey: true, shiftKey: true })
590
590
 
@@ -592,7 +592,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
592
592
  })
593
593
 
594
594
  it('should leave Ctrl+Z in a text field to the field', async () => {
595
- const wrapper = mountEditor({ history: true, canUndo: true }, {
595
+ const wrapper = mountEditor({ spec: { history: true }, canUndo: true }, {
596
596
  slots: { 'toolbar-extra': () => h('input', { class: 'field' }) },
597
597
  })
598
598
 
@@ -602,13 +602,13 @@ describe('PlateEditor — history and import / export (7a)', () => {
602
602
  })
603
603
 
604
604
  it('should label the menu Import / Export when both are on', () => {
605
- const wrapper = mountEditor({ import: true, export: ['csv'] })
605
+ const wrapper = mountEditor({ spec: { import: true, export: ['csv'] } })
606
606
 
607
607
  expect(wrapper.get('[data-action="import-export"]').text()).toBe('Import / Export')
608
608
  })
609
609
 
610
610
  it('should emit export with the chosen format', () => {
611
- const wrapper = mountEditor({ export: ['csv', 'json'] })
611
+ const wrapper = mountEditor({ spec: { export: ['csv', 'json'] } })
612
612
 
613
613
  wrapper.findComponent(ActionMenu).vm.$emit('select', { id: 'export:json', label: 'Export JSON' })
614
614
 
@@ -616,7 +616,7 @@ describe('PlateEditor — history and import / export (7a)', () => {
616
616
  })
617
617
 
618
618
  it('should open the file picker from the import menu item', () => {
619
- const wrapper = mountEditor({ import: true, export: ['csv'] })
619
+ const wrapper = mountEditor({ spec: { import: true, export: ['csv'] } })
620
620
  const click = vi.spyOn(HTMLInputElement.prototype, 'click').mockImplementation(() => {})
621
621
 
622
622
  wrapper.findComponent(ActionMenu).vm.$emit('select', { id: 'import', label: 'Import file' })
@@ -637,33 +637,33 @@ describe('PlateEditor — paste import', () => {
637
637
  }
638
638
 
639
639
  it('should offer Paste in the menu when importMode is both', () => {
640
- const wrapper = mountEditor({ import: true, importMode: 'both' })
640
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'both' } })
641
641
 
642
642
  expect(wrapper.getComponent(ActionMenu).props('items').map((item: { id: string }) => item.id)).toEqual(['import', 'paste'])
643
643
  })
644
644
 
645
645
  it('should label the menu Import when only imports are offered', () => {
646
- const wrapper = mountEditor({ import: true, importMode: 'both' })
646
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'both' } })
647
647
 
648
648
  expect(wrapper.get('[data-action="import-export"]').text()).toBe('Import')
649
649
  })
650
650
 
651
651
  it('should drop the file picker when importMode is paste', () => {
652
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
652
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
653
653
 
654
654
  expect(wrapper.find('input[type="file"]').exists()).toBe(false)
655
655
  })
656
656
 
657
657
  it('should open the paste dialog from the Paste menu item', async () => {
658
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
658
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
659
659
 
660
660
  await openPaste(wrapper)
661
661
 
662
- expect(pasteDialog(wrapper).props('modelValue')).toBe(true)
662
+ expect(pasteDialog(wrapper).props('open')).toBe(true)
663
663
  })
664
664
 
665
665
  it('should emit import-text with the pasted text on confirm', async () => {
666
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
666
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
667
667
  await openPaste(wrapper)
668
668
  await wrapper.get('textarea').setValue('A1\tS001')
669
669
 
@@ -676,7 +676,7 @@ describe('PlateEditor — paste import', () => {
676
676
  const files: File[] = []
677
677
  // Typed as the file-only listener callers had before paste existed; it must still type-check.
678
678
  const wrapper = mount(PlateEditor, {
679
- props: { modelValue: makeRacks(), import: true, importMode: 'both', onImport: (file: File) => { files.push(file) } },
679
+ props: { spec: { import: true, importMode: 'both' }, modelValue: makeRacks(), onImport: (file: File) => { files.push(file) } },
680
680
  global: { stubs: { teleport: true } },
681
681
  })
682
682
  await openPaste(wrapper)
@@ -688,7 +688,7 @@ describe('PlateEditor — paste import', () => {
688
688
  })
689
689
 
690
690
  it('should not emit import-text when the pasted text is blank', async () => {
691
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
691
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
692
692
  await openPaste(wrapper)
693
693
  await wrapper.get('textarea').setValue(' ')
694
694
 
@@ -698,18 +698,18 @@ describe('PlateEditor — paste import', () => {
698
698
  })
699
699
 
700
700
  it('should close the paste dialog on confirm', async () => {
701
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
701
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
702
702
  await openPaste(wrapper)
703
703
  await wrapper.get('textarea').setValue('A1')
704
704
 
705
705
  pasteDialog(wrapper).vm.$emit('confirm')
706
706
  await nextTick()
707
707
 
708
- expect(pasteDialog(wrapper).props('modelValue')).toBe(false)
708
+ expect(pasteDialog(wrapper).props('open')).toBe(false)
709
709
  })
710
710
 
711
711
  it('should open an empty paste dialog when the previous paste was canceled', async () => {
712
- const wrapper = mountEditor({ import: true, importMode: 'paste', export: ['csv'] })
712
+ const wrapper = mountEditor({ spec: { import: true, importMode: 'paste', export: ['csv'] } })
713
713
  await openPaste(wrapper)
714
714
  await wrapper.get('textarea').setValue('A1\tS001')
715
715
  pasteDialog(wrapper).vm.$emit('update:modelValue', false)
@@ -723,7 +723,7 @@ describe('PlateEditor — paste import', () => {
723
723
 
724
724
  describe('PlateEditor — Shift-click range', () => {
725
725
  it('should emit the range between the edited well and a Shift-clicked well', async () => {
726
- const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }] })
726
+ const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
727
727
 
728
728
  await cell(wrapper, 'A1').trigger('click')
729
729
  await cell(wrapper, 'B2').trigger('click', { shiftKey: true })
@@ -732,10 +732,10 @@ describe('PlateEditor — Shift-click range', () => {
732
732
  })
733
733
 
734
734
  it('should not range from a well clicked on another rack', async () => {
735
- const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }], activeRackId: 'rack-1' })
735
+ const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] }, activeRack: 'rack-1' })
736
736
 
737
737
  await cell(wrapper, 'A1').trigger('click')
738
- await wrapper.setProps({ activeRackId: 'rack-2' })
738
+ await wrapper.setProps({ activeRack: 'rack-2' })
739
739
  await cell(wrapper, 'C3').trigger('click', { shiftKey: true })
740
740
 
741
741
  expect(wrapper.emitted('selection-change')?.at(-1)).toEqual([['C3']])
@@ -746,13 +746,13 @@ describe('PlateEditor — compact wells (7a)', () => {
746
746
  it('should default to the xs well size', () => {
747
747
  const wrapper = mountEditor()
748
748
 
749
- expect(plate(wrapper).props('size')).toBe('xs')
749
+ expect(plate(wrapper).props('spec')?.size).toBe('xs')
750
750
  })
751
751
 
752
752
  it('should hide well labels at the xs size', () => {
753
753
  const wrapper = mountEditor()
754
754
 
755
- expect(plate(wrapper).props('showWellLabels')).toBe(false)
755
+ expect(plate(wrapper).props('spec')?.showWellLabels).toBe(false)
756
756
  })
757
757
  })
758
758
 
@@ -766,25 +766,25 @@ describe('PlateEditor — rail (7a)', () => {
766
766
  ]
767
767
 
768
768
  it('should collapse the rail in a narrow container', () => {
769
- const wrapper = mountEditor({ groups })
769
+ const wrapper = mountEditor({ spec: { groups } })
770
770
 
771
771
  expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(false)
772
772
  })
773
773
 
774
774
  it('should show the rail in a wide container', async () => {
775
- const wrapper = await mountWide({ groups })
775
+ const wrapper = await mountWide({ spec: { groups } })
776
776
 
777
777
  expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(true)
778
778
  })
779
779
 
780
780
  it('should count the wells of each group in the rail', async () => {
781
- const wrapper = await mountWide({ modelValue: grouped(), groups })
781
+ const wrapper = await mountWide({ spec: { groups }, modelValue: grouped() })
782
782
 
783
783
  expect(wrapper.get('.mint-plate-editor__rail-row .mint-plate-editor__rail-count').text()).toBe('2')
784
784
  })
785
785
 
786
786
  it('should emit group-add from the New group row', async () => {
787
- const wrapper = await mountWide({ groups })
787
+ const wrapper = await mountWide({ spec: { groups } })
788
788
 
789
789
  await wrapper.get('[data-action="group-add"]').trigger('click')
790
790
 
@@ -792,7 +792,7 @@ describe('PlateEditor — rail (7a)', () => {
792
792
  })
793
793
 
794
794
  it('should hide New group when readonly', async () => {
795
- const wrapper = await mountWide({ groups, readonly: true })
795
+ const wrapper = await mountWide({ spec: { groups }, readonly: true })
796
796
 
797
797
  expect(wrapper.find('[data-action="group-add"]').exists()).toBe(false)
798
798
  })
@@ -804,21 +804,21 @@ describe('PlateEditor — rail (7a)', () => {
804
804
  })
805
805
 
806
806
  it('should move the legend from under the plate into the rail', async () => {
807
- const wrapper = await mountWide({ groups })
807
+ const wrapper = await mountWide({ spec: { groups } })
808
808
 
809
- expect(plate(wrapper).props('showLegend')).toBe(false)
809
+ expect(plate(wrapper).props('spec')?.showLegend).toBe(false)
810
810
  })
811
811
 
812
812
  it('should keep the legend under the plate in a narrow container', () => {
813
- const wrapper = mountEditor({ groups })
813
+ const wrapper = mountEditor({ spec: { groups } })
814
814
 
815
- expect(plate(wrapper).props('showLegend')).toBe(true)
815
+ expect(plate(wrapper).props('spec')?.showLegend).toBe(true)
816
816
  })
817
817
 
818
818
  it('should not open the popover inspector beside a rail', async () => {
819
819
  const wrapper = await mountWide()
820
820
 
821
- expect(plate(wrapper).props('editable')).toBe(false)
821
+ expect(plate(wrapper).props('spec')?.editable).toBe(false)
822
822
  })
823
823
 
824
824
  it('should select only the clicked well on a plain click without groups', async () => {
@@ -840,7 +840,7 @@ describe('PlateEditor — rail (7a)', () => {
840
840
  })
841
841
 
842
842
  it('should add a well to the selection on Cmd-click beside the rail with groups', async () => {
843
- const wrapper = await mountWide({ groups })
843
+ const wrapper = await mountWide({ spec: { groups } })
844
844
  await cell(wrapper, 'A1').trigger('click')
845
845
 
846
846
  await cell(wrapper, 'A2').trigger('click', { metaKey: true })
@@ -849,9 +849,9 @@ describe('PlateEditor — rail (7a)', () => {
849
849
  })
850
850
 
851
851
  it('should select wells by rectangle with groups', async () => {
852
- const wrapper = await mountWide({ groups })
852
+ const wrapper = await mountWide({ spec: { groups } })
853
853
 
854
- expect(plate(wrapper).props('selectionMode')).toBe('rectangle')
854
+ expect(plate(wrapper).props('spec')?.selectionMode).toBe('rectangle')
855
855
  })
856
856
 
857
857
  it('should show the inline inspector for one selected well', async () => {
@@ -937,7 +937,7 @@ describe('PlateEditor — rail (7a)', () => {
937
937
  })
938
938
 
939
939
  it('should not select a well on a plain click beside the rail when wellFields is false and there are no groups', async () => {
940
- const wrapper = await mountWide({ wellFields: false })
940
+ const wrapper = await mountWide({ spec: { wellFields: false } })
941
941
 
942
942
  await cell(wrapper, 'A1').trigger('click')
943
943
 
@@ -945,7 +945,7 @@ describe('PlateEditor — rail (7a)', () => {
945
945
  })
946
946
 
947
947
  it('should keep the selection bar for several wells', async () => {
948
- const wrapper = await mountWide({ groups })
948
+ const wrapper = await mountWide({ spec: { groups } })
949
949
 
950
950
  plate(wrapper).vm.$emit('selection-change', ['A1', 'A2'])
951
951
  await nextTick()
@@ -954,7 +954,7 @@ describe('PlateEditor — rail (7a)', () => {
954
954
  })
955
955
 
956
956
  it('should offer the group bar for one selected well beside the rail', async () => {
957
- const wrapper = await mountWide({ groups })
957
+ const wrapper = await mountWide({ spec: { groups } })
958
958
  plate(wrapper).vm.$emit('selection-change', ['D5'])
959
959
  await nextTick()
960
960
 
@@ -992,7 +992,7 @@ describe('PlateEditor — rail (7a)', () => {
992
992
  })
993
993
 
994
994
  it('should show the rail beside a 96-well plate at size fill', async () => {
995
- const wrapper = await mountWide({ modelValue: grouped(), size: 'fill' })
995
+ const wrapper = await mountWide({ spec: { size: 'fill' }, modelValue: grouped() })
996
996
 
997
997
  expect(wrapper.find('.mint-plate-editor__rail').exists()).toBe(true)
998
998
  })
@@ -1012,7 +1012,7 @@ describe('PlateEditor — rail (7a)', () => {
1012
1012
  describe('PlateEditor — inspector marker (7a)', () => {
1013
1013
  it('should tint the rail inspector marker with the group color', async () => {
1014
1014
  const racks: Rack[] = [{ id: 'rack-1', name: 'P1', format: 96, slot: 'R', injectionVolume: 5, wells: { A1: { sampleType: 'sample', group: 'trt', state: 'filled' } } }]
1015
- const wrapper = await mountWide({ modelValue: racks, groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] })
1015
+ const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] }, modelValue: racks })
1016
1016
  plate(wrapper).vm.$emit('selection-change', ['A1'])
1017
1017
  await nextTick()
1018
1018
 
@@ -1021,7 +1021,7 @@ describe('PlateEditor — inspector marker (7a)', () => {
1021
1021
 
1022
1022
  it('should name the group of the well in the rail inspector', async () => {
1023
1023
  const racks: Rack[] = [{ id: 'rack-1', name: 'P1', format: 96, slot: 'R', injectionVolume: 5, wells: { A1: { sampleType: 'sample', group: 'trt', state: 'filled' } } }]
1024
- const wrapper = await mountWide({ modelValue: racks, groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] })
1024
+ const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }, { id: 'trt', name: 'Treated' }] }, modelValue: racks })
1025
1025
  plate(wrapper).vm.$emit('selection-change', ['A1'])
1026
1026
  await nextTick()
1027
1027
 
@@ -1029,7 +1029,7 @@ describe('PlateEditor — inspector marker (7a)', () => {
1029
1029
  })
1030
1030
 
1031
1031
  it('should give the rail inspector the Type field when there are groups', async () => {
1032
- const wrapper = await mountWide({ groups: [{ id: 'ctrl', name: 'Control' }] })
1032
+ const wrapper = await mountWide({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
1033
1033
  plate(wrapper).vm.$emit('selection-change', ['A1'])
1034
1034
  await nextTick()
1035
1035
 
@@ -1065,7 +1065,7 @@ describe('PlateEditor — modifier clicks in the popover mode', () => {
1065
1065
  })
1066
1066
 
1067
1067
  it('should not select a well on a plain click when wellFields is false and there are no groups', async () => {
1068
- const wrapper = mountEditor({ wellFields: false })
1068
+ const wrapper = mountEditor({ spec: { wellFields: false } })
1069
1069
 
1070
1070
  await cell(wrapper, 'A1').trigger('click')
1071
1071
 
@@ -1073,7 +1073,7 @@ describe('PlateEditor — modifier clicks in the popover mode', () => {
1073
1073
  })
1074
1074
 
1075
1075
  it('should add a well to the selection on Ctrl-click with groups', async () => {
1076
- const wrapper = mountEditor({ groups: [{ id: 'ctrl', name: 'Control' }] })
1076
+ const wrapper = mountEditor({ spec: { groups: [{ id: 'ctrl', name: 'Control' }] } })
1077
1077
  await cell(wrapper, 'A1').trigger('click', { ctrlKey: true })
1078
1078
 
1079
1079
  await cell(wrapper, 'A2').trigger('click', { ctrlKey: true })
@@ -1093,27 +1093,27 @@ describe('PlateEditor — designer options', () => {
1093
1093
  }]
1094
1094
 
1095
1095
  it('should use the clearConfirm title in the confirmation', () => {
1096
- const wrapper = mountEditor({ clearConfirm: { title: 'Unplace samples' } })
1096
+ const wrapper = mountEditor({ spec: { clearConfirm: { title: 'Unplace samples' } } })
1097
1097
 
1098
1098
  expect(wrapper.getComponent(ConfirmDialog).props('title')).toBe('Unplace samples')
1099
1099
  })
1100
1100
 
1101
1101
  it('should use the clearConfirm message in the confirmation', () => {
1102
- const wrapper = mountEditor({ clearConfirm: { message: 'All 1 placed samples go back to the Sample List unplaced.' } })
1102
+ const wrapper = mountEditor({ spec: { clearConfirm: { message: 'All 1 placed samples go back to the Sample List unplaced.' } } })
1103
1103
 
1104
1104
  expect(wrapper.getComponent(ConfirmDialog).props('message')).toBe('All 1 placed samples go back to the Sample List unplaced.')
1105
1105
  })
1106
1106
 
1107
1107
  it('should use the clearConfirm confirm label in the confirmation', () => {
1108
- const wrapper = mountEditor({ clearConfirm: { confirmLabel: 'Unplace all' } })
1108
+ const wrapper = mountEditor({ spec: { clearConfirm: { confirmLabel: 'Unplace all' } } })
1109
1109
 
1110
1110
  expect(wrapper.getComponent(ConfirmDialog).props('confirmLabel')).toBe('Unplace all')
1111
1111
  })
1112
1112
 
1113
- it('should pass the clearConfirm variant to the confirmation', () => {
1114
- const wrapper = mountEditor({ clearConfirm: { variant: 'warning' } })
1113
+ it('should pass the clearConfirm tone to the confirmation', () => {
1114
+ const wrapper = mountEditor({ spec: { clearConfirm: { tone: 'warning' } } })
1115
1115
 
1116
- expect(wrapper.getComponent(ConfirmDialog).props('variant')).toBe('warning')
1116
+ expect(wrapper.getComponent(ConfirmDialog).props('tone')).toBe('warning')
1117
1117
  })
1118
1118
 
1119
1119
  it('should keep the default clear message without clearConfirm', () => {
@@ -1123,13 +1123,13 @@ describe('PlateEditor — designer options', () => {
1123
1123
  })
1124
1124
 
1125
1125
  it('should keep fill-series enabled on a full plate when fillSeriesWhenFull is emit', () => {
1126
- const wrapper = mountEditor({ modelValue: fullRack(), fillSeries: true, fillSeriesWhenFull: 'emit' })
1126
+ const wrapper = mountEditor({ spec: { fillSeries: true, fillSeriesWhenFull: 'emit' }, modelValue: fullRack() })
1127
1127
 
1128
1128
  expect(wrapper.get('[data-action="fill-series"]').attributes('disabled')).toBeUndefined()
1129
1129
  })
1130
1130
 
1131
1131
  it('should emit fill-series on a full plate when fillSeriesWhenFull is emit', async () => {
1132
- const wrapper = mountEditor({ modelValue: fullRack(), fillSeries: true, fillSeriesWhenFull: 'emit' })
1132
+ const wrapper = mountEditor({ spec: { fillSeries: true, fillSeriesWhenFull: 'emit' }, modelValue: fullRack() })
1133
1133
 
1134
1134
  await wrapper.get('[data-action="fill-series"]').trigger('click')
1135
1135
 
@@ -1137,7 +1137,7 @@ describe('PlateEditor — designer options', () => {
1137
1137
  })
1138
1138
 
1139
1139
  it('should set the file input accept from importAccept', () => {
1140
- const wrapper = mountEditor({ import: true, importAccept: '.csv,text/csv' })
1140
+ const wrapper = mountEditor({ spec: { import: true, importAccept: '.csv,text/csv' } })
1141
1141
 
1142
1142
  expect(wrapper.get('input[type="file"]').attributes('accept')).toBe('.csv,text/csv')
1143
1143
  })