@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.
- package/README.md +326 -0
- package/dist/__stories__/experiment-helpers.d.ts +25 -0
- package/dist/__tests__/components/AppLayout.test.d.ts +1 -0
- package/dist/__tests__/components/AppSidebar.test.d.ts +1 -0
- package/dist/__tests__/components/AppTopBar.test.d.ts +1 -0
- package/dist/__tests__/components/BaseInput.test.d.ts +1 -0
- package/dist/__tests__/components/BasePill.test.d.ts +1 -0
- package/dist/__tests__/components/Calendar.test.d.ts +1 -0
- package/dist/__tests__/components/CollapsibleCard.test.d.ts +1 -0
- package/dist/__tests__/components/DataFrame.test.d.ts +1 -0
- package/dist/__tests__/components/DropdownButton.test.d.ts +1 -0
- package/dist/__tests__/composables/formBuilderRegistry.test.d.ts +1 -0
- package/dist/__tests__/composables/useAppExperiment.test.d.ts +1 -0
- package/dist/__tests__/composables/useAuth.test.d.ts +1 -0
- package/dist/__tests__/composables/useAutoGroup.test.d.ts +1 -0
- package/dist/__tests__/composables/useExperimentData.test.d.ts +13 -0
- package/dist/__tests__/composables/useExperimentSave.test.d.ts +1 -0
- package/dist/__tests__/composables/useForm.test.d.ts +1 -0
- package/dist/__tests__/composables/useFormBuilder.test.d.ts +1 -0
- package/dist/__tests__/composables/usePlatformContext.test.d.ts +1 -0
- package/dist/__tests__/composables/usePluginApi.test.d.ts +13 -0
- package/dist/__tests__/composables/usePluginConfig.test.d.ts +14 -0
- package/dist/__tests__/utils/color.test.d.ts +1 -0
- package/dist/auth-BYmxZdJl.js +297 -0
- package/dist/auth-BYmxZdJl.js.map +1 -0
- package/dist/components/AlertBox.vue.d.ts +34 -0
- package/dist/components/AppAvatarMenu.vue.d.ts +58 -0
- package/dist/components/AppContainer.vue.d.ts +28 -0
- package/dist/components/AppLayout.vue.d.ts +31 -0
- package/dist/components/AppPageSelector.vue.d.ts +43 -0
- package/dist/components/AppPillNav.vue.d.ts +11 -0
- package/dist/components/AppPluginSwitcher.vue.d.ts +38 -0
- package/dist/components/AppSidebar.vue.d.ts +47 -0
- package/dist/components/AppTopBar.vue.d.ts +111 -0
- package/dist/components/AuditTrail.vue.d.ts +38 -0
- package/dist/components/AutoGroupModal.vue.d.ts +124 -0
- package/dist/components/Avatar.vue.d.ts +14 -0
- package/dist/components/BaseButton.vue.d.ts +37 -0
- package/dist/components/BaseCheckbox.vue.d.ts +17 -0
- package/dist/components/BaseInput.vue.d.ts +34 -0
- package/dist/components/BaseModal.vue.d.ts +46 -0
- package/dist/components/BasePill.vue.d.ts +57 -0
- package/dist/components/BaseRadioGroup.vue.d.ts +21 -0
- package/dist/components/BaseSelect.vue.d.ts +20 -0
- package/dist/components/BaseSlider.vue.d.ts +22 -0
- package/dist/components/BaseTabs.vue.d.ts +14 -0
- package/dist/components/BaseTextarea.vue.d.ts +30 -0
- package/dist/components/BaseToggle.vue.d.ts +19 -0
- package/dist/components/BatchProgressList.vue.d.ts +43 -0
- package/dist/components/Breadcrumb.vue.d.ts +33 -0
- package/dist/components/Calendar.vue.d.ts +107 -0
- package/dist/components/ChartContainer.vue.d.ts +31 -0
- package/dist/components/ChemicalFormula.vue.d.ts +8 -0
- package/dist/components/CollapsibleCard.vue.d.ts +41 -0
- package/dist/components/ColorSlider.vue.d.ts +34 -0
- package/dist/components/ConcentrationInput.vue.d.ts +25 -0
- package/dist/components/ConfirmDialog.vue.d.ts +42 -0
- package/dist/components/DataFrame.vue.d.ts +107 -0
- package/dist/components/DatePicker.vue.d.ts +25 -0
- package/dist/components/DateTimePicker.vue.d.ts +30 -0
- package/dist/components/Divider.vue.d.ts +14 -0
- package/dist/components/DoseCalculator.vue.d.ts +19 -0
- package/dist/components/DropdownButton.vue.d.ts +47 -0
- package/dist/components/EmptyState.vue.d.ts +36 -0
- package/dist/components/ExperimentCodeBadge.vue.d.ts +14 -0
- package/dist/components/ExperimentDataViewer.vue.d.ts +29 -0
- package/dist/components/ExperimentPopover.vue.d.ts +32 -0
- package/dist/components/ExperimentSelectorModal.vue.d.ts +28 -0
- package/dist/components/ExperimentTimeline.vue.d.ts +44 -0
- package/dist/components/FileUploader.vue.d.ts +40 -0
- package/dist/components/FitPanel.vue.d.ts +46 -0
- package/dist/components/FormActions.vue.d.ts +33 -0
- package/dist/components/FormBuilder.vue.d.ts +287 -0
- package/dist/components/FormField.vue.d.ts +28 -0
- package/dist/components/FormFieldRenderer.vue.d.ts +31 -0
- package/dist/components/FormSection.vue.d.ts +43 -0
- package/dist/components/FormulaInput.vue.d.ts +25 -0
- package/dist/components/GroupAssigner.vue.d.ts +25 -0
- package/dist/components/GroupingModal.vue.d.ts +12 -0
- package/dist/components/IconButton.vue.d.ts +34 -0
- package/dist/components/LoadingSpinner.vue.d.ts +12 -0
- package/dist/components/MoleculeInput.vue.d.ts +27 -0
- package/dist/components/MultiSelect.vue.d.ts +19 -0
- package/dist/components/NumberInput.vue.d.ts +22 -0
- package/dist/components/PlateMapEditor.vue.d.ts +50 -0
- package/dist/components/ProgressBar.vue.d.ts +23 -0
- package/dist/components/ProtocolStepEditor.vue.d.ts +24 -0
- package/dist/components/RackEditor.vue.d.ts +40 -0
- package/dist/components/ReagentEditor.vue.d.ts +30 -0
- package/dist/components/ReagentList.vue.d.ts +32 -0
- package/dist/components/ResourceCard.vue.d.ts +50 -0
- package/dist/components/SampleHierarchyTree.vue.d.ts +26 -0
- package/dist/components/SampleLegend.vue.d.ts +32 -0
- package/dist/components/SampleSelector.vue.d.ts +29 -0
- package/dist/components/ScheduleCalendar.vue.d.ts +110 -0
- package/dist/components/ScientificNumber.vue.d.ts +14 -0
- package/dist/components/SegmentedControl.vue.d.ts +20 -0
- package/dist/components/SequenceInput.vue.d.ts +54 -0
- package/dist/components/SettingsButton.vue.d.ts +30 -0
- package/dist/components/SettingsModal.vue.d.ts +36 -0
- package/dist/components/Skeleton.vue.d.ts +11 -0
- package/dist/components/StatusIndicator.vue.d.ts +13 -0
- package/dist/components/StepWizard.vue.d.ts +65 -0
- package/dist/components/TagsInput.vue.d.ts +39 -0
- package/dist/components/ThemeToggle.vue.d.ts +7 -0
- package/dist/components/TimePicker.vue.d.ts +29 -0
- package/dist/components/TimeRangeInput.vue.d.ts +27 -0
- package/dist/components/ToastNotification.vue.d.ts +2 -0
- package/dist/components/Tooltip.vue.d.ts +35 -0
- package/dist/components/UnitInput.vue.d.ts +39 -0
- package/dist/components/WellEditPopup.vue.d.ts +25 -0
- package/dist/components/WellPlate.vue.d.ts +73 -0
- package/dist/components/index.d.ts +87 -0
- package/dist/components/index.js +3 -0
- package/dist/components-CKf-UpGi.js +15089 -0
- package/dist/components-CKf-UpGi.js.map +1 -0
- package/dist/composables/experiment-utils.d.ts +8 -0
- package/dist/composables/formBuilderRegistry.d.ts +13 -0
- package/dist/composables/index.d.ts +28 -0
- package/dist/composables/index.js +3 -0
- package/dist/composables/useApi.d.ts +20 -0
- package/dist/composables/useAppExperiment.d.ts +37 -0
- package/dist/composables/useAsync.d.ts +128 -0
- package/dist/composables/useAuth.d.ts +47 -0
- package/dist/composables/useAutoGroup.d.ts +106 -0
- package/dist/composables/useChemicalFormula.d.ts +21 -0
- package/dist/composables/useConcentrationUnits.d.ts +29 -0
- package/dist/composables/useDoseCalculator.d.ts +58 -0
- package/dist/composables/useExperimentData.d.ts +18 -0
- package/dist/composables/useExperimentSave.d.ts +36 -0
- package/dist/composables/useExperimentSelector.d.ts +30 -0
- package/dist/composables/useForm.d.ts +92 -0
- package/dist/composables/useFormBuilder.d.ts +24 -0
- package/dist/composables/usePasskey.d.ts +10 -0
- package/dist/composables/usePlatformContext.d.ts +131 -0
- package/dist/composables/usePluginApi.d.ts +29 -0
- package/dist/composables/usePluginConfig.d.ts +13 -0
- package/dist/composables/useProtocolTemplates.d.ts +44 -0
- package/dist/composables/useRackEditor.d.ts +31 -0
- package/dist/composables/useReagentSeries.d.ts +23 -0
- package/dist/composables/useScheduleDrag.d.ts +78 -0
- package/dist/composables/useSequenceUtils.d.ts +14 -0
- package/dist/composables/useTheme.d.ts +8 -0
- package/dist/composables/useTimeUtils.d.ts +29 -0
- package/dist/composables/useToast.d.ts +22 -0
- package/dist/composables/useWellPlateEditor.d.ts +33 -0
- package/dist/composables-D0QfFzq1.js +805 -0
- package/dist/composables-D0QfFzq1.js.map +1 -0
- package/dist/histoire.setup.d.ts +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/install.d.ts +16 -0
- package/dist/install.js +23 -0
- package/dist/install.js.map +1 -0
- package/dist/stores/auth.d.ts +146 -0
- package/dist/stores/index.d.ts +2 -0
- package/dist/stores/index.js +2 -0
- package/dist/stores/settings.d.ts +75 -0
- package/dist/styles.css +29728 -0
- package/dist/tailwind.preset.d.ts +58 -0
- package/dist/tailwind.preset.js +66 -0
- package/dist/tailwind.preset.js.map +1 -0
- package/dist/types/auth.d.ts +42 -0
- package/dist/types/auto-group.d.ts +34 -0
- package/dist/types/components.d.ts +528 -0
- package/dist/types/form-builder.d.ts +167 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +0 -0
- package/dist/types/platform.d.ts +75 -0
- package/dist/useScheduleDrag-DAJueTbK.js +7181 -0
- package/dist/useScheduleDrag-DAJueTbK.js.map +1 -0
- package/dist/utils/color.d.ts +24 -0
- package/package.json +114 -0
- package/src/__stories__/experiment-helpers.ts +83 -0
- package/src/__tests__/components/AppLayout.test.ts +163 -0
- package/src/__tests__/components/AppSidebar.test.ts +292 -0
- package/src/__tests__/components/AppTopBar.test.ts +683 -0
- package/src/__tests__/components/BaseInput.test.ts +99 -0
- package/src/__tests__/components/BasePill.test.ts +291 -0
- package/src/__tests__/components/Calendar.test.ts +566 -0
- package/src/__tests__/components/CollapsibleCard.test.ts +524 -0
- package/src/__tests__/components/DataFrame.test.ts +767 -0
- package/src/__tests__/components/DropdownButton.test.ts +471 -0
- package/src/__tests__/composables/formBuilderRegistry.test.ts +187 -0
- package/src/__tests__/composables/useAppExperiment.test.ts +560 -0
- package/src/__tests__/composables/useAuth.test.ts +188 -0
- package/src/__tests__/composables/useAutoGroup.test.ts +860 -0
- package/src/__tests__/composables/useExperimentData.test.ts +127 -0
- package/src/__tests__/composables/useExperimentSave.test.ts +347 -0
- package/src/__tests__/composables/useForm.test.ts +205 -0
- package/src/__tests__/composables/useFormBuilder.test.ts +917 -0
- package/src/__tests__/composables/usePlatformContext.test.ts +116 -0
- package/src/__tests__/composables/usePluginApi.test.ts +81 -0
- package/src/__tests__/composables/usePluginConfig.test.ts +176 -0
- package/src/__tests__/utils/color.test.ts +96 -0
- package/src/components/AlertBox.story.vue +204 -0
- package/src/components/AlertBox.vue +88 -0
- package/src/components/AppAvatarMenu.story.vue +155 -0
- package/src/components/AppAvatarMenu.vue +184 -0
- package/src/components/AppContainer.story.vue +104 -0
- package/src/components/AppContainer.vue +34 -0
- package/src/components/AppLayout.story.vue +292 -0
- package/src/components/AppLayout.vue +75 -0
- package/src/components/AppPageSelector.vue +159 -0
- package/src/components/AppPillNav.vue +66 -0
- package/src/components/AppPluginSwitcher.vue +241 -0
- package/src/components/AppSidebar.story.vue +309 -0
- package/src/components/AppSidebar.vue +119 -0
- package/src/components/AppTopBar.story.vue +304 -0
- package/src/components/AppTopBar.vue +661 -0
- package/src/components/AuditTrail.story.vue +163 -0
- package/src/components/AuditTrail.vue +151 -0
- package/src/components/AutoGroupModal.story.vue +273 -0
- package/src/components/AutoGroupModal.vue +566 -0
- package/src/components/Avatar.story.vue +115 -0
- package/src/components/Avatar.vue +79 -0
- package/src/components/BaseButton.story.vue +96 -0
- package/src/components/BaseButton.vue +73 -0
- package/src/components/BaseCheckbox.story.vue +73 -0
- package/src/components/BaseCheckbox.vue +69 -0
- package/src/components/BaseInput.story.vue +98 -0
- package/src/components/BaseInput.vue +74 -0
- package/src/components/BaseModal.story.vue +237 -0
- package/src/components/BaseModal.vue +182 -0
- package/src/components/BasePill.story.vue +142 -0
- package/src/components/BasePill.vue +89 -0
- package/src/components/BaseRadioGroup.story.vue +145 -0
- package/src/components/BaseRadioGroup.vue +124 -0
- package/src/components/BaseSelect.story.vue +120 -0
- package/src/components/BaseSelect.vue +71 -0
- package/src/components/BaseSlider.story.vue +122 -0
- package/src/components/BaseSlider.vue +126 -0
- package/src/components/BaseTabs.story.vue +127 -0
- package/src/components/BaseTabs.vue +59 -0
- package/src/components/BaseTextarea.story.vue +91 -0
- package/src/components/BaseTextarea.vue +62 -0
- package/src/components/BaseToggle.story.vue +81 -0
- package/src/components/BaseToggle.vue +76 -0
- package/src/components/BatchProgressList.story.vue +92 -0
- package/src/components/BatchProgressList.vue +184 -0
- package/src/components/Breadcrumb.story.vue +106 -0
- package/src/components/Breadcrumb.vue +75 -0
- package/src/components/Calendar.story.vue +106 -0
- package/src/components/Calendar.vue +363 -0
- package/src/components/ChartContainer.story.vue +113 -0
- package/src/components/ChartContainer.vue +64 -0
- package/src/components/ChemicalFormula.story.vue +102 -0
- package/src/components/ChemicalFormula.vue +39 -0
- package/src/components/CollapsibleCard.story.vue +135 -0
- package/src/components/CollapsibleCard.vue +167 -0
- package/src/components/ColorSlider.story.vue +120 -0
- package/src/components/ColorSlider.vue +164 -0
- package/src/components/ConcentrationInput.story.vue +77 -0
- package/src/components/ConcentrationInput.vue +185 -0
- package/src/components/ConfirmDialog.story.vue +248 -0
- package/src/components/ConfirmDialog.vue +93 -0
- package/src/components/DataFrame.story.vue +148 -0
- package/src/components/DataFrame.vue +419 -0
- package/src/components/DatePicker.story.vue +119 -0
- package/src/components/DatePicker.vue +330 -0
- package/src/components/DateTimePicker.story.vue +112 -0
- package/src/components/DateTimePicker.vue +392 -0
- package/src/components/Divider.story.vue +80 -0
- package/src/components/Divider.vue +49 -0
- package/src/components/DoseCalculator.story.vue +68 -0
- package/src/components/DoseCalculator.vue +476 -0
- package/src/components/DropdownButton.story.vue +102 -0
- package/src/components/DropdownButton.vue +181 -0
- package/src/components/EmptyState.story.vue +135 -0
- package/src/components/EmptyState.vue +69 -0
- package/src/components/ExperimentCodeBadge.story.vue +77 -0
- package/src/components/ExperimentCodeBadge.vue +64 -0
- package/src/components/ExperimentDataViewer.story.vue +174 -0
- package/src/components/ExperimentDataViewer.vue +288 -0
- package/src/components/ExperimentPopover.story.vue +384 -0
- package/src/components/ExperimentPopover.vue +241 -0
- package/src/components/ExperimentSelectorModal.story.vue +391 -0
- package/src/components/ExperimentSelectorModal.vue +387 -0
- package/src/components/ExperimentTimeline.story.vue +161 -0
- package/src/components/ExperimentTimeline.vue +382 -0
- package/src/components/FileUploader.story.vue +107 -0
- package/src/components/FileUploader.vue +386 -0
- package/src/components/FitPanel.story.vue +125 -0
- package/src/components/FitPanel.vue +120 -0
- package/src/components/FormActions.vue +92 -0
- package/src/components/FormBuilder.vue +214 -0
- package/src/components/FormField.story.vue +132 -0
- package/src/components/FormField.vue +59 -0
- package/src/components/FormFieldRenderer.vue +58 -0
- package/src/components/FormSection.vue +90 -0
- package/src/components/FormulaInput.story.vue +96 -0
- package/src/components/FormulaInput.vue +125 -0
- package/src/components/GroupAssigner.story.vue +83 -0
- package/src/components/GroupAssigner.vue +284 -0
- package/src/components/GroupingModal.story.vue +52 -0
- package/src/components/GroupingModal.vue +422 -0
- package/src/components/IconButton.story.vue +135 -0
- package/src/components/IconButton.vue +73 -0
- package/src/components/LoadingSpinner.story.vue +70 -0
- package/src/components/LoadingSpinner.vue +50 -0
- package/src/components/MoleculeInput.story.vue +66 -0
- package/src/components/MoleculeInput.vue +426 -0
- package/src/components/MultiSelect.story.vue +132 -0
- package/src/components/MultiSelect.vue +118 -0
- package/src/components/NumberInput.story.vue +122 -0
- package/src/components/NumberInput.vue +160 -0
- package/src/components/PlateMapEditor.story.vue +92 -0
- package/src/components/PlateMapEditor.vue +513 -0
- package/src/components/ProgressBar.story.vue +148 -0
- package/src/components/ProgressBar.vue +114 -0
- package/src/components/ProtocolStepEditor.story.vue +69 -0
- package/src/components/ProtocolStepEditor.vue +522 -0
- package/src/components/RackEditor.story.vue +100 -0
- package/src/components/RackEditor.vue +371 -0
- package/src/components/ReagentEditor.story.vue +153 -0
- package/src/components/ReagentEditor.vue +418 -0
- package/src/components/ReagentList.story.vue +137 -0
- package/src/components/ReagentList.vue +463 -0
- package/src/components/ResourceCard.story.vue +150 -0
- package/src/components/ResourceCard.vue +161 -0
- package/src/components/SampleHierarchyTree.story.vue +161 -0
- package/src/components/SampleHierarchyTree.vue +256 -0
- package/src/components/SampleLegend.story.vue +91 -0
- package/src/components/SampleLegend.vue +119 -0
- package/src/components/SampleSelector.story.vue +111 -0
- package/src/components/SampleSelector.vue +1033 -0
- package/src/components/ScheduleCalendar.story.vue +195 -0
- package/src/components/ScheduleCalendar.vue +569 -0
- package/src/components/ScientificNumber.story.vue +127 -0
- package/src/components/ScientificNumber.vue +197 -0
- package/src/components/SegmentedControl.story.vue +132 -0
- package/src/components/SegmentedControl.vue +79 -0
- package/src/components/SequenceInput.story.vue +119 -0
- package/src/components/SequenceInput.vue +209 -0
- package/src/components/SettingsButton.story.vue +58 -0
- package/src/components/SettingsButton.vue +76 -0
- package/src/components/SettingsModal.story.vue +145 -0
- package/src/components/SettingsModal.vue +146 -0
- package/src/components/Skeleton.story.vue +141 -0
- package/src/components/Skeleton.vue +74 -0
- package/src/components/StatusIndicator.story.vue +99 -0
- package/src/components/StatusIndicator.vue +40 -0
- package/src/components/StepWizard.story.vue +155 -0
- package/src/components/StepWizard.vue +223 -0
- package/src/components/TagsInput.story.vue +155 -0
- package/src/components/TagsInput.vue +265 -0
- package/src/components/ThemeToggle.story.vue +36 -0
- package/src/components/ThemeToggle.vue +54 -0
- package/src/components/TimePicker.story.vue +96 -0
- package/src/components/TimePicker.vue +273 -0
- package/src/components/TimeRangeInput.story.vue +104 -0
- package/src/components/TimeRangeInput.vue +122 -0
- package/src/components/ToastNotification.story.vue +157 -0
- package/src/components/ToastNotification.vue +62 -0
- package/src/components/Tooltip.story.vue +138 -0
- package/src/components/Tooltip.vue +119 -0
- package/src/components/UnitInput.story.vue +194 -0
- package/src/components/UnitInput.vue +213 -0
- package/src/components/WellEditPopup.vue +234 -0
- package/src/components/WellPlate.story.vue +282 -0
- package/src/components/WellPlate.vue +830 -0
- package/src/components/index.ts +118 -0
- package/src/composables/experiment-utils.ts +57 -0
- package/src/composables/formBuilderRegistry.ts +79 -0
- package/src/composables/index.ts +140 -0
- package/src/composables/useApi.ts +167 -0
- package/src/composables/useAppExperiment.ts +159 -0
- package/src/composables/useAsync.ts +323 -0
- package/src/composables/useAuth.ts +445 -0
- package/src/composables/useAutoGroup.ts +641 -0
- package/src/composables/useChemicalFormula.ts +275 -0
- package/src/composables/useConcentrationUnits.ts +246 -0
- package/src/composables/useDoseCalculator.ts +370 -0
- package/src/composables/useExperimentData.ts +86 -0
- package/src/composables/useExperimentSave.ts +192 -0
- package/src/composables/useExperimentSelector.ts +292 -0
- package/src/composables/useForm.ts +416 -0
- package/src/composables/useFormBuilder.ts +383 -0
- package/src/composables/usePasskey.ts +216 -0
- package/src/composables/usePlatformContext.ts +299 -0
- package/src/composables/usePluginApi.ts +39 -0
- package/src/composables/usePluginConfig.ts +93 -0
- package/src/composables/useProtocolTemplates.ts +518 -0
- package/src/composables/useRackEditor.ts +222 -0
- package/src/composables/useReagentSeries.ts +91 -0
- package/src/composables/useScheduleDrag.ts +245 -0
- package/src/composables/useSequenceUtils.ts +105 -0
- package/src/composables/useTheme.ts +58 -0
- package/src/composables/useTimeUtils.ts +131 -0
- package/src/composables/useToast.ts +40 -0
- package/src/composables/useWellPlateEditor.ts +421 -0
- package/src/histoire.setup.ts +17 -0
- package/src/index.ts +367 -0
- package/src/install.ts +32 -0
- package/src/stores/auth.ts +152 -0
- package/src/stores/index.ts +2 -0
- package/src/stores/settings.ts +218 -0
- package/src/styles/components/alert-box.css +150 -0
- package/src/styles/components/app-avatar-menu.css +155 -0
- package/src/styles/components/app-container.css +33 -0
- package/src/styles/components/app-layout.css +98 -0
- package/src/styles/components/app-page-selector.css +191 -0
- package/src/styles/components/app-pill-nav.css +57 -0
- package/src/styles/components/app-plugin-switcher.css +209 -0
- package/src/styles/components/app-sidebar.css +145 -0
- package/src/styles/components/app-top-bar.css +492 -0
- package/src/styles/components/audit-trail.css +143 -0
- package/src/styles/components/auto-group-modal.css +644 -0
- package/src/styles/components/avatar.css +73 -0
- package/src/styles/components/batch-progress-list.css +196 -0
- package/src/styles/components/breadcrumb.css +64 -0
- package/src/styles/components/button.css +188 -0
- package/src/styles/components/calendar.css +192 -0
- package/src/styles/components/chart-container.css +69 -0
- package/src/styles/components/checkbox.css +123 -0
- package/src/styles/components/chemical-formula.css +46 -0
- package/src/styles/components/collapsible-card.css +253 -0
- package/src/styles/components/color-slider.css +110 -0
- package/src/styles/components/concentration-input.css +156 -0
- package/src/styles/components/confirm-dialog.css +183 -0
- package/src/styles/components/dataframe.css +382 -0
- package/src/styles/components/date-picker.css +243 -0
- package/src/styles/components/datetime-picker.css +229 -0
- package/src/styles/components/divider.css +63 -0
- package/src/styles/components/dose-calculator.css +301 -0
- package/src/styles/components/dropdown-button.css +280 -0
- package/src/styles/components/empty-state.css +151 -0
- package/src/styles/components/experiment-code-badge.css +33 -0
- package/src/styles/components/experiment-data-viewer.css +138 -0
- package/src/styles/components/experiment-popover.css +562 -0
- package/src/styles/components/experiment-selector-modal.css +285 -0
- package/src/styles/components/experiment-timeline.css +529 -0
- package/src/styles/components/file-uploader.css +310 -0
- package/src/styles/components/fit-panel.css +67 -0
- package/src/styles/components/form-builder.css +69 -0
- package/src/styles/components/form-field.css +48 -0
- package/src/styles/components/formula-input.css +103 -0
- package/src/styles/components/group-assigner.css +200 -0
- package/src/styles/components/grouping-modal.css +323 -0
- package/src/styles/components/icon-button.css +192 -0
- package/src/styles/components/input.css +66 -0
- package/src/styles/components/loading-spinner.css +67 -0
- package/src/styles/components/modal.css +350 -0
- package/src/styles/components/molecule-input.css +186 -0
- package/src/styles/components/multi-select.css +131 -0
- package/src/styles/components/number-input.css +199 -0
- package/src/styles/components/pill.css +188 -0
- package/src/styles/components/plate-map-editor.css +464 -0
- package/src/styles/components/progress-bar.css +133 -0
- package/src/styles/components/protocol-step-editor.css +449 -0
- package/src/styles/components/rack-editor.css +265 -0
- package/src/styles/components/radio-group.css +240 -0
- package/src/styles/components/reagent-editor.css +510 -0
- package/src/styles/components/reagent-list.css +407 -0
- package/src/styles/components/resource-card.css +360 -0
- package/src/styles/components/sample-hierarchy-tree.css +314 -0
- package/src/styles/components/sample-legend.css +201 -0
- package/src/styles/components/sample-selector.css +751 -0
- package/src/styles/components/schedule-calendar.css +478 -0
- package/src/styles/components/scientific-number.css +63 -0
- package/src/styles/components/segmented-control.css +197 -0
- package/src/styles/components/select.css +77 -0
- package/src/styles/components/sequence-input.css +184 -0
- package/src/styles/components/settings-button.css +94 -0
- package/src/styles/components/settings-modal.css +95 -0
- package/src/styles/components/skeleton.css +49 -0
- package/src/styles/components/slider.css +74 -0
- package/src/styles/components/status-indicator.css +66 -0
- package/src/styles/components/step-wizard.css +192 -0
- package/src/styles/components/tabs.css +95 -0
- package/src/styles/components/tags-input.css +195 -0
- package/src/styles/components/textarea.css +82 -0
- package/src/styles/components/theme-toggle.css +69 -0
- package/src/styles/components/time-picker.css +171 -0
- package/src/styles/components/time-range-input.css +42 -0
- package/src/styles/components/toast.css +91 -0
- package/src/styles/components/toggle.css +146 -0
- package/src/styles/components/tooltip.css +91 -0
- package/src/styles/components/unit-input.css +123 -0
- package/src/styles/components/well-edit-popup.css +252 -0
- package/src/styles/components/well-plate.css +307 -0
- package/src/styles/index.css +87 -0
- package/src/styles/variables.css +1117 -0
- package/src/tailwind.preset.ts +61 -0
- package/src/types/auth.ts +55 -0
- package/src/types/auto-group.ts +40 -0
- package/src/types/components.ts +710 -0
- package/src/types/form-builder.ts +197 -0
- package/src/types/index.ts +207 -0
- package/src/types/platform.ts +116 -0
- 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
|
+
}
|