Skip to content

Frontend SDK reference

Components, composables, and types exported from @morscherlab/mint-sdk. Each entry has a one-line description and a source link. For full prop / type signatures, the TypeScript source is authoritative — type-aware editors give you immediate completion.

Components

87 Vue 3 single-file components. Source: packages/sdk-frontend/src/components/.

Layout

ComponentUse
AppLayoutPage shell with top bar + sidebar slots
AppContainerStandalone container without top bar (login, setup)
AppTopBarPlatform top bar component
AppSidebarSectioned sidebar
AppAvatarMenuUser avatar + menu
AppPageSelectorMulti-page selector for plugins with multiple views
AppPillNavPill-style navigation row
AppPluginSwitcherInter-plugin switcher widget

Forms

ComponentUse
BaseButtonPrimary button — variant, size, loading, disabled
BaseInputText input with label / helper / error
BaseSelectThemed <select> with options array
BaseCheckboxSingle checkbox
BaseRadioGroupGrouped radio buttons
BaseSliderRange slider
BaseTextareaMulti-line input
BaseToggleBoolean switch
NumberInputNumeric input with stepper
MultiSelectMultiple-choice select
DatePicker, DateTimePicker, TimePicker, TimeRangeInputDate/time inputs
CalendarCalendar widget
TagsInputFree-text tag input
SegmentedControlCompact tab-like option selector

Modals and feedback

ComponentUse
BaseModalStandard modal dialog
BaseTabsTab strip + panels
ConfirmDialogConfirm-or-cancel dialog with imperative API
AlertBoxInline banner (info / warning / error / success)
ToastNotificationToast component used by useToast
TooltipHover-triggered tooltip
EmptyStateEmpty-list placeholder
LoadingSpinnerSpinner
ProgressBarLinear progress
SkeletonLoading skeleton
BasePillCompact label / status pill
StatusIndicatorColored dot for status

Data display

ComponentUse
DataFrameSortable / sticky table
Card, CollapsibleCard, ResourceCardCard surfaces
BreadcrumbBreadcrumb trail
ScientificNumberFormatted scientific number
ChartContainerWrapper around chart libraries (Plotly etc.)
DividerHorizontal rule
IconButtonIcon-only button
AvatarUser avatar

Multi-step

ComponentUse
StepWizardMulti-step form with progress indicator

Domain widgets

ComponentUse
WellPlate, WellEditPopup, PlateMapEditorWell-plate editing
RackEditor, ReagentEditor, ReagentListRack / reagent editing
FormBuilder, FormField, FormFieldRenderer, FormSection, FormActionsSchema-driven forms
ChemicalFormula, FormulaInputChemical formula display / input
MoleculeInputMolecule structure input
ConcentrationInput, UnitInputConcentration with units
DoseCalculatorDilution / serial-dilution calculator
ProtocolStepEditorProtocol step editor
SequenceInputDNA / protein sequence input
ScheduleCalendarCalendar / scheduling UI
ExperimentTimelinePer-experiment timeline

Experiment-aware

ComponentUse
ExperimentCodeBadgeFormatted experiment code (EXP-001)
ExperimentDataViewerPretty-print experiment design + analysis
ExperimentPopoverHover info for an experiment
ExperimentSelectorModalModal picker for experiments

Sample / grouping

ComponentUse
SampleHierarchyTreeHierarchical sample tree
SampleLegendLegend for sample groups
SampleSelectorMulti-sample selector
GroupAssignerManual group assignment UI
GroupingModalGroup creation modal
AutoGroupModalAuto-grouping modal (driven by useAutoGroup)
BatchProgressListProgress for batch operations

Theming + utilities

ComponentUse
ThemeToggleTheme switcher (Light / Dark / System)
ColorSliderColor picker slider
SettingsButton, SettingsModalSettings UI primitives
FileUploaderDrag-and-drop file upload
DropdownButtonButton with attached menu
FitPanelFit-to-container panel

For full prop signatures, browse the source or the Histoire storybook (bun run story:dev, port 6006).

Composables

27 typed composables. Source: packages/sdk-frontend/src/composables/.

ComposableReturnsPurpose
useApityped fetch helperAuth-aware API calls
useAuth{ user, isAuthenticated, login, logout }Reactive auth state
usePasskeypasskey registration / loginWebAuthn flows
useThemetheme state + setterTheme switcher
useToasttoast dispatcherUser feedback
usePlatformContext{ project, experiment }Active project / experiment
useFormreactive form stateManual form management
useFormBuilderschema-driven form runtimeFormBuilder component
useAsync, useAsyncBatchasync state helpersWrap async operations
useWellPlateEditorplate state + helpersPlate-design UIs
useRackEditorrack stateSample rack UIs
useConcentrationUnitsconcentration mathµM / mg/mL / % conversions
useDoseCalculatordilution mathDose-response calculators
useReagentSeriesdilution seriesDose-response panel building
useChemicalFormulaformula parsing + MWChemical formula display
useSequenceUtilsDNA / protein helpersSequence stats
useTimeUtilstime math + slotsSchedule UIs
useScheduleDragdrag-to-rescheduleCalendar / timeline
useProtocolTemplatesprotocol step engineProtocol UIs
useAutoGroupsample auto-groupingGroup by name prefix
usePluginConfigplugin settingsRead plugin config
usePluginApiplugin-scoped API clientCalls scoped to /api/<plugin>/
useExperimentSelectorreactive experiment pickerExperiment dropdowns
useExperimentDatareactive experiment viewLive design + analysis
useExperimentSavesave flow with conflict detectionSave back to experiment
useAppExperimentprovide / inject patternPlugin-tree-wide active experiment

Exported types

The package re-exports most public types alongside the values:

ts
import {
  type ApiClientOptions,        // useApi
  type ValidationRule,          // useForm
  type FieldRules,
  type FieldState,
  type UseFormReturn,
  type AsyncError,              // useAsync
  type AsyncState,
  type UseAsyncReturn,
  type ConcentrationValue,      // useConcentrationUnits
  type ConcentrationUnit,
  type MolarityUnit,
  type MassVolumeUnit,
  type PercentageUnit,
  type UnitCategory,
  type DilutionParams,          // useDoseCalculator
  type DilutionResult,
  type SerialDilutionParams,
  type SerialDilutionStep,
  type WellConcentration,
  type ParameterDefinition,     // useProtocolTemplates
  type StepTemplate,
  type ParsedElement,           // useChemicalFormula
  type FormulaParseResult,
  type FormulaPart,
  type FormulaPartType,
  type SequenceType,            // useSequenceUtils
  type SequenceStats,
  type LevelEntry,              // useReagentSeries
  type DilutionPreset,
  type RegistryEntry,           // formBuilderRegistry
  type AppExperimentState,      // useAppExperiment
} from '@morscherlab/mint-sdk'

For the full list, the TypeScript source is the canonical reference: packages/sdk-frontend/src/composables/index.ts.

Notes

  • All components and composables target Vue 3 with the Composition API. They don't work with Options API.
  • Tree-shaking is supported — importing one component pulls only that component into the bundle.
  • The tailwind.preset and styles/variables.css are required for the components to render correctly. See Frontend → Design tokens.

MINT is open source. Made by the Morscher Lab.