@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
package/README.md
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# @morscherlab/mld-sdk (Frontend)
|
|
2
|
+
|
|
3
|
+
Vue 3 SDK for MLD Platform plugin development. Provides reusable components, composables, stores, and types for building consistent, well-integrated plugins.
|
|
4
|
+
|
|
5
|
+
> **Full Documentation:** See the [comprehensive docs](../../docs/index.md) for detailed API reference and guides.
|
|
6
|
+
> - [API Reference](../../docs/frontend/api-reference.md)
|
|
7
|
+
> - [Component Catalog](../../docs/frontend/components.md) - All 32 components with props/events
|
|
8
|
+
> - [Composables Reference](../../docs/frontend/composables.md) - All 9 composables with examples
|
|
9
|
+
> - [Theming Guide](../../docs/frontend/theming.md) - CSS variables and customization
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
bun add @estrellaxd/mld-sdk
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- Vue 3.4+
|
|
20
|
+
- Pinia 2.1+
|
|
21
|
+
- Tailwind CSS 4.0+ (optional - SDK includes pre-built utility classes)
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### 1. Import Styles
|
|
26
|
+
|
|
27
|
+
Import the SDK styles in your main entry point:
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// main.ts
|
|
31
|
+
import '@estrellaxd/mld-sdk/styles'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The SDK includes all necessary CSS utility classes pre-built, so **Tailwind CSS is optional**. The styles work standalone or alongside Tailwind.
|
|
35
|
+
|
|
36
|
+
### 2. (Optional) Configure Tailwind
|
|
37
|
+
|
|
38
|
+
If you're using Tailwind CSS and want to extend the MLD theme:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import mldPreset from '@estrellaxd/mld-sdk/tailwind.preset'
|
|
42
|
+
|
|
43
|
+
export default {
|
|
44
|
+
presets: [mldPreset],
|
|
45
|
+
content: [
|
|
46
|
+
'./src/**/*.vue',
|
|
47
|
+
'./node_modules/@estrellaxd/mld-sdk/**/*.vue',
|
|
48
|
+
],
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 3. Use Components
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<script setup lang="ts">
|
|
56
|
+
import { BaseButton, BaseInput, FormField } from '@estrellaxd/mld-sdk'
|
|
57
|
+
import { useToast, useAuth } from '@estrellaxd/mld-sdk'
|
|
58
|
+
import type { ButtonVariant } from '@estrellaxd/mld-sdk'
|
|
59
|
+
|
|
60
|
+
const { success } = useToast()
|
|
61
|
+
const { login } = useAuth()
|
|
62
|
+
|
|
63
|
+
async function handleSubmit() {
|
|
64
|
+
const result = await login(username, password)
|
|
65
|
+
if (result) {
|
|
66
|
+
success('Login successful!')
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
<template>
|
|
72
|
+
<FormField label="Username" required>
|
|
73
|
+
<BaseInput v-model="username" placeholder="Enter username" />
|
|
74
|
+
</FormField>
|
|
75
|
+
|
|
76
|
+
<BaseButton variant="primary" @click="handleSubmit">
|
|
77
|
+
Login
|
|
78
|
+
</BaseButton>
|
|
79
|
+
</template>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Components
|
|
83
|
+
|
|
84
|
+
### Base Components
|
|
85
|
+
- `BaseButton` - Button with variants (primary, secondary, cta, danger, success, ghost)
|
|
86
|
+
- `BaseInput` - Text input with validation states
|
|
87
|
+
- `BaseSelect` - Dropdown select with generic typing
|
|
88
|
+
- `BaseTabs` - Tab navigation with underline/pills/bordered variants
|
|
89
|
+
- `BaseModal` - Modal dialog with Teleport
|
|
90
|
+
|
|
91
|
+
### Form Components
|
|
92
|
+
- `FormField` - Form field wrapper with label, error, and hint
|
|
93
|
+
|
|
94
|
+
### Feedback Components
|
|
95
|
+
- `AlertBox` - Alert messages (success, error, warning, info)
|
|
96
|
+
- `ToastNotification` - Toast notification container
|
|
97
|
+
|
|
98
|
+
### Action Components
|
|
99
|
+
- `IconButton` - Icon-only button with accessibility
|
|
100
|
+
- `ThemeToggle` - Light/dark mode toggle
|
|
101
|
+
|
|
102
|
+
### Layout Components
|
|
103
|
+
- `CollapsibleCard` - Expandable card sections with optional icon badge and toggle switch
|
|
104
|
+
- `AppTopBar` - Application header with slots
|
|
105
|
+
- `AppSidebar` - Sidebar navigation
|
|
106
|
+
|
|
107
|
+
### File & Data Components
|
|
108
|
+
- `FileUploader` - Drag-and-drop file upload with file/folder mode support
|
|
109
|
+
|
|
110
|
+
### Sample Management Components
|
|
111
|
+
- `SampleSelector` - Hierarchical sample grouping with auto-group and CSV metadata import
|
|
112
|
+
- `GroupingModal` - Modal for CSV-based metadata grouping
|
|
113
|
+
- `GroupAssigner` - Drag-and-drop group assignment for comparisons (e.g., Control vs Treatment)
|
|
114
|
+
|
|
115
|
+
## Composables
|
|
116
|
+
|
|
117
|
+
### `useApi(options?)`
|
|
118
|
+
Generic API client with auth interceptor.
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const api = useApi()
|
|
122
|
+
|
|
123
|
+
// GET request
|
|
124
|
+
const data = await api.get<User[]>('/users')
|
|
125
|
+
|
|
126
|
+
// POST with body
|
|
127
|
+
const created = await api.post<User>('/users', { name: 'John' })
|
|
128
|
+
|
|
129
|
+
// File upload
|
|
130
|
+
const result = await api.upload<UploadResponse>('/upload', file)
|
|
131
|
+
|
|
132
|
+
// Build URLs for external use
|
|
133
|
+
const downloadUrl = api.buildUrl('/files/123/download')
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### `useAuth()`
|
|
137
|
+
Authentication methods.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const { login, logout, initializeAuth, getCurrentUser } = useAuth()
|
|
141
|
+
|
|
142
|
+
// Initialize on app mount
|
|
143
|
+
await initializeAuth()
|
|
144
|
+
|
|
145
|
+
// Login
|
|
146
|
+
const success = await login(username, password)
|
|
147
|
+
|
|
148
|
+
// Get current user
|
|
149
|
+
const user = await getCurrentUser()
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### `usePasskey()`
|
|
153
|
+
WebAuthn/FIDO2 passkey support.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
const { isSupported, registerPasskey, loginWithPasskey } = usePasskey()
|
|
157
|
+
|
|
158
|
+
if (isSupported()) {
|
|
159
|
+
await registerPasskey('My Device')
|
|
160
|
+
// or
|
|
161
|
+
await loginWithPasskey()
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### `useTheme()`
|
|
166
|
+
Theme switching.
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
const { isDark, toggleTheme, setTheme } = useTheme()
|
|
170
|
+
|
|
171
|
+
toggleTheme()
|
|
172
|
+
setTheme(true) // dark mode
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### `useToast()`
|
|
176
|
+
Toast notification management.
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
const { success, error, warning, info } = useToast()
|
|
180
|
+
|
|
181
|
+
success('Operation completed!')
|
|
182
|
+
error('Something went wrong')
|
|
183
|
+
warning('Please review your input')
|
|
184
|
+
info('New update available')
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### `usePlatformContext()`
|
|
188
|
+
Detect and interact with MLD Platform when running as a plugin.
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
const { isIntegrated, plugin, user, navigate, notify } = usePlatformContext()
|
|
192
|
+
|
|
193
|
+
if (isIntegrated.value) {
|
|
194
|
+
// Running under MLD Platform
|
|
195
|
+
console.log('Plugin:', plugin.value?.name)
|
|
196
|
+
notify('Hello from plugin!', 'info')
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Stores
|
|
201
|
+
|
|
202
|
+
### `useAuthStore`
|
|
203
|
+
Pinia store for authentication state.
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
const authStore = useAuthStore()
|
|
207
|
+
|
|
208
|
+
// State
|
|
209
|
+
authStore.token
|
|
210
|
+
authStore.userInfo
|
|
211
|
+
authStore.isAuthenticated
|
|
212
|
+
authStore.isAdmin
|
|
213
|
+
|
|
214
|
+
// Actions
|
|
215
|
+
authStore.initialize()
|
|
216
|
+
authStore.setToken(token, expiresIn)
|
|
217
|
+
authStore.logout()
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### `useSettingsStore`
|
|
221
|
+
Pinia store for app settings.
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
const settingsStore = useSettingsStore()
|
|
225
|
+
|
|
226
|
+
// State
|
|
227
|
+
settingsStore.theme // 'light' | 'dark' | 'system'
|
|
228
|
+
settingsStore.colorPalette
|
|
229
|
+
|
|
230
|
+
// Methods
|
|
231
|
+
settingsStore.getApiBaseUrl()
|
|
232
|
+
settingsStore.getWsBaseUrl()
|
|
233
|
+
settingsStore.isDark()
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## TypeScript Types
|
|
237
|
+
|
|
238
|
+
All types are exported from `@estrellaxd/mld-sdk`:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
import type {
|
|
242
|
+
// Components
|
|
243
|
+
ButtonVariant,
|
|
244
|
+
ButtonSize,
|
|
245
|
+
ModalSize,
|
|
246
|
+
AlertType,
|
|
247
|
+
Toast,
|
|
248
|
+
TabItem,
|
|
249
|
+
SelectOption,
|
|
250
|
+
|
|
251
|
+
// Sample Management
|
|
252
|
+
SampleGroup, // { name, color, samples[] }
|
|
253
|
+
GroupItem, // { name, color, count }
|
|
254
|
+
FileUploaderMode, // 'file' | 'folder'
|
|
255
|
+
|
|
256
|
+
// Auth
|
|
257
|
+
AuthConfig,
|
|
258
|
+
UserInfo,
|
|
259
|
+
LoginResponse,
|
|
260
|
+
|
|
261
|
+
// Platform
|
|
262
|
+
PluginInfo,
|
|
263
|
+
PlatformContext,
|
|
264
|
+
ThemeMode,
|
|
265
|
+
} from '@estrellaxd/mld-sdk'
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## CSS Utility Classes
|
|
269
|
+
|
|
270
|
+
The SDK provides ready-to-use CSS classes:
|
|
271
|
+
|
|
272
|
+
### Buttons
|
|
273
|
+
- `.btn-primary` - Blue primary button
|
|
274
|
+
- `.btn-secondary` - Outlined/bordered button
|
|
275
|
+
- `.btn-cta` - Orange call-to-action button
|
|
276
|
+
- `.btn-success` - Green success button
|
|
277
|
+
- `.btn-danger` - Red danger button
|
|
278
|
+
|
|
279
|
+
### Inputs
|
|
280
|
+
- `.input-modern` - Styled text input
|
|
281
|
+
- `.select-modern` - Styled dropdown select
|
|
282
|
+
- `.label-modern` - Uppercase label
|
|
283
|
+
|
|
284
|
+
### Cards & Containers
|
|
285
|
+
- `.card` - Card with border and shadow
|
|
286
|
+
- `.card-hover` - Card with hover effect
|
|
287
|
+
- `.floating-card` - Floating container pattern
|
|
288
|
+
|
|
289
|
+
### Alerts
|
|
290
|
+
- `.alert-success` - Green success alert
|
|
291
|
+
- `.alert-error` - Red error alert
|
|
292
|
+
- `.alert-warning` - Yellow warning alert
|
|
293
|
+
- `.alert-info` - Blue info alert
|
|
294
|
+
|
|
295
|
+
### Form Controls
|
|
296
|
+
- `.toggle-switch` - Toggle switch
|
|
297
|
+
- `.checkbox-modern` - Styled checkbox
|
|
298
|
+
|
|
299
|
+
## Theming
|
|
300
|
+
|
|
301
|
+
The SDK uses CSS variables for theming. Override them to customize:
|
|
302
|
+
|
|
303
|
+
```css
|
|
304
|
+
:root {
|
|
305
|
+
--bg-primary: #F8FAFC;
|
|
306
|
+
--bg-secondary: #FFFFFF;
|
|
307
|
+
--bg-tertiary: #F1F5F9;
|
|
308
|
+
--text-primary: #1E293B;
|
|
309
|
+
--text-secondary: #64748B;
|
|
310
|
+
--border-color: #E5E7EB;
|
|
311
|
+
--color-primary: #3B82F6;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
html.dark {
|
|
315
|
+
--bg-primary: #0F172A;
|
|
316
|
+
--bg-secondary: #1E293B;
|
|
317
|
+
--bg-tertiary: #334155;
|
|
318
|
+
--text-primary: #F8FAFC;
|
|
319
|
+
--text-secondary: #94A3B8;
|
|
320
|
+
--border-color: #334155;
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## License
|
|
325
|
+
|
|
326
|
+
MIT
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ExperimentSummary } from '../types';
|
|
2
|
+
export declare const mockExperiments: ExperimentSummary[];
|
|
3
|
+
export declare function installMockInterceptor(): void;
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper component that fakes integrated mode and provides useAppExperiment context.
|
|
6
|
+
* Use in story files to demonstrate experiment selector integration.
|
|
7
|
+
*
|
|
8
|
+
* Props:
|
|
9
|
+
* preselect (boolean, default true) - pre-select the first mock experiment
|
|
10
|
+
*/
|
|
11
|
+
export declare const ExperimentProvider: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
12
|
+
preselect: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
16
|
+
}>, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}>[] | undefined, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
19
|
+
preselect: {
|
|
20
|
+
type: BooleanConstructor;
|
|
21
|
+
default: boolean;
|
|
22
|
+
};
|
|
23
|
+
}>> & Readonly<{}>, {
|
|
24
|
+
preselect: boolean;
|
|
25
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for useExperimentData.
|
|
3
|
+
*
|
|
4
|
+
* Covers the derived computeds plugins rely on when rendering plugin
|
|
5
|
+
* data that was saved via the platform's /api/experiments/{id}/data
|
|
6
|
+
* endpoint:
|
|
7
|
+
*
|
|
8
|
+
* - tree_data / treeData snake-or-camel case handling
|
|
9
|
+
* - table_data / tableData
|
|
10
|
+
* - summary_data validation (must have a `metadata` key)
|
|
11
|
+
* - load / refresh / error paths
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for usePluginApi.
|
|
3
|
+
*
|
|
4
|
+
* Exercises the baseUrl resolution priority that every plugin relies on:
|
|
5
|
+
* 1. VITE_API_PREFIX (build-time env override)
|
|
6
|
+
* 2. fallbackPrefix option (plugin's route prefix)
|
|
7
|
+
* 3. '/api' default
|
|
8
|
+
*
|
|
9
|
+
* The SDK-wide axios client is a singleton, so these tests stub axios
|
|
10
|
+
* with a MockAdapter-style approach via vi.spyOn to observe the
|
|
11
|
+
* baseURL actually used at request time.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for usePluginConfig.
|
|
3
|
+
*
|
|
4
|
+
* Covers the plugin settings life-cycle used by every plugin's
|
|
5
|
+
* settings pane:
|
|
6
|
+
*
|
|
7
|
+
* - resolvedName prefers explicit pluginName, falls back to platform plugin
|
|
8
|
+
* - load() populates config + savedConfig from /plugins/{name}/config
|
|
9
|
+
* - save() PATCHes the endpoint, updates savedConfig, returns true
|
|
10
|
+
* - isDirty reflects user edits vs last saved state
|
|
11
|
+
* - reset() restores config to savedConfig and clears error
|
|
12
|
+
* - error messages bubble up from network failures
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|