@morscherlab/mint-sdk 1.2.0-beta.7 → 1.2.0-beta.9

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 (307) hide show
  1. package/README.md +30 -0
  2. package/dist/{ExperimentPopover-CfOdh5Rm.js → ExperimentPopover-oL0fg_A0.js} +5 -3
  3. package/dist/ExperimentPopover-oL0fg_A0.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DvIagrxY.js → ExperimentSelectorModal-BeEOomw_.js} +4 -4
  5. package/dist/ExperimentSelectorModal-BeEOomw_.js.map +1 -0
  6. package/dist/{SettingsModal-W3TYfnP9.js → SettingsModal-Dphh3RrI.js} +4 -4
  7. package/dist/SettingsModal-Dphh3RrI.js.map +1 -0
  8. package/dist/{EmptyState-NBqf2_8z.js → Skeleton-DxtwJ5gt.js} +110 -92
  9. package/dist/Skeleton-DxtwJ5gt.js.map +1 -0
  10. package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
  11. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  12. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  13. package/dist/components/ActionMenu.vue.d.ts +1 -1
  14. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  15. package/dist/components/AuditTrail.vue.d.ts +13 -0
  16. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  17. package/dist/components/DataFrame.vue.d.ts +14 -2
  18. package/dist/components/DatePicker.vue.d.ts +1 -1
  19. package/dist/components/DateTimePicker.vue.d.ts +2 -0
  20. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  21. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  22. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  23. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  24. package/dist/components/ProgressBar.vue.d.ts +1 -1
  25. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  26. package/dist/components/ReagentList.vue.d.ts +29 -1
  27. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  28. package/dist/components/SampleSelector.drag.d.ts +13 -0
  29. package/dist/components/SampleSelector.tree.d.ts +2 -0
  30. package/dist/components/SampleSelector.vue.d.ts +34 -1
  31. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  32. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -0
  33. package/dist/components/TimePicker.vue.d.ts +1 -0
  34. package/dist/components/WellPlate.geometry.d.ts +15 -0
  35. package/dist/components/WellPlate.interaction.d.ts +13 -0
  36. package/dist/components/WellPlate.vue.d.ts +29 -0
  37. package/dist/components/index.js +6 -6
  38. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  39. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  40. package/dist/{components-B80gV0P6.js → components-CgAUzF8F.js} +1930 -1688
  41. package/dist/components-CgAUzF8F.js.map +1 -0
  42. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  43. package/dist/composables/index.d.ts +1 -0
  44. package/dist/composables/index.js +9 -9
  45. package/dist/composables/useDropdownState.d.ts +18 -2
  46. package/dist/composables/useEventStream.d.ts +9 -0
  47. package/dist/composables/useListReorder.d.ts +90 -0
  48. package/dist/composables/useMenuKeyboard.d.ts +2 -2
  49. package/dist/composables/usePluginConfig.d.ts +3 -1
  50. package/dist/composables/useRequestSyncState.d.ts +42 -2
  51. package/dist/composables/useScheduleDrag.d.ts +1 -0
  52. package/dist/{composables-C8mmD5ta.js → composables-B_pia3hO.js} +13 -69
  53. package/dist/composables-B_pia3hO.js.map +1 -0
  54. package/dist/{useApi-CDBq6z23.js → errors-_W0-LbA6.js} +102 -3
  55. package/dist/errors-_W0-LbA6.js.map +1 -0
  56. package/dist/{experiment-Y9Iz7KYi.js → experiment-Cwl9AYxw.js} +3 -8
  57. package/dist/experiment-Cwl9AYxw.js.map +1 -0
  58. package/dist/experiment-utils-DV3DrvE_.js.map +1 -1
  59. package/dist/index.js +14 -14
  60. package/dist/install.js +2 -7
  61. package/dist/install.js.map +1 -1
  62. package/dist/permissions.d.ts +42 -1
  63. package/dist/permissions.js +20 -10
  64. package/dist/permissions.js.map +1 -1
  65. package/dist/stores/index.d.ts +1 -1
  66. package/dist/stores/index.js +3 -3
  67. package/dist/stores/settings.d.ts +31 -1
  68. package/dist/styles.css +9572 -27877
  69. package/dist/templates/index.js +2 -4
  70. package/dist/{templates-CK72aKO1.js → templates-Qq113pyZ.js} +291 -85
  71. package/dist/templates-Qq113pyZ.js.map +1 -0
  72. package/dist/{useControlSchema-_OVhavKq.js → useControlSchema-aMZlb4Sc.js} +197 -1089
  73. package/dist/useControlSchema-aMZlb4Sc.js.map +1 -0
  74. package/dist/{useDropdownState-D5G4UvWd.js → useDropdownState-DitCtrTT.js} +21 -5
  75. package/dist/useDropdownState-DitCtrTT.js.map +1 -0
  76. package/dist/{useExperimentSelector-DSEckf_g.js → useExperimentSelector-I8HC8hUu.js} +3 -3
  77. package/dist/{useExperimentSelector-DSEckf_g.js.map → useExperimentSelector-I8HC8hUu.js.map} +1 -1
  78. package/dist/{useFormBuilder-Bd714C7y.js → useFormBuilder-TCxNnqeb.js} +2 -2
  79. package/dist/{useFormBuilder-Bd714C7y.js.map → useFormBuilder-TCxNnqeb.js.map} +1 -1
  80. package/dist/{useProtocolTemplates-Dq5Pzwyd.js → useProtocolTemplates-BmX_iVBR.js} +185 -157
  81. package/dist/useProtocolTemplates-BmX_iVBR.js.map +1 -0
  82. package/dist/utils/color.d.ts +13 -0
  83. package/dist/utils/errors.d.ts +9 -0
  84. package/package.json +1 -1
  85. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  86. package/src/__tests__/components/DataFrame.test.ts +183 -11
  87. package/src/__tests__/components/DataStates.test.ts +176 -0
  88. package/src/__tests__/components/DatePicker.test.ts +76 -0
  89. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  90. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  91. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  92. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  93. package/src/__tests__/components/RackEditor.test.ts +35 -0
  94. package/src/__tests__/components/ReagentList.test.ts +64 -2
  95. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  96. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  97. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  98. package/src/__tests__/components/SegmentedControl.test.ts +88 -0
  99. package/src/__tests__/components/TimePicker.test.ts +61 -0
  100. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  101. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  102. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  103. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  104. package/src/__tests__/stores/settings.test.ts +71 -1
  105. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  106. package/src/__tests__/utils/permissions.test.ts +68 -0
  107. package/src/components/ActionMenu.vue +45 -88
  108. package/src/components/AlertBox.vue +0 -4
  109. package/src/components/AppAvatarMenu.vue +2 -14
  110. package/src/components/AppLayout.vue +0 -4
  111. package/src/components/AppPluginSwitcher.story.vue +87 -0
  112. package/src/components/AppPluginSwitcher.vue +2 -5
  113. package/src/components/AppSidebar.vue +0 -4
  114. package/src/components/AppToastContainer.vue +6 -8
  115. package/src/components/AppTopBar.vue +0 -4
  116. package/src/components/ArtifactSaveDialog.vue +0 -4
  117. package/src/components/ArtifactSelectorModal.vue +0 -4
  118. package/src/components/AuditTrail.story.vue +18 -0
  119. package/src/components/AuditTrail.vue +27 -7
  120. package/src/components/AutoGroupModal.vue +0 -4
  121. package/src/components/Avatar.vue +0 -4
  122. package/src/components/BaseButton.vue +0 -4
  123. package/src/components/BaseCheckbox.vue +0 -4
  124. package/src/components/BaseInput.vue +0 -4
  125. package/src/components/BaseModal.vue +0 -4
  126. package/src/components/BasePill.vue +0 -4
  127. package/src/components/BaseRadioGroup.vue +0 -4
  128. package/src/components/BaseSelect.vue +0 -4
  129. package/src/components/BaseSlider.vue +0 -4
  130. package/src/components/BaseTabs.vue +0 -4
  131. package/src/components/BaseTextarea.vue +0 -4
  132. package/src/components/BaseToggle.vue +0 -4
  133. package/src/components/BatchProgressList.story.vue +18 -0
  134. package/src/components/BatchProgressList.vue +32 -4
  135. package/src/components/Breadcrumb.vue +0 -4
  136. package/src/components/Calendar.vue +0 -4
  137. package/src/components/ChartContainer.story.vue +1 -1
  138. package/src/components/ChartContainer.vue +0 -4
  139. package/src/components/ChemicalFormula.vue +0 -4
  140. package/src/components/CollapsibleCard.vue +0 -4
  141. package/src/components/ColorSlider.vue +0 -4
  142. package/src/components/ConcentrationInput.vue +0 -4
  143. package/src/components/ConfirmDialog.vue +0 -4
  144. package/src/components/DataFrame.story.vue +14 -0
  145. package/src/components/DataFrame.vue +97 -23
  146. package/src/components/DatePicker.vue +73 -27
  147. package/src/components/DateTimePicker.vue +45 -17
  148. package/src/components/Divider.vue +0 -4
  149. package/src/components/DoseCalculator.vue +0 -4
  150. package/src/components/DropdownButton.vue +2 -14
  151. package/src/components/EmptyState.vue +0 -4
  152. package/src/components/ExperimentCodeBadge.vue +0 -4
  153. package/src/components/ExperimentDataViewer.story.vue +3 -0
  154. package/src/components/ExperimentDataViewer.vue +33 -13
  155. package/src/components/ExperimentPopover.vue +2 -5
  156. package/src/components/ExperimentSelectorModal.vue +0 -4
  157. package/src/components/ExperimentTimeline.story.vue +18 -0
  158. package/src/components/ExperimentTimeline.vue +81 -75
  159. package/src/components/FileUploader.vue +0 -4
  160. package/src/components/FitPanel.vue +0 -4
  161. package/src/components/FormActions.story.vue +96 -0
  162. package/src/components/FormActions.vue +0 -4
  163. package/src/components/FormBuilder.vue +0 -4
  164. package/src/components/FormField.vue +0 -4
  165. package/src/components/FormulaInput.vue +0 -4
  166. package/src/components/GeneratedPathInput.story.vue +68 -0
  167. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  168. package/src/components/GeneratedPlotlyResult.vue +3 -3
  169. package/src/components/GeneratedPluginView.story.vue +145 -0
  170. package/src/components/GeneratedPluginView.vue +10 -10
  171. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  172. package/src/components/GeneratedResultRenderer.vue +4 -4
  173. package/src/components/GroupAssigner.vue +67 -5
  174. package/src/components/IconButton.vue +0 -4
  175. package/src/components/InstrumentAlertLog.vue +0 -4
  176. package/src/components/InstrumentStateBadge.vue +0 -4
  177. package/src/components/InstrumentStatusCard.vue +0 -4
  178. package/src/components/JobsStatusTray.vue +0 -4
  179. package/src/components/LcmsSequenceTable.vue +81 -50
  180. package/src/components/LoadingSpinner.vue +0 -4
  181. package/src/components/MobileSupportGate.vue +0 -4
  182. package/src/components/MoleculeInput.vue +0 -4
  183. package/src/components/MultiSelect.vue +0 -4
  184. package/src/components/NumberInput.vue +0 -4
  185. package/src/components/PlateMapEditor.vue +3 -14
  186. package/src/components/PluginIcon.vue +0 -4
  187. package/src/components/ProgressBar.vue +0 -4
  188. package/src/components/ProtocolStepEditor.vue +2 -4
  189. package/src/components/RackEditor.vue +51 -70
  190. package/src/components/ReagentEditor.vue +0 -4
  191. package/src/components/ReagentList.story.vue +18 -0
  192. package/src/components/ReagentList.vue +127 -82
  193. package/src/components/ResourceCard.vue +0 -4
  194. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  195. package/src/components/RuntimeUpdateNotice.vue +4 -4
  196. package/src/components/SampleHierarchyTree.story.vue +18 -0
  197. package/src/components/SampleHierarchyTree.vue +32 -9
  198. package/src/components/SampleLegend.vue +2 -8
  199. package/src/components/SampleSelector.drag.ts +51 -0
  200. package/src/components/SampleSelector.story.vue +6 -0
  201. package/src/components/SampleSelector.tree.ts +2 -0
  202. package/src/components/SampleSelector.vue +49 -10
  203. package/src/components/SampleSelectorGroupNode.vue +19 -0
  204. package/src/components/ScheduleCalendar.story.vue +6 -0
  205. package/src/components/ScheduleCalendar.vue +82 -7
  206. package/src/components/ScientificNumber.vue +0 -4
  207. package/src/components/SectionCard.vue +0 -4
  208. package/src/components/SegmentedControl.vue +48 -5
  209. package/src/components/SequenceInput.vue +0 -4
  210. package/src/components/SequenceProgressBar.story.vue +110 -0
  211. package/src/components/SequenceProgressBar.vue +0 -4
  212. package/src/components/SettingsModal.vue +0 -4
  213. package/src/components/Skeleton.vue +0 -4
  214. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  215. package/src/components/SmartGroupManual.vue +0 -4
  216. package/src/components/StatusIndicator.vue +0 -4
  217. package/src/components/StepWizard.vue +0 -4
  218. package/src/components/TagsInput.vue +4 -6
  219. package/src/components/ThemeToggle.vue +0 -4
  220. package/src/components/TimePicker.vue +36 -7
  221. package/src/components/TimeRangeInput.vue +0 -4
  222. package/src/components/Tooltip.story.vue +3 -3
  223. package/src/components/Tooltip.vue +0 -4
  224. package/src/components/UnitInput.vue +0 -4
  225. package/src/components/WellPlate.geometry.ts +60 -1
  226. package/src/components/WellPlate.interaction.ts +44 -0
  227. package/src/components/WellPlate.story.vue +8 -0
  228. package/src/components/WellPlate.vue +53 -7
  229. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  230. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  231. package/src/components/internal/DataStateInternal.vue +74 -0
  232. package/src/components/internal/FormSectionRenderer.vue +0 -4
  233. package/src/components/internal/WellEditPopupInternal.vue +0 -4
  234. package/src/composables/controlSchemaTypes.ts +34 -0
  235. package/src/composables/index.ts +10 -0
  236. package/src/composables/useDropdownState.ts +35 -5
  237. package/src/composables/useEventStream.ts +14 -2
  238. package/src/composables/useFileImport.ts +2 -7
  239. package/src/composables/useGeneratedAnalysis.ts +8 -9
  240. package/src/composables/useListReorder.story.vue +143 -0
  241. package/src/composables/useListReorder.ts +242 -0
  242. package/src/composables/useMenuKeyboard.ts +2 -2
  243. package/src/composables/useOptimisticMutation.ts +1 -15
  244. package/src/composables/usePluginConfig.ts +3 -1
  245. package/src/composables/useRackEditor.ts +2 -11
  246. package/src/composables/useRequestSyncState.ts +98 -28
  247. package/src/composables/useResourceCrud.ts +1 -15
  248. package/src/composables/useScheduleDrag.ts +37 -0
  249. package/src/composables/useWellPainting.ts +5 -29
  250. package/src/composables/useWellPlateEditor.ts +1 -11
  251. package/src/permissions.ts +48 -9
  252. package/src/stores/experiment.ts +2 -7
  253. package/src/stores/index.ts +9 -1
  254. package/src/stores/settings.ts +93 -1
  255. package/src/styles/components/audit-trail.css +5 -5
  256. package/src/styles/components/batch-progress-list.css +7 -0
  257. package/src/styles/components/color-slider.css +2 -2
  258. package/src/styles/components/data-state.css +30 -0
  259. package/src/styles/components/dataframe.css +29 -35
  260. package/src/styles/components/experiment-data-viewer.css +4 -4
  261. package/src/styles/components/experiment-timeline.css +3 -30
  262. package/src/styles/components/form-builder.css +5 -5
  263. package/src/styles/components/lcms-sequence-table.css +16 -1
  264. package/src/styles/components/multi-select.css +1 -1
  265. package/src/styles/components/reagent-list.css +38 -31
  266. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  267. package/src/styles/components/sample-selector.css +9 -2
  268. package/src/styles/components/schedule-calendar.css +8 -0
  269. package/src/styles/components/scientific-number.css +1 -1
  270. package/src/styles/components/well-plate.css +8 -0
  271. package/src/styles/index.css +8 -0
  272. package/src/styles/variables.css +29 -0
  273. package/src/templates/builderPresetControls.ts +1 -1
  274. package/src/templates/componentPlateHelpers.ts +3 -1
  275. package/src/templates/doseResponseAdapters.ts +2 -13
  276. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  277. package/src/templates/plateMapBuilder.ts +2 -2
  278. package/src/templates/qpcrPlateBuilder.ts +1 -1
  279. package/src/templates/templateValidators.ts +1 -1
  280. package/src/templates/timeCourseBuilder.ts +2 -2
  281. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  282. package/src/utils/color.ts +51 -0
  283. package/src/utils/errors.ts +29 -0
  284. package/dist/EmptyState-NBqf2_8z.js.map +0 -1
  285. package/dist/ExperimentPopover-CfOdh5Rm.js.map +0 -1
  286. package/dist/ExperimentSelectorModal-DvIagrxY.js.map +0 -1
  287. package/dist/SettingsModal-W3TYfnP9.js.map +0 -1
  288. package/dist/components-B80gV0P6.js.map +0 -1
  289. package/dist/composables/autoGroupConstants.d.ts +0 -1
  290. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  291. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  292. package/dist/composables-C8mmD5ta.js.map +0 -1
  293. package/dist/experiment-Y9Iz7KYi.js.map +0 -1
  294. package/dist/templates/builderDefaults.d.ts +0 -1
  295. package/dist/templates/plateGeometry.d.ts +0 -4
  296. package/dist/templates-CK72aKO1.js.map +0 -1
  297. package/dist/useApi-CDBq6z23.js.map +0 -1
  298. package/dist/useControlSchema-_OVhavKq.js.map +0 -1
  299. package/dist/useDropdownState-D5G4UvWd.js.map +0 -1
  300. package/dist/useProtocolTemplates-Dq5Pzwyd.js.map +0 -1
  301. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  302. package/src/composables/autoGroupConstants.ts +0 -4
  303. package/src/composables/autoGroupGrouping.ts +0 -148
  304. package/src/composables/useAutoGroupInputSources.ts +0 -147
  305. package/src/templates/builderDefaults.ts +0 -11
  306. package/src/templates/plateGeometry.ts +0 -62
  307. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → components/DataStates.test.d.ts} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { d as resolveExperimentCode } from "./experiment-utils-DV3DrvE_.js";
2
- import { r as useRequestSyncState } from "./EmptyState-NBqf2_8z.js";
3
- import { A as useConcentrationUnits, H as parseExperimentId, J as isActiveJobStatus, Q as normalizeJobState, T as getDefaultControlView, U as resolveCurrentExperimentId, V as getInjectedPlatformContext, f as resolveControlModel, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, m as controlValuesToComponentBindingsById, p as controlValuesToComponentBindings, r as getControlDefaults, rt as isRecord, u as useControlWorkspace, w as controlsToViewItems } from "./useControlSchema-_OVhavKq.js";
4
- import { o as useSettingsStore, r as useApi } from "./useApi-CDBq6z23.js";
5
- import { t as useExperimentStore } from "./experiment-Y9Iz7KYi.js";
6
- import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps$1, H as toBioTemplateComponentPropsById, Jt as getBioTemplatePresetInfo, L as toBioTemplateComponentBindings, P as getBioTemplateComponentBindings, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, U as toBioTemplateComponentSnippets, V as toBioTemplateComponentPropsByComponent$1, W as toBioTemplateComponentUsage, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, i as createBioTemplateControlToolkit, p as createBioTemplatePackCollection, sn as createTemplateCollection, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, z as toBioTemplateComponentImports } from "./templates-CK72aKO1.js";
2
+ import { n as useRequestSyncState } from "./Skeleton-DxtwJ5gt.js";
3
+ import { A as useConcentrationUnits, H as parseExperimentId, J as isActiveJobStatus, Q as normalizeJobState, T as getDefaultControlView, U as resolveCurrentExperimentId, V as getInjectedPlatformContext, f as resolveControlModel, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, m as controlValuesToComponentBindingsById, p as controlValuesToComponentBindings, r as getControlDefaults, rt as isRecord, u as useControlWorkspace, w as controlsToViewItems } from "./useControlSchema-aMZlb4Sc.js";
4
+ import { d as useSettingsStore, i as useApi, t as readErrorMessage } from "./errors-_W0-LbA6.js";
5
+ import { t as useExperimentStore } from "./experiment-Cwl9AYxw.js";
6
+ import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps$1, H as toBioTemplateComponentPropsById, Jt as getBioTemplatePresetInfo, L as toBioTemplateComponentBindings, P as getBioTemplateComponentBindings, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, U as toBioTemplateComponentSnippets, V as toBioTemplateComponentPropsByComponent$1, W as toBioTemplateComponentUsage, bn as rowLabel, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, i as createBioTemplateControlToolkit, p as createBioTemplatePackCollection, pn as PLATE_CONFIGS, sn as createTemplateCollection, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, wn as deriveShade, xn as SAMPLE_COLOR_SCALE, z as toBioTemplateComponentImports } from "./templates-Qq113pyZ.js";
7
7
  import { computed, effectScope, getCurrentScope, inject, nextTick, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowRef, toRaw, toValue, unref, watch } from "vue";
8
8
  //#region src/composables/useRovingFocus.ts
9
9
  /**
@@ -52,8 +52,8 @@ function useRovingFocus(options) {
52
52
  //#region src/composables/useMenuKeyboard.ts
53
53
  /**
54
54
  * Shared keyboard contract for menu- and listbox-style disclosure panels (the
55
- * WAI-ARIA menu button pattern). Used by AppAvatarMenu and DropdownButton; ActionMenu
56
- * implements the same contract inline.
55
+ * WAI-ARIA menu button pattern). Used by ActionMenu, AppAvatarMenu and DropdownButton,
56
+ * each pairing it with `useDropdownState` for the disclosure state itself.
57
57
  */
58
58
  function useMenuKeyboard(options) {
59
59
  function focusItem(position) {
@@ -1482,18 +1482,153 @@ function useDoseCalculator() {
1482
1482
  };
1483
1483
  }
1484
1484
  //#endregion
1485
+ //#region src/composables/useListReorder.ts
1486
+ /** Inline style for a visually hidden `aria-live` region (no global utility class in the SDK). */
1487
+ var REORDER_ANNOUNCER_STYLE = Object.freeze({
1488
+ position: "absolute",
1489
+ width: "1px",
1490
+ height: "1px",
1491
+ padding: "0",
1492
+ margin: "-1px",
1493
+ overflow: "hidden",
1494
+ clip: "rect(0, 0, 0, 0)",
1495
+ whiteSpace: "nowrap",
1496
+ border: "0"
1497
+ });
1498
+ /**
1499
+ * Screen-reader announcements for drag/keyboard move interactions. Bind
1500
+ * `announcement` to a `role="status" aria-live="polite"` element styled with
1501
+ * `announcerStyle`.
1502
+ */
1503
+ function useReorderAnnouncer() {
1504
+ const announcement = ref("");
1505
+ function announce(message) {
1506
+ if (announcement.value === message) announcement.value = "";
1507
+ nextTick(() => {
1508
+ announcement.value = message;
1509
+ });
1510
+ }
1511
+ return {
1512
+ announcement,
1513
+ announce,
1514
+ announcerStyle: REORDER_ANNOUNCER_STYLE
1515
+ };
1516
+ }
1517
+ /** Pure helper: a copy of `items` with the entry at `from` moved to `to`. */
1518
+ function reorderList(items, from, to) {
1519
+ const next = [...items];
1520
+ const [moved] = next.splice(from, 1);
1521
+ next.splice(to, 0, moved);
1522
+ return next;
1523
+ }
1524
+ /**
1525
+ * Keyboard-accessible list reordering shared by the SDK's drag-to-reorder lists.
1526
+ * It owns the HTML5 drag state, the drop-index maths, and an Alt+Arrow keyboard
1527
+ * alternative that announces every move through a polite live region — so a
1528
+ * reorder never depends on a pointer.
1529
+ */
1530
+ function useListReorder(options) {
1531
+ const draggingId = ref(null);
1532
+ const dragOverId = ref(null);
1533
+ const { announcement, announce, announcerStyle } = useReorderAnnouncer();
1534
+ const noun = options.itemNoun ?? "Item";
1535
+ function isDisabled() {
1536
+ return options.disabled?.() === true;
1537
+ }
1538
+ function idFor(item, index) {
1539
+ return options.getId(item, index);
1540
+ }
1541
+ /** Index within `items()`, resolved by id so filtered/sorted renders still map back. */
1542
+ function indexOf(item, renderIndex) {
1543
+ const id = idFor(item, renderIndex);
1544
+ const found = options.items().findIndex((candidate, index) => idFor(candidate, index) === id);
1545
+ return found === -1 ? renderIndex : found;
1546
+ }
1547
+ function labelFor(index) {
1548
+ const item = options.items()[index];
1549
+ if (item === void 0) return noun;
1550
+ return options.getLabel?.(item, index) ?? idFor(item, index);
1551
+ }
1552
+ function clearDragState() {
1553
+ draggingId.value = null;
1554
+ dragOverId.value = null;
1555
+ }
1556
+ function move(fromIndex, toIndex, source = "keyboard") {
1557
+ if (isDisabled()) return;
1558
+ const items = options.items();
1559
+ if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= items.length || toIndex >= items.length) return;
1560
+ const movedId = idFor(items[fromIndex], fromIndex);
1561
+ const label = labelFor(fromIndex);
1562
+ options.onReorder({
1563
+ fromIndex,
1564
+ toIndex,
1565
+ items: reorderList(items, fromIndex, toIndex),
1566
+ source
1567
+ });
1568
+ announce(`${label} moved to position ${toIndex + 1} of ${items.length}.`);
1569
+ nextTick(() => options.getElement?.(movedId)?.focus());
1570
+ }
1571
+ function onDragStart(event, item, index) {
1572
+ if (isDisabled()) return;
1573
+ const id = idFor(item, index);
1574
+ draggingId.value = id;
1575
+ if (event.dataTransfer) {
1576
+ event.dataTransfer.effectAllowed = "move";
1577
+ event.dataTransfer.setData("text/plain", id);
1578
+ }
1579
+ }
1580
+ function onDragOver(event, item, index) {
1581
+ if (isDisabled() || draggingId.value === null) return;
1582
+ event.preventDefault();
1583
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
1584
+ const id = idFor(item, index);
1585
+ dragOverId.value = id === draggingId.value ? null : id;
1586
+ }
1587
+ function onDragLeave() {
1588
+ dragOverId.value = null;
1589
+ }
1590
+ function onDrop(event, item, index) {
1591
+ if (isDisabled() || draggingId.value === null) {
1592
+ clearDragState();
1593
+ return;
1594
+ }
1595
+ event.preventDefault();
1596
+ const fromIndex = options.items().findIndex((candidate, i) => idFor(candidate, i) === draggingId.value);
1597
+ const toIndex = indexOf(item, index);
1598
+ clearDragState();
1599
+ if (fromIndex === -1) return;
1600
+ move(fromIndex, toIndex, "drag");
1601
+ }
1602
+ function onDragEnd() {
1603
+ clearDragState();
1604
+ }
1605
+ function onKeydown(event, item, index) {
1606
+ if (isDisabled() || !event.altKey) return;
1607
+ const direction = event.key === "ArrowUp" || event.key === "ArrowLeft" ? -1 : event.key === "ArrowDown" || event.key === "ArrowRight" ? 1 : 0;
1608
+ if (direction === 0) return;
1609
+ event.preventDefault();
1610
+ const fromIndex = indexOf(item, index);
1611
+ move(fromIndex, fromIndex + direction, "keyboard");
1612
+ }
1613
+ return {
1614
+ draggingId,
1615
+ dragOverId,
1616
+ isDragging: (id) => draggingId.value === id,
1617
+ isDragOver: (id) => dragOverId.value === id,
1618
+ announcement,
1619
+ announcerStyle,
1620
+ announce,
1621
+ onDragStart,
1622
+ onDragOver,
1623
+ onDragLeave,
1624
+ onDrop,
1625
+ onDragEnd,
1626
+ onKeydown,
1627
+ move
1628
+ };
1629
+ }
1630
+ //#endregion
1485
1631
  //#region src/composables/useWellPlateEditor.ts
1486
- var DEFAULT_PALETTE = [
1487
- "#3B82F6",
1488
- "#10B981",
1489
- "#EF4444",
1490
- "#F59E0B",
1491
- "#8B5CF6",
1492
- "#F97316",
1493
- "#06B6D4",
1494
- "#14B8A6",
1495
- "#6B7280"
1496
- ];
1497
1632
  var MAX_HISTORY = 50;
1498
1633
  function createEmptyPlate(name, format, id) {
1499
1634
  return {
@@ -1577,7 +1712,7 @@ function useWellPlateEditor(initialState, options = {}) {
1577
1712
  const sample = {
1578
1713
  id: generateSampleId(),
1579
1714
  name,
1580
- color: color || DEFAULT_PALETTE[internalState.value.samples.length % DEFAULT_PALETTE.length],
1715
+ color: color || SAMPLE_COLOR_SCALE[internalState.value.samples.length % SAMPLE_COLOR_SCALE.length],
1581
1716
  count: 0
1582
1717
  };
1583
1718
  internalState.value.samples.push(sample);
@@ -1685,7 +1820,7 @@ function useWellPlateEditor(initialState, options = {}) {
1685
1820
  if (sampleId && !sampleMap.has(sampleId)) sampleMap.set(sampleId, {
1686
1821
  id: sampleId,
1687
1822
  name: sampleName || sampleId,
1688
- color: DEFAULT_PALETTE[sampleMap.size % DEFAULT_PALETTE.length],
1823
+ color: SAMPLE_COLOR_SCALE[sampleMap.size % SAMPLE_COLOR_SCALE.length],
1689
1824
  count: 0
1690
1825
  });
1691
1826
  const plate = plateMap.get(plateName);
@@ -3391,7 +3526,7 @@ function useFileImport(options = {}) {
3391
3526
  result.value = parsed;
3392
3527
  return parsed;
3393
3528
  } catch (err) {
3394
- error.value = readErrorMessage(err);
3529
+ error.value = readErrorMessage(err, "Failed to import file.");
3395
3530
  throw err;
3396
3531
  } finally {
3397
3532
  loading.value = false;
@@ -3501,108 +3636,6 @@ function formatBytes(bytes) {
3501
3636
  if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;
3502
3637
  return `${Math.round(bytes / (1024 * 1024))} MB`;
3503
3638
  }
3504
- function readErrorMessage(value) {
3505
- if (value instanceof Error && value.message) return value.message;
3506
- if (typeof value === "string" && value.trim()) return value;
3507
- return "Failed to import file.";
3508
- }
3509
- //#endregion
3510
- //#region src/utils/color.ts
3511
- var HEX_RE = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
3512
- function clamp(n, min, max) {
3513
- return Math.min(max, Math.max(min, n));
3514
- }
3515
- function hexToHsl(hex) {
3516
- const match = HEX_RE.exec(hex.trim());
3517
- if (!match) return {
3518
- h: 0,
3519
- s: 0,
3520
- l: 50
3521
- };
3522
- let raw = match[1];
3523
- if (raw.length === 3) raw = raw.split("").map((c) => c + c).join("");
3524
- const r = parseInt(raw.slice(0, 2), 16) / 255;
3525
- const g = parseInt(raw.slice(2, 4), 16) / 255;
3526
- const b = parseInt(raw.slice(4, 6), 16) / 255;
3527
- const max = Math.max(r, g, b);
3528
- const min = Math.min(r, g, b);
3529
- const delta = max - min;
3530
- let h = 0;
3531
- if (delta !== 0) if (max === r) h = (g - b) / delta % 6;
3532
- else if (max === g) h = (b - r) / delta + 2;
3533
- else h = (r - g) / delta + 4;
3534
- h = (h * 60 + 360) % 360;
3535
- const l = (max + min) / 2;
3536
- const s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
3537
- return {
3538
- h,
3539
- s: s * 100,
3540
- l: l * 100
3541
- };
3542
- }
3543
- function hslToHex(h, s, l) {
3544
- const sNorm = clamp(s, 0, 100) / 100;
3545
- const lNorm = clamp(l, 0, 100) / 100;
3546
- const hNorm = (h % 360 + 360) % 360;
3547
- const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm;
3548
- const x = c * (1 - Math.abs(hNorm / 60 % 2 - 1));
3549
- const m = lNorm - c / 2;
3550
- let r = 0, g = 0, b = 0;
3551
- if (hNorm < 60) [r, g, b] = [
3552
- c,
3553
- x,
3554
- 0
3555
- ];
3556
- else if (hNorm < 120) [r, g, b] = [
3557
- x,
3558
- c,
3559
- 0
3560
- ];
3561
- else if (hNorm < 180) [r, g, b] = [
3562
- 0,
3563
- c,
3564
- x
3565
- ];
3566
- else if (hNorm < 240) [r, g, b] = [
3567
- 0,
3568
- x,
3569
- c
3570
- ];
3571
- else if (hNorm < 300) [r, g, b] = [
3572
- x,
3573
- 0,
3574
- c
3575
- ];
3576
- else [r, g, b] = [
3577
- c,
3578
- 0,
3579
- x
3580
- ];
3581
- const toHex = (n) => Math.round((n + m) * 255).toString(16).padStart(2, "0");
3582
- return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
3583
- }
3584
- /**
3585
- * Derive a same-hue-family shade of `parentHex` for child at `index` of `total`.
3586
- *
3587
- * Lightness is distributed evenly within [35, 75] so all children remain
3588
- * readable on light/dark backgrounds. Hue and saturation are inherited from
3589
- * the parent. With `total <= 1`, returns the parent unchanged.
3590
- *
3591
- * Children are ordered light → dark by index, so index 0 is the brightest
3592
- * sibling and index `total - 1` is the darkest.
3593
- */
3594
- function deriveShade(parentHex, index, total) {
3595
- if (total <= 1) return parentHex;
3596
- const { h, s, l } = hexToHsl(parentHex);
3597
- const L_MIN = 35;
3598
- const L_MAX = 75;
3599
- const spread = Math.min(L_MAX - L_MIN, 40);
3600
- const center = clamp(l, L_MIN + spread / 2, L_MAX - spread / 2);
3601
- const top = center + spread / 2;
3602
- const bot = center - spread / 2;
3603
- const childL = top - (total === 1 ? .5 : index / (total - 1)) * (top - bot);
3604
- return hslToHex(h, clamp(s, 35, 100), childL);
3605
- }
3606
3639
  //#endregion
3607
3640
  //#region src/utils/sampleGroupPath.ts
3608
3641
  /** Split a group name into normalized hierarchy segments. */
@@ -4062,6 +4095,30 @@ function useScheduleDrag(options) {
4062
4095
  else if ((state.type === "resize-top" || state.type === "resize-bottom") && state.event && options.onResizeComplete) options.onResizeComplete(state.event, g.start, g.end);
4063
4096
  cleanup();
4064
4097
  }
4098
+ /**
4099
+ * Keyboard alternative to the pointer drag: shifts an event by one slot
4100
+ * (`mode: 'move'`) or grows/shrinks its end by one slot (`mode: 'resize'`),
4101
+ * staying inside the visible day. Returns whether the nudge was applied.
4102
+ */
4103
+ function nudgeEvent(event, direction, mode = "move") {
4104
+ if (options.readonly.value) return false;
4105
+ if (mode === "move" && event.draggable === false) return false;
4106
+ if (mode === "resize" && event.resizable === false) return false;
4107
+ const slotMin = options.slotDuration.value;
4108
+ const dayStart = options.dayStartHour.value * 60;
4109
+ const dayEnd = options.dayEndHour.value * 60;
4110
+ const start = dateToMinutes(new Date(event.start));
4111
+ const end = dateToMinutes(new Date(event.end));
4112
+ const nextStart = mode === "move" ? start + direction * slotMin : start;
4113
+ const nextEnd = mode === "move" ? end + direction * slotMin : Math.max(start + slotMin, end + direction * slotMin);
4114
+ if (nextStart < dayStart || nextEnd > dayEnd || nextEnd <= nextStart) return false;
4115
+ const base = new Date(event.start);
4116
+ const newStart = minutesToDate(base, nextStart);
4117
+ const newEnd = minutesToDate(base, nextEnd);
4118
+ if (mode === "move") options.onMoveComplete?.(event, newStart, newEnd);
4119
+ else options.onResizeComplete?.(event, newStart, newEnd);
4120
+ return true;
4121
+ }
4065
4122
  function addListeners() {
4066
4123
  document.addEventListener("pointermove", onPointerMove);
4067
4124
  document.addEventListener("pointerup", onPointerUp);
@@ -4079,7 +4136,8 @@ function useScheduleDrag(options) {
4079
4136
  ghost,
4080
4137
  startCreate,
4081
4138
  startMove,
4082
- startResize
4139
+ startResize,
4140
+ nudgeEvent
4083
4141
  };
4084
4142
  }
4085
4143
  function snapMinutes(minutes, step) {
@@ -4802,36 +4860,6 @@ var SLOT_CYCLE = [
4802
4860
  "B",
4803
4861
  "Y"
4804
4862
  ];
4805
- var PLATE_CONFIGS = {
4806
- 6: {
4807
- rows: 2,
4808
- cols: 3
4809
- },
4810
- 12: {
4811
- rows: 3,
4812
- cols: 4
4813
- },
4814
- 24: {
4815
- rows: 4,
4816
- cols: 6
4817
- },
4818
- 48: {
4819
- rows: 6,
4820
- cols: 8
4821
- },
4822
- 54: {
4823
- rows: 6,
4824
- cols: 9
4825
- },
4826
- 96: {
4827
- rows: 8,
4828
- cols: 12
4829
- },
4830
- 384: {
4831
- rows: 16,
4832
- cols: 24
4833
- }
4834
- };
4835
4863
  var globalIdCounter = 0;
4836
4864
  function generateId() {
4837
4865
  globalIdCounter++;
@@ -4915,7 +4943,7 @@ function useRackEditor(initialRacks, options) {
4915
4943
  if (!config) return;
4916
4944
  let counter = 1;
4917
4945
  for (let row = 0; row < config.rows; row++) for (let col = 0; col < config.cols; col++) {
4918
- const wellId = `${String.fromCharCode(65 + row)}${col + 1}`;
4946
+ const wellId = `${rowLabel(row)}${col + 1}`;
4919
4947
  if (!rack.wells[wellId]?.sampleType) {
4920
4948
  const paddedNum = String(counter).padStart(3, "0");
4921
4949
  rack.wells[wellId] = {
@@ -5579,6 +5607,6 @@ function useProtocolTemplates() {
5579
5607
  };
5580
5608
  }
5581
5609
  //#endregion
5582
- export { useTheme as $, useFileImport as A, useDoseCalculator as B, getSampleGroupParentPath as C, detectDelimiter as D, hslToHex as E, extractSampleNamesFromDesignData as F, DEFAULT_MOBILE_VIEWPORT_QUERY as G, useJobsStatusTray as H, extractSampleOptionsFromDesignData as I, useAppExperiment as J, useMobileSupportGate as K, unwrapExperimentDesignData as L, extractSamplesFromDesignData as M, useAutoGroup as N, parseDelimitedText as O, parseCSV as P, usePresenceHeartbeat as Q, DEFAULT_COLORS as R, getSampleGroupMajorPrefix as S, hexToHsl as T, usePluginJobCenter as U, combinePluginJobSources as V, usePluginWorkspace as W, useRuntimeAlignment as X, getInjectedFrontendRevision as Y, getPresenceClientId as Z, useScheduleDrag as _, useReagentSeries as a, useSortedItems as at, useExpansionSet as b, useBioTemplatePresetWorkspace as c, getBioTemplateComponentProps as d, useToast as et, toBioTemplateComponentPropsByComponent as f, useExperimentSave as g, useTemplateCollection as h, generateDilutionSeries as i, compareSortValues as it, validateImportFile as j, readFileAsText as k, useBioTemplatePackWorkspace as l, useBioTemplateControls as m, DEFAULT_PRESETS as n, normalizeSearchQuery as nt, useGroupAssignment as o, useMenuKeyboard as ot, useBioTemplateComponents as p, APP_EXPERIMENT_KEY as q, DEFAULT_UNITS as r, useTextSearch as rt, useRackEditor as s, useRovingFocus as st, useProtocolTemplates as t, candidateMatchesSearch as tt, useBioTemplateWorkspace as u, useExperimentSamples as v, deriveShade as w, useSampleGroups as x, useExperimentData as y, useWellPlateEditor as z };
5610
+ export { usePresenceHeartbeat as $, useAutoGroup as A, useReorderAnnouncer as B, getSampleGroupParentPath as C, useFileImport as D, readFileAsText as E, DEFAULT_COLORS as F, usePluginWorkspace as G, combinePluginJobSources as H, useWellPlateEditor as I, APP_EXPERIMENT_KEY as J, DEFAULT_MOBILE_VIEWPORT_QUERY as K, REORDER_ANNOUNCER_STYLE as L, extractSampleNamesFromDesignData as M, extractSampleOptionsFromDesignData as N, validateImportFile as O, unwrapExperimentDesignData as P, getPresenceClientId as Q, reorderList as R, getSampleGroupMajorPrefix as S, parseDelimitedText as T, useJobsStatusTray as U, useDoseCalculator as V, usePluginJobCenter as W, getInjectedFrontendRevision as X, useAppExperiment as Y, useRuntimeAlignment as Z, useScheduleDrag as _, useReagentSeries as a, compareSortValues as at, useExpansionSet as b, useBioTemplatePresetWorkspace as c, useRovingFocus as ct, getBioTemplateComponentProps as d, useTheme as et, toBioTemplateComponentPropsByComponent as f, useExperimentSave as g, useTemplateCollection as h, generateDilutionSeries as i, useTextSearch as it, parseCSV as j, extractSamplesFromDesignData as k, useBioTemplatePackWorkspace as l, useBioTemplateControls as m, DEFAULT_PRESETS as n, candidateMatchesSearch as nt, useGroupAssignment as o, useSortedItems as ot, useBioTemplateComponents as p, useMobileSupportGate as q, DEFAULT_UNITS as r, normalizeSearchQuery as rt, useRackEditor as s, useMenuKeyboard as st, useProtocolTemplates as t, useToast as tt, useBioTemplateWorkspace as u, useExperimentSamples as v, detectDelimiter as w, useSampleGroups as x, useExperimentData as y, useListReorder as z };
5583
5611
 
5584
- //# sourceMappingURL=useProtocolTemplates-Dq5Pzwyd.js.map
5612
+ //# sourceMappingURL=useProtocolTemplates-BmX_iVBR.js.map