@morscherlab/mint-sdk 1.3.11 → 1.4.0-beta.10

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 (1056) hide show
  1. package/README.md +152 -177
  2. package/dist/AlertBox-B2Bgr3ei.js +276 -0
  3. package/dist/AlertBox-B2Bgr3ei.js.map +1 -0
  4. package/dist/AppSidebar-mvm--GxN.js +3565 -0
  5. package/dist/AppSidebar-mvm--GxN.js.map +1 -0
  6. package/dist/ConfirmDialog-nbJj51is.js +102 -0
  7. package/dist/ConfirmDialog-nbJj51is.js.map +1 -0
  8. package/dist/ExperimentPopover-5T1fAq2L.js +337 -0
  9. package/dist/ExperimentPopover-5T1fAq2L.js.map +1 -0
  10. package/dist/ExperimentSelectorModal-65peG4Up.js +544 -0
  11. package/dist/ExperimentSelectorModal-65peG4Up.js.map +1 -0
  12. package/dist/SegmentedControl-BtnnjWzs.js +129 -0
  13. package/dist/SegmentedControl-BtnnjWzs.js.map +1 -0
  14. package/dist/SettingsModal-DO3IZ7qz.js +666 -0
  15. package/dist/SettingsModal-DO3IZ7qz.js.map +1 -0
  16. package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
  17. package/dist/auth-SliLnFre.js +65 -0
  18. package/dist/auth-SliLnFre.js.map +1 -0
  19. package/dist/components/ActionMenu.vue.d.ts +1 -1
  20. package/dist/components/AdductText.vue.d.ts +1 -1
  21. package/dist/components/AlertBox.vue.d.ts +3 -3
  22. package/dist/components/AppContainer.vue.d.ts +1 -1
  23. package/dist/components/AppSidebar.vue.d.ts +15 -95
  24. package/dist/components/AppTopBar.vue.d.ts +16 -70
  25. package/dist/components/ArtifactSaveDialog.vue.d.ts +13 -5
  26. package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
  27. package/dist/components/AuditTrail.vue.d.ts +2 -2
  28. package/dist/components/BaseButton.vue.d.ts +11 -4
  29. package/dist/components/BaseCheckbox.vue.d.ts +9 -3
  30. package/dist/components/BaseInput.vue.d.ts +13 -9
  31. package/dist/components/BaseModal.vue.d.ts +4 -4
  32. package/dist/components/BasePill.vue.d.ts +15 -8
  33. package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
  34. package/dist/components/BaseSelect.vue.d.ts +51 -19
  35. package/dist/components/BaseTabs.vue.d.ts +6 -5
  36. package/dist/components/BatchProgressList.vue.d.ts +2 -2
  37. package/dist/components/ChartContainer.vue.d.ts +4 -2
  38. package/dist/components/ChemicalFormula.vue.d.ts +2 -2
  39. package/dist/components/CollapsibleCard.vue.d.ts +3 -3
  40. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
  41. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  42. package/dist/components/ConfirmDialog.vue.d.ts +8 -7
  43. package/dist/components/DataFrame.vue.d.ts +32 -74
  44. package/dist/components/DatePicker.vue.d.ts +24 -2
  45. package/dist/components/DoseCalculator.vue.d.ts +1 -1
  46. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
  47. package/dist/components/EmptyState.vue.d.ts +3 -2
  48. package/dist/components/ExperimentPopover.vue.d.ts +18 -0
  49. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -7
  50. package/dist/components/FilePicker.vue.d.ts +1 -1
  51. package/dist/components/FileUploader.vue.d.ts +2 -2
  52. package/dist/components/FormBuilder.vue.d.ts +17 -74
  53. package/dist/components/FormulaInput.vue.d.ts +2 -2
  54. package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
  55. package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
  56. package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
  57. package/dist/components/JobsStatusTray.vue.d.ts +2 -9
  58. package/dist/components/LoadingSpinner.vue.d.ts +3 -3
  59. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  60. package/dist/components/NumberInput.vue.d.ts +19 -5
  61. package/dist/components/PlateEditor.vue.d.ts +11 -61
  62. package/dist/components/PlotlyChart.vue.d.ts +2 -2
  63. package/dist/components/PluginIcon.vue.d.ts +5 -1
  64. package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
  65. package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
  66. package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
  67. package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
  68. package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
  69. package/dist/components/PresenceAvatars.vue.d.ts +31 -0
  70. package/dist/components/ProgressBar.vue.d.ts +3 -2
  71. package/dist/components/ProtocolStep.presentation.d.ts +0 -1
  72. package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
  73. package/dist/components/SampleSelector.vue.d.ts +8 -8
  74. package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
  75. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  76. package/dist/components/SecretInput.vue.d.ts +2 -2
  77. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  78. package/dist/components/SequenceInput.vue.d.ts +2 -2
  79. package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
  80. package/dist/components/SettingsModal.vue.d.ts +12 -20
  81. package/dist/components/SmartGroup.types.d.ts +0 -1
  82. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  83. package/dist/components/StaleFormBanner.vue.d.ts +20 -0
  84. package/dist/components/StepWizard.vue.d.ts +3 -0
  85. package/dist/components/TagsInput.vue.d.ts +4 -3
  86. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  87. package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
  88. package/dist/components/WellPlate.geometry.d.ts +0 -6
  89. package/dist/components/WellPlate.rendering.d.ts +0 -2
  90. package/dist/components/WellPlate.vue.d.ts +7 -52
  91. package/dist/components/index.d.ts +0 -90
  92. package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
  93. package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
  94. package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
  95. package/dist/components/{MultiSelect.vue.d.ts → internal/DatePickerDateInternal.vue.d.ts} +11 -9
  96. package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
  97. package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +4 -4
  98. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
  99. package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
  100. package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
  101. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
  102. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +5 -10
  103. package/dist/components/internal/SelectMultipleInternal.vue.d.ts +27 -0
  104. package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
  105. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
  106. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
  107. package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
  108. package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
  109. package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
  110. package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
  111. package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
  112. package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
  113. package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
  114. package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
  115. package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
  116. package/dist/components/internal/generatedJobsApi.d.ts +1 -1
  117. package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
  118. package/dist/composables/componentSpecs.d.ts +41 -0
  119. package/dist/composables/controlComponentBindings.d.ts +6 -0
  120. package/dist/composables/controlSchemaAdapters.d.ts +28 -2
  121. package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
  122. package/dist/composables/controlSchemaModel.d.ts +1 -1
  123. package/dist/composables/controlSchemaTypes.d.ts +35 -23
  124. package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +22 -49
  125. package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
  126. package/dist/composables/experiment-utils.d.ts +1 -6
  127. package/dist/composables/index.d.ts +7 -59
  128. package/dist/composables/platformContextHelpers.d.ts +0 -11
  129. package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
  130. package/dist/composables/pluginIdentity.d.ts +24 -0
  131. package/dist/composables/pluginWorkspaceModel.d.ts +16 -99
  132. package/dist/composables/useApi.d.ts +1 -3
  133. package/dist/composables/useAppExperiment.d.ts +9 -1
  134. package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
  135. package/dist/composables/useCalendarGrid.d.ts +1 -1
  136. package/dist/composables/useExperiment.d.ts +30 -0
  137. package/dist/composables/useExperimentSelector.d.ts +6 -2
  138. package/dist/composables/useFilePicker.d.ts +2 -2
  139. package/dist/composables/useJobCenter.d.ts +63 -0
  140. package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
  141. package/dist/composables/useMenuKeyboard.d.ts +1 -1
  142. package/dist/composables/usePlatform.d.ts +64 -0
  143. package/dist/composables/usePluginWorkspace.d.ts +6 -11
  144. package/dist/composables/usePresence.d.ts +41 -0
  145. package/dist/composables/useRackEditor.d.ts +2 -2
  146. package/dist/composables/useRealtime.d.ts +71 -0
  147. package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
  148. package/dist/composables/useToast.d.ts +7 -5
  149. package/dist/composables/useVersionedSave.d.ts +76 -0
  150. package/dist/controlSchemaModel-B8CTXagP.js +95 -0
  151. package/dist/controlSchemaModel-B8CTXagP.js.map +1 -0
  152. package/dist/data-CgILxDLW.js +3865 -0
  153. package/dist/data-CgILxDLW.js.map +1 -0
  154. package/dist/data.d.ts +32 -0
  155. package/dist/data.js +10 -0
  156. package/dist/deprecatedRootExports.d.ts +191 -0
  157. package/dist/experiment-43OJtH7R.js +673 -0
  158. package/dist/experiment-43OJtH7R.js.map +1 -0
  159. package/dist/experimentStatus-Cqp6qNrR.js +60 -0
  160. package/dist/experimentStatus-Cqp6qNrR.js.map +1 -0
  161. package/dist/host.d.ts +10 -0
  162. package/dist/host.js +26 -0
  163. package/dist/host.js.map +1 -0
  164. package/dist/index.d.ts +1 -12
  165. package/dist/index.js +65 -277
  166. package/dist/index.js.map +1 -1
  167. package/dist/install-CsPFJSx3.js +669 -0
  168. package/dist/install-CsPFJSx3.js.map +1 -0
  169. package/dist/install.d.ts +2 -1
  170. package/dist/install.js +1 -21
  171. package/dist/instrument.d.ts +0 -6
  172. package/dist/lab-MHzp-_J8.js +7494 -0
  173. package/dist/lab-MHzp-_J8.js.map +1 -0
  174. package/dist/lab.d.ts +42 -0
  175. package/dist/lab.js +5 -0
  176. package/dist/permissions.d.ts +0 -4
  177. package/dist/permissions.js +1 -20
  178. package/dist/permissions.js.map +1 -1
  179. package/dist/records-B6gpM_3e.js +3268 -0
  180. package/dist/records-B6gpM_3e.js.map +1 -0
  181. package/dist/runtime-8bs8EogX.js +1491 -0
  182. package/dist/runtime-8bs8EogX.js.map +1 -0
  183. package/dist/runtime.d.ts +25 -0
  184. package/dist/runtime.js +8 -0
  185. package/dist/shell-CywENwBT.js +197 -0
  186. package/dist/shell-CywENwBT.js.map +1 -0
  187. package/dist/shell.d.ts +16 -0
  188. package/dist/shell.js +8 -0
  189. package/dist/stores/auth.d.ts +13 -35
  190. package/dist/stores/experiment.d.ts +4 -0
  191. package/dist/stores/index.js +2 -2
  192. package/dist/styles.css +12161 -15036
  193. package/dist/types/analysisArtifactTypes.d.ts +1 -1
  194. package/dist/types/auth.d.ts +0 -8
  195. package/dist/types/componentLabTypes.d.ts +98 -34
  196. package/dist/types/componentWorkflowTypes.d.ts +2 -27
  197. package/dist/types/components.d.ts +145 -74
  198. package/dist/types/form-builder.d.ts +4 -0
  199. package/dist/types/generated/platformContext.d.ts +53 -0
  200. package/dist/types/generated-ui.d.ts +6 -2
  201. package/dist/types/index.d.ts +4 -5
  202. package/dist/types/instrument.d.ts +41 -0
  203. package/dist/types/platform.d.ts +20 -58
  204. package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
  205. package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
  206. package/dist/{experiment-utils-DTANyVKV.js → useDropdownState-8yWMu-7_.js} +127 -144
  207. package/dist/useDropdownState-8yWMu-7_.js.map +1 -0
  208. package/dist/useExpansionSet-CvoNMZJi.js +68 -0
  209. package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
  210. package/dist/useExperimentSamples-DHnxKFAF.js +366 -0
  211. package/dist/useExperimentSamples-DHnxKFAF.js.map +1 -0
  212. package/dist/useListReorder-BitdUhxn.js +5294 -0
  213. package/dist/useListReorder-BitdUhxn.js.map +1 -0
  214. package/dist/useRackEditor-DiwCt77M.js +5930 -0
  215. package/dist/useRackEditor-DiwCt77M.js.map +1 -0
  216. package/dist/useRealtime-C3iy9QkU.js +699 -0
  217. package/dist/useRealtime-C3iy9QkU.js.map +1 -0
  218. package/dist/useRequest-D506eHi8.js +244 -0
  219. package/dist/useRequest-D506eHi8.js.map +1 -0
  220. package/dist/utils/color.d.ts +0 -5
  221. package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
  222. package/dist/utils/experimentStatus.d.ts +9 -0
  223. package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
  224. package/dist/utils/integrationHost.d.ts +18 -0
  225. package/dist/utils/plotlyTemplate.d.ts +2 -0
  226. package/dist/utils/pluginSecrets.d.ts +12 -12
  227. package/dist/utils/presenceAvatars.d.ts +30 -0
  228. package/dist/utils/records.d.ts +0 -2
  229. package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +7 -18
  230. package/package.json +20 -17
  231. package/src/__tests__/components/ActionMenu.test.ts +0 -13
  232. package/src/__tests__/components/AlertBox.test.ts +1 -1
  233. package/src/__tests__/components/AppSidebar.test.ts +119 -167
  234. package/src/__tests__/components/AppToastContainer.test.ts +2 -2
  235. package/src/__tests__/components/AppTopBar.test.ts +230 -176
  236. package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
  237. package/src/__tests__/components/ArtifactSaveDialog.test.ts +83 -3
  238. package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
  239. package/src/__tests__/components/AuditTrail.test.ts +1 -1
  240. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
  241. package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
  242. package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
  243. package/src/__tests__/components/BaseButton.test.ts +51 -0
  244. package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
  245. package/src/__tests__/components/BaseInput.test.ts +13 -34
  246. package/src/__tests__/components/BaseModal.test.ts +6 -6
  247. package/src/__tests__/components/BasePill.test.ts +33 -39
  248. package/src/__tests__/components/BaseSelect.multiple.test.ts +118 -0
  249. package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
  250. package/src/__tests__/components/BaseSelect.test.ts +11 -0
  251. package/src/__tests__/components/BaseTabs.test.ts +13 -13
  252. package/src/__tests__/components/BatchProgressList.test.ts +16 -0
  253. package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
  254. package/src/__tests__/components/ChartContainer.test.ts +11 -0
  255. package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
  256. package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
  257. package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
  258. package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
  259. package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
  260. package/src/__tests__/components/DataFrame.test.ts +140 -142
  261. package/src/__tests__/components/DataStates.test.ts +6 -22
  262. package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +15 -7
  263. package/src/__tests__/components/DatePicker.test.ts +21 -0
  264. package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +20 -19
  265. package/src/__tests__/components/DoseCalculator.test.ts +12 -7
  266. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
  267. package/src/__tests__/components/EmptyState.test.ts +1 -1
  268. package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
  269. package/src/__tests__/components/ExperimentSelectorModal.test.ts +134 -28
  270. package/src/__tests__/components/FormBuilder.test.ts +49 -167
  271. package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
  272. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
  273. package/src/__tests__/components/GeneratedPluginView.test.ts +60 -25
  274. package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
  275. package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
  276. package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
  277. package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
  278. package/src/__tests__/components/NumberInput.test.ts +28 -0
  279. package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
  280. package/src/__tests__/components/PlateEditor.test.ts +108 -108
  281. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
  282. package/src/__tests__/components/PlotlyChart.test.ts +1 -1
  283. package/src/__tests__/components/PluginIcon.test.ts +9 -4
  284. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
  285. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
  286. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
  287. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
  288. package/src/__tests__/components/PluginWorkspaceView.test.ts +183 -155
  289. package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
  290. package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
  291. package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
  292. package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
  293. package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -22
  294. package/src/__tests__/components/RetiredStyles.test.ts +0 -18
  295. package/src/__tests__/components/SampleSelector.test.ts +30 -25
  296. package/src/__tests__/components/SecretInput.test.ts +14 -19
  297. package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
  298. package/src/__tests__/components/SettingsModal.test.ts +76 -84
  299. package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
  300. package/src/__tests__/components/StepWizard.test.ts +11 -0
  301. package/src/__tests__/components/ThemeToggle.test.ts +1 -1
  302. package/src/__tests__/components/WellPlate.decoration.test.ts +20 -11
  303. package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
  304. package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
  305. package/src/__tests__/components/deprecationTags.test.ts +90 -0
  306. package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
  307. package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
  308. package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
  309. package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
  310. package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
  311. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
  312. package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
  313. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
  314. package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
  315. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
  316. package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
  317. package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
  318. package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
  319. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
  320. package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
  321. package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
  322. package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
  323. package/src/__tests__/composables/experiment-utils.test.ts +13 -14
  324. package/src/__tests__/composables/useApi.test.ts +32 -21
  325. package/src/__tests__/composables/useAppExperiment.test.ts +46 -3
  326. package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
  327. package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
  328. package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
  329. package/src/__tests__/composables/useControlSchema.test.ts +41 -99
  330. package/src/__tests__/composables/useExperiment.test.ts +63 -0
  331. package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
  332. package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
  333. package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
  334. package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
  335. package/src/__tests__/composables/usePlatform.test.ts +102 -0
  336. package/src/__tests__/composables/usePresence.test.ts +164 -0
  337. package/src/__tests__/composables/useRackEditor.test.ts +2 -2
  338. package/src/__tests__/composables/useRealtime.test.ts +196 -0
  339. package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
  340. package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
  341. package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
  342. package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
  343. package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
  344. package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
  345. package/src/__tests__/styles/baseControlsRules.test.ts +7 -3
  346. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  347. package/src/__tests__/styles/cssTokens.test.ts +2 -2
  348. package/src/__tests__/styles/darkModeRules.test.ts +0 -6
  349. package/src/__tests__/styles/menusShellRefresh.test.ts +14 -10
  350. package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
  351. package/src/__tests__/utils/permissions.test.ts +1 -36
  352. package/src/__tests__/utils/plotlyTemplate.test.ts +20 -5
  353. package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +18 -8
  354. package/src/components/ActionMenu.vue +7 -13
  355. package/src/components/AdductText.story.vue +7 -0
  356. package/src/components/AdductText.vue +1 -1
  357. package/src/components/AlertBox.story.vue +27 -27
  358. package/src/components/AlertBox.vue +22 -20
  359. package/src/components/AppLayout.story.vue +33 -44
  360. package/src/components/AppLayout.vue +1 -1
  361. package/src/components/AppSidebar.story.vue +40 -101
  362. package/src/components/AppSidebar.vue +66 -147
  363. package/src/components/AppToastContainer.story.vue +1 -1
  364. package/src/components/AppTopBar.story.vue +97 -111
  365. package/src/components/AppTopBar.vue +170 -290
  366. package/src/components/ArtifactSaveDialog.story.vue +32 -9
  367. package/src/components/ArtifactSaveDialog.vue +125 -38
  368. package/src/components/ArtifactSelectorModal.story.vue +4 -4
  369. package/src/components/ArtifactSelectorModal.vue +10 -10
  370. package/src/components/AuditTrail.story.vue +6 -5
  371. package/src/components/AuditTrail.vue +5 -24
  372. package/src/components/Avatar.story.vue +2 -3
  373. package/src/components/Avatar.vue +11 -16
  374. package/src/components/BaseButton.story.vue +25 -0
  375. package/src/components/BaseButton.vue +39 -10
  376. package/src/components/BaseCheckbox.story.vue +2 -2
  377. package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
  378. package/src/components/BaseCheckbox.vue +39 -7
  379. package/src/components/BaseInput.story.vue +3 -15
  380. package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
  381. package/src/components/BaseInput.vue +53 -26
  382. package/src/components/BaseModal.story.vue +11 -11
  383. package/src/components/BaseModal.vue +8 -8
  384. package/src/components/BasePill.story.vue +48 -28
  385. package/src/components/BasePill.vue +22 -11
  386. package/src/components/BaseRadioGroup.story.vue +4 -4
  387. package/src/components/BaseRadioGroup.vue +3 -3
  388. package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +33 -16
  389. package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
  390. package/src/components/BaseSelect.story.vue +2 -2
  391. package/src/components/BaseSelect.vue +118 -22
  392. package/src/components/BaseTabs.story.vue +20 -20
  393. package/src/components/BaseTabs.vue +17 -9
  394. package/src/components/BatchProgressList.vue +38 -28
  395. package/src/components/ChartContainer.story.vue +9 -13
  396. package/src/components/ChartContainer.vue +10 -8
  397. package/src/components/ChemicalFormula.vue +1 -2
  398. package/src/components/CollapsibleCard.vue +5 -4
  399. package/src/components/ComponentBindingRenderer.story.vue +0 -29
  400. package/src/components/ComponentBindingRenderer.vue +15 -39
  401. package/src/components/ConcentrationInput.story.vue +2 -2
  402. package/src/components/ConcentrationInput.vue +9 -9
  403. package/src/components/ConfirmDialog.story.vue +22 -22
  404. package/src/components/ConfirmDialog.vue +15 -14
  405. package/src/components/DataFrame.story.vue +28 -40
  406. package/src/components/DataFrame.vue +112 -128
  407. package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
  408. package/src/components/DatePicker.story.vue +2 -2
  409. package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
  410. package/src/components/DatePicker.vue +82 -220
  411. package/src/components/DoseCalculator.vue +13 -19
  412. package/src/components/DoseCalculatorVolumeField.vue +6 -6
  413. package/src/components/EmptyState.story.vue +17 -17
  414. package/src/components/EmptyState.vue +6 -5
  415. package/src/components/ExperimentPopover.story.vue +165 -53
  416. package/src/components/ExperimentPopover.vue +172 -190
  417. package/src/components/ExperimentSelectorModal.story.vue +43 -39
  418. package/src/components/ExperimentSelectorModal.vue +134 -122
  419. package/src/components/FilePicker.vue +1 -1
  420. package/src/components/FormBuilder.story.vue +9 -4
  421. package/src/components/FormBuilder.vue +46 -253
  422. package/src/components/FormField.story.vue +9 -50
  423. package/src/components/FormulaInput.story.vue +2 -2
  424. package/src/components/FormulaInput.vue +5 -6
  425. package/src/components/GeneratedPathInput.vue +8 -9
  426. package/src/components/GeneratedPluginView.story.vue +1 -1
  427. package/src/components/GeneratedPluginView.vue +29 -22
  428. package/src/components/GeneratedResultRenderer.vue +16 -17
  429. package/src/components/InstrumentStateBadge.vue +1 -1
  430. package/src/components/InstrumentStatusPanels.story.vue +64 -0
  431. package/src/components/InstrumentStatusPanels.vue +133 -0
  432. package/src/components/JobsStatusTray.story.vue +2 -2
  433. package/src/components/JobsStatusTray.vue +5 -20
  434. package/src/components/LoadingSpinner.story.vue +11 -11
  435. package/src/components/LoadingSpinner.vue +7 -5
  436. package/src/components/MoleculeInput.story.vue +2 -2
  437. package/src/components/MoleculeInput.vue +3 -3
  438. package/src/components/NumberInput.story.vue +55 -15
  439. package/src/components/NumberInput.vue +83 -24
  440. package/src/components/PlateEditor.story.vue +51 -43
  441. package/src/components/PlateEditor.vue +97 -128
  442. package/src/components/PlotlyChart.story.vue +1 -1
  443. package/src/components/PlotlyChart.vue +6 -4
  444. package/src/components/PluginIcon.story.vue +6 -11
  445. package/src/components/PluginIcon.vue +7 -2
  446. package/src/components/PluginWorkspaceView.controls.ts +9 -29
  447. package/src/components/PluginWorkspaceView.navigation.ts +2 -23
  448. package/src/components/PluginWorkspaceView.props.ts +17 -151
  449. package/src/components/PluginWorkspaceView.shell.ts +13 -24
  450. package/src/components/PluginWorkspaceView.story.vue +65 -63
  451. package/src/components/PluginWorkspaceView.vue +21 -78
  452. package/src/components/PresenceAvatars.story.vue +75 -0
  453. package/src/components/PresenceAvatars.vue +114 -0
  454. package/src/components/ProgressBar.story.vue +7 -7
  455. package/src/components/ProgressBar.vue +4 -3
  456. package/src/components/ProtocolStep.presentation.ts +0 -11
  457. package/src/components/ProtocolStepEditor.vue +6 -5
  458. package/src/components/ProtocolStepParameterField.vue +15 -12
  459. package/src/components/RuntimeUpdateNotice.vue +1 -1
  460. package/src/components/SampleSelector.colors.ts +1 -1
  461. package/src/components/SampleSelector.story.vue +1 -1
  462. package/src/components/SampleSelector.vue +33 -43
  463. package/src/components/SampleSelectorGroupNode.vue +1 -1
  464. package/src/components/ScheduleCalendar.vue +4 -4
  465. package/src/components/SecretInput.story.vue +1 -1
  466. package/src/components/SecretInput.vue +16 -25
  467. package/src/components/SectionCard.story.vue +2 -2
  468. package/src/components/SegmentedControl.story.vue +7 -7
  469. package/src/components/SegmentedControl.vue +5 -3
  470. package/src/components/SequenceInput.story.vue +2 -2
  471. package/src/components/SequenceInput.vue +3 -3
  472. package/src/components/SequenceProgressBar.story.vue +9 -0
  473. package/src/components/SequenceProgressBar.vue +6 -1
  474. package/src/components/SettingsModal.schema.ts +1 -1
  475. package/src/components/SettingsModal.story.vue +13 -14
  476. package/src/components/SettingsModal.vue +31 -49
  477. package/src/components/SmartGroup.types.ts +4 -6
  478. package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
  479. package/src/components/SmartGroupFieldRecipe.vue +7 -5
  480. package/src/components/SmartGroupManual.story.vue +1 -1
  481. package/src/components/StaleFormBanner.story.vue +90 -0
  482. package/src/components/StaleFormBanner.vue +83 -0
  483. package/src/components/StepWizard.story.vue +33 -0
  484. package/src/components/StepWizard.vue +8 -1
  485. package/src/components/TagsInput.story.vue +7 -7
  486. package/src/components/TagsInput.vue +7 -6
  487. package/src/components/ThemeToggle.vue +5 -30
  488. package/src/components/TimeRangeInput.story.vue +1 -1
  489. package/src/components/TimeRangeInput.vue +10 -8
  490. package/src/components/VersionConflictDialog.story.vue +60 -0
  491. package/src/components/VersionConflictDialog.vue +79 -0
  492. package/src/components/WellPlate.geometry.ts +0 -38
  493. package/src/components/WellPlate.rendering.ts +0 -13
  494. package/src/components/WellPlate.story.vue +64 -51
  495. package/src/components/WellPlate.vue +68 -87
  496. package/src/components/index.ts +3 -105
  497. package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
  498. package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
  499. package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
  500. package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
  501. package/src/components/internal/DataStateInternal.vue +1 -1
  502. package/src/components/internal/DatePickerDateInternal.vue +219 -0
  503. package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +12 -22
  504. package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +12 -15
  505. package/src/components/internal/FilePickerListInternal.vue +8 -14
  506. package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
  507. package/src/components/internal/FormFieldRendererInternal.vue +1 -1
  508. package/src/components/internal/FormSchemaInternal.vue +253 -0
  509. package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
  510. package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
  511. package/src/components/internal/ResourcePickerListInternal.vue +48 -88
  512. package/src/components/internal/SelectMultipleInternal.vue +242 -0
  513. package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +26 -11
  514. package/src/components/internal/WellEditPopupInternal.vue +4 -9
  515. package/src/components/internal/WorkspaceShellInternal.vue +3 -36
  516. package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
  517. package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
  518. package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
  519. package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
  520. package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
  521. package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
  522. package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
  523. package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
  524. package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
  525. package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
  526. package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
  527. package/src/components/internal/generatedJobsApi.ts +1 -1
  528. package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
  529. package/src/composables/componentSpecs.ts +62 -0
  530. package/src/composables/controlComponentBindings.ts +7 -0
  531. package/src/composables/controlSchemaAdapters.ts +45 -7
  532. package/src/composables/controlSchemaDoseDesign.ts +16 -5
  533. package/src/composables/controlSchemaModel.ts +1 -1
  534. package/src/composables/controlSchemaTypes.ts +31 -22
  535. package/src/composables/{usePluginClient.ts → createClient.ts} +54 -190
  536. package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
  537. package/src/composables/experiment-utils.ts +1 -39
  538. package/src/composables/formBuilderRegistry.ts +6 -12
  539. package/src/composables/index.ts +17 -480
  540. package/src/composables/platformContextHelpers.ts +0 -57
  541. package/src/composables/pluginEndpointBuilder.ts +8 -10
  542. package/src/composables/pluginIdentity.ts +31 -0
  543. package/src/composables/pluginWorkspaceModel.ts +16 -107
  544. package/src/composables/useApi.ts +18 -30
  545. package/src/composables/useAppExperiment.ts +26 -5
  546. package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
  547. package/src/composables/useCalendarGrid.ts +4 -3
  548. package/src/composables/useControlSchema.ts +5 -9
  549. package/src/composables/useControlWorkspace.ts +4 -7
  550. package/src/composables/useExperiment.ts +49 -0
  551. package/src/composables/useExperimentData.ts +4 -4
  552. package/src/composables/useExperimentSelector.ts +82 -36
  553. package/src/composables/useFileBrowser.ts +5 -13
  554. package/src/composables/useFilePicker.ts +2 -2
  555. package/src/composables/useFormBuilder.ts +3 -4
  556. package/src/composables/useJobCenter.ts +324 -0
  557. package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
  558. package/src/composables/useMenuKeyboard.ts +1 -1
  559. package/src/composables/usePlatform.ts +95 -0
  560. package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
  561. package/src/composables/usePluginWorkspace.ts +62 -107
  562. package/src/composables/usePresence.ts +110 -0
  563. package/src/composables/useRackEditor.ts +3 -3
  564. package/src/composables/useRealtime.ts +194 -0
  565. package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
  566. package/src/composables/useScheduleCalendarLayout.ts +1 -1
  567. package/src/composables/useToast.ts +14 -11
  568. package/src/composables/useVersionedSave.ts +165 -0
  569. package/src/data.ts +130 -0
  570. package/src/deprecatedRootExports.ts +226 -0
  571. package/src/generated/schema.ts +1 -0
  572. package/src/host.ts +27 -0
  573. package/src/index.ts +2 -71
  574. package/src/install.ts +15 -2
  575. package/src/instrument.ts +1 -6
  576. package/src/lab.ts +128 -0
  577. package/src/permissions.ts +0 -27
  578. package/src/runtime.ts +145 -0
  579. package/src/shell.ts +103 -0
  580. package/src/stores/auth.ts +26 -162
  581. package/src/stores/experiment.ts +27 -1
  582. package/src/styles/components/action-menu.css +0 -5
  583. package/src/styles/components/adduct-text.css +13 -5
  584. package/src/styles/components/alert-box.css +39 -40
  585. package/src/styles/components/app-layout.css +6 -5
  586. package/src/styles/components/app-page-selector.css +3 -1
  587. package/src/styles/components/app-pill-nav.css +11 -12
  588. package/src/styles/components/app-sidebar.css +9 -18
  589. package/src/styles/components/app-top-bar.css +64 -103
  590. package/src/styles/components/artifact-save-dialog.css +153 -2
  591. package/src/styles/components/audit-trail.css +16 -19
  592. package/src/styles/components/avatar.css +6 -4
  593. package/src/styles/components/batch-progress-list.css +38 -36
  594. package/src/styles/components/button.css +40 -59
  595. package/src/styles/components/calendar.css +12 -12
  596. package/src/styles/components/chart-container.css +34 -23
  597. package/src/styles/components/checkbox.css +3 -13
  598. package/src/styles/components/collapsible-card.css +28 -30
  599. package/src/styles/components/confirm-dialog.css +31 -16
  600. package/src/styles/components/dataframe.css +12 -4
  601. package/src/styles/components/date-picker.css +80 -92
  602. package/src/styles/components/datetime-picker.css +31 -43
  603. package/src/styles/components/divider.css +20 -20
  604. package/src/styles/components/dose-calculator.css +3 -3
  605. package/src/styles/components/empty-state.css +23 -18
  606. package/src/styles/components/experiment-code-badge.css +2 -0
  607. package/src/styles/components/experiment-popover.css +174 -329
  608. package/src/styles/components/experiment-selector-modal.css +75 -56
  609. package/src/styles/components/file-picker.css +4 -4
  610. package/src/styles/components/file-uploader.css +38 -49
  611. package/src/styles/components/form-builder.css +3 -3
  612. package/src/styles/components/formula-input.css +1 -1
  613. package/src/styles/components/icon-button.css +19 -25
  614. package/src/styles/components/input.css +5 -4
  615. package/src/styles/components/instrument-monitor.css +13 -15
  616. package/src/styles/components/jobs-status-tray.css +31 -25
  617. package/src/styles/components/loading-spinner.css +9 -12
  618. package/src/styles/components/modal.css +2 -4
  619. package/src/styles/components/molecule-input.css +2 -2
  620. package/src/styles/components/multi-select.css +65 -112
  621. package/src/styles/components/number-input.css +26 -19
  622. package/src/styles/components/pill.css +43 -37
  623. package/src/styles/components/plate-editor.css +0 -1
  624. package/src/styles/components/plugin-icon.css +34 -22
  625. package/src/styles/components/popover.css +2 -2
  626. package/src/styles/components/presence-avatars.css +194 -0
  627. package/src/styles/components/progress-bar.css +2 -0
  628. package/src/styles/components/protocol-step-editor.css +1 -3
  629. package/src/styles/components/resource-card.css +2 -2
  630. package/src/styles/components/resource-picker-list.css +6 -57
  631. package/src/styles/components/sample-hierarchy-tree.css +4 -4
  632. package/src/styles/components/sample-selector.css +95 -79
  633. package/src/styles/components/schedule-calendar.css +8 -8
  634. package/src/styles/components/searchable-select.css +15 -12
  635. package/src/styles/components/section-card.css +28 -47
  636. package/src/styles/components/segmented-control.css +18 -15
  637. package/src/styles/components/select.css +3 -3
  638. package/src/styles/components/sequence-input.css +2 -2
  639. package/src/styles/components/sequence-progress-bar.css +17 -8
  640. package/src/styles/components/smart-group.css +19 -24
  641. package/src/styles/components/step-wizard.css +52 -16
  642. package/src/styles/components/tabs.css +2 -2
  643. package/src/styles/components/textarea.css +4 -4
  644. package/src/styles/components/time-picker.css +36 -21
  645. package/src/styles/components/toast.css +12 -10
  646. package/src/styles/components/toggle.css +3 -13
  647. package/src/styles/components/tooltip.css +10 -9
  648. package/src/styles/components/unit-input.css +8 -7
  649. package/src/styles/components/version-conflict.css +122 -0
  650. package/src/styles/components/well-plate.css +8 -8
  651. package/src/styles/index.css +2 -11
  652. package/src/styles/variables.css +107 -602
  653. package/src/types/analysisArtifactTypes.ts +1 -1
  654. package/src/types/auth.ts +0 -10
  655. package/src/types/componentLabTypes.ts +103 -53
  656. package/src/types/componentWorkflowTypes.ts +4 -33
  657. package/src/types/components.ts +148 -114
  658. package/src/types/form-builder.ts +4 -0
  659. package/src/types/generated/platformContext.ts +60 -0
  660. package/src/types/generated-ui.ts +6 -2
  661. package/src/types/index.ts +15 -53
  662. package/src/types/instrument.ts +27 -0
  663. package/src/types/platform.ts +25 -89
  664. package/src/utils/color.ts +1 -12
  665. package/src/utils/dose.ts +335 -0
  666. package/src/utils/experimentStatus.ts +43 -0
  667. package/src/utils/formula.ts +292 -0
  668. package/src/utils/integrationHost.ts +27 -0
  669. package/src/utils/plotlyTemplate.ts +6 -0
  670. package/src/utils/pluginSecrets.ts +23 -23
  671. package/src/utils/presenceAvatars.ts +53 -0
  672. package/src/utils/records.ts +0 -5
  673. package/src/{composables/useTimeUtils.ts → utils/time.ts} +21 -21
  674. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
  675. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
  676. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
  677. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
  678. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
  679. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
  680. package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
  681. package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
  682. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
  683. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
  684. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
  685. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
  686. package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
  687. package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
  688. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
  689. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
  690. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
  691. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
  692. package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
  693. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
  694. package/dist/__tests__/templates/templates.test.d.ts +0 -1
  695. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
  696. package/dist/__tests__/utils/lcms.test.d.ts +0 -1
  697. package/dist/__tests__/utils/rack.test.d.ts +0 -1
  698. package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
  699. package/dist/components/AppTopBar.navigation.d.ts +0 -10
  700. package/dist/components/BaseTextarea.vue.d.ts +0 -31
  701. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
  702. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
  703. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
  704. package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
  705. package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
  706. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
  707. package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
  708. package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
  709. package/dist/components/FitPanel.vue.d.ts +0 -56
  710. package/dist/components/GroupAssigner.vue.d.ts +0 -26
  711. package/dist/components/IconButton.vue.d.ts +0 -30
  712. package/dist/components/MobileSupportGate.vue.d.ts +0 -32
  713. package/dist/components/ReagentEditor.vue.d.ts +0 -31
  714. package/dist/components/ReagentList.presentation.d.ts +0 -17
  715. package/dist/components/ReagentList.vue.d.ts +0 -58
  716. package/dist/components/SampleLegend.vue.d.ts +0 -33
  717. package/dist/components/SmartGroupModal.vue.d.ts +0 -29
  718. package/dist/components/index.js +0 -5
  719. package/dist/components-BOA5e7kb.js +0 -23137
  720. package/dist/components-BOA5e7kb.js.map +0 -1
  721. package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
  722. package/dist/composables/index.js +0 -7
  723. package/dist/composables/useBioTemplateComponents.d.ts +0 -34
  724. package/dist/composables/useBioTemplateControls.d.ts +0 -10
  725. package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
  726. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
  727. package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
  728. package/dist/composables/useExperimentSave.d.ts +0 -69
  729. package/dist/composables/useGroupAssignment.d.ts +0 -35
  730. package/dist/composables/useJobsStatusTray.d.ts +0 -87
  731. package/dist/composables/useMobileSupportGate.d.ts +0 -14
  732. package/dist/composables/usePlatformContext.d.ts +0 -218
  733. package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
  734. package/dist/composables/useRuntimeAlignment.d.ts +0 -44
  735. package/dist/composables/useTemplateCollection.d.ts +0 -62
  736. package/dist/composables/workspaceRecipes.d.ts +0 -189
  737. package/dist/composables-izSQH8Ky.js +0 -591
  738. package/dist/composables-izSQH8Ky.js.map +0 -1
  739. package/dist/experiment-D49y_Kro.js +0 -459
  740. package/dist/experiment-D49y_Kro.js.map +0 -1
  741. package/dist/experiment-utils-DTANyVKV.js.map +0 -1
  742. package/dist/install.js.map +0 -1
  743. package/dist/lcms.d.ts +0 -38
  744. package/dist/settings-BG6v13Zq.js +0 -341
  745. package/dist/settings-BG6v13Zq.js.map +0 -1
  746. package/dist/tailwind.preset.d.ts +0 -63
  747. package/dist/tailwind.preset.js +0 -71
  748. package/dist/tailwind.preset.js.map +0 -1
  749. package/dist/templates/adapters.d.ts +0 -19
  750. package/dist/templates/assayLookups.d.ts +0 -3
  751. package/dist/templates/assayMatrixAdapters.d.ts +0 -13
  752. package/dist/templates/assayMatrixBuilder.d.ts +0 -3
  753. package/dist/templates/assayNormalizers.d.ts +0 -4
  754. package/dist/templates/builderIdUtils.d.ts +0 -4
  755. package/dist/templates/builderPresetControls.d.ts +0 -11
  756. package/dist/templates/builderReadUtils.d.ts +0 -8
  757. package/dist/templates/builders.d.ts +0 -26
  758. package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
  759. package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
  760. package/dist/templates/calibrationNormalizers.d.ts +0 -5
  761. package/dist/templates/catalog.d.ts +0 -192
  762. package/dist/templates/componentBindingCatalog.d.ts +0 -25
  763. package/dist/templates/componentBindingHelpers.d.ts +0 -17
  764. package/dist/templates/componentBindings.d.ts +0 -97
  765. package/dist/templates/componentDoseResponseProps.d.ts +0 -3
  766. package/dist/templates/componentGenericProps.d.ts +0 -8
  767. package/dist/templates/componentPlateHelpers.d.ts +0 -11
  768. package/dist/templates/componentPlateMapProps.d.ts +0 -3
  769. package/dist/templates/componentPropsFactory.d.ts +0 -3
  770. package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
  771. package/dist/templates/componentTargetResolvers.d.ts +0 -5
  772. package/dist/templates/componentTemplateProps.d.ts +0 -3
  773. package/dist/templates/controlSchemaClone.d.ts +0 -4
  774. package/dist/templates/controlSchemaConstants.d.ts +0 -10
  775. package/dist/templates/controlSchemaMerge.d.ts +0 -3
  776. package/dist/templates/controlSchemaTargets.d.ts +0 -17
  777. package/dist/templates/controlSchemaTypes.d.ts +0 -4
  778. package/dist/templates/controlSchemas.d.ts +0 -34
  779. package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
  780. package/dist/templates/doseResponseAdapters.d.ts +0 -6
  781. package/dist/templates/doseResponseBuilder.d.ts +0 -3
  782. package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
  783. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
  784. package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
  785. package/dist/templates/flowNormalizers.d.ts +0 -8
  786. package/dist/templates/flowPanelAdapters.d.ts +0 -7
  787. package/dist/templates/index.d.ts +0 -15
  788. package/dist/templates/index.js +0 -2
  789. package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
  790. package/dist/templates/instrumentRunAdapters.d.ts +0 -19
  791. package/dist/templates/instrumentRunBuilder.d.ts +0 -3
  792. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
  793. package/dist/templates/lookup.d.ts +0 -4
  794. package/dist/templates/packs.d.ts +0 -21
  795. package/dist/templates/plateMapAdapters.d.ts +0 -5
  796. package/dist/templates/plateMapBuilder.d.ts +0 -3
  797. package/dist/templates/presetControlSchemas.d.ts +0 -534
  798. package/dist/templates/presets.d.ts +0 -106
  799. package/dist/templates/protocolAdapters.d.ts +0 -9
  800. package/dist/templates/protocolNormalizers.d.ts +0 -6
  801. package/dist/templates/protocolStepsBuilder.d.ts +0 -3
  802. package/dist/templates/qpcrAdapters.d.ts +0 -9
  803. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
  804. package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
  805. package/dist/templates/reagentAdapters.d.ts +0 -9
  806. package/dist/templates/reagentListBuilder.d.ts +0 -3
  807. package/dist/templates/runNormalizers.d.ts +0 -10
  808. package/dist/templates/sampleNormalizers.d.ts +0 -4
  809. package/dist/templates/samplePrepAdapters.d.ts +0 -7
  810. package/dist/templates/samplePrepBuilder.d.ts +0 -3
  811. package/dist/templates/sampleSheetAdapters.d.ts +0 -9
  812. package/dist/templates/sampleSheetBuilder.d.ts +0 -3
  813. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
  814. package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
  815. package/dist/templates/templateAdapterTypes.d.ts +0 -48
  816. package/dist/templates/templateControlSchemas.d.ts +0 -400
  817. package/dist/templates/templateCreateOptions.d.ts +0 -165
  818. package/dist/templates/templateEnvelopes.d.ts +0 -17
  819. package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
  820. package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
  821. package/dist/templates/templateQpcrTypes.d.ts +0 -42
  822. package/dist/templates/templateValidators.d.ts +0 -25
  823. package/dist/templates/timeCourseAdapters.d.ts +0 -9
  824. package/dist/templates/timeCourseBuilder.d.ts +0 -3
  825. package/dist/templates/types.d.ts +0 -304
  826. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
  827. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
  828. package/dist/templates-B2DB0MCM.js +0 -12304
  829. package/dist/templates-B2DB0MCM.js.map +0 -1
  830. package/dist/utils/rack.d.ts +0 -63
  831. package/dist/validation-C_eH_vIg.js +0 -7999
  832. package/dist/validation-C_eH_vIg.js.map +0 -1
  833. package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
  834. package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
  835. package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
  836. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
  837. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
  838. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
  839. package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
  840. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
  841. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
  842. package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
  843. package/src/__tests__/components/FitPanel.test.ts +0 -96
  844. package/src/__tests__/components/GroupAssigner.test.ts +0 -101
  845. package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
  846. package/src/__tests__/components/MultiSelect.test.ts +0 -54
  847. package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
  848. package/src/__tests__/components/ReagentList.test.ts +0 -167
  849. package/src/__tests__/components/SampleLegend.test.ts +0 -18
  850. package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
  851. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
  852. package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
  853. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
  854. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
  855. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
  856. package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
  857. package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
  858. package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
  859. package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
  860. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
  861. package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
  862. package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
  863. package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
  864. package/src/__tests__/fixtures/templates/dose-response.json +0 -81
  865. package/src/__tests__/fixtures/templates/plate-map.json +0 -54
  866. package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
  867. package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
  868. package/src/__tests__/templates/templates.test.ts +0 -1235
  869. package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
  870. package/src/__tests__/utils/lcms.test.ts +0 -73
  871. package/src/__tests__/utils/rack.test.ts +0 -120
  872. package/src/components/AppAvatarMenu.story.vue +0 -155
  873. package/src/components/AppAvatarMenu.vue +0 -154
  874. package/src/components/AppTopBar.navigation.ts +0 -60
  875. package/src/components/AutoGroupModal.story.vue +0 -458
  876. package/src/components/BaseTextarea.vue +0 -58
  877. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
  878. package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
  879. package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
  880. package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
  881. package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
  882. package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
  883. package/src/components/BioTemplateRenderer.story.vue +0 -57
  884. package/src/components/BioTemplateRenderer.vue +0 -64
  885. package/src/components/ControlWorkspaceView.story.vue +0 -347
  886. package/src/components/ControlWorkspaceView.vue +0 -370
  887. package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
  888. package/src/components/DoseDesignWorkspaceView.vue +0 -243
  889. package/src/components/ExperimentDataViewer.story.vue +0 -177
  890. package/src/components/ExperimentDataViewer.vue +0 -313
  891. package/src/components/ExperimentTimeline.story.vue +0 -208
  892. package/src/components/ExperimentTimeline.vue +0 -383
  893. package/src/components/FitPanel.story.vue +0 -191
  894. package/src/components/FitPanel.vue +0 -168
  895. package/src/components/FormActions.story.vue +0 -96
  896. package/src/components/GroupAssigner.story.vue +0 -83
  897. package/src/components/GroupAssigner.vue +0 -319
  898. package/src/components/IconButton.story.vue +0 -140
  899. package/src/components/IconButton.vue +0 -69
  900. package/src/components/MobileSupportGate.story.vue +0 -52
  901. package/src/components/MobileSupportGate.vue +0 -111
  902. package/src/components/MultiSelect.vue +0 -119
  903. package/src/components/ReagentEditor.story.vue +0 -153
  904. package/src/components/ReagentEditor.vue +0 -414
  905. package/src/components/ReagentList.presentation.ts +0 -106
  906. package/src/components/ReagentList.story.vue +0 -155
  907. package/src/components/ReagentList.vue +0 -438
  908. package/src/components/SampleLegend.story.vue +0 -91
  909. package/src/components/SampleLegend.vue +0 -121
  910. package/src/components/SmartGroupModal.story.vue +0 -61
  911. package/src/components/SmartGroupModal.vue +0 -61
  912. package/src/components/StatusIndicator.story.vue +0 -99
  913. package/src/components/StatusIndicator.vue +0 -36
  914. package/src/components/UnitInput.story.vue +0 -194
  915. package/src/composables/flattenWorkspaceBindings.ts +0 -104
  916. package/src/composables/useBioTemplateComponents.ts +0 -117
  917. package/src/composables/useBioTemplateControls.ts +0 -45
  918. package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
  919. package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
  920. package/src/composables/useBioTemplateWorkspace.ts +0 -120
  921. package/src/composables/useChemicalFormula.ts +0 -301
  922. package/src/composables/useDoseCalculator.ts +0 -370
  923. package/src/composables/useExperimentSave.ts +0 -348
  924. package/src/composables/useGroupAssignment.ts +0 -152
  925. package/src/composables/useJobsStatusTray.ts +0 -493
  926. package/src/composables/useMobileSupportGate.ts +0 -80
  927. package/src/composables/usePlatformContext.ts +0 -299
  928. package/src/composables/usePresenceHeartbeat.ts +0 -201
  929. package/src/composables/useRuntimeAlignment.ts +0 -184
  930. package/src/composables/useTemplateCollection.ts +0 -233
  931. package/src/composables/workspaceRecipes.ts +0 -268
  932. package/src/lcms.ts +0 -119
  933. package/src/styles/components/app-avatar-menu.css +0 -121
  934. package/src/styles/components/experiment-data-viewer.css +0 -138
  935. package/src/styles/components/experiment-timeline.css +0 -572
  936. package/src/styles/components/fit-panel.css +0 -153
  937. package/src/styles/components/group-assigner.css +0 -198
  938. package/src/styles/components/mobile-support-gate.css +0 -117
  939. package/src/styles/components/reagent-editor.css +0 -501
  940. package/src/styles/components/reagent-list.css +0 -408
  941. package/src/styles/components/sample-legend.css +0 -212
  942. package/src/styles/components/status-indicator.css +0 -66
  943. package/src/styles/components/theme-toggle.css +0 -6
  944. package/src/tailwind.preset.ts +0 -66
  945. package/src/templates/adapters.ts +0 -141
  946. package/src/templates/assayLookups.ts +0 -33
  947. package/src/templates/assayMatrixAdapters.ts +0 -85
  948. package/src/templates/assayMatrixBuilder.ts +0 -60
  949. package/src/templates/assayNormalizers.ts +0 -34
  950. package/src/templates/builderIdUtils.ts +0 -20
  951. package/src/templates/builderPresetControls.ts +0 -166
  952. package/src/templates/builderReadUtils.ts +0 -55
  953. package/src/templates/builders.ts +0 -122
  954. package/src/templates/calibrationCurveAdapters.ts +0 -62
  955. package/src/templates/calibrationCurveBuilder.ts +0 -100
  956. package/src/templates/calibrationNormalizers.ts +0 -60
  957. package/src/templates/catalog.ts +0 -249
  958. package/src/templates/componentBindingCatalog.ts +0 -90
  959. package/src/templates/componentBindingHelpers.ts +0 -93
  960. package/src/templates/componentBindings.ts +0 -279
  961. package/src/templates/componentDoseResponseProps.ts +0 -41
  962. package/src/templates/componentGenericProps.ts +0 -77
  963. package/src/templates/componentPlateHelpers.ts +0 -52
  964. package/src/templates/componentPlateMapProps.ts +0 -34
  965. package/src/templates/componentPropsFactory.ts +0 -21
  966. package/src/templates/componentQpcrPlateProps.ts +0 -27
  967. package/src/templates/componentTargetResolvers.ts +0 -67
  968. package/src/templates/componentTemplateProps.ts +0 -78
  969. package/src/templates/controlSchemaClone.ts +0 -32
  970. package/src/templates/controlSchemaConstants.ts +0 -11
  971. package/src/templates/controlSchemaMerge.ts +0 -40
  972. package/src/templates/controlSchemaTargets.ts +0 -85
  973. package/src/templates/controlSchemaTypes.ts +0 -20
  974. package/src/templates/controlSchemas.ts +0 -113
  975. package/src/templates/defaultBioTemplateBuilder.ts +0 -125
  976. package/src/templates/doseResponseAdapters.ts +0 -36
  977. package/src/templates/doseResponseBuilder.ts +0 -45
  978. package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
  979. package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
  980. package/src/templates/flowCytometryPanelBuilder.ts +0 -54
  981. package/src/templates/flowNormalizers.ts +0 -58
  982. package/src/templates/flowPanelAdapters.ts +0 -61
  983. package/src/templates/index.ts +0 -330
  984. package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
  985. package/src/templates/instrumentRunAdapters.ts +0 -174
  986. package/src/templates/instrumentRunBuilder.ts +0 -98
  987. package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
  988. package/src/templates/lookup.ts +0 -18
  989. package/src/templates/packs.ts +0 -166
  990. package/src/templates/plateMapAdapters.ts +0 -38
  991. package/src/templates/plateMapBuilder.ts +0 -44
  992. package/src/templates/presetControlSchemas.ts +0 -258
  993. package/src/templates/presets.ts +0 -183
  994. package/src/templates/protocolAdapters.ts +0 -73
  995. package/src/templates/protocolNormalizers.ts +0 -37
  996. package/src/templates/protocolStepsBuilder.ts +0 -37
  997. package/src/templates/qpcrAdapters.ts +0 -108
  998. package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
  999. package/src/templates/qpcrPlateBuilder.ts +0 -97
  1000. package/src/templates/reagentAdapters.ts +0 -81
  1001. package/src/templates/reagentListBuilder.ts +0 -31
  1002. package/src/templates/runNormalizers.ts +0 -63
  1003. package/src/templates/sampleNormalizers.ts +0 -58
  1004. package/src/templates/samplePrepAdapters.ts +0 -66
  1005. package/src/templates/samplePrepBuilder.ts +0 -52
  1006. package/src/templates/sampleSheetAdapters.ts +0 -79
  1007. package/src/templates/sampleSheetBuilder.ts +0 -24
  1008. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
  1009. package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
  1010. package/src/templates/templateAdapterTypes.ts +0 -58
  1011. package/src/templates/templateControlSchemas.ts +0 -320
  1012. package/src/templates/templateCreateOptions.ts +0 -208
  1013. package/src/templates/templateEnvelopes.ts +0 -145
  1014. package/src/templates/templatePackCollectionBuilder.ts +0 -24
  1015. package/src/templates/templatePresetCollectionBuilder.ts +0 -141
  1016. package/src/templates/templateQpcrTypes.ts +0 -48
  1017. package/src/templates/templateValidators.ts +0 -426
  1018. package/src/templates/timeCourseAdapters.ts +0 -77
  1019. package/src/templates/timeCourseBuilder.ts +0 -65
  1020. package/src/templates/types.ts +0 -493
  1021. package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
  1022. package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
  1023. package/src/utils/rack.ts +0 -225
  1024. /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
  1025. /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
  1026. /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
  1027. /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
  1028. /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
  1029. /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
  1030. /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
  1031. /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
  1032. /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
  1033. /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
  1034. /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
  1035. /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
  1036. /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
  1037. /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
  1038. /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
  1039. /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
  1040. /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
  1041. /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
  1042. /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
  1043. /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
  1044. /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
  1045. /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
  1046. /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
  1047. /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
  1048. /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
  1049. /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
  1050. /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
  1051. /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
  1052. /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
  1053. /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
  1054. /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
  1055. /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
  1056. /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils'
3
3
  import { createPinia, setActivePinia } from 'pinia'
4
4
  import DataFrame from '../../components/DataFrame.vue'
5
5
  import { useSettingsStore } from '../../stores/settings'
6
- import type { DataFrameColumn, SortState, PaginationState } from '../../types'
6
+ import type { DataFrameColumn, SortState } from '../../types'
7
7
 
8
8
  describe('DataFrame', () => {
9
9
  const mockData = [
@@ -21,7 +21,7 @@ describe('DataFrame', () => {
21
21
  describe('rendering with default props', () => {
22
22
  it('should render table container', () => {
23
23
  const wrapper = mount(DataFrame, {
24
- props: { data: mockData, columns: mockColumns },
24
+ props: { spec: { columns: mockColumns }, data: mockData },
25
25
  })
26
26
  expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
27
27
  expect(wrapper.find('.mint-dataframe__table').exists()).toBe(true)
@@ -29,7 +29,7 @@ describe('DataFrame', () => {
29
29
 
30
30
  it('should render column headers', () => {
31
31
  const wrapper = mount(DataFrame, {
32
- props: { data: mockData, columns: mockColumns },
32
+ props: { spec: { columns: mockColumns }, data: mockData },
33
33
  })
34
34
  const headers = wrapper.findAll('.mint-dataframe__th')
35
35
  expect(headers).toHaveLength(3)
@@ -40,7 +40,7 @@ describe('DataFrame', () => {
40
40
 
41
41
  it('should render data rows', () => {
42
42
  const wrapper = mount(DataFrame, {
43
- props: { data: mockData, columns: mockColumns },
43
+ props: { spec: { columns: mockColumns }, data: mockData },
44
44
  })
45
45
  const rows = wrapper.findAll('.mint-dataframe__row')
46
46
  expect(rows).toHaveLength(3)
@@ -48,7 +48,7 @@ describe('DataFrame', () => {
48
48
 
49
49
  it('should render cell values', () => {
50
50
  const wrapper = mount(DataFrame, {
51
- props: { data: mockData, columns: mockColumns },
51
+ props: { spec: { columns: mockColumns }, data: mockData },
52
52
  })
53
53
  const firstRow = wrapper.findAll('.mint-dataframe__row')[0]
54
54
  const cells = firstRow.findAll('.mint-dataframe__td')
@@ -59,14 +59,14 @@ describe('DataFrame', () => {
59
59
 
60
60
  it('should apply bordered class by default', () => {
61
61
  const wrapper = mount(DataFrame, {
62
- props: { data: mockData, columns: mockColumns },
62
+ props: { spec: { columns: mockColumns }, data: mockData },
63
63
  })
64
64
  expect(wrapper.find('.mint-dataframe--bordered').exists()).toBe(true)
65
65
  })
66
66
 
67
67
  it('should apply striped rows by default', () => {
68
68
  const wrapper = mount(DataFrame, {
69
- props: { data: mockData, columns: mockColumns },
69
+ props: { spec: { columns: mockColumns }, data: mockData },
70
70
  })
71
71
  const rows = wrapper.findAll('.mint-dataframe__row')
72
72
  expect(rows[1].classes()).toContain('mint-dataframe__row--striped')
@@ -76,7 +76,7 @@ describe('DataFrame', () => {
76
76
  describe('column configuration', () => {
77
77
  it('should apply column alignment', () => {
78
78
  const wrapper = mount(DataFrame, {
79
- props: { data: mockData, columns: mockColumns },
79
+ props: { spec: { columns: mockColumns }, data: mockData },
80
80
  })
81
81
  const ageHeader = wrapper.findAll('.mint-dataframe__th')[1]
82
82
  expect(ageHeader.classes()).toContain('mint-dataframe__th--align-right')
@@ -87,7 +87,7 @@ describe('DataFrame', () => {
87
87
  { key: 'name', label: 'Name', width: 200 },
88
88
  ]
89
89
  const wrapper = mount(DataFrame, {
90
- props: { data: mockData, columns },
90
+ props: { spec: { columns }, data: mockData },
91
91
  })
92
92
  const header = wrapper.find('.mint-dataframe__th')
93
93
  expect(header.attributes('style')).toContain('width: 200px')
@@ -98,7 +98,7 @@ describe('DataFrame', () => {
98
98
  { key: 'name', label: 'Name', width: '20rem' },
99
99
  ]
100
100
  const wrapper = mount(DataFrame, {
101
- props: { data: mockData, columns },
101
+ props: { spec: { columns }, data: mockData },
102
102
  })
103
103
  const header = wrapper.find('.mint-dataframe__th')
104
104
  expect(header.attributes('style')).toContain('width: 20rem')
@@ -109,7 +109,7 @@ describe('DataFrame', () => {
109
109
  { key: 'name', label: 'Name', minWidth: 150 },
110
110
  ]
111
111
  const wrapper = mount(DataFrame, {
112
- props: { data: mockData, columns },
112
+ props: { spec: { columns }, data: mockData },
113
113
  })
114
114
  const header = wrapper.find('.mint-dataframe__th')
115
115
  expect(header.attributes('style')).toContain('min-width: 150px')
@@ -120,7 +120,7 @@ describe('DataFrame', () => {
120
120
  { key: 'name', label: 'Name', ellipsis: true },
121
121
  ]
122
122
  const wrapper = mount(DataFrame, {
123
- props: { data: mockData, columns },
123
+ props: { spec: { columns }, data: mockData },
124
124
  })
125
125
  const cell = wrapper.find('.mint-dataframe__td')
126
126
  expect(cell.classes()).toContain('mint-dataframe__td--ellipsis')
@@ -135,7 +135,7 @@ describe('DataFrame', () => {
135
135
  },
136
136
  ]
137
137
  const wrapper = mount(DataFrame, {
138
- props: { data: mockData, columns },
138
+ props: { spec: { columns }, data: mockData },
139
139
  })
140
140
  const ageCell = wrapper.findAll('.mint-dataframe__row')[0].findAll('.mint-dataframe__td')[0]
141
141
  expect(ageCell.text()).toBe('30 years old')
@@ -150,7 +150,7 @@ describe('DataFrame', () => {
150
150
 
151
151
  it('should show sort icon on sortable columns', () => {
152
152
  const wrapper = mount(DataFrame, {
153
- props: { data: mockData, columns: sortableColumns },
153
+ props: { spec: { columns: sortableColumns }, data: mockData },
154
154
  })
155
155
  const sortIcons = wrapper.findAll('.mint-dataframe__sort-icon')
156
156
  expect(sortIcons).toHaveLength(2)
@@ -158,7 +158,7 @@ describe('DataFrame', () => {
158
158
 
159
159
  it('should apply sortable class to sortable headers', () => {
160
160
  const wrapper = mount(DataFrame, {
161
- props: { data: mockData, columns: sortableColumns },
161
+ props: { spec: { columns: sortableColumns }, data: mockData },
162
162
  })
163
163
  const headers = wrapper.findAll('.mint-dataframe__th')
164
164
  expect(headers[0].classes()).toContain('mint-dataframe__th--sortable')
@@ -166,7 +166,7 @@ describe('DataFrame', () => {
166
166
 
167
167
  it('should sort ascending on first click', async () => {
168
168
  const wrapper = mount(DataFrame, {
169
- props: { data: mockData, columns: sortableColumns },
169
+ props: { spec: { columns: sortableColumns }, data: mockData },
170
170
  })
171
171
  const nameHeader = wrapper.findAll('.mint-dataframe__th')[0]
172
172
  await nameHeader.get('.mint-dataframe__th-button').trigger('click')
@@ -180,8 +180,8 @@ describe('DataFrame', () => {
180
180
  it('should sort descending on second click', async () => {
181
181
  const wrapper = mount(DataFrame, {
182
182
  props: {
183
+ spec: { columns: sortableColumns },
183
184
  data: mockData,
184
- columns: sortableColumns,
185
185
  sort: { key: 'name', direction: 'asc' },
186
186
  },
187
187
  })
@@ -195,8 +195,8 @@ describe('DataFrame', () => {
195
195
  it('should clear sort on third click', async () => {
196
196
  const wrapper = mount(DataFrame, {
197
197
  props: {
198
+ spec: { columns: sortableColumns },
198
199
  data: mockData,
199
- columns: sortableColumns,
200
200
  sort: { key: 'name', direction: 'desc' },
201
201
  },
202
202
  })
@@ -209,7 +209,7 @@ describe('DataFrame', () => {
209
209
 
210
210
  it('should sort data internally when sort prop is not provided', async () => {
211
211
  const wrapper = mount(DataFrame, {
212
- props: { data: mockData, columns: sortableColumns },
212
+ props: { spec: { columns: sortableColumns }, data: mockData },
213
213
  })
214
214
  const nameHeader = wrapper.findAll('.mint-dataframe__th')[0]
215
215
  await nameHeader.get('.mint-dataframe__th-button').trigger('click')
@@ -222,7 +222,7 @@ describe('DataFrame', () => {
222
222
 
223
223
  it('should sort numeric columns correctly', async () => {
224
224
  const wrapper = mount(DataFrame, {
225
- props: { data: mockData, columns: sortableColumns },
225
+ props: { spec: { columns: sortableColumns }, data: mockData },
226
226
  })
227
227
  const ageHeader = wrapper.findAll('.mint-dataframe__th')[1]
228
228
  await ageHeader.get('.mint-dataframe__th-button').trigger('click')
@@ -236,8 +236,8 @@ describe('DataFrame', () => {
236
236
  it('should apply sorted class to active column', () => {
237
237
  const wrapper = mount(DataFrame, {
238
238
  props: {
239
+ spec: { columns: sortableColumns },
239
240
  data: mockData,
240
- columns: sortableColumns,
241
241
  sort: { key: 'name', direction: 'asc' },
242
242
  },
243
243
  })
@@ -251,7 +251,7 @@ describe('DataFrame', () => {
251
251
  { key: 'age', label: 'Age' },
252
252
  ]
253
253
  const wrapper = mount(DataFrame, {
254
- props: { data: mockData, columns, sortable: true },
254
+ props: { spec: { columns, sortable: true }, data: mockData },
255
255
  })
256
256
  const sortableHeaders = wrapper.findAll('.mint-dataframe__th--sortable')
257
257
  expect(sortableHeaders).toHaveLength(2)
@@ -261,14 +261,14 @@ describe('DataFrame', () => {
261
261
  describe('search filtering', () => {
262
262
  it('should show search input when searchable is true', () => {
263
263
  const wrapper = mount(DataFrame, {
264
- props: { data: mockData, columns: mockColumns, searchable: true },
264
+ props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
265
265
  })
266
266
  expect(wrapper.find('.mint-dataframe__search').exists()).toBe(true)
267
267
  })
268
268
 
269
269
  it('should filter data based on search query', async () => {
270
270
  const wrapper = mount(DataFrame, {
271
- props: { data: mockData, columns: mockColumns, searchable: true },
271
+ props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
272
272
  })
273
273
  const searchInput = wrapper.find('.mint-dataframe__search')
274
274
  await searchInput.setValue('Alice')
@@ -280,7 +280,7 @@ describe('DataFrame', () => {
280
280
 
281
281
  it('should search across all columns by default', async () => {
282
282
  const wrapper = mount(DataFrame, {
283
- props: { data: mockData, columns: mockColumns, searchable: true },
283
+ props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
284
284
  })
285
285
  const searchInput = wrapper.find('.mint-dataframe__search')
286
286
  await searchInput.setValue('bob@example.com')
@@ -293,10 +293,8 @@ describe('DataFrame', () => {
293
293
  it('should search only specified columns', async () => {
294
294
  const wrapper = mount(DataFrame, {
295
295
  props: {
296
+ spec: { columns: mockColumns, searchable: true, searchKeys: ['name'] },
296
297
  data: mockData,
297
- columns: mockColumns,
298
- searchable: true,
299
- searchKeys: ['name'],
300
298
  },
301
299
  })
302
300
  const searchInput = wrapper.find('.mint-dataframe__search')
@@ -309,7 +307,7 @@ describe('DataFrame', () => {
309
307
 
310
308
  it('should treat whitespace-only search as empty', async () => {
311
309
  const wrapper = mount(DataFrame, {
312
- props: { data: mockData, columns: mockColumns, searchable: true },
310
+ props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
313
311
  })
314
312
  const searchInput = wrapper.find('.mint-dataframe__search')
315
313
  await searchInput.setValue(' ')
@@ -320,7 +318,7 @@ describe('DataFrame', () => {
320
318
 
321
319
  it('should be case-insensitive', async () => {
322
320
  const wrapper = mount(DataFrame, {
323
- props: { data: mockData, columns: mockColumns, searchable: true },
321
+ props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
324
322
  })
325
323
  const searchInput = wrapper.find('.mint-dataframe__search')
326
324
  await searchInput.setValue('ALICE')
@@ -332,10 +330,8 @@ describe('DataFrame', () => {
332
330
  it('should use custom placeholder', () => {
333
331
  const wrapper = mount(DataFrame, {
334
332
  props: {
333
+ spec: { columns: mockColumns, searchable: true, searchPlaceholder: 'Type to search...' },
335
334
  data: mockData,
336
- columns: mockColumns,
337
- searchable: true,
338
- searchPlaceholder: 'Type to search...',
339
335
  },
340
336
  })
341
337
  const searchInput = wrapper.find('.mint-dataframe__search')
@@ -344,15 +340,11 @@ describe('DataFrame', () => {
344
340
  })
345
341
 
346
342
  describe('pagination', () => {
347
- const paginationState: PaginationState = {
348
- page: 1,
349
- pageSize: 2,
350
- total: 3,
351
- }
343
+ const paginationState = { pageSize: 2 }
352
344
 
353
345
  it('should show pagination controls', () => {
354
346
  const wrapper = mount(DataFrame, {
355
- props: { data: mockData, columns: mockColumns, pagination: paginationState },
347
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
356
348
  })
357
349
  expect(wrapper.find('.mint-dataframe__footer').exists()).toBe(true)
358
350
  expect(wrapper.find('.mint-dataframe__page-controls').exists()).toBe(true)
@@ -360,7 +352,7 @@ describe('DataFrame', () => {
360
352
 
361
353
  it('should display page info', () => {
362
354
  const wrapper = mount(DataFrame, {
363
- props: { data: mockData, columns: mockColumns, pagination: paginationState },
355
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
364
356
  })
365
357
  const pageInfo = wrapper.find('.mint-dataframe__page-info')
366
358
  expect(pageInfo.text()).toContain('1')
@@ -369,36 +361,53 @@ describe('DataFrame', () => {
369
361
 
370
362
  it('should paginate data', () => {
371
363
  const wrapper = mount(DataFrame, {
372
- props: { data: mockData, columns: mockColumns, pagination: paginationState },
364
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
373
365
  })
374
366
  const rows = wrapper.findAll('.mint-dataframe__row')
375
367
  expect(rows).toHaveLength(2) // pageSize is 2
376
368
  })
377
369
 
378
- it('should emit pagination event on page change', async () => {
370
+ it('should emit update:page on page change', async () => {
379
371
  const wrapper = mount(DataFrame, {
380
- props: { data: mockData, columns: mockColumns, pagination: paginationState },
372
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
381
373
  })
382
374
  const nextButton = wrapper.findAll('.mint-dataframe__page-btn')[1]
383
375
  await nextButton.trigger('click')
384
376
 
385
- expect(wrapper.emitted('update:pagination')).toHaveLength(1)
386
- const newPagination = wrapper.emitted('update:pagination')?.[0]?.[0] as PaginationState
387
- expect(newPagination.page).toBe(2)
377
+ expect(wrapper.emitted('update:page')).toEqual([[2]])
378
+ })
379
+
380
+ it('should move to the next page when page is not bound', async () => {
381
+ const wrapper = mount(DataFrame, {
382
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
383
+ })
384
+ await wrapper.findAll('.mint-dataframe__page-btn')[1].trigger('click')
385
+
386
+ expect(wrapper.findAll('.mint-dataframe__row')).toHaveLength(1)
387
+ })
388
+
389
+ it('should show the last page that has rows when a search leaves fewer pages', async () => {
390
+ const wrapper = mount(DataFrame, {
391
+ props: { spec: { columns: mockColumns, pagination: paginationState, searchable: true }, data: mockData },
392
+ })
393
+ await wrapper.findAll('.mint-dataframe__page-btn')[1].trigger('click')
394
+
395
+ await wrapper.find('.mint-dataframe__search').setValue('Alice')
396
+
397
+ expect(wrapper.findAll('.mint-dataframe__row')).toHaveLength(1)
388
398
  })
389
399
 
390
400
  it('should disable prev button on first page', () => {
391
401
  const wrapper = mount(DataFrame, {
392
- props: { data: mockData, columns: mockColumns, pagination: paginationState },
402
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
393
403
  })
394
404
  const prevButton = wrapper.findAll('.mint-dataframe__page-btn')[0]
395
405
  expect(prevButton.attributes('disabled')).toBeDefined()
396
406
  })
397
407
 
398
408
  it('should disable next button on last page', () => {
399
- const lastPageState: PaginationState = { page: 2, pageSize: 2, total: 3 }
400
409
  const wrapper = mount(DataFrame, {
401
- props: { data: mockData, columns: mockColumns, pagination: lastPageState },
410
+ props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData, page: 2 },
402
411
  })
403
412
  const nextButton = wrapper.findAll('.mint-dataframe__page-btn')[1]
404
413
  expect(nextButton.attributes('disabled')).toBeDefined()
@@ -406,7 +415,7 @@ describe('DataFrame', () => {
406
415
 
407
416
  it('should not show pagination when false', () => {
408
417
  const wrapper = mount(DataFrame, {
409
- props: { data: mockData, columns: mockColumns, pagination: false },
418
+ props: { spec: { columns: mockColumns, pagination: false }, data: mockData },
410
419
  })
411
420
  expect(wrapper.find('.mint-dataframe__footer').exists()).toBe(false)
412
421
  })
@@ -415,68 +424,64 @@ describe('DataFrame', () => {
415
424
  describe('row selection', () => {
416
425
  it('should show checkbox column when selectable', () => {
417
426
  const wrapper = mount(DataFrame, {
418
- props: { data: mockData, columns: mockColumns, selectable: true },
427
+ props: { spec: { columns: mockColumns, selectable: true }, data: mockData },
419
428
  })
420
429
  expect(wrapper.find('.mint-dataframe__th--checkbox').exists()).toBe(true)
421
430
  })
422
431
 
423
432
  it('should show checkboxes for each row', () => {
424
433
  const wrapper = mount(DataFrame, {
425
- props: { data: mockData, columns: mockColumns, selectable: true },
434
+ props: { spec: { columns: mockColumns, selectable: true }, data: mockData },
426
435
  })
427
436
  const checkboxes = wrapper.findAll('.mint-dataframe__checkbox')
428
437
  // One for header + one for each row
429
438
  expect(checkboxes.length).toBeGreaterThan(mockData.length)
430
439
  })
431
440
 
432
- it('should emit selectedKeys on row selection', async () => {
441
+ it('should emit selected on row selection', async () => {
433
442
  const wrapper = mount(DataFrame, {
434
- props: { data: mockData, columns: mockColumns, selectable: true, rowKey: 'id' },
443
+ props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
435
444
  })
436
445
  const rowCheckboxes = wrapper.findAll('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
437
446
  await rowCheckboxes[0].trigger('change')
438
447
 
439
- expect(wrapper.emitted('update:selectedKeys')).toHaveLength(1)
440
- const keys = wrapper.emitted('update:selectedKeys')?.[0]?.[0] as number[]
448
+ expect(wrapper.emitted('update:selected')).toHaveLength(1)
449
+ const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
441
450
  expect(keys).toContain(1)
442
451
  })
443
452
 
444
453
  it('should toggle selection on row checkbox click', async () => {
445
454
  const wrapper = mount(DataFrame, {
446
455
  props: {
456
+ spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
447
457
  data: mockData,
448
- columns: mockColumns,
449
- selectable: true,
450
- rowKey: 'id',
451
- selectedKeys: [1],
458
+ selected: [1],
452
459
  },
453
460
  })
454
461
  const rowCheckboxes = wrapper.findAll('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
455
462
  await rowCheckboxes[0].trigger('change')
456
463
 
457
- const keys = wrapper.emitted('update:selectedKeys')?.[0]?.[0] as number[]
464
+ const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
458
465
  expect(keys).not.toContain(1)
459
466
  })
460
467
 
461
468
  it('should select all rows with header checkbox', async () => {
462
469
  const wrapper = mount(DataFrame, {
463
- props: { data: mockData, columns: mockColumns, selectable: true, rowKey: 'id' },
470
+ props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
464
471
  })
465
472
  const headerCheckbox = wrapper.find('.mint-dataframe__th--checkbox .mint-dataframe__checkbox input')
466
473
  await headerCheckbox.trigger('change')
467
474
 
468
- const keys = wrapper.emitted('update:selectedKeys')?.[0]?.[0] as number[]
475
+ const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
469
476
  expect(keys).toHaveLength(3)
470
477
  })
471
478
 
472
479
  it('should apply selected class to selected rows', () => {
473
480
  const wrapper = mount(DataFrame, {
474
481
  props: {
482
+ spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
475
483
  data: mockData,
476
- columns: mockColumns,
477
- selectable: true,
478
- rowKey: 'id',
479
- selectedKeys: [1],
484
+ selected: [1],
480
485
  },
481
486
  })
482
487
  const selectedRow = wrapper.find('.mint-dataframe__row--selected')
@@ -485,14 +490,14 @@ describe('DataFrame', () => {
485
490
 
486
491
  it('should render row checkboxes as BaseCheckbox sm when selectable', () => {
487
492
  const wrapper = mount(DataFrame, {
488
- props: { data: mockData, columns: mockColumns, selectable: true, rowKey: 'id' },
493
+ props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
489
494
  })
490
495
  expect(wrapper.find('.mint-dataframe__td--checkbox .mint-checkbox__box--sm').exists()).toBe(true)
491
496
  })
492
497
 
493
498
  it('should mark the header checkbox mixed when some rows are selected', () => {
494
499
  const wrapper = mount(DataFrame, {
495
- props: { data: mockData, columns: mockColumns, selectable: true, rowKey: 'id', selectedKeys: [1] },
500
+ props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData, selected: [1] },
496
501
  })
497
502
  const header = wrapper.find('.mint-dataframe__th--checkbox input')
498
503
  expect(header.attributes('aria-checked')).toBe('mixed')
@@ -500,10 +505,10 @@ describe('DataFrame', () => {
500
505
 
501
506
  it('should select all rows when the mixed header checkbox is clicked', async () => {
502
507
  const wrapper = mount(DataFrame, {
503
- props: { data: mockData, columns: mockColumns, selectable: true, rowKey: 'id', selectedKeys: [1] },
508
+ props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData, selected: [1] },
504
509
  })
505
510
  await wrapper.find('.mint-dataframe__th--checkbox input').setValue(true)
506
- const keys = wrapper.emitted('update:selectedKeys')?.[0]?.[0] as number[]
511
+ const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
507
512
  expect(keys).toHaveLength(3)
508
513
  })
509
514
  })
@@ -511,7 +516,7 @@ describe('DataFrame', () => {
511
516
  describe('events', () => {
512
517
  it('should emit row-click event', async () => {
513
518
  const wrapper = mount(DataFrame, {
514
- props: { data: mockData, columns: mockColumns },
519
+ props: { spec: { columns: mockColumns }, data: mockData },
515
520
  })
516
521
  const firstRow = wrapper.findAll('.mint-dataframe__row')[0]
517
522
  await firstRow.trigger('click')
@@ -524,7 +529,7 @@ describe('DataFrame', () => {
524
529
 
525
530
  it('should emit cell-click event', async () => {
526
531
  const wrapper = mount(DataFrame, {
527
- props: { data: mockData, columns: mockColumns },
532
+ props: { spec: { columns: mockColumns }, data: mockData },
528
533
  })
529
534
  const firstCell = wrapper.find('.mint-dataframe__td')
530
535
  await firstCell.trigger('click')
@@ -538,7 +543,7 @@ describe('DataFrame', () => {
538
543
 
539
544
  it('should emit row-click from cell clicks when clickableRows is true', async () => {
540
545
  const wrapper = mount(DataFrame, {
541
- props: { data: mockData, columns: mockColumns, clickableRows: true },
546
+ props: { spec: { columns: mockColumns, clickableRows: true }, data: mockData },
542
547
  })
543
548
  const firstCell = wrapper.find('.mint-dataframe__td')
544
549
  await firstCell.trigger('click')
@@ -552,7 +557,7 @@ describe('DataFrame', () => {
552
557
 
553
558
  it('should make clickable rows keyboard accessible', async () => {
554
559
  const wrapper = mount(DataFrame, {
555
- props: { data: mockData, columns: mockColumns, clickableRows: true },
560
+ props: { spec: { columns: mockColumns, clickableRows: true }, data: mockData },
556
561
  })
557
562
  const firstRow = wrapper.find('.mint-dataframe__row')
558
563
  expect(firstRow.attributes('tabindex')).toBe('0')
@@ -566,7 +571,7 @@ describe('DataFrame', () => {
566
571
 
567
572
  it('should keep non-clickable rows out of the tab order', () => {
568
573
  const wrapper = mount(DataFrame, {
569
- props: { data: mockData, columns: mockColumns },
574
+ props: { spec: { columns: mockColumns }, data: mockData },
570
575
  })
571
576
  const firstRow = wrapper.find('.mint-dataframe__row')
572
577
  expect(firstRow.attributes('tabindex')).toBeUndefined()
@@ -577,7 +582,7 @@ describe('DataFrame', () => {
577
582
  describe('empty state', () => {
578
583
  it('should show empty state when no data', () => {
579
584
  const wrapper = mount(DataFrame, {
580
- props: { data: [], columns: mockColumns },
585
+ props: { spec: { columns: mockColumns }, data: [] },
581
586
  })
582
587
  expect(wrapper.find('.mint-dataframe__state').exists()).toBe(true)
583
588
  expect(wrapper.find('[data-state="empty"]').exists()).toBe(true)
@@ -585,28 +590,28 @@ describe('DataFrame', () => {
585
590
 
586
591
  it('should display empty text', () => {
587
592
  const wrapper = mount(DataFrame, {
588
- props: { data: [], columns: mockColumns },
593
+ props: { spec: { columns: mockColumns }, data: [] },
589
594
  })
590
595
  expect(wrapper.find('.mint-empty-state__title').text()).toBe('No data')
591
596
  })
592
597
 
593
598
  it('should use custom empty text', () => {
594
599
  const wrapper = mount(DataFrame, {
595
- props: { data: [], columns: mockColumns, emptyText: 'No records found' },
600
+ props: { spec: { columns: mockColumns }, data: [], emptyText: 'No records found' },
596
601
  })
597
602
  expect(wrapper.find('.mint-empty-state__title').text()).toBe('No records found')
598
603
  })
599
604
 
600
605
  it('should not show empty state when loading', () => {
601
606
  const wrapper = mount(DataFrame, {
602
- props: { data: [], columns: mockColumns, loading: true },
607
+ props: { spec: { columns: mockColumns }, data: [], loading: true },
603
608
  })
604
609
  expect(wrapper.find('[data-state="empty"]').exists()).toBe(false)
605
610
  })
606
611
 
607
612
  it('should render the empty slot instead of the default placeholder', () => {
608
613
  const wrapper = mount(DataFrame, {
609
- props: { data: [], columns: mockColumns },
614
+ props: { spec: { columns: mockColumns }, data: [] },
610
615
  slots: { empty: '<p class="custom-empty">Nothing here</p>' },
611
616
  })
612
617
  expect(wrapper.find('.custom-empty').exists()).toBe(true)
@@ -617,14 +622,14 @@ describe('DataFrame', () => {
617
622
  describe('loading state', () => {
618
623
  it('should show loading overlay', () => {
619
624
  const wrapper = mount(DataFrame, {
620
- props: { data: mockData, columns: mockColumns, loading: true },
625
+ props: { spec: { columns: mockColumns }, data: mockData, loading: true },
621
626
  })
622
627
  expect(wrapper.find('.mint-dataframe__loading').exists()).toBe(true)
623
628
  })
624
629
 
625
630
  it('should show loading spinner', () => {
626
631
  const wrapper = mount(DataFrame, {
627
- props: { data: mockData, columns: mockColumns, loading: true },
632
+ props: { spec: { columns: mockColumns }, data: mockData, loading: true },
628
633
  })
629
634
  expect(wrapper.find('.mint-spinner').exists()).toBe(true)
630
635
  })
@@ -633,14 +638,14 @@ describe('DataFrame', () => {
633
638
  describe('error state', () => {
634
639
  it('should render nothing extra when error is not passed', () => {
635
640
  const wrapper = mount(DataFrame, {
636
- props: { data: mockData, columns: mockColumns },
641
+ props: { spec: { columns: mockColumns }, data: mockData },
637
642
  })
638
643
  expect(wrapper.find('[data-state="error"]').exists()).toBe(false)
639
644
  })
640
645
 
641
646
  it('should replace the empty state with an error state', () => {
642
647
  const wrapper = mount(DataFrame, {
643
- props: { data: [], columns: mockColumns, error: 'Request failed' },
648
+ props: { spec: { columns: mockColumns }, data: [], error: 'Request failed' },
644
649
  })
645
650
  expect(wrapper.find('[data-state="error"]').exists()).toBe(true)
646
651
  expect(wrapper.find('[data-state="empty"]').exists()).toBe(false)
@@ -649,14 +654,14 @@ describe('DataFrame', () => {
649
654
 
650
655
  it('should take precedence over the empty state even with rows present', () => {
651
656
  const wrapper = mount(DataFrame, {
652
- props: { data: mockData, columns: mockColumns, error: 'Boom' },
657
+ props: { spec: { columns: mockColumns }, data: mockData, error: 'Boom' },
653
658
  })
654
659
  expect(wrapper.find('[data-state="error"]').exists()).toBe(true)
655
660
  })
656
661
 
657
662
  it('should render the error slot with the message', () => {
658
663
  const wrapper = mount(DataFrame, {
659
- props: { data: [], columns: mockColumns, error: 'Boom' },
664
+ props: { spec: { columns: mockColumns }, data: [], error: 'Boom' },
660
665
  slots: { error: '<p class="custom-error">custom error</p>' },
661
666
  })
662
667
  expect(wrapper.find('.custom-error').exists()).toBe(true)
@@ -666,21 +671,21 @@ describe('DataFrame', () => {
666
671
  describe('styling props', () => {
667
672
  it('should not apply striped when striped is false', () => {
668
673
  const wrapper = mount(DataFrame, {
669
- props: { data: mockData, columns: mockColumns, striped: false },
674
+ props: { spec: { columns: mockColumns, striped: false }, data: mockData },
670
675
  })
671
676
  expect(wrapper.find('.mint-dataframe__row--striped').exists()).toBe(false)
672
677
  })
673
678
 
674
679
  it('should not apply bordered when bordered is false', () => {
675
680
  const wrapper = mount(DataFrame, {
676
- props: { data: mockData, columns: mockColumns, bordered: false },
681
+ props: { spec: { columns: mockColumns, bordered: false }, data: mockData },
677
682
  })
678
683
  expect(wrapper.find('.mint-dataframe--bordered').exists()).toBe(false)
679
684
  })
680
685
 
681
686
  it('should apply size class to cells', () => {
682
687
  const wrapper = mount(DataFrame, {
683
- props: { data: mockData, columns: mockColumns, size: 'sm' },
688
+ props: { spec: { columns: mockColumns, size: 'sm' }, data: mockData },
684
689
  })
685
690
  const cell = wrapper.find('.mint-dataframe__td')
686
691
  expect(cell.classes()).toContain('mint-dataframe__td--sm')
@@ -688,14 +693,14 @@ describe('DataFrame', () => {
688
693
 
689
694
  it('should apply sticky header class', () => {
690
695
  const wrapper = mount(DataFrame, {
691
- props: { data: mockData, columns: mockColumns, stickyHeader: true },
696
+ props: { spec: { columns: mockColumns, stickyHeader: true }, data: mockData },
692
697
  })
693
698
  expect(wrapper.find('.mint-dataframe__thead--sticky').exists()).toBe(true)
694
699
  })
695
700
 
696
701
  it('should apply maxHeight style', () => {
697
702
  const wrapper = mount(DataFrame, {
698
- props: { data: mockData, columns: mockColumns, maxHeight: 400 },
703
+ props: { spec: { columns: mockColumns, maxHeight: 400 }, data: mockData },
699
704
  })
700
705
  const tableWrapper = wrapper.find('.mint-dataframe__table-wrapper')
701
706
  expect(tableWrapper.attributes('style')).toContain('max-height: 400px')
@@ -703,7 +708,7 @@ describe('DataFrame', () => {
703
708
 
704
709
  it('should support string maxHeight', () => {
705
710
  const wrapper = mount(DataFrame, {
706
- props: { data: mockData, columns: mockColumns, maxHeight: '50vh' },
711
+ props: { spec: { columns: mockColumns, maxHeight: '50vh' }, data: mockData },
707
712
  })
708
713
  const tableWrapper = wrapper.find('.mint-dataframe__table-wrapper')
709
714
  expect(tableWrapper.attributes('style')).toContain('max-height: 50vh')
@@ -720,7 +725,7 @@ describe('DataFrame', () => {
720
725
  { key: 'user.email', label: 'Email' },
721
726
  ]
722
727
  const wrapper = mount(DataFrame, {
723
- props: { data: nestedData, columns: nestedColumns },
728
+ props: { spec: { columns: nestedColumns }, data: nestedData },
724
729
  })
725
730
  const cells = wrapper.findAll('.mint-dataframe__td')
726
731
  expect(cells[0].text()).toBe('Alice')
@@ -732,10 +737,8 @@ describe('DataFrame', () => {
732
737
  it('should use string rowKey', () => {
733
738
  const wrapper = mount(DataFrame, {
734
739
  props: {
740
+ spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
735
741
  data: mockData,
736
- columns: mockColumns,
737
- selectable: true,
738
- rowKey: 'id',
739
742
  },
740
743
  })
741
744
  expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
@@ -744,10 +747,8 @@ describe('DataFrame', () => {
744
747
  it('should use function rowKey', () => {
745
748
  const wrapper = mount(DataFrame, {
746
749
  props: {
750
+ spec: { columns: mockColumns, selectable: true, rowKey: (row) => `row-${row.id}` },
747
751
  data: mockData,
748
- columns: mockColumns,
749
- selectable: true,
750
- rowKey: (row) => `row-${row.id}`,
751
752
  },
752
753
  })
753
754
  expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
@@ -757,7 +758,7 @@ describe('DataFrame', () => {
757
758
  describe('slots', () => {
758
759
  it('should support header slot', () => {
759
760
  const wrapper = mount(DataFrame, {
760
- props: { data: mockData, columns: mockColumns },
761
+ props: { spec: { columns: mockColumns }, data: mockData },
761
762
  slots: {
762
763
  'header-name': '<div class="custom-header">Custom Name</div>',
763
764
  },
@@ -768,7 +769,7 @@ describe('DataFrame', () => {
768
769
 
769
770
  it('should support cell slot', () => {
770
771
  const wrapper = mount(DataFrame, {
771
- props: { data: mockData, columns: mockColumns },
772
+ props: { spec: { columns: mockColumns }, data: mockData },
772
773
  slots: {
773
774
  'cell-name': '<div class="custom-cell">{{ value }}</div>',
774
775
  },
@@ -778,7 +779,7 @@ describe('DataFrame', () => {
778
779
 
779
780
  it('should support empty slot', () => {
780
781
  const wrapper = mount(DataFrame, {
781
- props: { data: [], columns: mockColumns },
782
+ props: { spec: { columns: mockColumns }, data: [] },
782
783
  slots: {
783
784
  empty: '<div class="custom-empty">Nothing here</div>',
784
785
  },
@@ -789,7 +790,7 @@ describe('DataFrame', () => {
789
790
 
790
791
  it('should support loading slot', () => {
791
792
  const wrapper = mount(DataFrame, {
792
- props: { data: mockData, columns: mockColumns, loading: true },
793
+ props: { spec: { columns: mockColumns }, data: mockData, loading: true },
793
794
  slots: {
794
795
  loading: '<div class="custom-loading">Loading...</div>',
795
796
  },
@@ -800,9 +801,8 @@ describe('DataFrame', () => {
800
801
  it('should support footer slot', () => {
801
802
  const wrapper = mount(DataFrame, {
802
803
  props: {
804
+ spec: { columns: mockColumns, pagination: { pageSize: 2 } },
803
805
  data: mockData,
804
- columns: mockColumns,
805
- pagination: { page: 1, pageSize: 2, total: 3 },
806
806
  },
807
807
  slots: {
808
808
  footer: '<div class="custom-footer">Custom Footer</div>',
@@ -818,16 +818,23 @@ describe('DataFrame', () => {
818
818
  { id: 1, name: null, age: undefined, email: 'test@example.com' },
819
819
  ]
820
820
  const wrapper = mount(DataFrame, {
821
- props: { data: dataWithNulls, columns: mockColumns },
821
+ props: { spec: { columns: mockColumns }, data: dataWithNulls },
822
822
  })
823
823
  const cells = wrapper.findAll('.mint-dataframe__td')
824
824
  expect(cells[0].text()).toBe('')
825
825
  expect(cells[1].text()).toBe('')
826
826
  })
827
827
 
828
+ it('should derive one column per key of the first row when the spec has no columns', () => {
829
+ const wrapper = mount(DataFrame, {
830
+ props: { data: mockData },
831
+ })
832
+ expect(wrapper.findAll('.mint-dataframe__th').map(th => th.text())).toEqual(['id', 'name', 'age', 'email'])
833
+ })
834
+
828
835
  it('should handle empty columns array', () => {
829
836
  const wrapper = mount(DataFrame, {
830
- props: { data: mockData, columns: [] },
837
+ props: { spec: { columns: [] }, data: mockData },
831
838
  })
832
839
  expect(wrapper.find('.mint-dataframe__table').exists()).toBe(true)
833
840
  })
@@ -840,9 +847,8 @@ describe('DataFrame', () => {
840
847
  }))
841
848
  const wrapper = mount(DataFrame, {
842
849
  props: {
850
+ spec: { columns: mockColumns, pagination: { pageSize: 10 } },
843
851
  data: largeData,
844
- columns: mockColumns,
845
- pagination: { page: 1, pageSize: 10, total: 1000 },
846
852
  },
847
853
  })
848
854
  const rows = wrapper.findAll('.mint-dataframe__row')
@@ -852,10 +858,8 @@ describe('DataFrame', () => {
852
858
  it('should handle search with filtered pagination', async () => {
853
859
  const wrapper = mount(DataFrame, {
854
860
  props: {
861
+ spec: { columns: mockColumns, searchable: true, pagination: { pageSize: 2 } },
855
862
  data: mockData,
856
- columns: mockColumns,
857
- searchable: true,
858
- pagination: { page: 1, pageSize: 2, total: 3 },
859
863
  },
860
864
  })
861
865
  const searchInput = wrapper.find('.mint-dataframe__search')
@@ -868,10 +872,8 @@ describe('DataFrame', () => {
868
872
  it('should stop propagation on checkbox clicks', async () => {
869
873
  const wrapper = mount(DataFrame, {
870
874
  props: {
875
+ spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
871
876
  data: mockData,
872
- columns: mockColumns,
873
- selectable: true,
874
- rowKey: 'id',
875
877
  },
876
878
  })
877
879
  const checkbox = wrapper.find('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
@@ -885,14 +887,14 @@ describe('DataFrame', () => {
885
887
  describe('row deletion', () => {
886
888
  it('should not show an actions column by default', () => {
887
889
  const wrapper = mount(DataFrame, {
888
- props: { data: mockData, columns: mockColumns },
890
+ props: { spec: { columns: mockColumns }, data: mockData },
889
891
  })
890
892
  expect(wrapper.find('.mint-dataframe__td--actions').exists()).toBe(false)
891
893
  })
892
894
 
893
895
  it('should show a delete button per row when deletable', () => {
894
896
  const wrapper = mount(DataFrame, {
895
- props: { data: mockData, columns: mockColumns, deletable: true },
897
+ props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
896
898
  })
897
899
  expect(wrapper.find('.mint-dataframe__th--actions').exists()).toBe(true)
898
900
  expect(wrapper.findAll('.mint-dataframe__delete-btn')).toHaveLength(mockData.length)
@@ -900,7 +902,7 @@ describe('DataFrame', () => {
900
902
 
901
903
  it('should emit delete-row with the row and index', async () => {
902
904
  const wrapper = mount(DataFrame, {
903
- props: { data: mockData, columns: mockColumns, deletable: true },
905
+ props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
904
906
  })
905
907
  await wrapper.findAll('.mint-dataframe__delete-btn')[1].trigger('click')
906
908
 
@@ -912,7 +914,7 @@ describe('DataFrame', () => {
912
914
 
913
915
  it('should not emit row-click when the delete button is clicked', async () => {
914
916
  const wrapper = mount(DataFrame, {
915
- props: { data: mockData, columns: mockColumns, deletable: true },
917
+ props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
916
918
  })
917
919
  await wrapper.find('.mint-dataframe__delete-btn').trigger('click')
918
920
  expect(wrapper.emitted('row-click')).toBeUndefined()
@@ -920,7 +922,7 @@ describe('DataFrame', () => {
920
922
 
921
923
  it('should use a custom delete label', () => {
922
924
  const wrapper = mount(DataFrame, {
923
- props: { data: mockData, columns: mockColumns, deletable: true, deleteLabel: 'Remove' },
925
+ props: { spec: { columns: mockColumns, deletable: true, deleteLabel: 'Remove' }, data: mockData },
924
926
  })
925
927
  expect(wrapper.find('.mint-dataframe__delete-btn').attributes('aria-label')).toBe('Remove')
926
928
  })
@@ -929,21 +931,21 @@ describe('DataFrame', () => {
929
931
  describe('column resizing', () => {
930
932
  it('should not show resize handles by default', () => {
931
933
  const wrapper = mount(DataFrame, {
932
- props: { data: mockData, columns: mockColumns },
934
+ props: { spec: { columns: mockColumns }, data: mockData },
933
935
  })
934
936
  expect(wrapper.find('.mint-dataframe__resize-handle').exists()).toBe(false)
935
937
  })
936
938
 
937
939
  it('should show a resize handle per column when resizable', () => {
938
940
  const wrapper = mount(DataFrame, {
939
- props: { data: mockData, columns: mockColumns, resizable: true },
941
+ props: { spec: { columns: mockColumns, resizable: true }, data: mockData },
940
942
  })
941
943
  expect(wrapper.findAll('.mint-dataframe__resize-handle')).toHaveLength(mockColumns.length)
942
944
  })
943
945
 
944
946
  it('should emit update:columnWidths while dragging a handle', async () => {
945
947
  const wrapper = mount(DataFrame, {
946
- props: { data: mockData, columns: mockColumns, resizable: true },
948
+ props: { spec: { columns: mockColumns, resizable: true }, data: mockData },
947
949
  })
948
950
  const handle = wrapper.findAll('.mint-dataframe__resize-handle')[0]
949
951
  await handle.trigger('mousedown', { clientX: 100 })
@@ -959,9 +961,8 @@ describe('DataFrame', () => {
959
961
  it('should honor controlled columnWidths', () => {
960
962
  const wrapper = mount(DataFrame, {
961
963
  props: {
964
+ spec: { columns: mockColumns, resizable: true },
962
965
  data: mockData,
963
- columns: mockColumns,
964
- resizable: true,
965
966
  columnWidths: { name: 321 },
966
967
  },
967
968
  })
@@ -972,9 +973,8 @@ describe('DataFrame', () => {
972
973
  it('should not trigger sort when the resize handle is clicked', async () => {
973
974
  const wrapper = mount(DataFrame, {
974
975
  props: {
976
+ spec: { columns: [{ key: 'name', label: 'Name', sortable: true }], resizable: true },
975
977
  data: mockData,
976
- columns: [{ key: 'name', label: 'Name', sortable: true }],
977
- resizable: true,
978
978
  },
979
979
  })
980
980
  await wrapper.find('.mint-dataframe__resize-handle').trigger('click')
@@ -984,9 +984,8 @@ describe('DataFrame', () => {
984
984
  it('should expose the resize handle as a slider with its current width', () => {
985
985
  const wrapper = mount(DataFrame, {
986
986
  props: {
987
+ spec: { columns: [{ key: 'name', label: 'Name', minWidth: 80 }], resizable: true },
987
988
  data: mockData,
988
- columns: [{ key: 'name', label: 'Name', minWidth: 80 }],
989
- resizable: true,
990
989
  columnWidths: { name: 240 },
991
990
  },
992
991
  })
@@ -1002,9 +1001,8 @@ describe('DataFrame', () => {
1002
1001
  it('should resize a column with the arrow keys, clamped to the minimum width', async () => {
1003
1002
  const wrapper = mount(DataFrame, {
1004
1003
  props: {
1004
+ spec: { columns: [{ key: 'name', label: 'Name' }], resizable: true },
1005
1005
  data: mockData,
1006
- columns: [{ key: 'name', label: 'Name' }],
1007
- resizable: true,
1008
1006
  columnWidths: { name: 120 },
1009
1007
  },
1010
1008
  })
@@ -1028,8 +1026,8 @@ describe('DataFrame', () => {
1028
1026
  it('should render sortable headers as buttons and plain headers without one', () => {
1029
1027
  const wrapper = mount(DataFrame, {
1030
1028
  props: {
1029
+ spec: { columns: [...sortableColumn, { key: 'age', label: 'Age' }] },
1031
1030
  data: mockData,
1032
- columns: [...sortableColumn, { key: 'age', label: 'Age' }],
1033
1031
  },
1034
1032
  })
1035
1033
 
@@ -1041,8 +1039,8 @@ describe('DataFrame', () => {
1041
1039
  it('should reflect the sort direction with aria-sort', async () => {
1042
1040
  const wrapper = mount(DataFrame, {
1043
1041
  props: {
1042
+ spec: { columns: [...sortableColumn, { key: 'age', label: 'Age' }] },
1044
1043
  data: mockData,
1045
- columns: [...sortableColumn, { key: 'age', label: 'Age' }],
1046
1044
  },
1047
1045
  })
1048
1046
 
@@ -1062,7 +1060,7 @@ describe('DataFrame', () => {
1062
1060
 
1063
1061
  it('should sort from the keyboard with Enter and Space', async () => {
1064
1062
  const wrapper = mount(DataFrame, {
1065
- props: { data: mockData, columns: sortableColumn },
1063
+ props: { spec: { columns: sortableColumn }, data: mockData },
1066
1064
  })
1067
1065
 
1068
1066
  const button = wrapper.get('.mint-dataframe__th-button')
@@ -1082,7 +1080,7 @@ describe('DataFrame', () => {
1082
1080
  it('falls back to md when no settings store is installed', () => {
1083
1081
  setActivePinia(undefined)
1084
1082
  const wrapper = mount(DataFrame, {
1085
- props: { data: mockData, columns: mockColumns },
1083
+ props: { spec: { columns: mockColumns }, data: mockData },
1086
1084
  })
1087
1085
  expect(wrapper.find('.mint-dataframe__td--md').exists()).toBe(true)
1088
1086
  })
@@ -1092,7 +1090,7 @@ describe('DataFrame', () => {
1092
1090
  useSettingsStore().tableDensity = 'compact'
1093
1091
 
1094
1092
  const wrapper = mount(DataFrame, {
1095
- props: { data: mockData, columns: mockColumns },
1093
+ props: { spec: { columns: mockColumns }, data: mockData },
1096
1094
  })
1097
1095
  expect(wrapper.find('.mint-dataframe__td--sm').exists()).toBe(true)
1098
1096
  expect(wrapper.find('.mint-dataframe__td--md').exists()).toBe(false)
@@ -1103,7 +1101,7 @@ describe('DataFrame', () => {
1103
1101
  useSettingsStore().tableDensity = 'compact'
1104
1102
 
1105
1103
  const wrapper = mount(DataFrame, {
1106
- props: { data: mockData, columns: mockColumns, size: 'lg' },
1104
+ props: { spec: { columns: mockColumns, size: 'lg' }, data: mockData },
1107
1105
  })
1108
1106
  expect(wrapper.find('.mint-dataframe__td--lg').exists()).toBe(true)
1109
1107
  })
@@ -1116,7 +1114,7 @@ describe('DataFrame', () => {
1116
1114
  { key: 'conc', label: 'Conc', unit: 'µM', type: 'number' },
1117
1115
  { key: 'rt', label: 'RT', unit: 'min', type: 'number', precision: 2 },
1118
1116
  ]
1119
- const mountMeasures = () => mount(DataFrame, { props: { data: measureData, columns: measureColumns } })
1117
+ const mountMeasures = () => mount(DataFrame, { props: { spec: { columns: measureColumns }, data: measureData } })
1120
1118
 
1121
1119
  it('should render the unit in its own element when a column declares a unit', () => {
1122
1120
  const header = mountMeasures().findAll('.mint-dataframe__th')[1]
@@ -1150,7 +1148,7 @@ describe('DataFrame', () => {
1150
1148
 
1151
1149
  it('should keep an explicit align when the column type is number', () => {
1152
1150
  const wrapper = mount(DataFrame, {
1153
- props: { data: measureData, columns: [{ key: 'conc', label: 'Conc', type: 'number', align: 'center' }] },
1151
+ props: { spec: { columns: [{ key: 'conc', label: 'Conc', type: 'number', align: 'center' }] }, data: measureData },
1154
1152
  })
1155
1153
  expect(wrapper.find('.mint-dataframe__td').classes()).toContain('mint-dataframe__td--align-center')
1156
1154
  })
@@ -1173,8 +1171,8 @@ describe('DataFrame', () => {
1173
1171
  it('should let the formatter win when a column declares both formatter and precision', () => {
1174
1172
  const wrapper = mount(DataFrame, {
1175
1173
  props: {
1174
+ spec: { columns: [{ key: 'rt', label: 'RT', precision: 2, formatter: (v: unknown) => `~${String(v)}` }] },
1176
1175
  data: measureData,
1177
- columns: [{ key: 'rt', label: 'RT', precision: 2, formatter: (v: unknown) => `~${String(v)}` }],
1178
1176
  },
1179
1177
  })
1180
1178
  expect(wrapper.find('.mint-dataframe__td').text()).toBe('~2.4')
@@ -1182,7 +1180,7 @@ describe('DataFrame', () => {
1182
1180
 
1183
1181
  it('should leave non-numeric values untouched when a column declares precision', () => {
1184
1182
  const wrapper = mount(DataFrame, {
1185
- props: { data: [{ rt: 'n/a' }], columns: [{ key: 'rt', label: 'RT', type: 'number', precision: 2 }] },
1183
+ props: { spec: { columns: [{ key: 'rt', label: 'RT', type: 'number', precision: 2 }] }, data: [{ rt: 'n/a' }] },
1186
1184
  })
1187
1185
  expect(wrapper.find('.mint-dataframe__td').text()).toBe('n/a')
1188
1186
  })