@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
@@ -22,10 +22,27 @@ export interface ControlSectionConfig {
22
22
  actions?: SidebarToolSectionAction[];
23
23
  columns?: 1 | 2 | 3;
24
24
  condition?: FieldCondition;
25
+ /** The access policy. Preferred over the flat fields below. */
25
26
  access?: AccessPolicy;
27
+ /**
28
+ * @deprecated Since MINT 1.2; use `access.visibleFor` instead. The flat
29
+ * duplicate is removed in 1.3.
30
+ */
26
31
  visibleFor?: AccessAudienceInput;
32
+ /**
33
+ * @deprecated Since MINT 1.2; use `access.requiresAdmin` instead. The flat
34
+ * duplicate is removed in 1.3.
35
+ */
27
36
  requiresAdmin?: boolean;
37
+ /**
38
+ * @deprecated Since MINT 1.2; use `access.permissions` instead. The flat
39
+ * duplicate is removed in 1.3.
40
+ */
28
41
  permissions?: readonly string[];
42
+ /**
43
+ * @deprecated Since MINT 1.2; use `access.anyPermissions` instead. The flat
44
+ * duplicate is removed in 1.3.
45
+ */
29
46
  anyPermissions?: readonly string[];
30
47
  defaultOpen?: boolean;
31
48
  showToggle?: boolean;
@@ -78,10 +95,27 @@ export interface ControlDefinition {
78
95
  };
79
96
  validation?: FieldValidation;
80
97
  condition?: FieldCondition;
98
+ /** The access policy. Preferred over the flat fields below. */
81
99
  access?: AccessPolicy;
100
+ /**
101
+ * @deprecated Since MINT 1.2; use `access.visibleFor` instead. The flat
102
+ * duplicate is removed in 1.3.
103
+ */
82
104
  visibleFor?: AccessAudienceInput;
105
+ /**
106
+ * @deprecated Since MINT 1.2; use `access.requiresAdmin` instead. The flat
107
+ * duplicate is removed in 1.3.
108
+ */
83
109
  requiresAdmin?: boolean;
110
+ /**
111
+ * @deprecated Since MINT 1.2; use `access.permissions` instead. The flat
112
+ * duplicate is removed in 1.3.
113
+ */
84
114
  permissions?: readonly string[];
115
+ /**
116
+ * @deprecated Since MINT 1.2; use `access.anyPermissions` instead. The flat
117
+ * duplicate is removed in 1.3.
118
+ */
85
119
  anyPermissions?: readonly string[];
86
120
  options?: readonly ControlOption[];
87
121
  section?: string;
@@ -65,4 +65,5 @@ export { usePluginWorkspace, type PluginWorkspaceSlotsLike, type UsePluginWorksp
65
65
  export { type PluginWorkspaceControlsModel, type PluginWorkspaceShellModel, type PluginWorkspaceSidebarModel, } from './pluginWorkspaceModel';
66
66
  export { useFocusTrap, type UseFocusTrapOptions, type UseFocusTrapReturn, } from './useFocusTrap';
67
67
  export { useRovingFocus, type UseRovingFocusOptions, type UseRovingFocusReturn, } from './useRovingFocus';
68
+ export { reorderList, useListReorder, useReorderAnnouncer, REORDER_ANNOUNCER_STYLE, type ListReorderMove, type UseListReorderOptions, type UseListReorderReturn, type UseReorderAnnouncerReturn, } from './useListReorder';
68
69
  export { useMenuKeyboard, type UseMenuKeyboardOptions, type UseMenuKeyboardReturn, } from './useMenuKeyboard';
@@ -1,11 +1,11 @@
1
1
  import { a as SORT_OPTIONS, c as formatExperimentDate, d as resolveExperimentCode, i as EXPERIMENT_STATUS_VARIANT_MAP, l as formatExperimentStatus, m as useEventListener, n as EXPERIMENT_STATUS_LABELS, o as datePresetToISO, p as useFocusTrap, r as EXPERIMENT_STATUS_OPTIONS, s as experimentIdFromRoute, t as DATE_PRESET_OPTIONS, u as getExperimentStatusVariant } from "../experiment-utils-DV3DrvE_.js";
2
- import { r as useRequestSyncState } from "../EmptyState-NBqf2_8z.js";
3
- import { A as useConcentrationUnits, At as formatTimeSlot, C as controlsToViewIds, Ct as addMinutes, D as getTypeDefault, Dt as findNearestTimeSlotIndex, E as getFieldRegistryEntry, Et as findAvailableSlots, F as ATOMIC_WEIGHTS, Ft as rangesOverlap, G as createGeneratedAnalysisTransport, Ht as useSelectionLimit, I as useChemicalFormula, It as snapToSlot, K as useGeneratedAnalysis, Lt as toMinutes, Mt as generateTimeSlots, N as useSequenceUtils, Nt as isTimeInRange, Ot as formatDuration, Pt as parseTime, Rt as useTimeUtils, S as controlsToTopBarSettingsConfig, T as getDefaultControlView, Tt as durationMinutes, Vt as useListSelection, W as resolveCurrentPluginId, _ as controlsToFormSchema, a as defineDoseCalculatorControlProps, b as controlsToSettingsSchema, c as defineWellPlateDoseComponentBindings, d as defineControlModel, h as controlValuesToComponentProps, i as useControlSchema, jt as fromMinutes, kt as formatTime, l as defineWellPlateDoseControlProps, m as controlValuesToComponentBindingsById, n as defineControls, o as defineDoseDesignControlModel, p as controlValuesToComponentBindings, q as usePluginJobs, r as getControlDefaults, s as defineWellPlateControlProps, t as defineControlComponentBindings, u as useControlWorkspace, v as controlsToSectionFormSchema, w as controlsToViewItems, wt as compareTime, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as useAnalysisArtifacts } from "../useControlSchema-_OVhavKq.js";
4
- import { $ as useTheme, A as useFileImport, B as useDoseCalculator, D as detectDelimiter, F as extractSampleNamesFromDesignData, G as DEFAULT_MOBILE_VIEWPORT_QUERY, H as useJobsStatusTray, I as extractSampleOptionsFromDesignData, J as useAppExperiment, K as useMobileSupportGate, L as unwrapExperimentDesignData, M as extractSamplesFromDesignData, N as useAutoGroup, O as parseDelimitedText, Q as usePresenceHeartbeat, R as DEFAULT_COLORS, U as usePluginJobCenter, V as combinePluginJobSources, W as usePluginWorkspace, X as useRuntimeAlignment, Y as getInjectedFrontendRevision, Z as getPresenceClientId, _ as useScheduleDrag, a as useReagentSeries, at as useSortedItems, b as useExpansionSet, c as useBioTemplatePresetWorkspace, d as getBioTemplateComponentProps, et as useToast, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, it as compareSortValues, j as validateImportFile, k as readFileAsText, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, nt as normalizeSearchQuery, o as useGroupAssignment, ot as useMenuKeyboard, p as useBioTemplateComponents, q as APP_EXPERIMENT_KEY, r as DEFAULT_UNITS, rt as useTextSearch, s as useRackEditor, st as useRovingFocus, t as useProtocolTemplates, tt as candidateMatchesSearch, u as useBioTemplateWorkspace, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData, z as useWellPlateEditor } from "../useProtocolTemplates-Dq5Pzwyd.js";
5
- import { r as useApi, t as AuthenticationRequiredError } from "../useApi-CDBq6z23.js";
6
- import { i as usePlatformContext, n as evaluateCondition, r as useForm, t as useFormBuilder } from "../useFormBuilder-Bd714C7y.js";
2
+ import { n as useRequestSyncState } from "../Skeleton-DxtwJ5gt.js";
3
+ import { A as useConcentrationUnits, At as formatTimeSlot, C as controlsToViewIds, Ct as addMinutes, D as getTypeDefault, Dt as findNearestTimeSlotIndex, E as getFieldRegistryEntry, Et as findAvailableSlots, F as ATOMIC_WEIGHTS, Ft as rangesOverlap, G as createGeneratedAnalysisTransport, Ht as useSelectionLimit, I as useChemicalFormula, It as snapToSlot, K as useGeneratedAnalysis, Lt as toMinutes, Mt as generateTimeSlots, N as useSequenceUtils, Nt as isTimeInRange, Ot as formatDuration, Pt as parseTime, Rt as useTimeUtils, S as controlsToTopBarSettingsConfig, T as getDefaultControlView, Tt as durationMinutes, Vt as useListSelection, W as resolveCurrentPluginId, _ as controlsToFormSchema, a as defineDoseCalculatorControlProps, b as controlsToSettingsSchema, c as defineWellPlateDoseComponentBindings, d as defineControlModel, h as controlValuesToComponentProps, i as useControlSchema, jt as fromMinutes, kt as formatTime, l as defineWellPlateDoseControlProps, m as controlValuesToComponentBindingsById, n as defineControls, o as defineDoseDesignControlModel, p as controlValuesToComponentBindings, q as usePluginJobs, r as getControlDefaults, s as defineWellPlateControlProps, t as defineControlComponentBindings, u as useControlWorkspace, v as controlsToSectionFormSchema, w as controlsToViewItems, wt as compareTime, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as useAnalysisArtifacts } from "../useControlSchema-aMZlb4Sc.js";
4
+ import { $ as usePresenceHeartbeat, A as useAutoGroup, B as useReorderAnnouncer, D as useFileImport, E as readFileAsText, F as DEFAULT_COLORS, G as usePluginWorkspace, H as combinePluginJobSources, I as useWellPlateEditor, J as APP_EXPERIMENT_KEY, K as DEFAULT_MOBILE_VIEWPORT_QUERY, L as REORDER_ANNOUNCER_STYLE, M as extractSampleNamesFromDesignData, N as extractSampleOptionsFromDesignData, O as validateImportFile, P as unwrapExperimentDesignData, Q as getPresenceClientId, R as reorderList, T as parseDelimitedText, U as useJobsStatusTray, V as useDoseCalculator, W as usePluginJobCenter, X as getInjectedFrontendRevision, Y as useAppExperiment, Z as useRuntimeAlignment, _ as useScheduleDrag, a as useReagentSeries, at as compareSortValues, b as useExpansionSet, c as useBioTemplatePresetWorkspace, ct as useRovingFocus, d as getBioTemplateComponentProps, et as useTheme, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, it as useTextSearch, k as extractSamplesFromDesignData, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, nt as candidateMatchesSearch, o as useGroupAssignment, ot as useSortedItems, p as useBioTemplateComponents, q as useMobileSupportGate, r as DEFAULT_UNITS, rt as normalizeSearchQuery, s as useRackEditor, st as useMenuKeyboard, t as useProtocolTemplates, tt as useToast, u as useBioTemplateWorkspace, v as useExperimentSamples, w as detectDelimiter, x as useSampleGroups, y as useExperimentData, z as useListReorder } from "../useProtocolTemplates-BmX_iVBR.js";
5
+ import { i as useApi, n as AuthenticationRequiredError } from "../errors-_W0-LbA6.js";
6
+ import { i as usePlatformContext, n as evaluateCondition, r as useForm, t as useFormBuilder } from "../useFormBuilder-TCxNnqeb.js";
7
7
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "../analysisArtifactTypes-DQ0MjwHZ.js";
8
- import { B as toBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, P as getBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, l as requireBioTemplateControlSchema, o as getBioTemplateControlSchema } from "../templates-CK72aKO1.js";
9
- import { n as useDebouncedWatch, t as useExperimentSelector } from "../useExperimentSelector-DSEckf_g.js";
10
- import { A as useAsync, C as createPluginResourceClient, D as buildAnalysisArtifactTargetQuery, E as useCommandHistory, M as resolvePluginFrontendBase, N as usePasskey, O as parseAnalysisArtifactTarget, P as useAuth, S as wellIdsInRectangle, T as useOptimisticMutation, _ as createWellPlateWells, a as pluginFormDataFromPayload, b as useWellPainting, c as usePluginClient, d as buildPluginEndpointUrl, f as resolvePluginBaseUrl, g as createRowConditions, h as createColumnConditions, i as getPluginPageSelectorItems, j as useAsyncBatch, k as usePluginConfig, l as usePluginEventStream, m as useWellPlateValidation, n as downloadBlob, o as uploadPluginEndpoint, p as runWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as usePluginSettings, v as useWellPlateAdapter, w as useResourceCrud, x as wellIdToCoordinate, y as coordinateToWellId } from "../composables-C8mmD5ta.js";
11
- export { ANALYSIS_FILE_ARTIFACT_SCHEMA, APP_EXPERIMENT_KEY, ATOMIC_WEIGHTS, AuthenticationRequiredError, DATE_PRESET_OPTIONS, DEFAULT_COLORS, DEFAULT_MOBILE_VIEWPORT_QUERY, DEFAULT_PRESETS, DEFAULT_UNITS, EXPERIMENT_STATUS_LABELS, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, SORT_OPTIONS, addMinutes, buildAnalysisArtifactTargetQuery, buildPluginEndpointUrl, candidateMatchesSearch, combinePluginJobSources, compareSortValues, compareTime, controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, coordinateToWellId, createColumnConditions, createGeneratedAnalysisTransport, createPluginClient, createPluginResourceClient, createRowConditions, createWellPlateWells, datePresetToISO, defineControlComponentBindings, defineControlModel, defineControls, defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, detectDelimiter, downloadBlob, downloadPluginEndpoint, durationMinutes, evaluateCondition, experimentIdFromRoute, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, extractSamplesFromDesignData, findAvailableSlots, findNearestTimeSlotIndex, formatDuration, formatExperimentDate, formatExperimentStatus, formatTime, formatTimeSlot, fromMinutes, generateDilutionSeries, generateTimeSlots, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlSchema, getControlDefaults, getDefaultControlView, getExperimentStatusVariant, getFieldRegistryEntry, getInjectedFrontendRevision, getPluginPageSelectorItems, getPresenceClientId, getTypeDefault, isTimeInRange, normalizeSearchQuery, parseAnalysisArtifactTarget, parseDelimitedText, parseTime, pluginFormDataFromPayload, rangesOverlap, readFileAsText, requireBioTemplateControlSchema, resolveCurrentPluginId, resolveExperimentCode, resolvePluginBaseUrl, resolvePluginFrontendBase, runWellPlateValidation, snapToSlot, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toMinutes, unwrapExperimentDesignData, uploadPluginEndpoint, useAnalysisArtifacts, useApi, useAppExperiment, useAsync, useAsyncBatch, useAuth, useAutoGroup, useBioTemplateComponents, useBioTemplateControls, useBioTemplatePackWorkspace, useBioTemplatePresetWorkspace, useBioTemplateWorkspace, useChemicalFormula, useCommandHistory, useConcentrationUnits, useControlSchema, useControlWorkspace, useCurrentExperiment, useDebouncedWatch, useDoseCalculator, useEventListener, useExpansionSet, useExperimentData, useExperimentSamples, useExperimentSave, useExperimentSelector, useFileImport, useFocusTrap, useForm, useFormBuilder, useGeneratedAnalysis, useGroupAssignment, useJobsStatusTray, useListSelection, useMenuKeyboard, useMobileSupportGate, useOptimisticMutation, usePasskey, usePlatformContext, usePluginClient, usePluginConfig, usePluginEventStream, usePluginJobCenter, usePluginJobs, usePluginSettings, usePluginWorkspace, usePresenceHeartbeat, useProtocolTemplates, useRackEditor, useReagentSeries, useRequestSyncState, useResourceCrud, useRovingFocus, useRuntimeAlignment, useSampleGroups, useScheduleDrag, useSelectionLimit, useSequenceUtils, useSortedItems, useTemplateCollection, useTextSearch, useTheme, useTimeUtils, useToast, useWellPainting, useWellPlateAdapter, useWellPlateEditor, useWellPlateValidation, validateImportFile, wellIdToCoordinate, wellIdsInRectangle };
8
+ import { B as toBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, P as getBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, l as requireBioTemplateControlSchema, o as getBioTemplateControlSchema } from "../templates-Qq113pyZ.js";
9
+ import { n as useDebouncedWatch, t as useExperimentSelector } from "../useExperimentSelector-I8HC8hUu.js";
10
+ import { A as useAsync, C as createPluginResourceClient, D as buildAnalysisArtifactTargetQuery, E as useCommandHistory, M as resolvePluginFrontendBase, N as usePasskey, O as parseAnalysisArtifactTarget, P as useAuth, S as wellIdsInRectangle, T as useOptimisticMutation, _ as createWellPlateWells, a as pluginFormDataFromPayload, b as useWellPainting, c as usePluginClient, d as buildPluginEndpointUrl, f as resolvePluginBaseUrl, g as createRowConditions, h as createColumnConditions, i as getPluginPageSelectorItems, j as useAsyncBatch, k as usePluginConfig, l as usePluginEventStream, m as useWellPlateValidation, n as downloadBlob, o as uploadPluginEndpoint, p as runWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as usePluginSettings, v as useWellPlateAdapter, w as useResourceCrud, x as wellIdToCoordinate, y as coordinateToWellId } from "../composables-B_pia3hO.js";
11
+ export { ANALYSIS_FILE_ARTIFACT_SCHEMA, APP_EXPERIMENT_KEY, ATOMIC_WEIGHTS, AuthenticationRequiredError, DATE_PRESET_OPTIONS, DEFAULT_COLORS, DEFAULT_MOBILE_VIEWPORT_QUERY, DEFAULT_PRESETS, DEFAULT_UNITS, EXPERIMENT_STATUS_LABELS, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, REORDER_ANNOUNCER_STYLE, SORT_OPTIONS, addMinutes, buildAnalysisArtifactTargetQuery, buildPluginEndpointUrl, candidateMatchesSearch, combinePluginJobSources, compareSortValues, compareTime, controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, coordinateToWellId, createColumnConditions, createGeneratedAnalysisTransport, createPluginClient, createPluginResourceClient, createRowConditions, createWellPlateWells, datePresetToISO, defineControlComponentBindings, defineControlModel, defineControls, defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, detectDelimiter, downloadBlob, downloadPluginEndpoint, durationMinutes, evaluateCondition, experimentIdFromRoute, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, extractSamplesFromDesignData, findAvailableSlots, findNearestTimeSlotIndex, formatDuration, formatExperimentDate, formatExperimentStatus, formatTime, formatTimeSlot, fromMinutes, generateDilutionSeries, generateTimeSlots, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlSchema, getControlDefaults, getDefaultControlView, getExperimentStatusVariant, getFieldRegistryEntry, getInjectedFrontendRevision, getPluginPageSelectorItems, getPresenceClientId, getTypeDefault, isTimeInRange, normalizeSearchQuery, parseAnalysisArtifactTarget, parseDelimitedText, parseTime, pluginFormDataFromPayload, rangesOverlap, readFileAsText, reorderList, requireBioTemplateControlSchema, resolveCurrentPluginId, resolveExperimentCode, resolvePluginBaseUrl, resolvePluginFrontendBase, runWellPlateValidation, snapToSlot, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toMinutes, unwrapExperimentDesignData, uploadPluginEndpoint, useAnalysisArtifacts, useApi, useAppExperiment, useAsync, useAsyncBatch, useAuth, useAutoGroup, useBioTemplateComponents, useBioTemplateControls, useBioTemplatePackWorkspace, useBioTemplatePresetWorkspace, useBioTemplateWorkspace, useChemicalFormula, useCommandHistory, useConcentrationUnits, useControlSchema, useControlWorkspace, useCurrentExperiment, useDebouncedWatch, useDoseCalculator, useEventListener, useExpansionSet, useExperimentData, useExperimentSamples, useExperimentSave, useExperimentSelector, useFileImport, useFocusTrap, useForm, useFormBuilder, useGeneratedAnalysis, useGroupAssignment, useJobsStatusTray, useListReorder, useListSelection, useMenuKeyboard, useMobileSupportGate, useOptimisticMutation, usePasskey, usePlatformContext, usePluginClient, usePluginConfig, usePluginEventStream, usePluginJobCenter, usePluginJobs, usePluginSettings, usePluginWorkspace, usePresenceHeartbeat, useProtocolTemplates, useRackEditor, useReagentSeries, useReorderAnnouncer, useRequestSyncState, useResourceCrud, useRovingFocus, useRuntimeAlignment, useSampleGroups, useScheduleDrag, useSelectionLimit, useSequenceUtils, useSortedItems, useTemplateCollection, useTextSearch, useTheme, useTimeUtils, useToast, useWellPainting, useWellPlateAdapter, useWellPlateEditor, useWellPlateValidation, validateImportFile, wellIdToCoordinate, wellIdsInRectangle };
@@ -2,18 +2,34 @@ import { Ref } from 'vue';
2
2
  export interface UseDropdownStateOptions {
3
3
  closeOnOutsideClick?: boolean;
4
4
  closeOnEscape?: boolean;
5
+ /** Close the panel when the page scrolls or the viewport resizes. Default `false`. */
6
+ closeOnScroll?: boolean;
5
7
  insideRefs?: Array<Ref<HTMLElement | null>>;
8
+ /**
9
+ * Element focus returns to when the panel closes with `close(true)` (Escape).
10
+ * Pass one when the trigger lives outside `rootRef`; otherwise bind the
11
+ * returned `triggerRef` to the trigger element.
12
+ */
13
+ triggerRef?: Ref<HTMLElement | null>;
6
14
  onOpen?: () => void;
7
15
  onClose?: () => void;
8
16
  }
9
17
  export interface UseDropdownStateReturn {
10
18
  isOpen: Ref<boolean>;
11
19
  rootRef: Ref<HTMLElement | null>;
20
+ /** Bind to the trigger element so Escape can return focus to it. */
21
+ triggerRef: Ref<HTMLElement | null>;
12
22
  open: () => void;
13
- close: () => void;
23
+ /** Closes the panel; `returnFocus` moves focus back to `triggerRef`. */
24
+ close: (returnFocus?: boolean) => void;
14
25
  toggle: () => void;
15
26
  handleClickOutside: (event: MouseEvent) => void;
16
27
  handleKeydown: (event: KeyboardEvent) => void;
17
28
  }
18
- /** Shared disclosure state for dropdown-style SDK components. */
29
+ /**
30
+ * Shared disclosure state for dropdown-style SDK components: open/close state,
31
+ * outside-click and Escape closing, optional scroll/resize closing, and focus
32
+ * return to the trigger. `close(returnFocus)` mirrors `useMenuKeyboard`'s
33
+ * contract, so the two compose directly.
34
+ */
19
35
  export declare function useDropdownState(options?: UseDropdownStateOptions): UseDropdownStateReturn;
@@ -12,7 +12,16 @@ export interface EventStreamOptions<TData = string> {
12
12
  headers?: HeadersInit;
13
13
  credentials?: RequestCredentials;
14
14
  immediate?: boolean;
15
+ /**
16
+ * Reconnect after a dropped stream. Left unset, it follows the platform's
17
+ * `wsAutoReconnect` setting, defaulting to `true` without a settings store.
18
+ */
15
19
  reconnect?: boolean;
20
+ /**
21
+ * Delay before the first reconnect attempt. Left unset, it follows the
22
+ * platform's `wsReconnectInterval` setting, defaulting to 2000 ms without a
23
+ * settings store. A server-sent `retry:` field still overrides it.
24
+ */
16
25
  reconnectDelayMs?: number;
17
26
  parseJson?: boolean;
18
27
  shouldReconnect?: (cause?: unknown) => boolean;
@@ -0,0 +1,90 @@
1
+ import { Ref } from 'vue';
2
+ /** Inline style for a visually hidden `aria-live` region (no global utility class in the SDK). */
3
+ export declare const REORDER_ANNOUNCER_STYLE: Readonly<{
4
+ position: "absolute";
5
+ width: "1px";
6
+ height: "1px";
7
+ padding: "0";
8
+ margin: "-1px";
9
+ overflow: "hidden";
10
+ clip: "rect(0, 0, 0, 0)";
11
+ whiteSpace: "nowrap";
12
+ border: "0";
13
+ }>;
14
+ export interface UseReorderAnnouncerReturn {
15
+ /** Bind to a polite live region's text content. */
16
+ announcement: Ref<string>;
17
+ /** Publishes a message to the live region. */
18
+ announce: (message: string) => void;
19
+ /** Bind to the live region's `style` so it stays visually hidden. */
20
+ announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
21
+ }
22
+ /**
23
+ * Screen-reader announcements for drag/keyboard move interactions. Bind
24
+ * `announcement` to a `role="status" aria-live="polite"` element styled with
25
+ * `announcerStyle`.
26
+ */
27
+ export declare function useReorderAnnouncer(): UseReorderAnnouncerReturn;
28
+ export interface ListReorderMove<T> {
29
+ /** Index the item moved from, within `items()`. */
30
+ fromIndex: number;
31
+ /** Index the item moved to, within `items()`. */
32
+ toIndex: number;
33
+ /** The reordered array (a copy — `items()` is never mutated). */
34
+ items: T[];
35
+ /** Whether the move came from the keyboard or a pointer drag. */
36
+ source: 'keyboard' | 'drag';
37
+ }
38
+ export interface UseListReorderOptions<T> {
39
+ /** The list being reordered, in its canonical (not merely rendered) order. */
40
+ items: () => T[];
41
+ /** Stable id for an item; falls back to the render index when ids repeat. */
42
+ getId: (item: T, index: number) => string;
43
+ /** Applies the move. The composable never mutates the source array. */
44
+ onReorder: (move: ListReorderMove<T>) => void;
45
+ /** Human-readable name used in announcements. Defaults to the item's id. */
46
+ getLabel?: (item: T, index: number) => string;
47
+ /** Blocks every reorder while it returns `true` (readonly / non-sortable lists). */
48
+ disabled?: () => boolean;
49
+ /** Resolves the focusable element for an id so keyboard moves keep focus on the item. */
50
+ getElement?: (id: string) => HTMLElement | null | undefined;
51
+ /** Noun used in announcements, e.g. `'Reagent'`. Default `'Item'`. */
52
+ itemNoun?: string;
53
+ }
54
+ export interface UseListReorderReturn<T> {
55
+ /** Id of the item currently being dragged, or `null`. */
56
+ draggingId: Ref<string | null>;
57
+ /** Id of the item the pointer is hovering as a drop target, or `null`. */
58
+ dragOverId: Ref<string | null>;
59
+ isDragging: (id: string) => boolean;
60
+ isDragOver: (id: string) => boolean;
61
+ announcement: Ref<string>;
62
+ announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
63
+ announce: (message: string) => void;
64
+ /** Bind to the draggable element's `@dragstart`. */
65
+ onDragStart: (event: DragEvent, item: T, index: number) => void;
66
+ /** Bind to `@dragover` — calls `preventDefault()` so the drop is accepted. */
67
+ onDragOver: (event: DragEvent, item: T, index: number) => void;
68
+ /** Bind to `@dragleave`. */
69
+ onDragLeave: () => void;
70
+ /** Bind to `@drop`. */
71
+ onDrop: (event: DragEvent, item: T, index: number) => void;
72
+ /** Bind to `@dragend`. */
73
+ onDragEnd: () => void;
74
+ /**
75
+ * Bind to the item's (or its drag handle's) `@keydown`: Alt+ArrowUp / Alt+ArrowLeft
76
+ * moves the item one position earlier, Alt+ArrowDown / Alt+ArrowRight one later.
77
+ */
78
+ onKeydown: (event: KeyboardEvent, item: T, index: number) => void;
79
+ /** Moves an item between two indices of `items()` programmatically. */
80
+ move: (fromIndex: number, toIndex: number, source?: 'keyboard' | 'drag') => void;
81
+ }
82
+ /** Pure helper: a copy of `items` with the entry at `from` moved to `to`. */
83
+ export declare function reorderList<T>(items: T[], from: number, to: number): T[];
84
+ /**
85
+ * Keyboard-accessible list reordering shared by the SDK's drag-to-reorder lists.
86
+ * It owns the HTML5 drag state, the drop-index maths, and an Alt+Arrow keyboard
87
+ * alternative that announces every move through a polite live region — so a
88
+ * reorder never depends on a pointer.
89
+ */
90
+ export declare function useListReorder<T>(options: UseListReorderOptions<T>): UseListReorderReturn<T>;
@@ -23,7 +23,7 @@ export interface UseMenuKeyboardReturn {
23
23
  }
24
24
  /**
25
25
  * Shared keyboard contract for menu- and listbox-style disclosure panels (the
26
- * WAI-ARIA menu button pattern). Used by AppAvatarMenu and DropdownButton; ActionMenu
27
- * implements the same contract inline.
26
+ * WAI-ARIA menu button pattern). Used by ActionMenu, AppAvatarMenu and DropdownButton,
27
+ * each pairing it with `useDropdownState` for the disclosure state itself.
28
28
  */
29
29
  export declare function useMenuKeyboard(options: UseMenuKeyboardOptions): UseMenuKeyboardReturn;
@@ -21,5 +21,7 @@ export interface UsePluginConfigReturn {
21
21
  /** Restore the last loaded or saved configuration snapshot. */
22
22
  reset: () => void;
23
23
  }
24
- /** @deprecated Use `usePluginSettings()` for typed plugin settings. */
24
+ /**
25
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `usePluginSettings()` for typed plugin settings.
26
+ */
25
27
  export declare function usePluginConfig(pluginName?: string): UsePluginConfigReturn;
@@ -1,8 +1,24 @@
1
1
  import { Ref } from 'vue';
2
2
  export type RequestSyncSuccessKind = 'load' | 'save' | 'run';
3
+ /**
4
+ * The unit of work `run()` drives.
5
+ *
6
+ * It receives an `AbortSignal` that fires when the run is superseded by a
7
+ * newer `run()` or by `cancel()`. Zero-argument operations stay valid and
8
+ * simply ignore it.
9
+ */
10
+ export type RequestSyncOperation<T> = (signal: AbortSignal) => Promise<T>;
3
11
  export interface RequestSyncRunOptions {
4
12
  success?: RequestSyncSuccessKind;
5
13
  errorMessage?: string;
14
+ /**
15
+ * Abort the previously started run when this one starts. Default `true`;
16
+ * pass `false` to let overlapping runs finish their own work (the stale
17
+ * guard on shared state still applies either way).
18
+ */
19
+ abortPrevious?: boolean;
20
+ /** Caller-owned signal; aborting it aborts this run's signal too. */
21
+ signal?: AbortSignal;
6
22
  }
7
23
  export interface UseRequestSyncStateReturn {
8
24
  /** Whether a request is in progress. */
@@ -27,8 +43,32 @@ export interface UseRequestSyncStateReturn {
27
43
  markSaved: (date?: Date) => void;
28
44
  /** Mark the operation as successfully run. */
29
45
  markRun: (date?: Date) => void;
30
- /** Run a request with shared loading/error handling and optional sync marking. */
31
- run: <T>(operation: () => Promise<T>, options?: RequestSyncRunOptions) => Promise<T>;
46
+ /**
47
+ * Run a request with shared loading/error handling and optional sync marking.
48
+ *
49
+ * ## Stale-response semantics
50
+ *
51
+ * Every call takes a monotonically increasing token. Starting a run
52
+ * supersedes any run started before it, and a superseded run writes **no**
53
+ * shared state when it finally settles: it does not clear `loading`, does not
54
+ * set `error`, and does not move `lastLoadedAt` / `lastSavedAt` / `lastRunAt`.
55
+ * Only the newest run owns those.
56
+ *
57
+ * The caller's own promise is untouched by the guard — a superseded run still
58
+ * resolves with its value or rejects with its own error, exactly as the
59
+ * operation did. The guard never invents a rejection, so a caller awaiting
60
+ * `run()` never sees a "superseded" error it did not cause.
61
+ *
62
+ * The operation additionally receives an `AbortSignal` that fires when its
63
+ * run is superseded or `cancel()` is called, so an operation that forwards
64
+ * the signal (`fetch(url, { signal })`) stops work instead of racing.
65
+ */
66
+ run: <T>(operation: RequestSyncOperation<T>, options?: RequestSyncRunOptions) => Promise<T>;
67
+ /**
68
+ * Abort the in-flight run and drop `loading`. The aborted run's completion
69
+ * is treated as stale and writes no state.
70
+ */
71
+ cancel: () => void;
32
72
  }
33
73
  /** Shared loading/error/timestamp state for generated plugin request helpers. */
34
74
  export declare function useRequestSyncState(defaultErrorMessage?: string): UseRequestSyncStateReturn;
@@ -75,4 +75,5 @@ export declare function useScheduleDrag(options: UseScheduleDragOptions): {
75
75
  startCreate: (date: Date, y: number, dayIndex: number) => void;
76
76
  startMove: (event: ScheduleEvent, y: number, dayIndex: number) => void;
77
77
  startResize: (event: ScheduleEvent, edge: "top" | "bottom", y: number, dayIndex: number) => void;
78
+ nudgeEvent: (event: ScheduleEvent, direction: -1 | 1, mode?: "move" | "resize") => boolean;
78
79
  };
@@ -1,7 +1,8 @@
1
- import { r as useRequestSyncState } from "./EmptyState-NBqf2_8z.js";
2
- import { B as currentExperimentFromContext, U as resolveCurrentExperimentId, V as getInjectedPlatformContext, et as useEventStream, lt as PLUGIN_SECRET_FORMAT_KEY } from "./useControlSchema-_OVhavKq.js";
3
- import { i as useAuthStore, n as authenticationRequiredError, o as useSettingsStore, r as useApi, t as AuthenticationRequiredError } from "./useApi-CDBq6z23.js";
4
- import { i as usePlatformContext } from "./useFormBuilder-Bd714C7y.js";
1
+ import { n as useRequestSyncState } from "./Skeleton-DxtwJ5gt.js";
2
+ import { B as currentExperimentFromContext, U as resolveCurrentExperimentId, V as getInjectedPlatformContext, et as useEventStream, lt as PLUGIN_SECRET_FORMAT_KEY } from "./useControlSchema-aMZlb4Sc.js";
3
+ import { a as useAuthStore, d as useSettingsStore, i as useApi, n as AuthenticationRequiredError, r as authenticationRequiredError, t as readErrorMessage } from "./errors-_W0-LbA6.js";
4
+ import { i as usePlatformContext } from "./useFormBuilder-TCxNnqeb.js";
5
+ import { bn as rowLabel, pn as PLATE_CONFIGS, yn as rowIndex } from "./templates-Qq113pyZ.js";
5
6
  import { computed, getCurrentInstance, onMounted, onUnmounted, ref, shallowRef, toValue, watch } from "vue";
6
7
  import axios from "axios";
7
8
  //#region src/composables/useAuth.ts
@@ -637,7 +638,9 @@ function platformOwnedConfigPatch(config) {
637
638
  function responseConfigPayload(response) {
638
639
  return response.config ?? response.settings ?? {};
639
640
  }
640
- /** @deprecated Use `usePluginSettings()` for typed plugin settings. */
641
+ /**
642
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `usePluginSettings()` for typed plugin settings.
643
+ */
641
644
  function usePluginConfig(pluginName) {
642
645
  const injectedContext = getInjectedPlatformContext();
643
646
  const { plugin } = usePlatformContext();
@@ -887,7 +890,7 @@ function useOptimisticMutation(options) {
887
890
  return result;
888
891
  } catch (err) {
889
892
  options.rollback?.(snapshot, variables, err);
890
- error.value = options.readErrorMessage?.(err) ?? readErrorMessage$1(err);
893
+ error.value = options.readErrorMessage?.(err) ?? readErrorMessage(err);
891
894
  options.onError?.(err, context);
892
895
  throw err;
893
896
  } finally {
@@ -906,12 +909,6 @@ function useOptimisticMutation(options) {
906
909
  reset
907
910
  };
908
911
  }
909
- function readErrorMessage$1(value) {
910
- if (value instanceof Error && value.message) return value.message;
911
- if (typeof value === "string" && value.trim()) return value;
912
- if (typeof value === "object" && value !== null && "message" in value && typeof value.message === "string" && value.message.trim()) return value.message;
913
- return "Request failed.";
914
- }
915
912
  //#endregion
916
913
  //#region src/composables/useResourceCrud.ts
917
914
  /**
@@ -1046,45 +1043,8 @@ function resolveKey(keyOrItem, getKey) {
1046
1043
  if (typeof keyOrItem === "string" || typeof keyOrItem === "number") return keyOrItem;
1047
1044
  return getKey(keyOrItem);
1048
1045
  }
1049
- function readErrorMessage(value) {
1050
- if (value instanceof Error && value.message) return value.message;
1051
- if (typeof value === "string" && value.trim()) return value;
1052
- if (typeof value === "object" && value !== null && "message" in value && typeof value.message === "string" && value.message.trim()) return value.message;
1053
- return "Request failed.";
1054
- }
1055
1046
  //#endregion
1056
1047
  //#region src/composables/useWellPainting.ts
1057
- var ROW_LABELS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1058
- var PLATE_DIMENSIONS = {
1059
- 6: {
1060
- rows: 2,
1061
- cols: 3
1062
- },
1063
- 12: {
1064
- rows: 3,
1065
- cols: 4
1066
- },
1067
- 24: {
1068
- rows: 4,
1069
- cols: 6
1070
- },
1071
- 48: {
1072
- rows: 6,
1073
- cols: 8
1074
- },
1075
- 54: {
1076
- rows: 6,
1077
- cols: 9
1078
- },
1079
- 96: {
1080
- rows: 8,
1081
- cols: 12
1082
- },
1083
- 384: {
1084
- rows: 16,
1085
- cols: 24
1086
- }
1087
- };
1088
1048
  /**
1089
1049
  * Pointer painting/rectangle selection state for WellPlate-based editors.
1090
1050
  *
@@ -1164,15 +1124,15 @@ function wellIdToCoordinate(wellId) {
1164
1124
  const match = /^([A-Z]+)(\d+)$/i.exec(wellId.trim());
1165
1125
  if (!match) return null;
1166
1126
  return {
1167
- row: rowLabelToIndex$1(match[1].toUpperCase()),
1127
+ row: rowIndex(match[1].toUpperCase()),
1168
1128
  col: Number(match[2]) - 1
1169
1129
  };
1170
1130
  }
1171
1131
  function coordinateToWellId(coord) {
1172
- return `${indexToRowLabel$1(coord.row)}${coord.col + 1}`;
1132
+ return `${rowLabel(coord.row)}${coord.col + 1}`;
1173
1133
  }
1174
1134
  function wellIdsInRectangle(start, end, format) {
1175
- const dimensions = PLATE_DIMENSIONS[format];
1135
+ const dimensions = PLATE_CONFIGS[format];
1176
1136
  const minRow = Math.max(0, Math.min(start.row, end.row));
1177
1137
  const maxRow = Math.min(dimensions.rows - 1, Math.max(start.row, end.row));
1178
1138
  const minCol = Math.max(0, Math.min(start.col, end.col));
@@ -1184,22 +1144,6 @@ function wellIdsInRectangle(start, end, format) {
1184
1144
  }));
1185
1145
  return ids;
1186
1146
  }
1187
- function rowLabelToIndex$1(label) {
1188
- let result = 0;
1189
- for (const char of label) result = result * 26 + (char.charCodeAt(0) - 64);
1190
- return result - 1;
1191
- }
1192
- function indexToRowLabel$1(index) {
1193
- if (index < 26) return ROW_LABELS[index];
1194
- let value = index + 1;
1195
- let label = "";
1196
- while (value > 0) {
1197
- value--;
1198
- label = ROW_LABELS[value % 26] + label;
1199
- value = Math.floor(value / 26);
1200
- }
1201
- return label;
1202
- }
1203
1147
  //#endregion
1204
1148
  //#region src/composables/useWellPlateAdapter.ts
1205
1149
  /**
@@ -1948,4 +1892,4 @@ function useCurrentExperiment(options = {}) {
1948
1892
  //#endregion
1949
1893
  export { useAsync as A, createPluginResourceClient as C, buildAnalysisArtifactTargetQuery as D, useCommandHistory as E, resolvePluginFrontendBase as M, usePasskey as N, parseAnalysisArtifactTarget as O, useAuth as P, wellIdsInRectangle as S, useOptimisticMutation as T, createWellPlateWells as _, pluginFormDataFromPayload as a, useWellPainting as b, usePluginClient as c, buildPluginEndpointUrl as d, resolvePluginBaseUrl as f, createRowConditions as g, createColumnConditions as h, getPluginPageSelectorItems as i, useAsyncBatch as j, usePluginConfig as k, usePluginEventStream as l, useWellPlateValidation as m, downloadBlob as n, uploadPluginEndpoint as o, runWellPlateValidation as p, downloadPluginEndpoint as r, useCurrentExperiment as s, createPluginClient as t, usePluginSettings as u, useWellPlateAdapter as v, useResourceCrud as w, wellIdToCoordinate as x, coordinateToWellId as y };
1950
1894
 
1951
- //# sourceMappingURL=composables-C8mmD5ta.js.map
1895
+ //# sourceMappingURL=composables-B_pia3hO.js.map