@morscherlab/mint-sdk 1.0.0-alpha.2

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 (491) hide show
  1. package/README.md +326 -0
  2. package/dist/__stories__/experiment-helpers.d.ts +25 -0
  3. package/dist/__tests__/components/AppLayout.test.d.ts +1 -0
  4. package/dist/__tests__/components/AppSidebar.test.d.ts +1 -0
  5. package/dist/__tests__/components/AppTopBar.test.d.ts +1 -0
  6. package/dist/__tests__/components/BaseInput.test.d.ts +1 -0
  7. package/dist/__tests__/components/BasePill.test.d.ts +1 -0
  8. package/dist/__tests__/components/Calendar.test.d.ts +1 -0
  9. package/dist/__tests__/components/CollapsibleCard.test.d.ts +1 -0
  10. package/dist/__tests__/components/DataFrame.test.d.ts +1 -0
  11. package/dist/__tests__/components/DropdownButton.test.d.ts +1 -0
  12. package/dist/__tests__/composables/formBuilderRegistry.test.d.ts +1 -0
  13. package/dist/__tests__/composables/useAppExperiment.test.d.ts +1 -0
  14. package/dist/__tests__/composables/useAuth.test.d.ts +1 -0
  15. package/dist/__tests__/composables/useAutoGroup.test.d.ts +1 -0
  16. package/dist/__tests__/composables/useExperimentData.test.d.ts +13 -0
  17. package/dist/__tests__/composables/useExperimentSave.test.d.ts +1 -0
  18. package/dist/__tests__/composables/useForm.test.d.ts +1 -0
  19. package/dist/__tests__/composables/useFormBuilder.test.d.ts +1 -0
  20. package/dist/__tests__/composables/usePlatformContext.test.d.ts +1 -0
  21. package/dist/__tests__/composables/usePluginApi.test.d.ts +13 -0
  22. package/dist/__tests__/composables/usePluginConfig.test.d.ts +14 -0
  23. package/dist/__tests__/utils/color.test.d.ts +1 -0
  24. package/dist/auth-BYmxZdJl.js +297 -0
  25. package/dist/auth-BYmxZdJl.js.map +1 -0
  26. package/dist/components/AlertBox.vue.d.ts +34 -0
  27. package/dist/components/AppAvatarMenu.vue.d.ts +58 -0
  28. package/dist/components/AppContainer.vue.d.ts +28 -0
  29. package/dist/components/AppLayout.vue.d.ts +31 -0
  30. package/dist/components/AppPageSelector.vue.d.ts +43 -0
  31. package/dist/components/AppPillNav.vue.d.ts +11 -0
  32. package/dist/components/AppPluginSwitcher.vue.d.ts +38 -0
  33. package/dist/components/AppSidebar.vue.d.ts +47 -0
  34. package/dist/components/AppTopBar.vue.d.ts +111 -0
  35. package/dist/components/AuditTrail.vue.d.ts +38 -0
  36. package/dist/components/AutoGroupModal.vue.d.ts +124 -0
  37. package/dist/components/Avatar.vue.d.ts +14 -0
  38. package/dist/components/BaseButton.vue.d.ts +37 -0
  39. package/dist/components/BaseCheckbox.vue.d.ts +17 -0
  40. package/dist/components/BaseInput.vue.d.ts +34 -0
  41. package/dist/components/BaseModal.vue.d.ts +46 -0
  42. package/dist/components/BasePill.vue.d.ts +57 -0
  43. package/dist/components/BaseRadioGroup.vue.d.ts +21 -0
  44. package/dist/components/BaseSelect.vue.d.ts +20 -0
  45. package/dist/components/BaseSlider.vue.d.ts +22 -0
  46. package/dist/components/BaseTabs.vue.d.ts +14 -0
  47. package/dist/components/BaseTextarea.vue.d.ts +30 -0
  48. package/dist/components/BaseToggle.vue.d.ts +19 -0
  49. package/dist/components/BatchProgressList.vue.d.ts +43 -0
  50. package/dist/components/Breadcrumb.vue.d.ts +33 -0
  51. package/dist/components/Calendar.vue.d.ts +107 -0
  52. package/dist/components/ChartContainer.vue.d.ts +31 -0
  53. package/dist/components/ChemicalFormula.vue.d.ts +8 -0
  54. package/dist/components/CollapsibleCard.vue.d.ts +41 -0
  55. package/dist/components/ColorSlider.vue.d.ts +34 -0
  56. package/dist/components/ConcentrationInput.vue.d.ts +25 -0
  57. package/dist/components/ConfirmDialog.vue.d.ts +42 -0
  58. package/dist/components/DataFrame.vue.d.ts +107 -0
  59. package/dist/components/DatePicker.vue.d.ts +25 -0
  60. package/dist/components/DateTimePicker.vue.d.ts +30 -0
  61. package/dist/components/Divider.vue.d.ts +14 -0
  62. package/dist/components/DoseCalculator.vue.d.ts +19 -0
  63. package/dist/components/DropdownButton.vue.d.ts +47 -0
  64. package/dist/components/EmptyState.vue.d.ts +36 -0
  65. package/dist/components/ExperimentCodeBadge.vue.d.ts +14 -0
  66. package/dist/components/ExperimentDataViewer.vue.d.ts +29 -0
  67. package/dist/components/ExperimentPopover.vue.d.ts +32 -0
  68. package/dist/components/ExperimentSelectorModal.vue.d.ts +28 -0
  69. package/dist/components/ExperimentTimeline.vue.d.ts +44 -0
  70. package/dist/components/FileUploader.vue.d.ts +40 -0
  71. package/dist/components/FitPanel.vue.d.ts +46 -0
  72. package/dist/components/FormActions.vue.d.ts +33 -0
  73. package/dist/components/FormBuilder.vue.d.ts +287 -0
  74. package/dist/components/FormField.vue.d.ts +28 -0
  75. package/dist/components/FormFieldRenderer.vue.d.ts +31 -0
  76. package/dist/components/FormSection.vue.d.ts +43 -0
  77. package/dist/components/FormulaInput.vue.d.ts +25 -0
  78. package/dist/components/GroupAssigner.vue.d.ts +25 -0
  79. package/dist/components/GroupingModal.vue.d.ts +12 -0
  80. package/dist/components/IconButton.vue.d.ts +34 -0
  81. package/dist/components/LoadingSpinner.vue.d.ts +12 -0
  82. package/dist/components/MoleculeInput.vue.d.ts +27 -0
  83. package/dist/components/MultiSelect.vue.d.ts +19 -0
  84. package/dist/components/NumberInput.vue.d.ts +22 -0
  85. package/dist/components/PlateMapEditor.vue.d.ts +50 -0
  86. package/dist/components/ProgressBar.vue.d.ts +23 -0
  87. package/dist/components/ProtocolStepEditor.vue.d.ts +24 -0
  88. package/dist/components/RackEditor.vue.d.ts +40 -0
  89. package/dist/components/ReagentEditor.vue.d.ts +30 -0
  90. package/dist/components/ReagentList.vue.d.ts +32 -0
  91. package/dist/components/ResourceCard.vue.d.ts +50 -0
  92. package/dist/components/SampleHierarchyTree.vue.d.ts +26 -0
  93. package/dist/components/SampleLegend.vue.d.ts +32 -0
  94. package/dist/components/SampleSelector.vue.d.ts +29 -0
  95. package/dist/components/ScheduleCalendar.vue.d.ts +110 -0
  96. package/dist/components/ScientificNumber.vue.d.ts +14 -0
  97. package/dist/components/SegmentedControl.vue.d.ts +20 -0
  98. package/dist/components/SequenceInput.vue.d.ts +54 -0
  99. package/dist/components/SettingsButton.vue.d.ts +30 -0
  100. package/dist/components/SettingsModal.vue.d.ts +36 -0
  101. package/dist/components/Skeleton.vue.d.ts +11 -0
  102. package/dist/components/StatusIndicator.vue.d.ts +13 -0
  103. package/dist/components/StepWizard.vue.d.ts +65 -0
  104. package/dist/components/TagsInput.vue.d.ts +39 -0
  105. package/dist/components/ThemeToggle.vue.d.ts +7 -0
  106. package/dist/components/TimePicker.vue.d.ts +29 -0
  107. package/dist/components/TimeRangeInput.vue.d.ts +27 -0
  108. package/dist/components/ToastNotification.vue.d.ts +2 -0
  109. package/dist/components/Tooltip.vue.d.ts +35 -0
  110. package/dist/components/UnitInput.vue.d.ts +39 -0
  111. package/dist/components/WellEditPopup.vue.d.ts +25 -0
  112. package/dist/components/WellPlate.vue.d.ts +73 -0
  113. package/dist/components/index.d.ts +87 -0
  114. package/dist/components/index.js +3 -0
  115. package/dist/components-CKf-UpGi.js +15089 -0
  116. package/dist/components-CKf-UpGi.js.map +1 -0
  117. package/dist/composables/experiment-utils.d.ts +8 -0
  118. package/dist/composables/formBuilderRegistry.d.ts +13 -0
  119. package/dist/composables/index.d.ts +28 -0
  120. package/dist/composables/index.js +3 -0
  121. package/dist/composables/useApi.d.ts +20 -0
  122. package/dist/composables/useAppExperiment.d.ts +37 -0
  123. package/dist/composables/useAsync.d.ts +128 -0
  124. package/dist/composables/useAuth.d.ts +47 -0
  125. package/dist/composables/useAutoGroup.d.ts +106 -0
  126. package/dist/composables/useChemicalFormula.d.ts +21 -0
  127. package/dist/composables/useConcentrationUnits.d.ts +29 -0
  128. package/dist/composables/useDoseCalculator.d.ts +58 -0
  129. package/dist/composables/useExperimentData.d.ts +18 -0
  130. package/dist/composables/useExperimentSave.d.ts +36 -0
  131. package/dist/composables/useExperimentSelector.d.ts +30 -0
  132. package/dist/composables/useForm.d.ts +92 -0
  133. package/dist/composables/useFormBuilder.d.ts +24 -0
  134. package/dist/composables/usePasskey.d.ts +10 -0
  135. package/dist/composables/usePlatformContext.d.ts +131 -0
  136. package/dist/composables/usePluginApi.d.ts +29 -0
  137. package/dist/composables/usePluginConfig.d.ts +13 -0
  138. package/dist/composables/useProtocolTemplates.d.ts +44 -0
  139. package/dist/composables/useRackEditor.d.ts +31 -0
  140. package/dist/composables/useReagentSeries.d.ts +23 -0
  141. package/dist/composables/useScheduleDrag.d.ts +78 -0
  142. package/dist/composables/useSequenceUtils.d.ts +14 -0
  143. package/dist/composables/useTheme.d.ts +8 -0
  144. package/dist/composables/useTimeUtils.d.ts +29 -0
  145. package/dist/composables/useToast.d.ts +22 -0
  146. package/dist/composables/useWellPlateEditor.d.ts +33 -0
  147. package/dist/composables-D0QfFzq1.js +805 -0
  148. package/dist/composables-D0QfFzq1.js.map +1 -0
  149. package/dist/histoire.setup.d.ts +1 -0
  150. package/dist/index.d.ts +6 -0
  151. package/dist/index.js +7 -0
  152. package/dist/install.d.ts +16 -0
  153. package/dist/install.js +23 -0
  154. package/dist/install.js.map +1 -0
  155. package/dist/stores/auth.d.ts +146 -0
  156. package/dist/stores/index.d.ts +2 -0
  157. package/dist/stores/index.js +2 -0
  158. package/dist/stores/settings.d.ts +75 -0
  159. package/dist/styles.css +29728 -0
  160. package/dist/tailwind.preset.d.ts +58 -0
  161. package/dist/tailwind.preset.js +66 -0
  162. package/dist/tailwind.preset.js.map +1 -0
  163. package/dist/types/auth.d.ts +42 -0
  164. package/dist/types/auto-group.d.ts +34 -0
  165. package/dist/types/components.d.ts +528 -0
  166. package/dist/types/form-builder.d.ts +167 -0
  167. package/dist/types/index.d.ts +5 -0
  168. package/dist/types/index.js +0 -0
  169. package/dist/types/platform.d.ts +75 -0
  170. package/dist/useScheduleDrag-DAJueTbK.js +7181 -0
  171. package/dist/useScheduleDrag-DAJueTbK.js.map +1 -0
  172. package/dist/utils/color.d.ts +24 -0
  173. package/package.json +114 -0
  174. package/src/__stories__/experiment-helpers.ts +83 -0
  175. package/src/__tests__/components/AppLayout.test.ts +163 -0
  176. package/src/__tests__/components/AppSidebar.test.ts +292 -0
  177. package/src/__tests__/components/AppTopBar.test.ts +683 -0
  178. package/src/__tests__/components/BaseInput.test.ts +99 -0
  179. package/src/__tests__/components/BasePill.test.ts +291 -0
  180. package/src/__tests__/components/Calendar.test.ts +566 -0
  181. package/src/__tests__/components/CollapsibleCard.test.ts +524 -0
  182. package/src/__tests__/components/DataFrame.test.ts +767 -0
  183. package/src/__tests__/components/DropdownButton.test.ts +471 -0
  184. package/src/__tests__/composables/formBuilderRegistry.test.ts +187 -0
  185. package/src/__tests__/composables/useAppExperiment.test.ts +560 -0
  186. package/src/__tests__/composables/useAuth.test.ts +188 -0
  187. package/src/__tests__/composables/useAutoGroup.test.ts +860 -0
  188. package/src/__tests__/composables/useExperimentData.test.ts +127 -0
  189. package/src/__tests__/composables/useExperimentSave.test.ts +347 -0
  190. package/src/__tests__/composables/useForm.test.ts +205 -0
  191. package/src/__tests__/composables/useFormBuilder.test.ts +917 -0
  192. package/src/__tests__/composables/usePlatformContext.test.ts +116 -0
  193. package/src/__tests__/composables/usePluginApi.test.ts +81 -0
  194. package/src/__tests__/composables/usePluginConfig.test.ts +176 -0
  195. package/src/__tests__/utils/color.test.ts +96 -0
  196. package/src/components/AlertBox.story.vue +204 -0
  197. package/src/components/AlertBox.vue +88 -0
  198. package/src/components/AppAvatarMenu.story.vue +155 -0
  199. package/src/components/AppAvatarMenu.vue +184 -0
  200. package/src/components/AppContainer.story.vue +104 -0
  201. package/src/components/AppContainer.vue +34 -0
  202. package/src/components/AppLayout.story.vue +292 -0
  203. package/src/components/AppLayout.vue +75 -0
  204. package/src/components/AppPageSelector.vue +159 -0
  205. package/src/components/AppPillNav.vue +66 -0
  206. package/src/components/AppPluginSwitcher.vue +241 -0
  207. package/src/components/AppSidebar.story.vue +309 -0
  208. package/src/components/AppSidebar.vue +119 -0
  209. package/src/components/AppTopBar.story.vue +304 -0
  210. package/src/components/AppTopBar.vue +661 -0
  211. package/src/components/AuditTrail.story.vue +163 -0
  212. package/src/components/AuditTrail.vue +151 -0
  213. package/src/components/AutoGroupModal.story.vue +273 -0
  214. package/src/components/AutoGroupModal.vue +566 -0
  215. package/src/components/Avatar.story.vue +115 -0
  216. package/src/components/Avatar.vue +79 -0
  217. package/src/components/BaseButton.story.vue +96 -0
  218. package/src/components/BaseButton.vue +73 -0
  219. package/src/components/BaseCheckbox.story.vue +73 -0
  220. package/src/components/BaseCheckbox.vue +69 -0
  221. package/src/components/BaseInput.story.vue +98 -0
  222. package/src/components/BaseInput.vue +74 -0
  223. package/src/components/BaseModal.story.vue +237 -0
  224. package/src/components/BaseModal.vue +182 -0
  225. package/src/components/BasePill.story.vue +142 -0
  226. package/src/components/BasePill.vue +89 -0
  227. package/src/components/BaseRadioGroup.story.vue +145 -0
  228. package/src/components/BaseRadioGroup.vue +124 -0
  229. package/src/components/BaseSelect.story.vue +120 -0
  230. package/src/components/BaseSelect.vue +71 -0
  231. package/src/components/BaseSlider.story.vue +122 -0
  232. package/src/components/BaseSlider.vue +126 -0
  233. package/src/components/BaseTabs.story.vue +127 -0
  234. package/src/components/BaseTabs.vue +59 -0
  235. package/src/components/BaseTextarea.story.vue +91 -0
  236. package/src/components/BaseTextarea.vue +62 -0
  237. package/src/components/BaseToggle.story.vue +81 -0
  238. package/src/components/BaseToggle.vue +76 -0
  239. package/src/components/BatchProgressList.story.vue +92 -0
  240. package/src/components/BatchProgressList.vue +184 -0
  241. package/src/components/Breadcrumb.story.vue +106 -0
  242. package/src/components/Breadcrumb.vue +75 -0
  243. package/src/components/Calendar.story.vue +106 -0
  244. package/src/components/Calendar.vue +363 -0
  245. package/src/components/ChartContainer.story.vue +113 -0
  246. package/src/components/ChartContainer.vue +64 -0
  247. package/src/components/ChemicalFormula.story.vue +102 -0
  248. package/src/components/ChemicalFormula.vue +39 -0
  249. package/src/components/CollapsibleCard.story.vue +135 -0
  250. package/src/components/CollapsibleCard.vue +167 -0
  251. package/src/components/ColorSlider.story.vue +120 -0
  252. package/src/components/ColorSlider.vue +164 -0
  253. package/src/components/ConcentrationInput.story.vue +77 -0
  254. package/src/components/ConcentrationInput.vue +185 -0
  255. package/src/components/ConfirmDialog.story.vue +248 -0
  256. package/src/components/ConfirmDialog.vue +93 -0
  257. package/src/components/DataFrame.story.vue +148 -0
  258. package/src/components/DataFrame.vue +419 -0
  259. package/src/components/DatePicker.story.vue +119 -0
  260. package/src/components/DatePicker.vue +330 -0
  261. package/src/components/DateTimePicker.story.vue +112 -0
  262. package/src/components/DateTimePicker.vue +392 -0
  263. package/src/components/Divider.story.vue +80 -0
  264. package/src/components/Divider.vue +49 -0
  265. package/src/components/DoseCalculator.story.vue +68 -0
  266. package/src/components/DoseCalculator.vue +476 -0
  267. package/src/components/DropdownButton.story.vue +102 -0
  268. package/src/components/DropdownButton.vue +181 -0
  269. package/src/components/EmptyState.story.vue +135 -0
  270. package/src/components/EmptyState.vue +69 -0
  271. package/src/components/ExperimentCodeBadge.story.vue +77 -0
  272. package/src/components/ExperimentCodeBadge.vue +64 -0
  273. package/src/components/ExperimentDataViewer.story.vue +174 -0
  274. package/src/components/ExperimentDataViewer.vue +288 -0
  275. package/src/components/ExperimentPopover.story.vue +384 -0
  276. package/src/components/ExperimentPopover.vue +241 -0
  277. package/src/components/ExperimentSelectorModal.story.vue +391 -0
  278. package/src/components/ExperimentSelectorModal.vue +387 -0
  279. package/src/components/ExperimentTimeline.story.vue +161 -0
  280. package/src/components/ExperimentTimeline.vue +382 -0
  281. package/src/components/FileUploader.story.vue +107 -0
  282. package/src/components/FileUploader.vue +386 -0
  283. package/src/components/FitPanel.story.vue +125 -0
  284. package/src/components/FitPanel.vue +120 -0
  285. package/src/components/FormActions.vue +92 -0
  286. package/src/components/FormBuilder.vue +214 -0
  287. package/src/components/FormField.story.vue +132 -0
  288. package/src/components/FormField.vue +59 -0
  289. package/src/components/FormFieldRenderer.vue +58 -0
  290. package/src/components/FormSection.vue +90 -0
  291. package/src/components/FormulaInput.story.vue +96 -0
  292. package/src/components/FormulaInput.vue +125 -0
  293. package/src/components/GroupAssigner.story.vue +83 -0
  294. package/src/components/GroupAssigner.vue +284 -0
  295. package/src/components/GroupingModal.story.vue +52 -0
  296. package/src/components/GroupingModal.vue +422 -0
  297. package/src/components/IconButton.story.vue +135 -0
  298. package/src/components/IconButton.vue +73 -0
  299. package/src/components/LoadingSpinner.story.vue +70 -0
  300. package/src/components/LoadingSpinner.vue +50 -0
  301. package/src/components/MoleculeInput.story.vue +66 -0
  302. package/src/components/MoleculeInput.vue +426 -0
  303. package/src/components/MultiSelect.story.vue +132 -0
  304. package/src/components/MultiSelect.vue +118 -0
  305. package/src/components/NumberInput.story.vue +122 -0
  306. package/src/components/NumberInput.vue +160 -0
  307. package/src/components/PlateMapEditor.story.vue +92 -0
  308. package/src/components/PlateMapEditor.vue +513 -0
  309. package/src/components/ProgressBar.story.vue +148 -0
  310. package/src/components/ProgressBar.vue +114 -0
  311. package/src/components/ProtocolStepEditor.story.vue +69 -0
  312. package/src/components/ProtocolStepEditor.vue +522 -0
  313. package/src/components/RackEditor.story.vue +100 -0
  314. package/src/components/RackEditor.vue +371 -0
  315. package/src/components/ReagentEditor.story.vue +153 -0
  316. package/src/components/ReagentEditor.vue +418 -0
  317. package/src/components/ReagentList.story.vue +137 -0
  318. package/src/components/ReagentList.vue +463 -0
  319. package/src/components/ResourceCard.story.vue +150 -0
  320. package/src/components/ResourceCard.vue +161 -0
  321. package/src/components/SampleHierarchyTree.story.vue +161 -0
  322. package/src/components/SampleHierarchyTree.vue +256 -0
  323. package/src/components/SampleLegend.story.vue +91 -0
  324. package/src/components/SampleLegend.vue +119 -0
  325. package/src/components/SampleSelector.story.vue +111 -0
  326. package/src/components/SampleSelector.vue +1033 -0
  327. package/src/components/ScheduleCalendar.story.vue +195 -0
  328. package/src/components/ScheduleCalendar.vue +569 -0
  329. package/src/components/ScientificNumber.story.vue +127 -0
  330. package/src/components/ScientificNumber.vue +197 -0
  331. package/src/components/SegmentedControl.story.vue +132 -0
  332. package/src/components/SegmentedControl.vue +79 -0
  333. package/src/components/SequenceInput.story.vue +119 -0
  334. package/src/components/SequenceInput.vue +209 -0
  335. package/src/components/SettingsButton.story.vue +58 -0
  336. package/src/components/SettingsButton.vue +76 -0
  337. package/src/components/SettingsModal.story.vue +145 -0
  338. package/src/components/SettingsModal.vue +146 -0
  339. package/src/components/Skeleton.story.vue +141 -0
  340. package/src/components/Skeleton.vue +74 -0
  341. package/src/components/StatusIndicator.story.vue +99 -0
  342. package/src/components/StatusIndicator.vue +40 -0
  343. package/src/components/StepWizard.story.vue +155 -0
  344. package/src/components/StepWizard.vue +223 -0
  345. package/src/components/TagsInput.story.vue +155 -0
  346. package/src/components/TagsInput.vue +265 -0
  347. package/src/components/ThemeToggle.story.vue +36 -0
  348. package/src/components/ThemeToggle.vue +54 -0
  349. package/src/components/TimePicker.story.vue +96 -0
  350. package/src/components/TimePicker.vue +273 -0
  351. package/src/components/TimeRangeInput.story.vue +104 -0
  352. package/src/components/TimeRangeInput.vue +122 -0
  353. package/src/components/ToastNotification.story.vue +157 -0
  354. package/src/components/ToastNotification.vue +62 -0
  355. package/src/components/Tooltip.story.vue +138 -0
  356. package/src/components/Tooltip.vue +119 -0
  357. package/src/components/UnitInput.story.vue +194 -0
  358. package/src/components/UnitInput.vue +213 -0
  359. package/src/components/WellEditPopup.vue +234 -0
  360. package/src/components/WellPlate.story.vue +282 -0
  361. package/src/components/WellPlate.vue +830 -0
  362. package/src/components/index.ts +118 -0
  363. package/src/composables/experiment-utils.ts +57 -0
  364. package/src/composables/formBuilderRegistry.ts +79 -0
  365. package/src/composables/index.ts +140 -0
  366. package/src/composables/useApi.ts +167 -0
  367. package/src/composables/useAppExperiment.ts +159 -0
  368. package/src/composables/useAsync.ts +323 -0
  369. package/src/composables/useAuth.ts +445 -0
  370. package/src/composables/useAutoGroup.ts +641 -0
  371. package/src/composables/useChemicalFormula.ts +275 -0
  372. package/src/composables/useConcentrationUnits.ts +246 -0
  373. package/src/composables/useDoseCalculator.ts +370 -0
  374. package/src/composables/useExperimentData.ts +86 -0
  375. package/src/composables/useExperimentSave.ts +192 -0
  376. package/src/composables/useExperimentSelector.ts +292 -0
  377. package/src/composables/useForm.ts +416 -0
  378. package/src/composables/useFormBuilder.ts +383 -0
  379. package/src/composables/usePasskey.ts +216 -0
  380. package/src/composables/usePlatformContext.ts +299 -0
  381. package/src/composables/usePluginApi.ts +39 -0
  382. package/src/composables/usePluginConfig.ts +93 -0
  383. package/src/composables/useProtocolTemplates.ts +518 -0
  384. package/src/composables/useRackEditor.ts +222 -0
  385. package/src/composables/useReagentSeries.ts +91 -0
  386. package/src/composables/useScheduleDrag.ts +245 -0
  387. package/src/composables/useSequenceUtils.ts +105 -0
  388. package/src/composables/useTheme.ts +58 -0
  389. package/src/composables/useTimeUtils.ts +131 -0
  390. package/src/composables/useToast.ts +40 -0
  391. package/src/composables/useWellPlateEditor.ts +421 -0
  392. package/src/histoire.setup.ts +17 -0
  393. package/src/index.ts +367 -0
  394. package/src/install.ts +32 -0
  395. package/src/stores/auth.ts +152 -0
  396. package/src/stores/index.ts +2 -0
  397. package/src/stores/settings.ts +218 -0
  398. package/src/styles/components/alert-box.css +150 -0
  399. package/src/styles/components/app-avatar-menu.css +155 -0
  400. package/src/styles/components/app-container.css +33 -0
  401. package/src/styles/components/app-layout.css +98 -0
  402. package/src/styles/components/app-page-selector.css +191 -0
  403. package/src/styles/components/app-pill-nav.css +57 -0
  404. package/src/styles/components/app-plugin-switcher.css +209 -0
  405. package/src/styles/components/app-sidebar.css +145 -0
  406. package/src/styles/components/app-top-bar.css +492 -0
  407. package/src/styles/components/audit-trail.css +143 -0
  408. package/src/styles/components/auto-group-modal.css +644 -0
  409. package/src/styles/components/avatar.css +73 -0
  410. package/src/styles/components/batch-progress-list.css +196 -0
  411. package/src/styles/components/breadcrumb.css +64 -0
  412. package/src/styles/components/button.css +188 -0
  413. package/src/styles/components/calendar.css +192 -0
  414. package/src/styles/components/chart-container.css +69 -0
  415. package/src/styles/components/checkbox.css +123 -0
  416. package/src/styles/components/chemical-formula.css +46 -0
  417. package/src/styles/components/collapsible-card.css +253 -0
  418. package/src/styles/components/color-slider.css +110 -0
  419. package/src/styles/components/concentration-input.css +156 -0
  420. package/src/styles/components/confirm-dialog.css +183 -0
  421. package/src/styles/components/dataframe.css +382 -0
  422. package/src/styles/components/date-picker.css +243 -0
  423. package/src/styles/components/datetime-picker.css +229 -0
  424. package/src/styles/components/divider.css +63 -0
  425. package/src/styles/components/dose-calculator.css +301 -0
  426. package/src/styles/components/dropdown-button.css +280 -0
  427. package/src/styles/components/empty-state.css +151 -0
  428. package/src/styles/components/experiment-code-badge.css +33 -0
  429. package/src/styles/components/experiment-data-viewer.css +138 -0
  430. package/src/styles/components/experiment-popover.css +562 -0
  431. package/src/styles/components/experiment-selector-modal.css +285 -0
  432. package/src/styles/components/experiment-timeline.css +529 -0
  433. package/src/styles/components/file-uploader.css +310 -0
  434. package/src/styles/components/fit-panel.css +67 -0
  435. package/src/styles/components/form-builder.css +69 -0
  436. package/src/styles/components/form-field.css +48 -0
  437. package/src/styles/components/formula-input.css +103 -0
  438. package/src/styles/components/group-assigner.css +200 -0
  439. package/src/styles/components/grouping-modal.css +323 -0
  440. package/src/styles/components/icon-button.css +192 -0
  441. package/src/styles/components/input.css +66 -0
  442. package/src/styles/components/loading-spinner.css +67 -0
  443. package/src/styles/components/modal.css +350 -0
  444. package/src/styles/components/molecule-input.css +186 -0
  445. package/src/styles/components/multi-select.css +131 -0
  446. package/src/styles/components/number-input.css +199 -0
  447. package/src/styles/components/pill.css +188 -0
  448. package/src/styles/components/plate-map-editor.css +464 -0
  449. package/src/styles/components/progress-bar.css +133 -0
  450. package/src/styles/components/protocol-step-editor.css +449 -0
  451. package/src/styles/components/rack-editor.css +265 -0
  452. package/src/styles/components/radio-group.css +240 -0
  453. package/src/styles/components/reagent-editor.css +510 -0
  454. package/src/styles/components/reagent-list.css +407 -0
  455. package/src/styles/components/resource-card.css +360 -0
  456. package/src/styles/components/sample-hierarchy-tree.css +314 -0
  457. package/src/styles/components/sample-legend.css +201 -0
  458. package/src/styles/components/sample-selector.css +751 -0
  459. package/src/styles/components/schedule-calendar.css +478 -0
  460. package/src/styles/components/scientific-number.css +63 -0
  461. package/src/styles/components/segmented-control.css +197 -0
  462. package/src/styles/components/select.css +77 -0
  463. package/src/styles/components/sequence-input.css +184 -0
  464. package/src/styles/components/settings-button.css +94 -0
  465. package/src/styles/components/settings-modal.css +95 -0
  466. package/src/styles/components/skeleton.css +49 -0
  467. package/src/styles/components/slider.css +74 -0
  468. package/src/styles/components/status-indicator.css +66 -0
  469. package/src/styles/components/step-wizard.css +192 -0
  470. package/src/styles/components/tabs.css +95 -0
  471. package/src/styles/components/tags-input.css +195 -0
  472. package/src/styles/components/textarea.css +82 -0
  473. package/src/styles/components/theme-toggle.css +69 -0
  474. package/src/styles/components/time-picker.css +171 -0
  475. package/src/styles/components/time-range-input.css +42 -0
  476. package/src/styles/components/toast.css +91 -0
  477. package/src/styles/components/toggle.css +146 -0
  478. package/src/styles/components/tooltip.css +91 -0
  479. package/src/styles/components/unit-input.css +123 -0
  480. package/src/styles/components/well-edit-popup.css +252 -0
  481. package/src/styles/components/well-plate.css +307 -0
  482. package/src/styles/index.css +87 -0
  483. package/src/styles/variables.css +1117 -0
  484. package/src/tailwind.preset.ts +61 -0
  485. package/src/types/auth.ts +55 -0
  486. package/src/types/auto-group.ts +40 -0
  487. package/src/types/components.ts +710 -0
  488. package/src/types/form-builder.ts +197 -0
  489. package/src/types/index.ts +207 -0
  490. package/src/types/platform.ts +116 -0
  491. package/src/utils/color.ts +96 -0
@@ -0,0 +1,710 @@
1
+ import type { UserSummary } from './platform'
2
+
3
+ // Container types
4
+ export type ContainerDirection = 'row' | 'column'
5
+
6
+ // Button types
7
+ export type ButtonVariant = 'primary' | 'secondary' | 'cta' | 'danger' | 'success' | 'ghost'
8
+ export type ButtonSize = 'sm' | 'md' | 'lg'
9
+
10
+ // Input types
11
+ export type InputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url'
12
+
13
+ // Modal types
14
+ export type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'
15
+ export type ModalVariant = 'centered' | 'drawer' | 'sheet'
16
+
17
+ // Alert types
18
+ export type AlertType = 'success' | 'error' | 'warning' | 'info'
19
+
20
+ // Toast types
21
+ export interface Toast {
22
+ id: number
23
+ message: string
24
+ type: 'success' | 'error' | 'warning' | 'info'
25
+ duration?: number
26
+ }
27
+
28
+ // Tab types
29
+ export interface TabItem {
30
+ id: string
31
+ label: string
32
+ icon?: string
33
+ disabled?: boolean
34
+ badge?: string | number
35
+ }
36
+
37
+ // Select types
38
+ export interface SelectOption<T = string> {
39
+ value: T
40
+ label: string
41
+ disabled?: boolean
42
+ description?: string
43
+ }
44
+
45
+ // Radio types
46
+ export interface RadioOption {
47
+ value: string | number
48
+ label: string
49
+ disabled?: boolean
50
+ description?: string
51
+ }
52
+
53
+ // Form field types
54
+ export interface FormFieldProps {
55
+ label?: string
56
+ error?: string
57
+ hint?: string
58
+ required?: boolean
59
+ }
60
+
61
+ // Sidebar types
62
+ export interface SidebarToolSection {
63
+ id: string
64
+ label: string
65
+ subtitle?: string
66
+ icon?: string | string[]
67
+ iconColor?: string
68
+ iconBg?: string
69
+ defaultOpen?: boolean
70
+ showToggle?: boolean
71
+ }
72
+
73
+ // Collapsible types
74
+ export interface CollapsibleState {
75
+ isOpen: boolean
76
+ toggle: () => void
77
+ open: () => void
78
+ close: () => void
79
+ }
80
+
81
+ // TopBar types
82
+ export type TopBarVariant = 'card' | 'default'
83
+
84
+ // TopBar page navigation types
85
+ export interface TopBarPage {
86
+ id: string
87
+ label: string
88
+ to?: string // vue-router path
89
+ href?: string // External link
90
+ icon?: string // Optional icon
91
+ description?: string // Optional subtitle in dropdown
92
+ disabled?: boolean
93
+ }
94
+
95
+ // TopBar tab types (displayed in middle of topbar)
96
+ export interface TopBarTab {
97
+ id: string
98
+ label: string
99
+ to?: string // vue-router path
100
+ href?: string // External link
101
+ icon?: string // Optional icon
102
+ disabled?: boolean
103
+ children?: TopBarTabOption[] // Dropdown options
104
+ }
105
+
106
+ export interface TopBarTabOption {
107
+ id: string
108
+ label: string
109
+ to?: string
110
+ href?: string
111
+ description?: string
112
+ disabled?: boolean
113
+ }
114
+
115
+ // TopBar settings config (pass-through for built-in SettingsModal)
116
+ export interface TopBarSettingsConfig {
117
+ title?: string
118
+ tabs?: SettingsTab[]
119
+ showAppearance?: boolean
120
+ size?: 'md' | 'lg' | 'xl'
121
+ }
122
+
123
+ // TopBar pill-nav items (centered top-level navigation)
124
+ export interface PillNavItem {
125
+ id: string
126
+ label: string
127
+ to?: string
128
+ href?: string
129
+ disabled?: boolean
130
+ }
131
+
132
+ // TopBar page selector items (left-side "go to page" dropdown)
133
+ export interface PageSelectorItem {
134
+ id: string
135
+ label: string
136
+ icon?: string
137
+ hint?: string
138
+ to?: string
139
+ href?: string
140
+ disabled?: boolean
141
+ }
142
+
143
+ // TopBar plugin switcher info
144
+ export interface PluginSwitcherPlugin {
145
+ id: string
146
+ label: string
147
+ color?: string
148
+ version?: string
149
+ to?: string
150
+ href?: string
151
+ }
152
+
153
+ export interface PluginSwitcherInfo {
154
+ current: PluginSwitcherPlugin
155
+ plugins?: PluginSwitcherPlugin[]
156
+ installHref?: string
157
+ installTo?: string
158
+ }
159
+
160
+ // Avatar/account menu items
161
+ export interface AccountMenuItem {
162
+ id: string
163
+ label: string
164
+ icon?: string
165
+ rightLabel?: string
166
+ to?: string
167
+ href?: string
168
+ danger?: boolean
169
+ divider?: boolean
170
+ }
171
+
172
+ // Well Plate types
173
+ export type WellPlateFormat = 6 | 12 | 24 | 48 | 54 | 96 | 384
174
+ export type WellState = 'empty' | 'filled' | 'selected' | 'disabled'
175
+ export type WellPlateSelectionMode = 'none' | 'single' | 'multiple' | 'rectangle' | 'drag'
176
+ export type WellPlateSize = 'sm' | 'md' | 'lg' | 'xl' | 'fill'
177
+ export type WellShape = 'circle' | 'rounded'
178
+
179
+ export interface Well {
180
+ id: string
181
+ row: number
182
+ col: number
183
+ state: WellState
184
+ sampleType?: string
185
+ value?: number
186
+ metadata?: Record<string, unknown>
187
+ }
188
+
189
+ export type HeatmapColorScale = 'viridis' | 'plasma' | 'turbo' | 'custom'
190
+
191
+ export interface HeatmapConfig {
192
+ enabled: boolean
193
+ min?: number
194
+ max?: number
195
+ colorScale?: HeatmapColorScale
196
+ customColors?: string[]
197
+ showLegend?: boolean
198
+ }
199
+
200
+ // Slot position for rack color coding
201
+ export type SlotPosition = 'R' | 'G' | 'B' | 'Y'
202
+
203
+ // Extended well data stored in Well.metadata
204
+ export interface WellExtendedData {
205
+ label?: string
206
+ injectionVolume?: number
207
+ injectionCount?: number
208
+ customMethod?: string | null
209
+ }
210
+
211
+ // Data emitted when editing a well
212
+ export interface WellEditData {
213
+ wellId: string
214
+ label: string
215
+ sampleType: string
216
+ injectionVolume: number
217
+ injectionCount: number
218
+ customMethod: string
219
+ }
220
+
221
+ // Fields shown in the edit popup
222
+ export type WellEditField = 'label' | 'sampleType' | 'injectionVolume' | 'injectionCount' | 'customMethod'
223
+
224
+ // Legend item for sample type display
225
+ export interface WellLegendItem {
226
+ type: string
227
+ label: string
228
+ color: string
229
+ }
230
+
231
+ // Condition headers for dose-response / drug treatment plates
232
+ export interface PlateCondition {
233
+ label: string
234
+ color: string
235
+ concentrations: number[]
236
+ unit?: string
237
+ }
238
+
239
+ export interface ColumnCondition extends PlateCondition {
240
+ cols: number[]
241
+ }
242
+
243
+ export interface RowCondition extends PlateCondition {
244
+ rows: string[]
245
+ }
246
+
247
+ // Rack for RackEditor
248
+ export interface Rack {
249
+ id: string
250
+ name: string
251
+ format: WellPlateFormat
252
+ slot: SlotPosition
253
+ injectionVolume: number
254
+ wells: Record<string, Partial<Well>>
255
+ }
256
+
257
+ // Sample Legend types
258
+ export interface SampleType {
259
+ id: string
260
+ name: string
261
+ color?: string
262
+ count?: number
263
+ description?: string
264
+ }
265
+
266
+ // Plate Map Editor types
267
+ export interface PlateMap {
268
+ id: string
269
+ name: string
270
+ format: WellPlateFormat
271
+ wells: Record<string, Well>
272
+ }
273
+
274
+ export interface PlateMapEditorState {
275
+ plates: PlateMap[]
276
+ activePlateId: string
277
+ samples: SampleType[]
278
+ selectedWells: string[]
279
+ activeSampleId?: string
280
+ }
281
+
282
+ // Experiment Timeline types
283
+ export type ProtocolStepType = 'incubation' | 'wash' | 'addition' | 'measurement' | 'transfer' | 'centrifuge' | 'mix' | 'custom'
284
+ export type ProtocolStepStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'skipped'
285
+
286
+ export interface ProtocolStep {
287
+ id: string
288
+ type: ProtocolStepType
289
+ name: string
290
+ description?: string
291
+ duration?: number
292
+ status: ProtocolStepStatus
293
+ parameters?: Record<string, unknown>
294
+ order: number
295
+ }
296
+
297
+ // Sample Selector types
298
+ export interface SampleGroup {
299
+ name: string
300
+ color: string
301
+ samples: string[]
302
+ }
303
+
304
+ // Group Assigner types
305
+ export interface GroupItem {
306
+ name: string
307
+ color: string
308
+ count: number
309
+ }
310
+
311
+ // FileUploader types
312
+ export type FileUploaderMode = 'file' | 'folder'
313
+
314
+ // MoleculeInput types
315
+ export interface MoleculeData {
316
+ smiles: string
317
+ molfile: string
318
+ }
319
+
320
+ // ReagentList types
321
+ export type StorageCondition = 'RT' | '4C' | '-20C' | '-80C'
322
+
323
+ export type ReagentColumn =
324
+ | 'name'
325
+ | 'catalog'
326
+ | 'lot'
327
+ | 'expiry'
328
+ | 'storage'
329
+ | 'location'
330
+ | 'stock'
331
+ | 'supplier'
332
+
333
+ export interface Reagent {
334
+ id: string
335
+ name: string
336
+ catalogNumber?: string
337
+ lotNumber?: string
338
+ expiryDate?: Date | string
339
+ storageCondition?: StorageCondition
340
+ location?: string
341
+ stockLevel?: number
342
+ stockUnit?: string
343
+ supplier?: string
344
+ url?: string
345
+ }
346
+
347
+ // SampleHierarchyTree types
348
+ export type TreeNodeType =
349
+ | 'study'
350
+ | 'experiment'
351
+ | 'plate'
352
+ | 'sample'
353
+ | 'cell_line'
354
+ | 'passage'
355
+ | 'clone'
356
+ | 'treatment'
357
+ | 'folder'
358
+ | 'custom'
359
+
360
+ export type BadgeVariant = 'default' | 'success' | 'warning' | 'error'
361
+
362
+ export interface TreeNode {
363
+ id: string
364
+ label: string
365
+ type?: TreeNodeType
366
+ icon?: string
367
+ children?: TreeNode[]
368
+ metadata?: Record<string, unknown>
369
+ badge?: string | number
370
+ badgeVariant?: BadgeVariant
371
+ }
372
+
373
+ // SegmentedControl types
374
+ export interface SegmentedOption {
375
+ value: string | number
376
+ label: string
377
+ description?: string
378
+ disabled?: boolean
379
+ }
380
+
381
+ export type SegmentedControlVariant = 'simple' | 'card'
382
+ export type SegmentedControlSize = 'sm' | 'md' | 'lg'
383
+
384
+ // MultiSelect types
385
+ export interface MultiSelectOption {
386
+ value: string | number
387
+ label: string
388
+ disabled?: boolean
389
+ }
390
+
391
+ export type MultiSelectSize = 'sm' | 'md' | 'lg'
392
+
393
+ // Pill types
394
+ /** Visual style variant for pill/badge components */
395
+ export type PillVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info' | 'outline'
396
+ /** Semantic color modifier for pill components — combine with variant="outline" for colored outlines */
397
+ export type PillColor = 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info'
398
+ /** Size variant for pill components */
399
+ export type PillSize = 'sm' | 'md' | 'lg'
400
+
401
+ // Calendar types
402
+ /** Date selection behavior for calendar component */
403
+ export type CalendarSelectionMode = 'none' | 'single' | 'range' | 'multiple'
404
+
405
+ /** Visual marker displayed on a calendar date */
406
+ export interface CalendarMarker {
407
+ /** Date to mark */
408
+ date: Date | string
409
+ /** Marker color (CSS color value) */
410
+ color?: string
411
+ /** Tooltip/label for the marker */
412
+ label?: string
413
+ /** Visual style of the marker */
414
+ type?: 'dot' | 'bar' | 'highlight'
415
+ /** Additional custom data */
416
+ customData?: Record<string, unknown>
417
+ }
418
+
419
+ /** Context object for a calendar day cell */
420
+ export interface CalendarDayContext {
421
+ /** The date for this day */
422
+ date: Date
423
+ /** Day of month (1-31) */
424
+ dayOfMonth: number
425
+ /** True if this is today's date */
426
+ isToday: boolean
427
+ /** True if this date is currently selected */
428
+ isSelected: boolean
429
+ /** True if this date is within a selected range */
430
+ isInRange: boolean
431
+ /** True if this date cannot be selected */
432
+ isDisabled: boolean
433
+ /** True if this date is from an adjacent month */
434
+ isOutsideMonth: boolean
435
+ /** Markers configured for this date */
436
+ markers: CalendarMarker[]
437
+ }
438
+
439
+ // DataFrame types
440
+ /** Sort direction (null means unsorted) */
441
+ export type SortDirection = 'asc' | 'desc' | null
442
+
443
+ /** Current sort state for a table column */
444
+ export interface SortState {
445
+ /** Column key being sorted */
446
+ key: string
447
+ /** Sort direction */
448
+ direction: SortDirection
449
+ }
450
+
451
+ /** Column configuration for DataFrame component */
452
+ export interface DataFrameColumn<T = Record<string, unknown>> {
453
+ /** Unique column key (supports nested keys like 'user.name') */
454
+ key: string
455
+ /** Display label for column header */
456
+ label: string
457
+ /** Enable sorting for this column */
458
+ sortable?: boolean
459
+ /** Text alignment */
460
+ align?: 'left' | 'center' | 'right'
461
+ /** Fixed column width */
462
+ width?: string | number
463
+ /** Minimum column width */
464
+ minWidth?: string | number
465
+ /** Truncate overflow text with ellipsis */
466
+ ellipsis?: boolean
467
+ /** Custom formatter for cell values */
468
+ formatter?: (value: unknown, row: T, index: number) => string
469
+ }
470
+
471
+ /** Pagination state for table data */
472
+ export interface PaginationState {
473
+ /** Current page (1-indexed) */
474
+ page: number
475
+ /** Number of rows per page */
476
+ pageSize: number
477
+ /** Total number of rows across all pages */
478
+ total: number
479
+ }
480
+
481
+ // LoadingSpinner types
482
+ export type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg'
483
+ export type SpinnerVariant = 'primary' | 'cta' | 'muted'
484
+
485
+ // Divider types
486
+ export type DividerSpacing = 'sm' | 'md' | 'lg'
487
+
488
+ // StatusIndicator types
489
+ export type StatusType = 'success' | 'warning' | 'error' | 'info' | 'muted'
490
+
491
+ // ProgressBar types
492
+ export type ProgressVariant = 'rail' | 'segmented'
493
+ export type ProgressColor = 'primary' | 'success' | 'warning' | 'error' | 'info'
494
+ export type ProgressSize = 'sm' | 'md' | 'lg'
495
+
496
+ // Avatar types
497
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
498
+
499
+ // EmptyState types
500
+ export type EmptyStateColor = 'primary' | 'cta' | 'success' | 'warning' | 'error' | 'muted'
501
+ export type EmptyStateSize = 'sm' | 'md' | 'lg'
502
+
503
+ // Breadcrumb types
504
+ export interface BreadcrumbItem {
505
+ label: string
506
+ to?: string
507
+ href?: string
508
+ }
509
+
510
+ // Tooltip types
511
+ export type TooltipPosition = 'top' | 'bottom' | 'left' | 'right'
512
+
513
+ // ConfirmDialog types
514
+ export type ConfirmVariant = 'danger' | 'warning' | 'info'
515
+
516
+ // SettingsModal types
517
+ export interface SettingsTab {
518
+ id: string
519
+ label: string
520
+ icon?: string
521
+ }
522
+
523
+ // ScientificNumber types
524
+ export type NumberNotation = 'auto' | 'scientific' | 'engineering' | 'compact'
525
+
526
+ // UnitInput types
527
+ export interface UnitOption {
528
+ value: string
529
+ label: string
530
+ factor?: number
531
+ group?: string
532
+ }
533
+
534
+ // StepWizard types
535
+ export interface WizardStep {
536
+ id: string
537
+ label: string
538
+ description?: string
539
+ icon?: string
540
+ optional?: boolean
541
+ }
542
+
543
+ export type WizardStepState = 'pending' | 'active' | 'completed' | 'disabled'
544
+
545
+ // AuditTrail types
546
+ export type AuditEntryType = 'create' | 'update' | 'delete' | 'system'
547
+
548
+ export interface AuditEntry {
549
+ id: string
550
+ type: AuditEntryType
551
+ action: string
552
+ detail?: string
553
+ user?: string
554
+ timestamp: Date | string
555
+ metadata?: Record<string, unknown>
556
+ }
557
+
558
+ // BatchProgressList types
559
+ export type BatchItemStatus = 'pending' | 'processing' | 'completed' | 'error' | 'skipped'
560
+
561
+ export interface BatchItem {
562
+ id: string
563
+ label: string
564
+ status: BatchItemStatus
565
+ progress?: number
566
+ message?: string
567
+ }
568
+
569
+ export interface BatchSummary {
570
+ total: number
571
+ completed: number
572
+ processing: number
573
+ error: number
574
+ pending: number
575
+ skipped: number
576
+ percent: number
577
+ }
578
+
579
+ // TimePicker types
580
+ export type TimePickerFormat = '12h' | '24h'
581
+
582
+ export interface TimeRange {
583
+ start: string // "HH:mm"
584
+ end: string // "HH:mm"
585
+ }
586
+
587
+ // Schedule types
588
+ export type ScheduleView = 'day' | 'week' | 'month'
589
+ export type ScheduleEventStatus = 'confirmed' | 'pending' | 'cancelled' | 'in-progress'
590
+
591
+ export interface ScheduleEvent {
592
+ id: string
593
+ start: string // ISO 8601 datetime
594
+ end: string // ISO 8601 datetime
595
+ title: string
596
+ color?: string
597
+ status?: ScheduleEventStatus
598
+ draggable?: boolean
599
+ resizable?: boolean
600
+ metadata?: Record<string, unknown>
601
+ }
602
+
603
+ export interface ScheduleBlockedSlot {
604
+ start: string
605
+ end: string
606
+ label?: string
607
+ }
608
+
609
+ export interface ScheduleSlotContext {
610
+ date: Date
611
+ hour: number
612
+ minute: number
613
+ }
614
+
615
+ export interface ScheduleEventCreateContext {
616
+ start: Date
617
+ end: Date
618
+ }
619
+
620
+ export interface ScheduleEventUpdateContext {
621
+ event: ScheduleEvent
622
+ newStart: Date
623
+ newEnd: Date
624
+ }
625
+
626
+ // Summary data types (for ExperimentDataViewer compact mode)
627
+ export interface SummarySectionItem {
628
+ label: string
629
+ metadata?: Record<string, unknown>
630
+ item_count: number
631
+ item_key: string
632
+ columns: string[]
633
+ rows: Record<string, unknown>[]
634
+ }
635
+
636
+ export interface SummarySection {
637
+ key: string
638
+ label: string
639
+ type: 'table' | 'group'
640
+ /** Group sections: list of group items with embedded tables */
641
+ items?: SummarySectionItem[]
642
+ /** Table sections: flat table columns and rows */
643
+ columns?: string[]
644
+ rows?: Record<string, unknown>[]
645
+ row_count?: number
646
+ }
647
+
648
+ export interface SummaryData {
649
+ metadata: Record<string, unknown>
650
+ sections: SummarySection[]
651
+ }
652
+
653
+ // Resource types
654
+ export type ResourceStatus = 'available' | 'in-use' | 'maintenance' | 'offline'
655
+
656
+ export interface ResourceSpec {
657
+ label: string
658
+ value: string
659
+ }
660
+
661
+ // Experiment selector types
662
+ export type ExperimentStatus = 'planned' | 'ongoing' | 'completed' | 'cancelled'
663
+ export type DatePreset = 'last_7_days' | 'last_30_days' | 'last_90_days'
664
+ export type ExperimentSortField = 'created_at' | 'updated_at' | 'name' | 'status'
665
+
666
+ export interface ExperimentTypeOption {
667
+ value: string
668
+ label: string
669
+ color?: string
670
+ }
671
+
672
+ export interface ExperimentSummary {
673
+ id: number
674
+ experiment_code?: string
675
+ name: string
676
+ status: ExperimentStatus
677
+ experiment_type: string
678
+ project?: string
679
+ project_id?: number
680
+ project_name?: string
681
+ notes?: string
682
+ tags?: Record<string, unknown>
683
+ created_at: string
684
+ updated_at: string
685
+ created_by?: number
686
+ created_by_user?: UserSummary
687
+ has_design_data: boolean
688
+ }
689
+
690
+ export interface ExperimentListResponse {
691
+ experiments: ExperimentSummary[]
692
+ total: number
693
+ }
694
+
695
+ export interface ExperimentFilters {
696
+ search?: string
697
+ status?: ExperimentStatus | null
698
+ project?: string | null
699
+ experimentType?: string | null
700
+ datePreset?: DatePreset | null
701
+ }
702
+
703
+ // FitPanel types
704
+ export type FitState = 'idle' | 'running' | 'completed' | 'error'
705
+
706
+ export interface FitResultSummary {
707
+ label: string
708
+ value: string | number
709
+ variant?: 'default' | 'success' | 'warning' | 'error'
710
+ }