@morscherlab/mint-sdk 1.2.0-beta.8 → 1.2.0

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 (402) hide show
  1. package/README.md +60 -0
  2. package/dist/{ExperimentPopover-CfOdh5Rm.js → ExperimentPopover-CJdNlCZb.js} +24 -15
  3. package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DvIagrxY.js → ExperimentSelectorModal-DCXmwKNS.js} +5 -5
  5. package/dist/ExperimentSelectorModal-DCXmwKNS.js.map +1 -0
  6. package/dist/{SettingsModal-W3TYfnP9.js → SettingsModal-BYR20I4c.js} +5 -5
  7. package/dist/SettingsModal-BYR20I4c.js.map +1 -0
  8. package/dist/{EmptyState-NBqf2_8z.js → Skeleton-BAF3CKY7.js} +111 -93
  9. package/dist/Skeleton-BAF3CKY7.js.map +1 -0
  10. package/dist/__tests__/components/DataStates.test.d.ts +1 -0
  11. package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
  12. package/dist/__tests__/components/FileBrowserModal.test.d.ts +1 -0
  13. package/dist/__tests__/components/FilePicker.state.test.d.ts +1 -0
  14. package/dist/__tests__/components/FilePicker.test.d.ts +1 -0
  15. package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
  16. package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
  17. package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
  18. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  19. package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
  20. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  21. package/dist/apiErrors.d.ts +26 -0
  22. package/dist/components/ActionMenu.vue.d.ts +1 -1
  23. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  24. package/dist/components/AuditTrail.vue.d.ts +13 -0
  25. package/dist/components/BaseInput.vue.d.ts +1 -1
  26. package/dist/components/BaseSelect.vue.d.ts +1 -1
  27. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  28. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  29. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  30. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  31. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  32. package/dist/components/DataFrame.vue.d.ts +14 -2
  33. package/dist/components/DatePicker.vue.d.ts +2 -2
  34. package/dist/components/DateTimePicker.vue.d.ts +3 -1
  35. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  36. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  37. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  38. package/dist/components/FileBrowserModal.vue.d.ts +99 -0
  39. package/dist/components/FilePicker.vue.d.ts +32 -0
  40. package/dist/components/FileUploader.vue.d.ts +5 -2
  41. package/dist/components/FormulaInput.vue.d.ts +1 -1
  42. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  43. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  44. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  45. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  46. package/dist/components/NumberInput.vue.d.ts +1 -1
  47. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  48. package/dist/components/ProgressBar.vue.d.ts +1 -1
  49. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  50. package/dist/components/ReagentList.vue.d.ts +29 -1
  51. package/dist/components/ResourceCard.vue.d.ts +1 -1
  52. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  53. package/dist/components/SampleSelector.drag.d.ts +13 -0
  54. package/dist/components/SampleSelector.tree.d.ts +2 -0
  55. package/dist/components/SampleSelector.vue.d.ts +34 -1
  56. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  57. package/dist/components/SecretInput.vue.d.ts +1 -1
  58. package/dist/components/SequenceInput.vue.d.ts +1 -1
  59. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -0
  60. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  61. package/dist/components/TagsInput.vue.d.ts +1 -1
  62. package/dist/components/TimePicker.vue.d.ts +2 -1
  63. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  64. package/dist/components/UnitInput.vue.d.ts +1 -1
  65. package/dist/components/WellPlate.geometry.d.ts +15 -0
  66. package/dist/components/WellPlate.interaction.d.ts +13 -0
  67. package/dist/components/WellPlate.vue.d.ts +30 -1
  68. package/dist/components/fileBrowserPresentation.d.ts +10 -0
  69. package/dist/components/index.d.ts +4 -0
  70. package/dist/components/index.js +8 -8
  71. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  72. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  73. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
  74. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
  75. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
  76. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
  77. package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
  78. package/dist/{components-B80gV0P6.js → components-DIum5hkx.js} +5415 -2753
  79. package/dist/components-DIum5hkx.js.map +1 -0
  80. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  81. package/dist/composables/filePicker/localFiles.d.ts +3 -0
  82. package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
  83. package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
  84. package/dist/composables/filePicker/validation.d.ts +5 -0
  85. package/dist/composables/index.d.ts +3 -0
  86. package/dist/composables/index.js +10 -10
  87. package/dist/composables/useApi.d.ts +14 -7
  88. package/dist/composables/useDropdownState.d.ts +18 -2
  89. package/dist/composables/useEventStream.d.ts +9 -0
  90. package/dist/composables/useFileBrowser.d.ts +55 -0
  91. package/dist/composables/useFilePicker.d.ts +189 -0
  92. package/dist/composables/useListReorder.d.ts +90 -0
  93. package/dist/composables/useMenuKeyboard.d.ts +2 -2
  94. package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
  95. package/dist/composables/usePluginConfig.d.ts +3 -1
  96. package/dist/composables/useRequestSyncState.d.ts +42 -2
  97. package/dist/composables/useScheduleDrag.d.ts +1 -0
  98. package/dist/{composables-C8mmD5ta.js → composables-mFXsTA4g.js} +307 -74
  99. package/dist/composables-mFXsTA4g.js.map +1 -0
  100. package/dist/{useApi-CDBq6z23.js → errors-BLuqMee5.js} +178 -16
  101. package/dist/errors-BLuqMee5.js.map +1 -0
  102. package/dist/{experiment-Y9Iz7KYi.js → experiment-CVDRAnqp.js} +3 -8
  103. package/dist/experiment-CVDRAnqp.js.map +1 -0
  104. package/dist/{experiment-utils-DV3DrvE_.js → experiment-utils-CV2Wza3z.js} +1 -1
  105. package/dist/experiment-utils-CV2Wza3z.js.map +1 -0
  106. package/dist/index.d.ts +1 -0
  107. package/dist/index.js +15 -15
  108. package/dist/install.js +2 -7
  109. package/dist/install.js.map +1 -1
  110. package/dist/permissions.d.ts +42 -1
  111. package/dist/permissions.js +20 -10
  112. package/dist/permissions.js.map +1 -1
  113. package/dist/stores/index.d.ts +1 -1
  114. package/dist/stores/index.js +3 -3
  115. package/dist/stores/settings.d.ts +31 -1
  116. package/dist/styles.css +15162 -32475
  117. package/dist/templates/index.js +2 -4
  118. package/dist/{templates-CK72aKO1.js → templates-CmGfmBRA.js} +291 -85
  119. package/dist/templates-CmGfmBRA.js.map +1 -0
  120. package/dist/types/fileBrowserTypes.d.ts +77 -0
  121. package/dist/types/filePicker.d.ts +77 -0
  122. package/dist/types/index.d.ts +2 -0
  123. package/dist/{useControlSchema-_OVhavKq.js → useControlSchema-DldpxNOP.js} +234 -1121
  124. package/dist/useControlSchema-DldpxNOP.js.map +1 -0
  125. package/dist/{useDropdownState-D5G4UvWd.js → useDropdownState-C7hRiVQf.js} +22 -6
  126. package/dist/useDropdownState-C7hRiVQf.js.map +1 -0
  127. package/dist/{useExperimentSelector-DSEckf_g.js → useExperimentSelector-CEcIaueJ.js} +4 -4
  128. package/dist/{useExperimentSelector-DSEckf_g.js.map → useExperimentSelector-CEcIaueJ.js.map} +1 -1
  129. package/dist/{useFormBuilder-Bd714C7y.js → useFormBuilder-z5L_dUIy.js} +2 -2
  130. package/dist/{useFormBuilder-Bd714C7y.js.map → useFormBuilder-z5L_dUIy.js.map} +1 -1
  131. package/dist/utils/color.d.ts +13 -0
  132. package/dist/utils/errors.d.ts +9 -0
  133. package/dist/{useProtocolTemplates-Dq5Pzwyd.js → validation-uwoJGEb6.js} +231 -158
  134. package/dist/validation-uwoJGEb6.js.map +1 -0
  135. package/package.json +1 -1
  136. package/src/__tests__/apiErrors.test.ts +81 -0
  137. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  138. package/src/__tests__/components/DataFrame.test.ts +183 -11
  139. package/src/__tests__/components/DataStates.test.ts +176 -0
  140. package/src/__tests__/components/DatePicker.test.ts +76 -0
  141. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  142. package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
  143. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  144. package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
  145. package/src/__tests__/components/FilePicker.state.test.ts +287 -0
  146. package/src/__tests__/components/FilePicker.test.ts +487 -0
  147. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  148. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  149. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  150. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  151. package/src/__tests__/components/RackEditor.test.ts +35 -0
  152. package/src/__tests__/components/ReagentList.test.ts +64 -2
  153. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  154. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  155. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  156. package/src/__tests__/components/SegmentedControl.test.ts +107 -0
  157. package/src/__tests__/components/TimePicker.test.ts +61 -0
  158. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  159. package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
  160. package/src/__tests__/composables/useApi.test.ts +92 -9
  161. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  162. package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
  163. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  164. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  165. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
  166. package/src/__tests__/composables/usePluginClient.test.ts +3 -0
  167. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  168. package/src/__tests__/stores/settings.test.ts +71 -1
  169. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  170. package/src/__tests__/utils/permissions.test.ts +68 -0
  171. package/src/apiErrors.ts +85 -0
  172. package/src/components/ActionMenu.vue +45 -88
  173. package/src/components/AlertBox.vue +0 -4
  174. package/src/components/AppAvatarMenu.vue +2 -14
  175. package/src/components/AppLayout.vue +0 -4
  176. package/src/components/AppPluginSwitcher.story.vue +87 -0
  177. package/src/components/AppPluginSwitcher.vue +2 -5
  178. package/src/components/AppSidebar.vue +0 -4
  179. package/src/components/AppToastContainer.vue +6 -8
  180. package/src/components/AppTopBar.vue +0 -4
  181. package/src/components/ArtifactSaveDialog.vue +0 -4
  182. package/src/components/ArtifactSelectorModal.vue +0 -4
  183. package/src/components/AuditTrail.story.vue +18 -0
  184. package/src/components/AuditTrail.vue +27 -7
  185. package/src/components/AutoGroupModal.vue +0 -4
  186. package/src/components/Avatar.vue +0 -4
  187. package/src/components/BaseButton.vue +0 -4
  188. package/src/components/BaseCheckbox.vue +0 -4
  189. package/src/components/BaseInput.vue +0 -4
  190. package/src/components/BaseModal.vue +0 -4
  191. package/src/components/BasePill.vue +0 -4
  192. package/src/components/BaseRadioGroup.vue +0 -4
  193. package/src/components/BaseSelect.vue +0 -4
  194. package/src/components/BaseSlider.vue +0 -4
  195. package/src/components/BaseTabs.vue +0 -4
  196. package/src/components/BaseTextarea.vue +0 -4
  197. package/src/components/BaseToggle.vue +0 -4
  198. package/src/components/BatchProgressList.story.vue +18 -0
  199. package/src/components/BatchProgressList.vue +32 -4
  200. package/src/components/Breadcrumb.vue +0 -4
  201. package/src/components/Calendar.vue +0 -4
  202. package/src/components/ChartContainer.story.vue +1 -1
  203. package/src/components/ChartContainer.vue +0 -4
  204. package/src/components/ChemicalFormula.vue +0 -4
  205. package/src/components/CollapsibleCard.vue +0 -4
  206. package/src/components/ColorSlider.vue +0 -4
  207. package/src/components/ConcentrationInput.vue +0 -4
  208. package/src/components/ConfirmDialog.vue +0 -4
  209. package/src/components/DataFrame.story.vue +14 -0
  210. package/src/components/DataFrame.vue +97 -23
  211. package/src/components/DatePicker.vue +73 -27
  212. package/src/components/DateTimePicker.vue +45 -17
  213. package/src/components/Divider.vue +0 -4
  214. package/src/components/DoseCalculator.vue +0 -4
  215. package/src/components/DropdownButton.vue +2 -14
  216. package/src/components/EmptyState.vue +0 -4
  217. package/src/components/ExperimentCodeBadge.vue +0 -4
  218. package/src/components/ExperimentDataViewer.story.vue +3 -0
  219. package/src/components/ExperimentDataViewer.vue +33 -13
  220. package/src/components/ExperimentPopover.vue +12 -7
  221. package/src/components/ExperimentSelectorModal.vue +0 -4
  222. package/src/components/ExperimentTimeline.story.vue +18 -0
  223. package/src/components/ExperimentTimeline.vue +81 -75
  224. package/src/components/FileBrowserModal.story.vue +203 -0
  225. package/src/components/FileBrowserModal.vue +384 -0
  226. package/src/components/FilePicker.story.vue +44 -0
  227. package/src/components/FilePicker.vue +284 -0
  228. package/src/components/FileUploader.vue +32 -18
  229. package/src/components/FitPanel.vue +0 -4
  230. package/src/components/FormActions.story.vue +96 -0
  231. package/src/components/FormActions.vue +0 -4
  232. package/src/components/FormBuilder.vue +0 -4
  233. package/src/components/FormField.vue +0 -4
  234. package/src/components/FormulaInput.vue +0 -4
  235. package/src/components/GeneratedPathInput.story.vue +68 -0
  236. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  237. package/src/components/GeneratedPlotlyResult.vue +34 -69
  238. package/src/components/GeneratedPluginView.story.vue +145 -0
  239. package/src/components/GeneratedPluginView.vue +10 -10
  240. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  241. package/src/components/GeneratedResultRenderer.vue +4 -9
  242. package/src/components/GroupAssigner.vue +67 -5
  243. package/src/components/IconButton.vue +0 -4
  244. package/src/components/InstrumentAlertLog.vue +0 -4
  245. package/src/components/InstrumentStateBadge.vue +0 -4
  246. package/src/components/InstrumentStatusCard.vue +0 -4
  247. package/src/components/JobsStatusTray.vue +0 -4
  248. package/src/components/LcmsSequenceTable.vue +81 -50
  249. package/src/components/LoadingSpinner.vue +0 -4
  250. package/src/components/MobileSupportGate.vue +0 -4
  251. package/src/components/MoleculeInput.vue +0 -4
  252. package/src/components/MultiSelect.vue +0 -4
  253. package/src/components/NumberInput.vue +0 -4
  254. package/src/components/PlateMapEditor.vue +3 -14
  255. package/src/components/PlotlyChart.story.vue +61 -0
  256. package/src/components/PlotlyChart.vue +233 -0
  257. package/src/components/PluginIcon.vue +0 -4
  258. package/src/components/ProgressBar.vue +0 -4
  259. package/src/components/ProtocolStepEditor.vue +2 -4
  260. package/src/components/RackEditor.vue +51 -70
  261. package/src/components/ReagentEditor.vue +0 -4
  262. package/src/components/ReagentList.story.vue +18 -0
  263. package/src/components/ReagentList.vue +127 -82
  264. package/src/components/ResourceCard.vue +0 -4
  265. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  266. package/src/components/RuntimeUpdateNotice.vue +4 -4
  267. package/src/components/SampleHierarchyTree.story.vue +18 -0
  268. package/src/components/SampleHierarchyTree.vue +32 -9
  269. package/src/components/SampleLegend.vue +2 -8
  270. package/src/components/SampleSelector.drag.ts +51 -0
  271. package/src/components/SampleSelector.story.vue +6 -0
  272. package/src/components/SampleSelector.tree.ts +2 -0
  273. package/src/components/SampleSelector.vue +49 -10
  274. package/src/components/SampleSelectorGroupNode.vue +19 -0
  275. package/src/components/ScheduleCalendar.story.vue +6 -0
  276. package/src/components/ScheduleCalendar.vue +82 -7
  277. package/src/components/ScientificNumber.vue +0 -4
  278. package/src/components/SectionCard.vue +0 -4
  279. package/src/components/SegmentedControl.vue +50 -7
  280. package/src/components/SequenceInput.vue +0 -4
  281. package/src/components/SequenceProgressBar.story.vue +110 -0
  282. package/src/components/SequenceProgressBar.vue +0 -4
  283. package/src/components/SettingsModal.vue +0 -4
  284. package/src/components/Skeleton.vue +0 -4
  285. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  286. package/src/components/SmartGroupManual.vue +0 -4
  287. package/src/components/StatusIndicator.vue +0 -4
  288. package/src/components/StepWizard.vue +0 -4
  289. package/src/components/TagsInput.vue +4 -6
  290. package/src/components/ThemeToggle.vue +0 -4
  291. package/src/components/TimePicker.vue +36 -7
  292. package/src/components/TimeRangeInput.vue +0 -4
  293. package/src/components/Tooltip.story.vue +3 -3
  294. package/src/components/Tooltip.vue +0 -4
  295. package/src/components/UnitInput.vue +0 -4
  296. package/src/components/WellPlate.geometry.ts +60 -1
  297. package/src/components/WellPlate.interaction.ts +44 -0
  298. package/src/components/WellPlate.story.vue +8 -0
  299. package/src/components/WellPlate.vue +53 -7
  300. package/src/components/fileBrowserPresentation.ts +39 -0
  301. package/src/components/index.ts +5 -0
  302. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  303. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  304. package/src/components/internal/DataStateInternal.vue +74 -0
  305. package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
  306. package/src/components/internal/FileBrowserListingInternal.vue +197 -0
  307. package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
  308. package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
  309. package/src/components/internal/FilePickerTreeInternal.vue +238 -0
  310. package/src/components/internal/FormSectionRenderer.vue +0 -4
  311. package/src/components/internal/WellEditPopupInternal.vue +0 -4
  312. package/src/composables/controlSchemaTypes.ts +34 -0
  313. package/src/composables/filePicker/localFiles.ts +58 -0
  314. package/src/composables/filePicker/usePickerNavigation.ts +220 -0
  315. package/src/composables/filePicker/usePickerSelection.ts +259 -0
  316. package/src/composables/filePicker/validation.ts +41 -0
  317. package/src/composables/index.ts +17 -0
  318. package/src/composables/useApi.ts +57 -13
  319. package/src/composables/useDropdownState.ts +35 -5
  320. package/src/composables/useEventStream.ts +14 -2
  321. package/src/composables/useFileBrowser.ts +314 -0
  322. package/src/composables/useFileImport.ts +2 -7
  323. package/src/composables/useFilePicker.ts +366 -0
  324. package/src/composables/useGeneratedAnalysis.ts +18 -26
  325. package/src/composables/useListReorder.story.vue +143 -0
  326. package/src/composables/useListReorder.ts +242 -0
  327. package/src/composables/useMenuKeyboard.ts +2 -2
  328. package/src/composables/useOptimisticMutation.ts +1 -15
  329. package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
  330. package/src/composables/usePluginClient.ts +3 -0
  331. package/src/composables/usePluginConfig.ts +3 -1
  332. package/src/composables/useRackEditor.ts +2 -11
  333. package/src/composables/useRequestSyncState.ts +98 -28
  334. package/src/composables/useResourceCrud.ts +1 -15
  335. package/src/composables/useScheduleDrag.ts +37 -0
  336. package/src/composables/useWellPainting.ts +5 -29
  337. package/src/composables/useWellPlateEditor.ts +1 -11
  338. package/src/index.ts +3 -0
  339. package/src/permissions.ts +48 -9
  340. package/src/stores/experiment.ts +2 -7
  341. package/src/stores/index.ts +9 -1
  342. package/src/stores/settings.ts +93 -1
  343. package/src/styles/components/audit-trail.css +5 -5
  344. package/src/styles/components/batch-progress-list.css +7 -0
  345. package/src/styles/components/color-slider.css +2 -2
  346. package/src/styles/components/data-state.css +30 -0
  347. package/src/styles/components/dataframe.css +29 -35
  348. package/src/styles/components/experiment-data-viewer.css +4 -4
  349. package/src/styles/components/experiment-timeline.css +3 -30
  350. package/src/styles/components/file-browser-modal.css +489 -0
  351. package/src/styles/components/file-picker.css +502 -0
  352. package/src/styles/components/form-builder.css +5 -5
  353. package/src/styles/components/icon-button.css +9 -0
  354. package/src/styles/components/lcms-sequence-table.css +16 -1
  355. package/src/styles/components/multi-select.css +1 -1
  356. package/src/styles/components/reagent-list.css +38 -31
  357. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  358. package/src/styles/components/sample-selector.css +9 -2
  359. package/src/styles/components/schedule-calendar.css +8 -0
  360. package/src/styles/components/scientific-number.css +1 -1
  361. package/src/styles/components/well-plate.css +8 -0
  362. package/src/styles/index.css +11 -0
  363. package/src/styles/variables.css +29 -0
  364. package/src/templates/builderPresetControls.ts +1 -1
  365. package/src/templates/componentPlateHelpers.ts +3 -1
  366. package/src/templates/doseResponseAdapters.ts +2 -13
  367. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  368. package/src/templates/plateMapBuilder.ts +2 -2
  369. package/src/templates/qpcrPlateBuilder.ts +1 -1
  370. package/src/templates/templateValidators.ts +1 -1
  371. package/src/templates/timeCourseBuilder.ts +2 -2
  372. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  373. package/src/types/fileBrowserTypes.ts +85 -0
  374. package/src/types/filePicker.ts +72 -0
  375. package/src/types/index.ts +14 -0
  376. package/src/utils/color.ts +51 -0
  377. package/src/utils/errors.ts +29 -0
  378. package/dist/EmptyState-NBqf2_8z.js.map +0 -1
  379. package/dist/ExperimentPopover-CfOdh5Rm.js.map +0 -1
  380. package/dist/ExperimentSelectorModal-DvIagrxY.js.map +0 -1
  381. package/dist/SettingsModal-W3TYfnP9.js.map +0 -1
  382. package/dist/components-B80gV0P6.js.map +0 -1
  383. package/dist/composables/autoGroupConstants.d.ts +0 -1
  384. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  385. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  386. package/dist/composables-C8mmD5ta.js.map +0 -1
  387. package/dist/experiment-Y9Iz7KYi.js.map +0 -1
  388. package/dist/experiment-utils-DV3DrvE_.js.map +0 -1
  389. package/dist/templates/builderDefaults.d.ts +0 -1
  390. package/dist/templates/plateGeometry.d.ts +0 -4
  391. package/dist/templates-CK72aKO1.js.map +0 -1
  392. package/dist/useApi-CDBq6z23.js.map +0 -1
  393. package/dist/useControlSchema-_OVhavKq.js.map +0 -1
  394. package/dist/useDropdownState-D5G4UvWd.js.map +0 -1
  395. package/dist/useProtocolTemplates-Dq5Pzwyd.js.map +0 -1
  396. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  397. package/src/composables/autoGroupConstants.ts +0 -4
  398. package/src/composables/autoGroupGrouping.ts +0 -148
  399. package/src/composables/useAutoGroupInputSources.ts +0 -147
  400. package/src/templates/builderDefaults.ts +0 -11
  401. package/src/templates/plateGeometry.ts +0 -62
  402. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → apiErrors.test.d.ts} +0 -0
@@ -0,0 +1,96 @@
1
+ <script setup lang="ts">
2
+ import GeneratedPlotlyResult from './GeneratedPlotlyResult.vue'
3
+
4
+ const scatterSpec: Record<string, unknown> = {
5
+ data: [
6
+ {
7
+ type: 'scatter',
8
+ mode: 'markers',
9
+ name: 'Control',
10
+ x: [1.2, 2.4, 3.1, 4.8, 5.5, 6.9],
11
+ y: [0.9, 1.8, 2.6, 3.9, 4.4, 5.8],
12
+ marker: { size: 9 },
13
+ },
14
+ {
15
+ type: 'scatter',
16
+ mode: 'markers',
17
+ name: 'Treated',
18
+ x: [1.1, 2.2, 3.4, 4.5, 5.9, 6.4],
19
+ y: [2.1, 3.4, 3.9, 5.2, 6.4, 7.1],
20
+ marker: { size: 9 },
21
+ },
22
+ ],
23
+ layout: {
24
+ margin: { t: 24, r: 16, b: 40, l: 48 },
25
+ xaxis: { title: 'log2 intensity (control)' },
26
+ yaxis: { title: 'log2 intensity (treated)' },
27
+ },
28
+ }
29
+
30
+ const barSpec: Record<string, unknown> = {
31
+ data: [
32
+ {
33
+ type: 'bar',
34
+ x: ['Glycolysis', 'TCA', 'PPP', 'Urea cycle'],
35
+ y: [12, 27, 8, 4],
36
+ },
37
+ ],
38
+ layout: { margin: { t: 24, r: 16, b: 40, l: 48 } },
39
+ }
40
+
41
+ // Not a valid Plotly spec — exercises the static-image fallback branch.
42
+ const brokenSpec: Record<string, unknown> = { data: 'not-an-array' }
43
+
44
+ const PIXEL_PNG
45
+ = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=='
46
+
47
+ function initState() {
48
+ return { chart: 'scatter' as 'scatter' | 'bar' }
49
+ }
50
+ </script>
51
+
52
+ <template>
53
+ <Story title="Workflow/GeneratedPlotlyResult">
54
+ <Variant title="Playground" :init-state="initState">
55
+ <template #default="{ state }">
56
+ <div style="padding: 2rem; max-width: 720px;">
57
+ <GeneratedPlotlyResult :spec="state.chart === 'bar' ? barSpec : scatterSpec" />
58
+ </div>
59
+ </template>
60
+
61
+ <template #controls="{ state }">
62
+ <HstSelect
63
+ v-model="state.chart"
64
+ title="Chart"
65
+ :options="[
66
+ { label: 'scatter', value: 'scatter' },
67
+ { label: 'bar', value: 'bar' },
68
+ ]"
69
+ />
70
+ </template>
71
+ </Variant>
72
+
73
+ <Variant title="Scatter">
74
+ <div style="padding: 2rem; max-width: 720px;">
75
+ <GeneratedPlotlyResult :spec="scatterSpec" />
76
+ </div>
77
+ </Variant>
78
+
79
+ <Variant title="Bar">
80
+ <div style="padding: 2rem; max-width: 720px;">
81
+ <GeneratedPlotlyResult :spec="barSpec" />
82
+ </div>
83
+ </Variant>
84
+
85
+ <Variant title="Render failure → PNG fallback">
86
+ <!-- When Plotly cannot render the spec the component swaps in the
87
+ server-rendered static image, if the job supplied one. -->
88
+ <div style="padding: 2rem; max-width: 720px;">
89
+ <GeneratedPlotlyResult
90
+ :spec="brokenSpec"
91
+ :fallback="{ media_type: 'image/png', data: PIXEL_PNG }"
92
+ />
93
+ </div>
94
+ </Variant>
95
+ </Story>
96
+ </template>
@@ -1,87 +1,52 @@
1
1
  <script setup lang="ts">
2
- import { nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'
3
2
  import type * as PlotlyType from 'plotly.js'
3
+ import { computed, toRaw } from 'vue'
4
4
 
5
- import ChartContainer from './ChartContainer.vue'
5
+ import PlotlyChart from './PlotlyChart.vue'
6
6
 
7
7
  const props = defineProps<{
8
8
  spec: Record<string, unknown>
9
9
  fallback?: { media_type: string; data: string }
10
10
  }>()
11
11
 
12
- const chartElement = ref<HTMLDivElement | null>(null)
13
- const failed = ref(false)
14
- let plotly: typeof PlotlyType | null = null
15
-
16
- async function loadPlotly(): Promise<typeof PlotlyType> {
17
- const module = await import('plotly.js-dist-min')
18
- return ('default' in module ? module.default : module) as unknown as typeof PlotlyType
19
- }
20
-
21
- async function renderChart(): Promise<void> {
22
- if (!chartElement.value) return
23
- failed.value = false
24
- await nextTick()
25
- try {
26
- const renderer = plotly ?? await loadPlotly()
27
- plotly = renderer
28
- const data = Array.isArray(props.spec.data) ? props.spec.data : []
29
- const layout = props.spec.layout && typeof props.spec.layout === 'object'
30
- ? props.spec.layout
31
- : {}
32
- await renderer.react(
33
- chartElement.value,
34
- data as PlotlyType.Data[],
35
- layout as Partial<PlotlyType.Layout>,
36
- { responsive: true, displaylogo: false },
37
- )
38
- failed.value = false
39
- } catch {
40
- failed.value = true
41
- }
42
- }
43
-
44
- onMounted(renderChart)
45
- watch(() => props.spec, async () => {
46
- await nextTick()
47
- await renderChart()
48
- })
49
- onBeforeUnmount(() => {
50
- if (plotly && chartElement.value) plotly.purge(chartElement.value)
12
+ const data = computed<PlotlyType.Data[]>(() => {
13
+ const traces = toRaw(props.spec).data
14
+ return Array.isArray(traces) ? [...toRaw(traces)] as PlotlyType.Data[] : []
51
15
  })
16
+ const layout = computed<Partial<PlotlyType.Layout>>(() => (
17
+ props.spec.layout && typeof props.spec.layout === 'object'
18
+ ? props.spec.layout as Partial<PlotlyType.Layout>
19
+ : {}
20
+ ))
21
+ const config = computed<Partial<PlotlyType.Config>>(() => (
22
+ props.spec.config && typeof props.spec.config === 'object'
23
+ ? props.spec.config as Partial<PlotlyType.Config>
24
+ : {}
25
+ ))
52
26
  </script>
53
27
 
54
28
  <template>
55
- <ChartContainer title="Interactive chart">
56
- <img
57
- v-if="failed && fallback"
58
- class="mint-generated-result__image"
59
- :src="`data:${fallback.media_type};base64,${fallback.data}`"
60
- alt="Static Plotly chart fallback"
61
- >
62
- <p
63
- v-else-if="failed"
64
- class="mint-generated-result__plotly-error"
65
- role="alert"
66
- >
67
- Unable to display this chart.
68
- </p>
69
- <div
70
- ref="chartElement"
71
- v-show="!failed"
72
- class="mint-generated-result__plotly"
73
- aria-label="Interactive Plotly chart"
74
- />
75
- </ChartContainer>
29
+ <PlotlyChart
30
+ title="Interactive chart"
31
+ :data="data"
32
+ :layout="layout"
33
+ :config="config"
34
+ >
35
+ <template v-if="fallback" #error>
36
+ <img
37
+ class="mint-generated-result__image"
38
+ :src="`data:${fallback.media_type};base64,${fallback.data}`"
39
+ alt="Static Plotly chart fallback"
40
+ >
41
+ </template>
42
+ </PlotlyChart>
76
43
  </template>
77
44
 
78
45
  <style scoped>
79
- .mint-generated-result__plotly-error {
80
- margin: 0;
81
- padding: 1rem;
82
- border: 1px solid var(--color-danger-border, var(--color-border));
83
- border-radius: 0.75rem;
84
- background: var(--color-danger-bg, var(--color-bg-secondary));
85
- color: var(--color-danger-text, var(--color-text-primary));
46
+ .mint-generated-result__image {
47
+ display: block;
48
+ max-width: 100%;
49
+ height: auto;
50
+ margin: 0 auto;
86
51
  }
87
52
  </style>
@@ -0,0 +1,145 @@
1
+ <script setup lang="ts">
2
+ import GeneratedPluginView from './GeneratedPluginView.vue'
3
+ import type { GeneratedAnalysisTransport } from '../composables/useGeneratedAnalysis'
4
+ import type { GeneratedAnalysisManifest } from '../types/generated-ui'
5
+
6
+ const manifest: GeneratedAnalysisManifest = {
7
+ schema_version: '1',
8
+ plugin: {
9
+ name: 'peak-qc',
10
+ version: '1.2.0',
11
+ description: 'Peak-picking quality control',
12
+ routes_prefix: '/api/peak-qc',
13
+ },
14
+ ui: {
15
+ title: 'Peak QC',
16
+ description: 'Score peak-picking output and flag features that need review.',
17
+ },
18
+ jobs: [
19
+ {
20
+ id: 'score-features',
21
+ title: 'Score features',
22
+ description: 'Compute RSD, blank ratio and detection rate for every feature.',
23
+ cpu: 4,
24
+ input_schema: {
25
+ type: 'object',
26
+ title: 'Scoring parameters',
27
+ properties: {
28
+ rsd_threshold: {
29
+ type: 'number',
30
+ title: 'QC RSD threshold',
31
+ description: 'Features above this relative standard deviation are flagged.',
32
+ default: 0.3,
33
+ minimum: 0,
34
+ maximum: 1,
35
+ },
36
+ blank_ratio: {
37
+ type: 'number',
38
+ title: 'Minimum blank ratio',
39
+ default: 3,
40
+ minimum: 1,
41
+ },
42
+ drop_flagged: {
43
+ type: 'boolean',
44
+ title: 'Drop flagged features',
45
+ default: false,
46
+ },
47
+ },
48
+ required: ['rsd_threshold'],
49
+ },
50
+ output_schema: { type: 'object' },
51
+ },
52
+ {
53
+ id: 'align-batches',
54
+ title: 'Align batches',
55
+ description: 'Retention-time align acquisition batches before merging.',
56
+ cpu: 8,
57
+ input_schema: {
58
+ type: 'object',
59
+ properties: {
60
+ tolerance_seconds: { type: 'number', title: 'RT tolerance (s)', default: 6 },
61
+ reference_batch: { type: 'string', title: 'Reference batch', default: 'batch-1' },
62
+ },
63
+ },
64
+ output_schema: { type: 'object' },
65
+ },
66
+ ],
67
+ }
68
+
69
+ const session = {
70
+ id: 'sess_story',
71
+ tab_id: 'tab_story',
72
+ created_at: new Date().toISOString(),
73
+ last_seen_at: new Date().toISOString(),
74
+ active_job_ids: [],
75
+ }
76
+
77
+ function json(body: unknown): Response {
78
+ return new Response(JSON.stringify(body), {
79
+ status: 200,
80
+ headers: { 'Content-Type': 'application/json' },
81
+ })
82
+ }
83
+
84
+ /** Serves the manifest, one session and an empty job list — no network. */
85
+ const readyTransport: GeneratedAnalysisTransport = async (input) => {
86
+ const url = String(input)
87
+ if (url.includes('/generated/manifest')) return json(manifest)
88
+ if (url.includes('/jobs/sessions')) return json({ sessions: [session] })
89
+ if (url.includes('/jobs')) return json({ jobs: [] })
90
+ return json({})
91
+ }
92
+
93
+ /** Never settles, so the workspace stays in its loading state. */
94
+ const loadingTransport: GeneratedAnalysisTransport = () => new Promise<Response>(() => {})
95
+
96
+ /** Fails the manifest request, so the workspace surfaces its error banner. */
97
+ const failingTransport: GeneratedAnalysisTransport = async () => (
98
+ new Response(JSON.stringify({ detail: 'Plugin runtime is not reachable' }), {
99
+ status: 503,
100
+ headers: { 'Content-Type': 'application/json' },
101
+ })
102
+ )
103
+
104
+ function initState() {
105
+ return { showStandaloneLabel: false }
106
+ }
107
+ </script>
108
+
109
+ <template>
110
+ <Story title="Workflow/GeneratedPluginView">
111
+ <Variant title="Playground" :init-state="initState">
112
+ <template #default="{ state }">
113
+ <div style="height: 42rem;">
114
+ <GeneratedPluginView
115
+ base-url="/story/peak-qc"
116
+ :transport="readyTransport"
117
+ :show-standalone-label="state.showStandaloneLabel"
118
+ />
119
+ </div>
120
+ </template>
121
+
122
+ <template #controls="{ state }">
123
+ <HstCheckbox v-model="state.showStandaloneLabel" title="Standalone label" />
124
+ </template>
125
+ </Variant>
126
+
127
+ <Variant title="Ready — two job definitions">
128
+ <div style="height: 42rem;">
129
+ <GeneratedPluginView base-url="/story/peak-qc" :transport="readyTransport" />
130
+ </div>
131
+ </Variant>
132
+
133
+ <Variant title="Loading">
134
+ <div style="height: 42rem;">
135
+ <GeneratedPluginView base-url="/story/loading" :transport="loadingTransport" />
136
+ </div>
137
+ </Variant>
138
+
139
+ <Variant title="Runtime unreachable">
140
+ <div style="height: 42rem;">
141
+ <GeneratedPluginView base-url="/story/failing" :transport="failingTransport" />
142
+ </div>
143
+ </Variant>
144
+ </Story>
145
+ </template>
@@ -207,7 +207,7 @@ onMounted(() => {
207
207
  min-width: 0;
208
208
  min-height: calc(100vh - 5rem);
209
209
  padding: clamp(1rem, 2.5vw, 2.5rem);
210
- background: var(--color-bg-primary);
210
+ background: var(--bg-primary);
211
211
  }
212
212
 
213
213
  .mint-generated-workspace__loading {
@@ -216,7 +216,7 @@ onMounted(() => {
216
216
  align-items: center;
217
217
  justify-content: center;
218
218
  gap: 0.75rem;
219
- color: var(--color-text-secondary);
219
+ color: var(--text-secondary);
220
220
  }
221
221
 
222
222
  .mint-generated-workspace__header {
@@ -230,19 +230,19 @@ onMounted(() => {
230
230
 
231
231
  .mint-generated-workspace__header h1 {
232
232
  margin: 0;
233
- color: var(--color-text-primary);
233
+ color: var(--text-primary);
234
234
  font-size: clamp(1.35rem, 2vw, 1.8rem);
235
235
  line-height: 1.2;
236
236
  }
237
237
 
238
238
  .mint-generated-workspace__header p:not(.mint-generated-workspace__eyebrow) {
239
239
  margin: 0.4rem 0 0;
240
- color: var(--color-text-secondary);
240
+ color: var(--text-secondary);
241
241
  }
242
242
 
243
243
  .mint-generated-workspace__eyebrow {
244
244
  margin: 0 0 0.35rem;
245
- color: var(--color-text-muted);
245
+ color: var(--text-muted);
246
246
  font-size: 0.72rem;
247
247
  font-weight: 700;
248
248
  letter-spacing: 0.08em;
@@ -258,10 +258,10 @@ onMounted(() => {
258
258
 
259
259
  .mint-generated-workspace__resources span {
260
260
  padding: 0.3rem 0.55rem;
261
- border: 1px solid var(--color-border);
261
+ border: 1px solid var(--border-color);
262
262
  border-radius: 999px;
263
- background: var(--color-bg-secondary);
264
- color: var(--color-text-secondary);
263
+ background: var(--bg-secondary);
264
+ color: var(--text-secondary);
265
265
  font-size: 0.75rem;
266
266
  font-weight: 600;
267
267
  }
@@ -271,9 +271,9 @@ onMounted(() => {
271
271
  min-height: 24rem;
272
272
  margin: 0 auto;
273
273
  padding: clamp(1rem, 2vw, 1.75rem);
274
- border: 1px solid var(--color-border);
274
+ border: 1px solid var(--border-color);
275
275
  border-radius: 1rem;
276
- background: var(--color-bg-secondary);
276
+ background: var(--bg-secondary);
277
277
  box-shadow: var(--shadow-sm);
278
278
  }
279
279
 
@@ -0,0 +1,117 @@
1
+ <script setup lang="ts">
2
+ import GeneratedResultRenderer from './GeneratedResultRenderer.vue'
3
+ import type { GeneratedAnalysisResult } from '../types/generated-ui'
4
+
5
+ const textResult: GeneratedAnalysisResult = {
6
+ kind: 'text',
7
+ text: 'Peak integration finished: 1,284 features across 96 samples, 12 flagged for manual review.',
8
+ }
9
+
10
+ const jsonResult: GeneratedAnalysisResult = {
11
+ kind: 'json',
12
+ value: {
13
+ method: 'HILIC_neg_12min',
14
+ features: 1284,
15
+ qc: { rsd_median: 0.041, blanks_removed: 37 },
16
+ flagged: ['M241T118', 'M317T204'],
17
+ },
18
+ }
19
+
20
+ const tableResult: GeneratedAnalysisResult = {
21
+ kind: 'table',
22
+ columns: ['feature_id', 'mz', 'retention_time', 'fold_change', 'p_value'],
23
+ rows: [
24
+ { feature_id: 'M180T204', mz: 180.0634, retention_time: 3.42, fold_change: 2.14, p_value: 0.0012 },
25
+ { feature_id: 'M241T118', mz: 241.0311, retention_time: 1.97, fold_change: -1.83, p_value: 0.0044 },
26
+ { feature_id: 'M317T204', mz: 317.0521, retention_time: 3.41, fold_change: 1.07, p_value: 0.2310 },
27
+ { feature_id: 'M146T092', mz: 146.0453, retention_time: 1.53, fold_change: -3.02, p_value: 0.0001 },
28
+ ],
29
+ }
30
+
31
+ // 1x1 transparent PNG — enough to exercise the image branch without a fixture.
32
+ const PIXEL_PNG
33
+ = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=='
34
+
35
+ const imageResult: GeneratedAnalysisResult = {
36
+ kind: 'image',
37
+ media_type: 'image/png',
38
+ data: PIXEL_PNG,
39
+ alt: 'Static QC overview rendered by the plugin',
40
+ }
41
+
42
+ const artifactResult: GeneratedAnalysisResult = {
43
+ kind: 'artifact',
44
+ id: 'art_01J9',
45
+ name: 'peak_table.parquet',
46
+ media_type: 'application/vnd.apache.parquet',
47
+ size: 4_812_390,
48
+ download_url: '#download',
49
+ managed: true,
50
+ }
51
+
52
+ type ResultKind = 'text' | 'json' | 'table' | 'image' | 'artifact'
53
+
54
+ const kinds: ResultKind[] = ['text', 'json', 'table', 'image', 'artifact']
55
+
56
+ const byKind: Record<ResultKind, GeneratedAnalysisResult> = {
57
+ text: textResult,
58
+ json: jsonResult,
59
+ table: tableResult,
60
+ image: imageResult,
61
+ artifact: artifactResult,
62
+ }
63
+
64
+ function initState() {
65
+ return { kind: 'table' as ResultKind }
66
+ }
67
+ </script>
68
+
69
+ <template>
70
+ <Story title="Workflow/GeneratedResultRenderer">
71
+ <Variant title="Playground" :init-state="initState">
72
+ <template #default="{ state }">
73
+ <div style="padding: 2rem; max-width: 720px;">
74
+ <GeneratedResultRenderer :result="byKind[state.kind as ResultKind]" />
75
+ </div>
76
+ </template>
77
+
78
+ <template #controls="{ state }">
79
+ <HstSelect
80
+ v-model="state.kind"
81
+ title="Result kind"
82
+ :options="kinds.map(k => ({ label: k, value: k }))"
83
+ />
84
+ </template>
85
+ </Variant>
86
+
87
+ <Variant title="Text">
88
+ <div style="padding: 2rem; max-width: 720px;">
89
+ <GeneratedResultRenderer :result="textResult" />
90
+ </div>
91
+ </Variant>
92
+
93
+ <Variant title="Table">
94
+ <div style="padding: 2rem; max-width: 720px;">
95
+ <GeneratedResultRenderer :result="tableResult" />
96
+ </div>
97
+ </Variant>
98
+
99
+ <Variant title="JSON">
100
+ <div style="padding: 2rem; max-width: 720px;">
101
+ <GeneratedResultRenderer :result="jsonResult" />
102
+ </div>
103
+ </Variant>
104
+
105
+ <Variant title="Image">
106
+ <div style="padding: 2rem; max-width: 720px;">
107
+ <GeneratedResultRenderer :result="imageResult" />
108
+ </div>
109
+ </Variant>
110
+
111
+ <Variant title="Artifact download">
112
+ <div style="padding: 2rem; max-width: 720px;">
113
+ <GeneratedResultRenderer :result="artifactResult" />
114
+ </div>
115
+ </Variant>
116
+ </Story>
117
+ </template>
@@ -101,7 +101,7 @@ function humanize(value: string): string {
101
101
  .mint-generated-result__text,
102
102
  .mint-generated-result__json {
103
103
  margin: 0;
104
- color: var(--color-text-primary);
104
+ color: var(--text-primary);
105
105
  }
106
106
 
107
107
  .mint-generated-result__text {
@@ -113,9 +113,9 @@ function humanize(value: string): string {
113
113
  .mint-generated-result__json {
114
114
  overflow: auto;
115
115
  padding: 1rem;
116
- border: 1px solid var(--color-border);
116
+ border: 1px solid var(--border-color);
117
117
  border-radius: 0.75rem;
118
- background: var(--color-bg-secondary);
118
+ background: var(--bg-secondary);
119
119
  font-size: 0.8125rem;
120
120
  line-height: 1.55;
121
121
  white-space: pre-wrap;
@@ -128,18 +128,13 @@ function humanize(value: string): string {
128
128
  margin: 0 auto;
129
129
  }
130
130
 
131
- .mint-generated-result__plotly {
132
- width: 100%;
133
- min-height: 24rem;
134
- }
135
-
136
131
  .mint-generated-result__artifact {
137
132
  display: flex;
138
133
  align-items: center;
139
134
  justify-content: space-between;
140
135
  gap: 1rem;
141
136
  padding: 1rem;
142
- border: 1px solid var(--color-border);
137
+ border: 1px solid var(--border-color);
143
138
  border-radius: 0.75rem;
144
139
  color: var(--color-primary);
145
140
  text-decoration: none;