@morscherlab/mld-sdk 0.6.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 (714) hide show
  1. package/README.md +326 -0
  2. package/dist/__tests__/components/AppLayout.test.d.ts +1 -0
  3. package/dist/__tests__/components/AppSidebar.test.d.ts +1 -0
  4. package/dist/__tests__/components/AppTopBar.test.d.ts +1 -0
  5. package/dist/__tests__/components/BaseInput.test.d.ts +1 -0
  6. package/dist/__tests__/components/BasePill.test.d.ts +1 -0
  7. package/dist/__tests__/components/Calendar.test.d.ts +1 -0
  8. package/dist/__tests__/components/CollapsibleCard.test.d.ts +1 -0
  9. package/dist/__tests__/components/DataFrame.test.d.ts +1 -0
  10. package/dist/__tests__/components/DropdownButton.test.d.ts +1 -0
  11. package/dist/__tests__/composables/useAuth.test.d.ts +1 -0
  12. package/dist/__tests__/composables/useForm.test.d.ts +1 -0
  13. package/dist/components/AlertBox.vue.d.ts +30 -0
  14. package/dist/components/AlertBox.vue.js +125 -0
  15. package/dist/components/AlertBox.vue.js.map +1 -0
  16. package/dist/components/AlertBox.vue3.js +6 -0
  17. package/dist/components/AlertBox.vue3.js.map +1 -0
  18. package/dist/components/AppContainer.vue.d.ts +28 -0
  19. package/dist/components/AppContainer.vue.js +28 -0
  20. package/dist/components/AppContainer.vue.js.map +1 -0
  21. package/dist/components/AppContainer.vue2.js +5 -0
  22. package/dist/components/AppContainer.vue2.js.map +1 -0
  23. package/dist/components/AppLayout.vue.d.ts +31 -0
  24. package/dist/components/AppLayout.vue.js +51 -0
  25. package/dist/components/AppLayout.vue.js.map +1 -0
  26. package/dist/components/AppLayout.vue3.js +6 -0
  27. package/dist/components/AppLayout.vue3.js.map +1 -0
  28. package/dist/components/AppSidebar.vue.d.ts +44 -0
  29. package/dist/components/AppSidebar.vue.js +79 -0
  30. package/dist/components/AppSidebar.vue.js.map +1 -0
  31. package/dist/components/AppSidebar.vue3.js +6 -0
  32. package/dist/components/AppSidebar.vue3.js.map +1 -0
  33. package/dist/components/AppTopBar.vue.d.ts +77 -0
  34. package/dist/components/AppTopBar.vue.js +564 -0
  35. package/dist/components/AppTopBar.vue.js.map +1 -0
  36. package/dist/components/AppTopBar.vue3.js +6 -0
  37. package/dist/components/AppTopBar.vue3.js.map +1 -0
  38. package/dist/components/AuditTrail.vue.d.ts +47 -0
  39. package/dist/components/AuditTrail.vue.js +189 -0
  40. package/dist/components/AuditTrail.vue.js.map +1 -0
  41. package/dist/components/AuditTrail.vue3.js +6 -0
  42. package/dist/components/AuditTrail.vue3.js.map +1 -0
  43. package/dist/components/Avatar.vue.d.ts +13 -0
  44. package/dist/components/Avatar.vue.js +64 -0
  45. package/dist/components/Avatar.vue.js.map +1 -0
  46. package/dist/components/Avatar.vue3.js +6 -0
  47. package/dist/components/Avatar.vue3.js.map +1 -0
  48. package/dist/components/BaseButton.vue.d.ts +37 -0
  49. package/dist/components/BaseButton.vue.js +64 -0
  50. package/dist/components/BaseButton.vue.js.map +1 -0
  51. package/dist/components/BaseButton.vue3.js +6 -0
  52. package/dist/components/BaseButton.vue3.js.map +1 -0
  53. package/dist/components/BaseCheckbox.vue.d.ts +16 -0
  54. package/dist/components/BaseCheckbox.vue.js +71 -0
  55. package/dist/components/BaseCheckbox.vue.js.map +1 -0
  56. package/dist/components/BaseCheckbox.vue3.js +6 -0
  57. package/dist/components/BaseCheckbox.vue3.js.map +1 -0
  58. package/dist/components/BaseInput.vue.d.ts +33 -0
  59. package/dist/components/BaseInput.vue.js +57 -0
  60. package/dist/components/BaseInput.vue.js.map +1 -0
  61. package/dist/components/BaseInput.vue3.js +6 -0
  62. package/dist/components/BaseInput.vue3.js.map +1 -0
  63. package/dist/components/BaseModal.vue.d.ts +38 -0
  64. package/dist/components/BaseModal.vue.js +118 -0
  65. package/dist/components/BaseModal.vue.js.map +1 -0
  66. package/dist/components/BaseModal.vue3.js +6 -0
  67. package/dist/components/BaseModal.vue3.js.map +1 -0
  68. package/dist/components/BasePill.vue.d.ts +54 -0
  69. package/dist/components/BasePill.vue.js +68 -0
  70. package/dist/components/BasePill.vue.js.map +1 -0
  71. package/dist/components/BasePill.vue3.js +6 -0
  72. package/dist/components/BasePill.vue3.js.map +1 -0
  73. package/dist/components/BaseRadioGroup.vue.d.ts +19 -0
  74. package/dist/components/BaseRadioGroup.vue.js +80 -0
  75. package/dist/components/BaseRadioGroup.vue.js.map +1 -0
  76. package/dist/components/BaseRadioGroup.vue3.js +6 -0
  77. package/dist/components/BaseRadioGroup.vue3.js.map +1 -0
  78. package/dist/components/BaseSelect.vue.d.ts +19 -0
  79. package/dist/components/BaseSelect.vue.js +70 -0
  80. package/dist/components/BaseSelect.vue.js.map +1 -0
  81. package/dist/components/BaseSelect.vue3.js +6 -0
  82. package/dist/components/BaseSelect.vue3.js.map +1 -0
  83. package/dist/components/BaseSlider.vue.d.ts +22 -0
  84. package/dist/components/BaseSlider.vue.js +97 -0
  85. package/dist/components/BaseSlider.vue.js.map +1 -0
  86. package/dist/components/BaseSlider.vue3.js +6 -0
  87. package/dist/components/BaseSlider.vue3.js.map +1 -0
  88. package/dist/components/BaseTabs.vue.d.ts +14 -0
  89. package/dist/components/BaseTabs.vue.js +63 -0
  90. package/dist/components/BaseTabs.vue.js.map +1 -0
  91. package/dist/components/BaseTabs.vue3.js +6 -0
  92. package/dist/components/BaseTabs.vue3.js.map +1 -0
  93. package/dist/components/BaseTextarea.vue.d.ts +28 -0
  94. package/dist/components/BaseTextarea.vue.js +49 -0
  95. package/dist/components/BaseTextarea.vue.js.map +1 -0
  96. package/dist/components/BaseTextarea.vue3.js +6 -0
  97. package/dist/components/BaseTextarea.vue3.js.map +1 -0
  98. package/dist/components/BaseToggle.vue.d.ts +16 -0
  99. package/dist/components/BaseToggle.vue.js +65 -0
  100. package/dist/components/BaseToggle.vue.js.map +1 -0
  101. package/dist/components/BaseToggle.vue3.js +6 -0
  102. package/dist/components/BaseToggle.vue3.js.map +1 -0
  103. package/dist/components/BatchProgressList.vue.d.ts +59 -0
  104. package/dist/components/BatchProgressList.vue.js +250 -0
  105. package/dist/components/BatchProgressList.vue.js.map +1 -0
  106. package/dist/components/BatchProgressList.vue3.js +6 -0
  107. package/dist/components/BatchProgressList.vue3.js.map +1 -0
  108. package/dist/components/Breadcrumb.vue.d.ts +37 -0
  109. package/dist/components/Breadcrumb.vue.js +71 -0
  110. package/dist/components/Breadcrumb.vue.js.map +1 -0
  111. package/dist/components/Breadcrumb.vue3.js +6 -0
  112. package/dist/components/Breadcrumb.vue3.js.map +1 -0
  113. package/dist/components/Calendar.vue.d.ts +107 -0
  114. package/dist/components/Calendar.vue.js +328 -0
  115. package/dist/components/Calendar.vue.js.map +1 -0
  116. package/dist/components/Calendar.vue3.js +6 -0
  117. package/dist/components/Calendar.vue3.js.map +1 -0
  118. package/dist/components/ChartContainer.vue.d.ts +31 -0
  119. package/dist/components/ChartContainer.vue.js +78 -0
  120. package/dist/components/ChartContainer.vue.js.map +1 -0
  121. package/dist/components/ChartContainer.vue3.js +6 -0
  122. package/dist/components/ChartContainer.vue3.js.map +1 -0
  123. package/dist/components/ChemicalFormula.vue.d.ts +8 -0
  124. package/dist/components/ChemicalFormula.vue.js +57 -0
  125. package/dist/components/ChemicalFormula.vue.js.map +1 -0
  126. package/dist/components/ChemicalFormula.vue3.js +6 -0
  127. package/dist/components/ChemicalFormula.vue3.js.map +1 -0
  128. package/dist/components/CollapsibleCard.vue.d.ts +39 -0
  129. package/dist/components/CollapsibleCard.vue.js +175 -0
  130. package/dist/components/CollapsibleCard.vue.js.map +1 -0
  131. package/dist/components/CollapsibleCard.vue3.js +6 -0
  132. package/dist/components/CollapsibleCard.vue3.js.map +1 -0
  133. package/dist/components/ColorSlider.vue.d.ts +34 -0
  134. package/dist/components/ColorSlider.vue.js +131 -0
  135. package/dist/components/ColorSlider.vue.js.map +1 -0
  136. package/dist/components/ColorSlider.vue3.js +6 -0
  137. package/dist/components/ColorSlider.vue3.js.map +1 -0
  138. package/dist/components/ConcentrationInput.vue.d.ts +25 -0
  139. package/dist/components/ConcentrationInput.vue.js +161 -0
  140. package/dist/components/ConcentrationInput.vue.js.map +1 -0
  141. package/dist/components/ConcentrationInput.vue3.js +6 -0
  142. package/dist/components/ConcentrationInput.vue3.js.map +1 -0
  143. package/dist/components/ConfirmDialog.vue.d.ts +41 -0
  144. package/dist/components/ConfirmDialog.vue.js +140 -0
  145. package/dist/components/ConfirmDialog.vue.js.map +1 -0
  146. package/dist/components/ConfirmDialog.vue3.js +6 -0
  147. package/dist/components/ConfirmDialog.vue3.js.map +1 -0
  148. package/dist/components/DataFrame.vue.d.ts +107 -0
  149. package/dist/components/DataFrame.vue.js +430 -0
  150. package/dist/components/DataFrame.vue.js.map +1 -0
  151. package/dist/components/DataFrame.vue3.js +6 -0
  152. package/dist/components/DataFrame.vue3.js.map +1 -0
  153. package/dist/components/DatePicker.vue.d.ts +23 -0
  154. package/dist/components/DatePicker.vue.js +278 -0
  155. package/dist/components/DatePicker.vue.js.map +1 -0
  156. package/dist/components/DatePicker.vue3.js +6 -0
  157. package/dist/components/DatePicker.vue3.js.map +1 -0
  158. package/dist/components/DateTimePicker.vue.d.ts +30 -0
  159. package/dist/components/DateTimePicker.vue.js +413 -0
  160. package/dist/components/DateTimePicker.vue.js.map +1 -0
  161. package/dist/components/DateTimePicker.vue3.js +6 -0
  162. package/dist/components/DateTimePicker.vue3.js.map +1 -0
  163. package/dist/components/Divider.vue.d.ts +11 -0
  164. package/dist/components/Divider.vue.js +42 -0
  165. package/dist/components/Divider.vue.js.map +1 -0
  166. package/dist/components/Divider.vue3.js +6 -0
  167. package/dist/components/Divider.vue3.js.map +1 -0
  168. package/dist/components/DoseCalculator.vue.d.ts +19 -0
  169. package/dist/components/DoseCalculator.vue.js +470 -0
  170. package/dist/components/DoseCalculator.vue.js.map +1 -0
  171. package/dist/components/DoseCalculator.vue3.js +6 -0
  172. package/dist/components/DoseCalculator.vue3.js.map +1 -0
  173. package/dist/components/DropdownButton.vue.d.ts +47 -0
  174. package/dist/components/DropdownButton.vue.js +171 -0
  175. package/dist/components/DropdownButton.vue.js.map +1 -0
  176. package/dist/components/DropdownButton.vue3.js +6 -0
  177. package/dist/components/DropdownButton.vue3.js.map +1 -0
  178. package/dist/components/EmptyState.vue.d.ts +33 -0
  179. package/dist/components/EmptyState.vue.js +80 -0
  180. package/dist/components/EmptyState.vue.js.map +1 -0
  181. package/dist/components/EmptyState.vue3.js +6 -0
  182. package/dist/components/EmptyState.vue3.js.map +1 -0
  183. package/dist/components/ExperimentTimeline.vue.d.ts +44 -0
  184. package/dist/components/ExperimentTimeline.vue.js +395 -0
  185. package/dist/components/ExperimentTimeline.vue.js.map +1 -0
  186. package/dist/components/ExperimentTimeline.vue3.js +6 -0
  187. package/dist/components/ExperimentTimeline.vue3.js.map +1 -0
  188. package/dist/components/FileUploader.vue.d.ts +23 -0
  189. package/dist/components/FileUploader.vue.js +416 -0
  190. package/dist/components/FileUploader.vue.js.map +1 -0
  191. package/dist/components/FileUploader.vue3.js +6 -0
  192. package/dist/components/FileUploader.vue3.js.map +1 -0
  193. package/dist/components/FormField.vue.d.ts +24 -0
  194. package/dist/components/FormField.vue.js +45 -0
  195. package/dist/components/FormField.vue.js.map +1 -0
  196. package/dist/components/FormField.vue3.js +6 -0
  197. package/dist/components/FormField.vue3.js.map +1 -0
  198. package/dist/components/FormulaInput.vue.d.ts +25 -0
  199. package/dist/components/FormulaInput.vue.js +121 -0
  200. package/dist/components/FormulaInput.vue.js.map +1 -0
  201. package/dist/components/FormulaInput.vue3.js +6 -0
  202. package/dist/components/FormulaInput.vue3.js.map +1 -0
  203. package/dist/components/GroupAssigner.vue.d.ts +25 -0
  204. package/dist/components/GroupAssigner.vue.js +311 -0
  205. package/dist/components/GroupAssigner.vue.js.map +1 -0
  206. package/dist/components/GroupAssigner.vue3.js +6 -0
  207. package/dist/components/GroupAssigner.vue3.js.map +1 -0
  208. package/dist/components/GroupingModal.vue.d.ts +12 -0
  209. package/dist/components/GroupingModal.vue.js +446 -0
  210. package/dist/components/GroupingModal.vue.js.map +1 -0
  211. package/dist/components/GroupingModal.vue3.js +6 -0
  212. package/dist/components/GroupingModal.vue3.js.map +1 -0
  213. package/dist/components/IconButton.vue.d.ts +34 -0
  214. package/dist/components/IconButton.vue.js +67 -0
  215. package/dist/components/IconButton.vue.js.map +1 -0
  216. package/dist/components/IconButton.vue3.js +6 -0
  217. package/dist/components/IconButton.vue3.js.map +1 -0
  218. package/dist/components/LoadingSpinner.vue.d.ts +11 -0
  219. package/dist/components/LoadingSpinner.vue.js +47 -0
  220. package/dist/components/LoadingSpinner.vue.js.map +1 -0
  221. package/dist/components/LoadingSpinner.vue3.js +6 -0
  222. package/dist/components/LoadingSpinner.vue3.js.map +1 -0
  223. package/dist/components/MoleculeInput.vue.d.ts +30 -0
  224. package/dist/components/MoleculeInput.vue.js +327 -0
  225. package/dist/components/MoleculeInput.vue.js.map +1 -0
  226. package/dist/components/MoleculeInput.vue3.js +6 -0
  227. package/dist/components/MoleculeInput.vue3.js.map +1 -0
  228. package/dist/components/MultiSelect.vue.d.ts +19 -0
  229. package/dist/components/MultiSelect.vue.js +109 -0
  230. package/dist/components/MultiSelect.vue.js.map +1 -0
  231. package/dist/components/MultiSelect.vue3.js +6 -0
  232. package/dist/components/MultiSelect.vue3.js.map +1 -0
  233. package/dist/components/NumberInput.vue.d.ts +21 -0
  234. package/dist/components/NumberInput.vue.js +133 -0
  235. package/dist/components/NumberInput.vue.js.map +1 -0
  236. package/dist/components/NumberInput.vue3.js +6 -0
  237. package/dist/components/NumberInput.vue3.js.map +1 -0
  238. package/dist/components/PlateMapEditor.vue.d.ts +50 -0
  239. package/dist/components/PlateMapEditor.vue.js +480 -0
  240. package/dist/components/PlateMapEditor.vue.js.map +1 -0
  241. package/dist/components/PlateMapEditor.vue3.js +6 -0
  242. package/dist/components/PlateMapEditor.vue3.js.map +1 -0
  243. package/dist/components/ProgressBar.vue.d.ts +17 -0
  244. package/dist/components/ProgressBar.vue.js +65 -0
  245. package/dist/components/ProgressBar.vue.js.map +1 -0
  246. package/dist/components/ProgressBar.vue3.js +6 -0
  247. package/dist/components/ProgressBar.vue3.js.map +1 -0
  248. package/dist/components/ProtocolStepEditor.vue.d.ts +24 -0
  249. package/dist/components/ProtocolStepEditor.vue.js +491 -0
  250. package/dist/components/ProtocolStepEditor.vue.js.map +1 -0
  251. package/dist/components/ProtocolStepEditor.vue3.js +6 -0
  252. package/dist/components/ProtocolStepEditor.vue3.js.map +1 -0
  253. package/dist/components/RackEditor.vue.d.ts +40 -0
  254. package/dist/components/RackEditor.vue.js +325 -0
  255. package/dist/components/RackEditor.vue.js.map +1 -0
  256. package/dist/components/RackEditor.vue3.js +6 -0
  257. package/dist/components/RackEditor.vue3.js.map +1 -0
  258. package/dist/components/ReagentList.vue.d.ts +46 -0
  259. package/dist/components/ReagentList.vue.js +526 -0
  260. package/dist/components/ReagentList.vue.js.map +1 -0
  261. package/dist/components/ReagentList.vue3.js +6 -0
  262. package/dist/components/ReagentList.vue3.js.map +1 -0
  263. package/dist/components/ResourceCard.vue.d.ts +50 -0
  264. package/dist/components/ResourceCard.vue.js +212 -0
  265. package/dist/components/ResourceCard.vue.js.map +1 -0
  266. package/dist/components/ResourceCard.vue3.js +6 -0
  267. package/dist/components/ResourceCard.vue3.js.map +1 -0
  268. package/dist/components/SampleHierarchyTree.vue.d.ts +37 -0
  269. package/dist/components/SampleHierarchyTree.vue.js +217 -0
  270. package/dist/components/SampleHierarchyTree.vue.js.map +1 -0
  271. package/dist/components/SampleHierarchyTree.vue3.js +6 -0
  272. package/dist/components/SampleHierarchyTree.vue3.js.map +1 -0
  273. package/dist/components/SampleLegend.vue.d.ts +32 -0
  274. package/dist/components/SampleLegend.vue.js +129 -0
  275. package/dist/components/SampleLegend.vue.js.map +1 -0
  276. package/dist/components/SampleLegend.vue3.js +6 -0
  277. package/dist/components/SampleLegend.vue3.js.map +1 -0
  278. package/dist/components/SampleSelector.vue.d.ts +29 -0
  279. package/dist/components/SampleSelector.vue.js +1076 -0
  280. package/dist/components/SampleSelector.vue.js.map +1 -0
  281. package/dist/components/SampleSelector.vue3.js +6 -0
  282. package/dist/components/SampleSelector.vue3.js.map +1 -0
  283. package/dist/components/ScheduleCalendar.vue.d.ts +110 -0
  284. package/dist/components/ScheduleCalendar.vue.js +535 -0
  285. package/dist/components/ScheduleCalendar.vue.js.map +1 -0
  286. package/dist/components/ScheduleCalendar.vue3.js +6 -0
  287. package/dist/components/ScheduleCalendar.vue3.js.map +1 -0
  288. package/dist/components/ScientificNumber.vue.d.ts +14 -0
  289. package/dist/components/ScientificNumber.vue.js +190 -0
  290. package/dist/components/ScientificNumber.vue.js.map +1 -0
  291. package/dist/components/ScientificNumber.vue3.js +6 -0
  292. package/dist/components/ScientificNumber.vue3.js.map +1 -0
  293. package/dist/components/SegmentedControl.vue.d.ts +20 -0
  294. package/dist/components/SegmentedControl.vue.js +71 -0
  295. package/dist/components/SegmentedControl.vue.js.map +1 -0
  296. package/dist/components/SegmentedControl.vue3.js +6 -0
  297. package/dist/components/SegmentedControl.vue3.js.map +1 -0
  298. package/dist/components/SequenceInput.vue.d.ts +54 -0
  299. package/dist/components/SequenceInput.vue.js +204 -0
  300. package/dist/components/SequenceInput.vue.js.map +1 -0
  301. package/dist/components/SequenceInput.vue3.js +6 -0
  302. package/dist/components/SequenceInput.vue3.js.map +1 -0
  303. package/dist/components/SettingsButton.vue.d.ts +30 -0
  304. package/dist/components/SettingsButton.vue.js +72 -0
  305. package/dist/components/SettingsButton.vue.js.map +1 -0
  306. package/dist/components/SettingsButton.vue3.js +6 -0
  307. package/dist/components/SettingsButton.vue3.js.map +1 -0
  308. package/dist/components/SettingsModal.vue.d.ts +40 -0
  309. package/dist/components/SettingsModal.vue.js +141 -0
  310. package/dist/components/SettingsModal.vue.js.map +1 -0
  311. package/dist/components/SettingsModal.vue3.js +6 -0
  312. package/dist/components/SettingsModal.vue3.js.map +1 -0
  313. package/dist/components/Skeleton.vue.d.ts +11 -0
  314. package/dist/components/Skeleton.vue.js +65 -0
  315. package/dist/components/Skeleton.vue.js.map +1 -0
  316. package/dist/components/Skeleton.vue3.js +6 -0
  317. package/dist/components/Skeleton.vue3.js.map +1 -0
  318. package/dist/components/StatusIndicator.vue.d.ts +13 -0
  319. package/dist/components/StatusIndicator.vue.js +38 -0
  320. package/dist/components/StatusIndicator.vue.js.map +1 -0
  321. package/dist/components/StatusIndicator.vue3.js +6 -0
  322. package/dist/components/StatusIndicator.vue3.js.map +1 -0
  323. package/dist/components/StepWizard.vue.d.ts +72 -0
  324. package/dist/components/StepWizard.vue.js +213 -0
  325. package/dist/components/StepWizard.vue.js.map +1 -0
  326. package/dist/components/StepWizard.vue3.js +6 -0
  327. package/dist/components/StepWizard.vue3.js.map +1 -0
  328. package/dist/components/TagsInput.vue.d.ts +23 -0
  329. package/dist/components/TagsInput.vue.js +124 -0
  330. package/dist/components/TagsInput.vue.js.map +1 -0
  331. package/dist/components/TagsInput.vue3.js +6 -0
  332. package/dist/components/TagsInput.vue3.js.map +1 -0
  333. package/dist/components/ThemeToggle.vue.d.ts +7 -0
  334. package/dist/components/ThemeToggle.vue.js +49 -0
  335. package/dist/components/ThemeToggle.vue.js.map +1 -0
  336. package/dist/components/ThemeToggle.vue3.js +6 -0
  337. package/dist/components/ThemeToggle.vue3.js.map +1 -0
  338. package/dist/components/TimePicker.vue.d.ts +29 -0
  339. package/dist/components/TimePicker.vue.js +275 -0
  340. package/dist/components/TimePicker.vue.js.map +1 -0
  341. package/dist/components/TimePicker.vue3.js +6 -0
  342. package/dist/components/TimePicker.vue3.js.map +1 -0
  343. package/dist/components/TimeRangeInput.vue.d.ts +27 -0
  344. package/dist/components/TimeRangeInput.vue.js +115 -0
  345. package/dist/components/TimeRangeInput.vue.js.map +1 -0
  346. package/dist/components/TimeRangeInput.vue3.js +6 -0
  347. package/dist/components/TimeRangeInput.vue3.js.map +1 -0
  348. package/dist/components/ToastNotification.vue.d.ts +2 -0
  349. package/dist/components/ToastNotification.vue.js +113 -0
  350. package/dist/components/ToastNotification.vue.js.map +1 -0
  351. package/dist/components/ToastNotification.vue3.js +6 -0
  352. package/dist/components/ToastNotification.vue3.js.map +1 -0
  353. package/dist/components/Tooltip.vue.d.ts +25 -0
  354. package/dist/components/Tooltip.vue.js +52 -0
  355. package/dist/components/Tooltip.vue.js.map +1 -0
  356. package/dist/components/Tooltip.vue3.js +6 -0
  357. package/dist/components/Tooltip.vue3.js.map +1 -0
  358. package/dist/components/UnitInput.vue.d.ts +44 -0
  359. package/dist/components/UnitInput.vue.js +178 -0
  360. package/dist/components/UnitInput.vue.js.map +1 -0
  361. package/dist/components/UnitInput.vue3.js +6 -0
  362. package/dist/components/UnitInput.vue3.js.map +1 -0
  363. package/dist/components/WellEditPopup.vue.d.ts +25 -0
  364. package/dist/components/WellEditPopup.vue.js +250 -0
  365. package/dist/components/WellEditPopup.vue.js.map +1 -0
  366. package/dist/components/WellEditPopup.vue3.js +6 -0
  367. package/dist/components/WellEditPopup.vue3.js.map +1 -0
  368. package/dist/components/WellPlate.vue.d.ts +69 -0
  369. package/dist/components/WellPlate.vue.js +531 -0
  370. package/dist/components/WellPlate.vue.js.map +1 -0
  371. package/dist/components/WellPlate.vue3.js +6 -0
  372. package/dist/components/WellPlate.vue3.js.map +1 -0
  373. package/dist/components/index.d.ts +71 -0
  374. package/dist/components/index.js +215 -0
  375. package/dist/components/index.js.map +1 -0
  376. package/dist/composables/index.d.ts +17 -0
  377. package/dist/composables/index.js +49 -0
  378. package/dist/composables/index.js.map +1 -0
  379. package/dist/composables/useApi.d.ts +19 -0
  380. package/dist/composables/useApi.js +101 -0
  381. package/dist/composables/useApi.js.map +1 -0
  382. package/dist/composables/useAsync.d.ts +127 -0
  383. package/dist/composables/useAsync.js +141 -0
  384. package/dist/composables/useAsync.js.map +1 -0
  385. package/dist/composables/useAuth.d.ts +44 -0
  386. package/dist/composables/useAuth.js +286 -0
  387. package/dist/composables/useAuth.js.map +1 -0
  388. package/dist/composables/useChemicalFormula.d.ts +20 -0
  389. package/dist/composables/useChemicalFormula.js +228 -0
  390. package/dist/composables/useChemicalFormula.js.map +1 -0
  391. package/dist/composables/useConcentrationUnits.d.ts +28 -0
  392. package/dist/composables/useConcentrationUnits.js +154 -0
  393. package/dist/composables/useConcentrationUnits.js.map +1 -0
  394. package/dist/composables/useDoseCalculator.d.ts +57 -0
  395. package/dist/composables/useDoseCalculator.js +228 -0
  396. package/dist/composables/useDoseCalculator.js.map +1 -0
  397. package/dist/composables/useForm.d.ts +91 -0
  398. package/dist/composables/useForm.js +253 -0
  399. package/dist/composables/useForm.js.map +1 -0
  400. package/dist/composables/usePasskey.d.ts +9 -0
  401. package/dist/composables/usePasskey.js +171 -0
  402. package/dist/composables/usePasskey.js.map +1 -0
  403. package/dist/composables/usePlatformContext.d.ts +125 -0
  404. package/dist/composables/usePlatformContext.js +149 -0
  405. package/dist/composables/usePlatformContext.js.map +1 -0
  406. package/dist/composables/useProtocolTemplates.d.ts +43 -0
  407. package/dist/composables/useProtocolTemplates.js +437 -0
  408. package/dist/composables/useProtocolTemplates.js.map +1 -0
  409. package/dist/composables/useRackEditor.d.ts +30 -0
  410. package/dist/composables/useRackEditor.js +168 -0
  411. package/dist/composables/useRackEditor.js.map +1 -0
  412. package/dist/composables/useScheduleDrag.d.ts +77 -0
  413. package/dist/composables/useScheduleDrag.js +183 -0
  414. package/dist/composables/useScheduleDrag.js.map +1 -0
  415. package/dist/composables/useSequenceUtils.d.ts +13 -0
  416. package/dist/composables/useSequenceUtils.js +93 -0
  417. package/dist/composables/useSequenceUtils.js.map +1 -0
  418. package/dist/composables/useTheme.d.ts +7 -0
  419. package/dist/composables/useTheme.js +40 -0
  420. package/dist/composables/useTheme.js.map +1 -0
  421. package/dist/composables/useTimeUtils.d.ts +15 -0
  422. package/dist/composables/useTimeUtils.js +105 -0
  423. package/dist/composables/useTimeUtils.js.map +1 -0
  424. package/dist/composables/useToast.d.ts +19 -0
  425. package/dist/composables/useToast.js +33 -0
  426. package/dist/composables/useToast.js.map +1 -0
  427. package/dist/composables/useWellPlateEditor.d.ts +31 -0
  428. package/dist/composables/useWellPlateEditor.js +315 -0
  429. package/dist/composables/useWellPlateEditor.js.map +1 -0
  430. package/dist/histoire.setup.d.ts +1 -0
  431. package/dist/index.d.ts +5 -0
  432. package/dist/index.js +265 -0
  433. package/dist/index.js.map +1 -0
  434. package/dist/install.d.ts +16 -0
  435. package/dist/install.js +15 -0
  436. package/dist/install.js.map +1 -0
  437. package/dist/stores/auth.d.ts +146 -0
  438. package/dist/stores/auth.js +122 -0
  439. package/dist/stores/auth.js.map +1 -0
  440. package/dist/stores/index.d.ts +2 -0
  441. package/dist/stores/index.js +8 -0
  442. package/dist/stores/index.js.map +1 -0
  443. package/dist/stores/settings.d.ts +75 -0
  444. package/dist/stores/settings.js +180 -0
  445. package/dist/stores/settings.js.map +1 -0
  446. package/dist/styles.css +23264 -0
  447. package/dist/tailwind.preset.d.ts +56 -0
  448. package/dist/tailwind.preset.js +59 -0
  449. package/dist/tailwind.preset.js.map +1 -0
  450. package/dist/types/auth.d.ts +42 -0
  451. package/dist/types/components.d.ts +405 -0
  452. package/dist/types/index.d.ts +3 -0
  453. package/dist/types/index.js +2 -0
  454. package/dist/types/index.js.map +1 -0
  455. package/dist/types/platform.d.ts +66 -0
  456. package/package.json +111 -0
  457. package/src/__tests__/components/AppLayout.test.ts +163 -0
  458. package/src/__tests__/components/AppSidebar.test.ts +292 -0
  459. package/src/__tests__/components/AppTopBar.test.ts +590 -0
  460. package/src/__tests__/components/BaseInput.test.ts +99 -0
  461. package/src/__tests__/components/BasePill.test.ts +291 -0
  462. package/src/__tests__/components/Calendar.test.ts +566 -0
  463. package/src/__tests__/components/CollapsibleCard.test.ts +524 -0
  464. package/src/__tests__/components/DataFrame.test.ts +767 -0
  465. package/src/__tests__/components/DropdownButton.test.ts +471 -0
  466. package/src/__tests__/composables/useAuth.test.ts +141 -0
  467. package/src/__tests__/composables/useForm.test.ts +205 -0
  468. package/src/components/AlertBox.story.vue +100 -0
  469. package/src/components/AlertBox.vue +68 -0
  470. package/src/components/AppContainer.story.vue +104 -0
  471. package/src/components/AppContainer.vue +33 -0
  472. package/src/components/AppLayout.story.vue +218 -0
  473. package/src/components/AppLayout.vue +75 -0
  474. package/src/components/AppSidebar.story.vue +300 -0
  475. package/src/components/AppSidebar.vue +114 -0
  476. package/src/components/AppTopBar.story.vue +112 -0
  477. package/src/components/AppTopBar.vue +471 -0
  478. package/src/components/AuditTrail.story.vue +163 -0
  479. package/src/components/AuditTrail.vue +161 -0
  480. package/src/components/Avatar.story.vue +92 -0
  481. package/src/components/Avatar.vue +65 -0
  482. package/src/components/BaseButton.story.vue +96 -0
  483. package/src/components/BaseButton.vue +72 -0
  484. package/src/components/BaseCheckbox.story.vue +73 -0
  485. package/src/components/BaseCheckbox.vue +68 -0
  486. package/src/components/BaseInput.story.vue +98 -0
  487. package/src/components/BaseInput.vue +70 -0
  488. package/src/components/BaseModal.story.vue +126 -0
  489. package/src/components/BaseModal.vue +118 -0
  490. package/src/components/BasePill.story.vue +131 -0
  491. package/src/components/BasePill.vue +84 -0
  492. package/src/components/BaseRadioGroup.story.vue +116 -0
  493. package/src/components/BaseRadioGroup.vue +83 -0
  494. package/src/components/BaseSelect.story.vue +110 -0
  495. package/src/components/BaseSelect.vue +67 -0
  496. package/src/components/BaseSlider.story.vue +82 -0
  497. package/src/components/BaseSlider.vue +112 -0
  498. package/src/components/BaseTabs.story.vue +106 -0
  499. package/src/components/BaseTabs.vue +58 -0
  500. package/src/components/BaseTextarea.story.vue +91 -0
  501. package/src/components/BaseTextarea.vue +58 -0
  502. package/src/components/BaseToggle.story.vue +81 -0
  503. package/src/components/BaseToggle.vue +72 -0
  504. package/src/components/BatchProgressList.story.vue +92 -0
  505. package/src/components/BatchProgressList.vue +202 -0
  506. package/src/components/Breadcrumb.story.vue +93 -0
  507. package/src/components/Breadcrumb.vue +73 -0
  508. package/src/components/Calendar.story.vue +106 -0
  509. package/src/components/Calendar.vue +362 -0
  510. package/src/components/ChartContainer.story.vue +113 -0
  511. package/src/components/ChartContainer.vue +63 -0
  512. package/src/components/ChemicalFormula.story.vue +102 -0
  513. package/src/components/ChemicalFormula.vue +38 -0
  514. package/src/components/CollapsibleCard.story.vue +124 -0
  515. package/src/components/CollapsibleCard.vue +164 -0
  516. package/src/components/ColorSlider.story.vue +120 -0
  517. package/src/components/ColorSlider.vue +163 -0
  518. package/src/components/ConcentrationInput.story.vue +77 -0
  519. package/src/components/ConcentrationInput.vue +184 -0
  520. package/src/components/ConfirmDialog.story.vue +145 -0
  521. package/src/components/ConfirmDialog.vue +96 -0
  522. package/src/components/DataFrame.story.vue +148 -0
  523. package/src/components/DataFrame.vue +418 -0
  524. package/src/components/DatePicker.story.vue +104 -0
  525. package/src/components/DatePicker.vue +298 -0
  526. package/src/components/DateTimePicker.story.vue +112 -0
  527. package/src/components/DateTimePicker.vue +391 -0
  528. package/src/components/Divider.story.vue +72 -0
  529. package/src/components/Divider.vue +45 -0
  530. package/src/components/DoseCalculator.story.vue +68 -0
  531. package/src/components/DoseCalculator.vue +475 -0
  532. package/src/components/DropdownButton.story.vue +102 -0
  533. package/src/components/DropdownButton.vue +180 -0
  534. package/src/components/EmptyState.story.vue +124 -0
  535. package/src/components/EmptyState.vue +64 -0
  536. package/src/components/ExperimentTimeline.story.vue +161 -0
  537. package/src/components/ExperimentTimeline.vue +381 -0
  538. package/src/components/FileUploader.story.vue +106 -0
  539. package/src/components/FileUploader.vue +397 -0
  540. package/src/components/FormField.story.vue +119 -0
  541. package/src/components/FormField.vue +37 -0
  542. package/src/components/FormulaInput.story.vue +96 -0
  543. package/src/components/FormulaInput.vue +123 -0
  544. package/src/components/GroupAssigner.story.vue +83 -0
  545. package/src/components/GroupAssigner.vue +283 -0
  546. package/src/components/GroupingModal.story.vue +52 -0
  547. package/src/components/GroupingModal.vue +420 -0
  548. package/src/components/IconButton.story.vue +135 -0
  549. package/src/components/IconButton.vue +72 -0
  550. package/src/components/LoadingSpinner.story.vue +70 -0
  551. package/src/components/LoadingSpinner.vue +49 -0
  552. package/src/components/MoleculeInput.story.vue +66 -0
  553. package/src/components/MoleculeInput.vue +414 -0
  554. package/src/components/MultiSelect.story.vue +121 -0
  555. package/src/components/MultiSelect.vue +117 -0
  556. package/src/components/NumberInput.story.vue +90 -0
  557. package/src/components/NumberInput.vue +128 -0
  558. package/src/components/PlateMapEditor.story.vue +92 -0
  559. package/src/components/PlateMapEditor.vue +512 -0
  560. package/src/components/ProgressBar.story.vue +117 -0
  561. package/src/components/ProgressBar.vue +63 -0
  562. package/src/components/ProtocolStepEditor.story.vue +69 -0
  563. package/src/components/ProtocolStepEditor.vue +521 -0
  564. package/src/components/RackEditor.story.vue +100 -0
  565. package/src/components/RackEditor.vue +370 -0
  566. package/src/components/ReagentList.story.vue +137 -0
  567. package/src/components/ReagentList.vue +487 -0
  568. package/src/components/ResourceCard.story.vue +150 -0
  569. package/src/components/ResourceCard.vue +160 -0
  570. package/src/components/SampleHierarchyTree.story.vue +161 -0
  571. package/src/components/SampleHierarchyTree.vue +279 -0
  572. package/src/components/SampleLegend.story.vue +91 -0
  573. package/src/components/SampleLegend.vue +118 -0
  574. package/src/components/SampleSelector.story.vue +100 -0
  575. package/src/components/SampleSelector.vue +955 -0
  576. package/src/components/ScheduleCalendar.story.vue +195 -0
  577. package/src/components/ScheduleCalendar.vue +568 -0
  578. package/src/components/ScientificNumber.story.vue +128 -0
  579. package/src/components/ScientificNumber.vue +197 -0
  580. package/src/components/SegmentedControl.story.vue +112 -0
  581. package/src/components/SegmentedControl.vue +78 -0
  582. package/src/components/SequenceInput.story.vue +119 -0
  583. package/src/components/SequenceInput.vue +208 -0
  584. package/src/components/SettingsButton.story.vue +58 -0
  585. package/src/components/SettingsButton.vue +75 -0
  586. package/src/components/SettingsModal.story.vue +145 -0
  587. package/src/components/SettingsModal.vue +151 -0
  588. package/src/components/Skeleton.story.vue +120 -0
  589. package/src/components/Skeleton.vue +73 -0
  590. package/src/components/StatusIndicator.story.vue +99 -0
  591. package/src/components/StatusIndicator.vue +39 -0
  592. package/src/components/StepWizard.story.vue +155 -0
  593. package/src/components/StepWizard.vue +231 -0
  594. package/src/components/TagsInput.story.vue +104 -0
  595. package/src/components/TagsInput.vue +127 -0
  596. package/src/components/ThemeToggle.story.vue +36 -0
  597. package/src/components/ThemeToggle.vue +53 -0
  598. package/src/components/TimePicker.story.vue +96 -0
  599. package/src/components/TimePicker.vue +272 -0
  600. package/src/components/TimeRangeInput.story.vue +104 -0
  601. package/src/components/TimeRangeInput.vue +121 -0
  602. package/src/components/ToastNotification.story.vue +130 -0
  603. package/src/components/ToastNotification.vue +54 -0
  604. package/src/components/Tooltip.story.vue +102 -0
  605. package/src/components/Tooltip.vue +61 -0
  606. package/src/components/UnitInput.story.vue +170 -0
  607. package/src/components/UnitInput.vue +218 -0
  608. package/src/components/WellEditPopup.vue +234 -0
  609. package/src/components/WellPlate.story.vue +198 -0
  610. package/src/components/WellPlate.vue +637 -0
  611. package/src/components/index.ts +96 -0
  612. package/src/composables/index.ts +87 -0
  613. package/src/composables/useApi.ts +145 -0
  614. package/src/composables/useAsync.ts +322 -0
  615. package/src/composables/useAuth.ts +427 -0
  616. package/src/composables/useChemicalFormula.ts +274 -0
  617. package/src/composables/useConcentrationUnits.ts +245 -0
  618. package/src/composables/useDoseCalculator.ts +369 -0
  619. package/src/composables/useForm.ts +415 -0
  620. package/src/composables/usePasskey.ts +209 -0
  621. package/src/composables/usePlatformContext.ts +232 -0
  622. package/src/composables/useProtocolTemplates.ts +517 -0
  623. package/src/composables/useRackEditor.ts +221 -0
  624. package/src/composables/useScheduleDrag.ts +244 -0
  625. package/src/composables/useSequenceUtils.ts +104 -0
  626. package/src/composables/useTheme.ts +49 -0
  627. package/src/composables/useTimeUtils.ts +114 -0
  628. package/src/composables/useToast.ts +39 -0
  629. package/src/composables/useWellPlateEditor.ts +408 -0
  630. package/src/histoire.setup.ts +17 -0
  631. package/src/index.ts +283 -0
  632. package/src/install.ts +32 -0
  633. package/src/stores/auth.ts +144 -0
  634. package/src/stores/index.ts +2 -0
  635. package/src/stores/settings.ts +229 -0
  636. package/src/styles/components/alert-box.css +94 -0
  637. package/src/styles/components/app-container.css +32 -0
  638. package/src/styles/components/app-layout.css +99 -0
  639. package/src/styles/components/app-sidebar.css +133 -0
  640. package/src/styles/components/app-top-bar.css +396 -0
  641. package/src/styles/components/audit-trail.css +143 -0
  642. package/src/styles/components/avatar.css +64 -0
  643. package/src/styles/components/batch-progress-list.css +196 -0
  644. package/src/styles/components/breadcrumb.css +45 -0
  645. package/src/styles/components/button.css +119 -0
  646. package/src/styles/components/calendar.css +192 -0
  647. package/src/styles/components/chart-container.css +69 -0
  648. package/src/styles/components/checkbox.css +112 -0
  649. package/src/styles/components/chemical-formula.css +46 -0
  650. package/src/styles/components/collapsible-card.css +184 -0
  651. package/src/styles/components/color-slider.css +110 -0
  652. package/src/styles/components/concentration-input.css +142 -0
  653. package/src/styles/components/confirm-dialog.css +137 -0
  654. package/src/styles/components/dataframe.css +382 -0
  655. package/src/styles/components/date-picker.css +239 -0
  656. package/src/styles/components/datetime-picker.css +225 -0
  657. package/src/styles/components/divider.css +62 -0
  658. package/src/styles/components/dose-calculator.css +301 -0
  659. package/src/styles/components/dropdown-button.css +236 -0
  660. package/src/styles/components/empty-state.css +148 -0
  661. package/src/styles/components/experiment-timeline.css +529 -0
  662. package/src/styles/components/file-uploader.css +517 -0
  663. package/src/styles/components/form-field.css +35 -0
  664. package/src/styles/components/formula-input.css +96 -0
  665. package/src/styles/components/group-assigner.css +200 -0
  666. package/src/styles/components/grouping-modal.css +323 -0
  667. package/src/styles/components/icon-button.css +128 -0
  668. package/src/styles/components/input.css +53 -0
  669. package/src/styles/components/loading-spinner.css +67 -0
  670. package/src/styles/components/modal.css +122 -0
  671. package/src/styles/components/molecule-input.css +186 -0
  672. package/src/styles/components/multi-select.css +131 -0
  673. package/src/styles/components/number-input.css +110 -0
  674. package/src/styles/components/pill.css +172 -0
  675. package/src/styles/components/plate-map-editor.css +464 -0
  676. package/src/styles/components/progress-bar.css +88 -0
  677. package/src/styles/components/protocol-step-editor.css +449 -0
  678. package/src/styles/components/rack-editor.css +259 -0
  679. package/src/styles/components/radio-group.css +158 -0
  680. package/src/styles/components/reagent-list.css +407 -0
  681. package/src/styles/components/resource-card.css +360 -0
  682. package/src/styles/components/sample-hierarchy-tree.css +314 -0
  683. package/src/styles/components/sample-legend.css +201 -0
  684. package/src/styles/components/sample-selector.css +701 -0
  685. package/src/styles/components/schedule-calendar.css +478 -0
  686. package/src/styles/components/scientific-number.css +63 -0
  687. package/src/styles/components/segmented-control.css +190 -0
  688. package/src/styles/components/select.css +72 -0
  689. package/src/styles/components/sequence-input.css +184 -0
  690. package/src/styles/components/settings-button.css +75 -0
  691. package/src/styles/components/settings-modal.css +95 -0
  692. package/src/styles/components/skeleton.css +36 -0
  693. package/src/styles/components/slider.css +78 -0
  694. package/src/styles/components/status-indicator.css +59 -0
  695. package/src/styles/components/step-wizard.css +187 -0
  696. package/src/styles/components/tabs.css +108 -0
  697. package/src/styles/components/tags-input.css +118 -0
  698. package/src/styles/components/textarea.css +65 -0
  699. package/src/styles/components/theme-toggle.css +50 -0
  700. package/src/styles/components/time-picker.css +171 -0
  701. package/src/styles/components/time-range-input.css +42 -0
  702. package/src/styles/components/toast.css +72 -0
  703. package/src/styles/components/toggle.css +115 -0
  704. package/src/styles/components/tooltip.css +98 -0
  705. package/src/styles/components/unit-input.css +138 -0
  706. package/src/styles/components/well-edit-popup.css +252 -0
  707. package/src/styles/components/well-plate.css +310 -0
  708. package/src/styles/index.css +80 -0
  709. package/src/styles/variables.css +1078 -0
  710. package/src/tailwind.preset.ts +59 -0
  711. package/src/types/auth.ts +55 -0
  712. package/src/types/components.ts +560 -0
  713. package/src/types/index.ts +146 -0
  714. package/src/types/platform.ts +101 -0
@@ -0,0 +1,96 @@
1
+ // Base components
2
+ export { default as BaseButton } from './BaseButton.vue'
3
+ export { default as BaseInput } from './BaseInput.vue'
4
+ export { default as BaseTextarea } from './BaseTextarea.vue'
5
+ export { default as BaseSelect } from './BaseSelect.vue'
6
+ export { default as BaseCheckbox } from './BaseCheckbox.vue'
7
+ export { default as BaseToggle } from './BaseToggle.vue'
8
+ export { default as BaseRadioGroup } from './BaseRadioGroup.vue'
9
+ export { default as BaseSlider } from './BaseSlider.vue'
10
+ export { default as ColorSlider } from './ColorSlider.vue'
11
+ export { default as BaseTabs } from './BaseTabs.vue'
12
+ export { default as BaseModal } from './BaseModal.vue'
13
+ export { default as SegmentedControl } from './SegmentedControl.vue'
14
+ export { default as MultiSelect } from './MultiSelect.vue'
15
+ export { default as BasePill } from './BasePill.vue'
16
+ export { default as DropdownButton } from './DropdownButton.vue'
17
+ export { default as Calendar } from './Calendar.vue'
18
+ export { default as DataFrame } from './DataFrame.vue'
19
+
20
+ // Form components
21
+ export { default as FormField } from './FormField.vue'
22
+ export { default as DatePicker } from './DatePicker.vue'
23
+ export { default as TimePicker } from './TimePicker.vue'
24
+ export { default as TagsInput } from './TagsInput.vue'
25
+ export { default as NumberInput } from './NumberInput.vue'
26
+ export { default as FileUploader } from './FileUploader.vue'
27
+
28
+ // Feedback components
29
+ export { default as AlertBox } from './AlertBox.vue'
30
+ export { default as ToastNotification } from './ToastNotification.vue'
31
+
32
+ // Action components
33
+ export { default as IconButton } from './IconButton.vue'
34
+ export { default as ThemeToggle } from './ThemeToggle.vue'
35
+ export { default as SettingsButton } from './SettingsButton.vue'
36
+
37
+ // Layout components
38
+ export { default as CollapsibleCard } from './CollapsibleCard.vue'
39
+ export { default as AppTopBar } from './AppTopBar.vue'
40
+ export { default as AppSidebar } from './AppSidebar.vue'
41
+ export { default as AppLayout } from './AppLayout.vue'
42
+ export { default as AppContainer } from './AppContainer.vue'
43
+
44
+ // Utility components
45
+ export { default as Skeleton } from './Skeleton.vue'
46
+ export { default as LoadingSpinner } from './LoadingSpinner.vue'
47
+ export { default as Divider } from './Divider.vue'
48
+ export { default as StatusIndicator } from './StatusIndicator.vue'
49
+ export { default as ProgressBar } from './ProgressBar.vue'
50
+ export { default as Avatar } from './Avatar.vue'
51
+ export { default as EmptyState } from './EmptyState.vue'
52
+ export { default as Breadcrumb } from './Breadcrumb.vue'
53
+ export { default as Tooltip } from './Tooltip.vue'
54
+ export { default as ConfirmDialog } from './ConfirmDialog.vue'
55
+ export { default as ChartContainer } from './ChartContainer.vue'
56
+ export { default as SettingsModal } from './SettingsModal.vue'
57
+
58
+ // Biological experiment components
59
+ export { default as WellPlate } from './WellPlate.vue'
60
+ export { default as RackEditor } from './RackEditor.vue'
61
+ export { default as SampleLegend } from './SampleLegend.vue'
62
+ export { default as PlateMapEditor } from './PlateMapEditor.vue'
63
+ export { default as ExperimentTimeline } from './ExperimentTimeline.vue'
64
+
65
+ // Sample management components
66
+ export { default as SampleSelector } from './SampleSelector.vue'
67
+ export { default as GroupingModal } from './GroupingModal.vue'
68
+ export { default as GroupAssigner } from './GroupAssigner.vue'
69
+
70
+ // Lab/Experiment components
71
+ export { default as MoleculeInput } from './MoleculeInput.vue'
72
+ export { default as ConcentrationInput } from './ConcentrationInput.vue'
73
+ export { default as DoseCalculator } from './DoseCalculator.vue'
74
+ export { default as ReagentList } from './ReagentList.vue'
75
+ export { default as SampleHierarchyTree } from './SampleHierarchyTree.vue'
76
+ export { default as ProtocolStepEditor } from './ProtocolStepEditor.vue'
77
+
78
+ // Scientific display components
79
+ export { default as ScientificNumber } from './ScientificNumber.vue'
80
+ export { default as ChemicalFormula } from './ChemicalFormula.vue'
81
+
82
+ // Scientific input components
83
+ export { default as FormulaInput } from './FormulaInput.vue'
84
+ export { default as SequenceInput } from './SequenceInput.vue'
85
+ export { default as UnitInput } from './UnitInput.vue'
86
+
87
+ // Workflow components
88
+ export { default as StepWizard } from './StepWizard.vue'
89
+ export { default as AuditTrail } from './AuditTrail.vue'
90
+ export { default as BatchProgressList } from './BatchProgressList.vue'
91
+
92
+ // Scheduling / booking components
93
+ export { default as DateTimePicker } from './DateTimePicker.vue'
94
+ export { default as TimeRangeInput } from './TimeRangeInput.vue'
95
+ export { default as ScheduleCalendar } from './ScheduleCalendar.vue'
96
+ export { default as ResourceCard } from './ResourceCard.vue'
@@ -0,0 +1,87 @@
1
+ export { useApi, type ApiClientOptions } from './useApi'
2
+ export { useAuth } from './useAuth'
3
+ export { usePasskey } from './usePasskey'
4
+ export { useTheme } from './useTheme'
5
+ export { useToast } from './useToast'
6
+ export { usePlatformContext } from './usePlatformContext'
7
+ export {
8
+ useForm,
9
+ type ValidationRule,
10
+ type FieldRules,
11
+ type FieldState,
12
+ type UseFormReturn,
13
+ } from './useForm'
14
+ export {
15
+ useAsync,
16
+ useAsyncBatch,
17
+ type AsyncError,
18
+ type AsyncState,
19
+ type UseAsyncReturn,
20
+ type UseAsyncOptions,
21
+ } from './useAsync'
22
+ export {
23
+ useWellPlateEditor,
24
+ type UseWellPlateEditorOptions,
25
+ type UseWellPlateEditorReturn,
26
+ } from './useWellPlateEditor'
27
+ export {
28
+ useConcentrationUnits,
29
+ type ConcentrationValue,
30
+ type ConcentrationUnit,
31
+ type MolarityUnit,
32
+ type MassVolumeUnit,
33
+ type PercentageUnit,
34
+ type UnitCategory,
35
+ type UseConcentrationUnitsReturn,
36
+ } from './useConcentrationUnits'
37
+ export {
38
+ useDoseCalculator,
39
+ type VolumeUnit,
40
+ type VolumeValue,
41
+ type DilutionParams,
42
+ type DilutionResult,
43
+ type SerialDilutionParams,
44
+ type SerialDilutionStep,
45
+ type SerialDilutionResult,
46
+ type WellConcentration,
47
+ type UseDoseCalculatorReturn,
48
+ } from './useDoseCalculator'
49
+ export {
50
+ useProtocolTemplates,
51
+ type ParameterDefinition,
52
+ type StepTemplate,
53
+ type ValidationResult,
54
+ type UseProtocolTemplatesReturn,
55
+ } from './useProtocolTemplates'
56
+ export {
57
+ useRackEditor,
58
+ type UseRackEditorOptions,
59
+ type UseRackEditorReturn,
60
+ } from './useRackEditor'
61
+ export {
62
+ useChemicalFormula,
63
+ ATOMIC_WEIGHTS,
64
+ type ParsedElement,
65
+ type FormulaParseResult,
66
+ type FormulaPart,
67
+ type FormulaPartType,
68
+ } from './useChemicalFormula'
69
+ export {
70
+ useSequenceUtils,
71
+ type SequenceType,
72
+ type SequenceStats,
73
+ } from './useSequenceUtils'
74
+ export {
75
+ parseTime,
76
+ formatTime,
77
+ generateTimeSlots,
78
+ rangesOverlap,
79
+ durationMinutes,
80
+ formatDuration,
81
+ isTimeInRange,
82
+ findAvailableSlots,
83
+ snapToSlot,
84
+ addMinutes,
85
+ compareTime,
86
+ } from './useTimeUtils'
87
+ export { useScheduleDrag } from './useScheduleDrag'
@@ -0,0 +1,145 @@
1
+ import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'
2
+ import { useSettingsStore } from '../stores/settings'
3
+ import { useAuthStore } from '../stores/auth'
4
+
5
+ let apiClientInstance: AxiosInstance | null = null
6
+ let interceptorAttached = false
7
+
8
+ function getApiClient(): AxiosInstance {
9
+ if (!apiClientInstance) {
10
+ apiClientInstance = axios.create({
11
+ headers: {
12
+ 'Content-Type': 'application/json',
13
+ },
14
+ })
15
+ }
16
+ return apiClientInstance
17
+ }
18
+
19
+ export interface ApiClientOptions {
20
+ baseUrl?: string
21
+ timeout?: number
22
+ withAuth?: boolean
23
+ }
24
+
25
+ export interface UseApiReturn {
26
+ client: AxiosInstance
27
+ get: <T>(url: string, config?: AxiosRequestConfig) => Promise<T>
28
+ post: <T>(url: string, data?: unknown, config?: AxiosRequestConfig) => Promise<T>
29
+ put: <T>(url: string, data?: unknown, config?: AxiosRequestConfig) => Promise<T>
30
+ patch: <T>(url: string, data?: unknown, config?: AxiosRequestConfig) => Promise<T>
31
+ delete: <T>(url: string, config?: AxiosRequestConfig) => Promise<T>
32
+ upload: <T>(url: string, file: File, fieldName?: string, additionalData?: Record<string, unknown>) => Promise<T>
33
+ download: (url: string, filename?: string) => Promise<string>
34
+ buildUrl: (path: string) => string
35
+ buildWsUrl: (path: string) => string
36
+ }
37
+
38
+ export function useApi(options: ApiClientOptions = {}): UseApiReturn {
39
+ const settingsStore = useSettingsStore()
40
+ const authStore = useAuthStore()
41
+ const apiClient = getApiClient()
42
+
43
+ // Attach interceptor only once
44
+ if (!interceptorAttached) {
45
+ apiClient.interceptors.request.use((config) => {
46
+ // Set base URL from settings or options
47
+ config.baseURL = options.baseUrl ?? settingsStore.getApiBaseUrl()
48
+ config.timeout = options.timeout ?? settingsStore.requestTimeout
49
+
50
+ // Add Authorization header if token exists and auth is not explicitly disabled
51
+ if (options.withAuth !== false && authStore.token) {
52
+ config.headers.Authorization = `Bearer ${authStore.token}`
53
+ }
54
+
55
+ return config
56
+ })
57
+ interceptorAttached = true
58
+ }
59
+
60
+ // Generic request methods
61
+ async function get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
62
+ const response = await apiClient.get<T>(url, config)
63
+ return response.data
64
+ }
65
+
66
+ async function post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {
67
+ const response = await apiClient.post<T>(url, data, config)
68
+ return response.data
69
+ }
70
+
71
+ async function put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {
72
+ const response = await apiClient.put<T>(url, data, config)
73
+ return response.data
74
+ }
75
+
76
+ async function patch<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {
77
+ const response = await apiClient.patch<T>(url, data, config)
78
+ return response.data
79
+ }
80
+
81
+ async function del<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
82
+ const response = await apiClient.delete<T>(url, config)
83
+ return response.data
84
+ }
85
+
86
+ // File upload helper
87
+ async function upload<T>(url: string, file: File, fieldName = 'file', additionalData?: Record<string, unknown>): Promise<T> {
88
+ const formData = new FormData()
89
+ formData.append(fieldName, file)
90
+
91
+ if (additionalData) {
92
+ Object.entries(additionalData).forEach(([key, value]) => {
93
+ if (value !== undefined && value !== null) {
94
+ formData.append(key, typeof value === 'object' ? JSON.stringify(value) : String(value))
95
+ }
96
+ })
97
+ }
98
+
99
+ const response = await apiClient.post<T>(url, formData, {
100
+ headers: { 'Content-Type': 'multipart/form-data' },
101
+ })
102
+ return response.data
103
+ }
104
+
105
+ // Download helper - returns blob URL
106
+ async function download(url: string, filename?: string): Promise<string> {
107
+ const response = await apiClient.get(url, { responseType: 'blob' })
108
+ const blob = new Blob([response.data])
109
+ const blobUrl = URL.createObjectURL(blob)
110
+
111
+ // Optionally trigger download
112
+ if (filename) {
113
+ const link = document.createElement('a')
114
+ link.href = blobUrl
115
+ link.download = filename
116
+ link.click()
117
+ }
118
+
119
+ return blobUrl
120
+ }
121
+
122
+ // Build full URL for external use (e.g., <a href="...">)
123
+ function buildUrl(path: string): string {
124
+ const baseUrl = options.baseUrl ?? settingsStore.getApiBaseUrl()
125
+ return `${baseUrl}${path}`
126
+ }
127
+
128
+ // WebSocket URL builder
129
+ function buildWsUrl(path: string): string {
130
+ return `${settingsStore.getWsBaseUrl()}${path}`
131
+ }
132
+
133
+ return {
134
+ client: apiClient,
135
+ get,
136
+ post,
137
+ put,
138
+ patch,
139
+ delete: del,
140
+ upload,
141
+ download,
142
+ buildUrl,
143
+ buildWsUrl,
144
+ }
145
+ }
@@ -0,0 +1,322 @@
1
+ import { ref, computed, type Ref, type ComputedRef } from 'vue'
2
+
3
+ /**
4
+ * Error type for async operations.
5
+ */
6
+ export interface AsyncError {
7
+ message: string
8
+ code?: string
9
+ details?: Record<string, unknown>
10
+ originalError?: unknown
11
+ }
12
+
13
+ /**
14
+ * State of an async operation.
15
+ */
16
+ export type AsyncState = 'idle' | 'loading' | 'success' | 'error'
17
+
18
+ /**
19
+ * Return type for useAsync composable.
20
+ */
21
+ export interface UseAsyncReturn<T> {
22
+ // Data
23
+ data: Ref<T | null>
24
+ error: Ref<AsyncError | null>
25
+
26
+ // State
27
+ state: Ref<AsyncState>
28
+ isIdle: ComputedRef<boolean>
29
+ isLoading: ComputedRef<boolean>
30
+ isSuccess: ComputedRef<boolean>
31
+ isError: ComputedRef<boolean>
32
+
33
+ // Methods
34
+ execute: (...args: unknown[]) => Promise<T | null>
35
+ reset: () => void
36
+ setData: (data: T | null) => void
37
+ setError: (error: AsyncError | null) => void
38
+ }
39
+
40
+ /**
41
+ * Options for useAsync.
42
+ */
43
+ export interface UseAsyncOptions<T> {
44
+ // Initial data value
45
+ initialData?: T | null
46
+
47
+ // Whether to run immediately on creation
48
+ immediate?: boolean
49
+
50
+ // Arguments for immediate execution
51
+ immediateArgs?: unknown[]
52
+
53
+ // Transform error into AsyncError
54
+ transformError?: (error: unknown) => AsyncError
55
+
56
+ // Called on success
57
+ onSuccess?: (data: T) => void
58
+
59
+ // Called on error
60
+ onError?: (error: AsyncError) => void
61
+
62
+ // Reset data on new execution
63
+ resetOnExecute?: boolean
64
+ }
65
+
66
+ /**
67
+ * Default error transformer.
68
+ */
69
+ function defaultTransformError(error: unknown): AsyncError {
70
+ if (error instanceof Error) {
71
+ return {
72
+ message: error.message,
73
+ originalError: error,
74
+ }
75
+ }
76
+
77
+ if (typeof error === 'object' && error !== null) {
78
+ const errorObj = error as Record<string, unknown>
79
+
80
+ // Handle Axios-like errors
81
+ if ('response' in errorObj && errorObj.response) {
82
+ const response = errorObj.response as Record<string, unknown>
83
+ const data = response.data as Record<string, unknown> | undefined
84
+
85
+ return {
86
+ message: (data?.detail as string) || (data?.message as string) || 'Request failed',
87
+ code: String(response.status),
88
+ details: data,
89
+ originalError: error,
90
+ }
91
+ }
92
+
93
+ // Handle generic error objects
94
+ return {
95
+ message: (errorObj.message as string) || 'Unknown error',
96
+ code: errorObj.code as string | undefined,
97
+ details: errorObj,
98
+ originalError: error,
99
+ }
100
+ }
101
+
102
+ return {
103
+ message: String(error),
104
+ originalError: error,
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Composable for managing async operation state.
110
+ *
111
+ * Provides standardized loading, error, and success state management
112
+ * for any async function.
113
+ *
114
+ * @param asyncFn - The async function to wrap
115
+ * @param options - Configuration options
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * // Basic usage
120
+ * const { data, isLoading, error, execute } = useAsync(
121
+ * async (id: string) => {
122
+ * const response = await api.get(`/users/${id}`)
123
+ * return response.data
124
+ * }
125
+ * )
126
+ *
127
+ * // Execute the function
128
+ * await execute('user-123')
129
+ *
130
+ * // In template
131
+ * <div v-if="isLoading">Loading...</div>
132
+ * <div v-else-if="error">{{ error.message }}</div>
133
+ * <div v-else-if="data">{{ data.name }}</div>
134
+ * ```
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * // With options
139
+ * const { data, execute } = useAsync(
140
+ * fetchUser,
141
+ * {
142
+ * immediate: true,
143
+ * immediateArgs: ['default-user'],
144
+ * onSuccess: (user) => console.log('Fetched:', user.name),
145
+ * onError: (error) => toast.error(error.message),
146
+ * }
147
+ * )
148
+ * ```
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * // Form submission
153
+ * const { isLoading, error, execute: submit } = useAsync(
154
+ * async (formData: FormData) => {
155
+ * await api.post('/submit', formData)
156
+ * },
157
+ * {
158
+ * onSuccess: () => {
159
+ * toast.success('Submitted!')
160
+ * router.push('/success')
161
+ * },
162
+ * }
163
+ * )
164
+ *
165
+ * const handleSubmit = () => submit(new FormData(formRef.value))
166
+ * ```
167
+ */
168
+ export function useAsync<T>(
169
+ asyncFn: (...args: unknown[]) => Promise<T>,
170
+ options: UseAsyncOptions<T> = {}
171
+ ): UseAsyncReturn<T> {
172
+ const {
173
+ initialData = null,
174
+ immediate = false,
175
+ immediateArgs = [],
176
+ transformError = defaultTransformError,
177
+ onSuccess,
178
+ onError,
179
+ resetOnExecute = false,
180
+ } = options
181
+
182
+ // State
183
+ const data = ref<T | null>(initialData) as Ref<T | null>
184
+ const error = ref<AsyncError | null>(null)
185
+ const state = ref<AsyncState>('idle')
186
+
187
+ // Computed state helpers
188
+ const isIdle = computed(() => state.value === 'idle')
189
+ const isLoading = computed(() => state.value === 'loading')
190
+ const isSuccess = computed(() => state.value === 'success')
191
+ const isError = computed(() => state.value === 'error')
192
+
193
+ // Execute the async function
194
+ async function execute(...args: unknown[]): Promise<T | null> {
195
+ state.value = 'loading'
196
+ error.value = null
197
+
198
+ if (resetOnExecute) {
199
+ data.value = null
200
+ }
201
+
202
+ try {
203
+ const result = await asyncFn(...args)
204
+ data.value = result
205
+ state.value = 'success'
206
+ onSuccess?.(result)
207
+ return result
208
+ } catch (e) {
209
+ const asyncError = transformError(e)
210
+ error.value = asyncError
211
+ state.value = 'error'
212
+ onError?.(asyncError)
213
+ return null
214
+ }
215
+ }
216
+
217
+ // Reset to initial state
218
+ function reset(): void {
219
+ data.value = initialData
220
+ error.value = null
221
+ state.value = 'idle'
222
+ }
223
+
224
+ // Manual data setter
225
+ function setData(newData: T | null): void {
226
+ data.value = newData
227
+ if (newData !== null) {
228
+ state.value = 'success'
229
+ error.value = null
230
+ }
231
+ }
232
+
233
+ // Manual error setter
234
+ function setError(newError: AsyncError | null): void {
235
+ error.value = newError
236
+ if (newError !== null) {
237
+ state.value = 'error'
238
+ }
239
+ }
240
+
241
+ // Execute immediately if requested
242
+ if (immediate) {
243
+ execute(...immediateArgs)
244
+ }
245
+
246
+ return {
247
+ data,
248
+ error,
249
+ state,
250
+ isIdle,
251
+ isLoading,
252
+ isSuccess,
253
+ isError,
254
+ execute,
255
+ reset,
256
+ setData,
257
+ setError,
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Create a batch of async operations that can be executed in parallel.
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * const { results, isLoading, execute } = useAsyncBatch([
267
+ * () => fetchUser(userId),
268
+ * () => fetchPosts(userId),
269
+ * () => fetchComments(userId),
270
+ * ])
271
+ *
272
+ * await execute()
273
+ * // results.value = [user, posts, comments]
274
+ * ```
275
+ */
276
+ export function useAsyncBatch<T extends readonly (() => Promise<unknown>)[]>(
277
+ asyncFns: T
278
+ ): {
279
+ results: Ref<{ [K in keyof T]: Awaited<ReturnType<T[K]>> | null }>
280
+ errors: Ref<(AsyncError | null)[]>
281
+ isLoading: Ref<boolean>
282
+ execute: () => Promise<void>
283
+ reset: () => void
284
+ } {
285
+ type Results = { [K in keyof T]: Awaited<ReturnType<T[K]>> | null }
286
+
287
+ const results = ref<Results>(asyncFns.map(() => null) as unknown as Results) as Ref<Results>
288
+ const errors = ref<(AsyncError | null)[]>(asyncFns.map(() => null))
289
+ const isLoading = ref(false)
290
+
291
+ async function execute(): Promise<void> {
292
+ isLoading.value = true
293
+ errors.value = asyncFns.map(() => null)
294
+
295
+ const promises = asyncFns.map(async (fn, index) => {
296
+ try {
297
+ const result = await fn()
298
+ ;(results.value as unknown[])[index] = result
299
+ } catch (e) {
300
+ errors.value[index] = defaultTransformError(e)
301
+ ;(results.value as unknown[])[index] = null
302
+ }
303
+ })
304
+
305
+ await Promise.all(promises)
306
+ isLoading.value = false
307
+ }
308
+
309
+ function reset(): void {
310
+ results.value = asyncFns.map(() => null) as unknown as Results
311
+ errors.value = asyncFns.map(() => null)
312
+ isLoading.value = false
313
+ }
314
+
315
+ return {
316
+ results,
317
+ errors,
318
+ isLoading,
319
+ execute,
320
+ reset,
321
+ }
322
+ }