@morscherlab/mint-sdk 1.0.0-beta.2 → 1.0.0-beta.3
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 +218 -6
- package/dist/__tests__/components/ActionItem.test.d.ts +1 -0
- package/dist/__tests__/components/AppAvatarMenu.test.d.ts +1 -0
- package/dist/__tests__/components/AppPageSelector.test.d.ts +1 -0
- package/dist/__tests__/components/AppPillNav.test.d.ts +1 -0
- package/dist/__tests__/components/AppPluginSwitcher.test.d.ts +1 -0
- package/dist/__tests__/components/AppToastContainer.test.d.ts +1 -0
- package/dist/__tests__/components/BaseRadioGroup.test.d.ts +1 -0
- package/dist/__tests__/components/BaseSelect.test.d.ts +1 -0
- package/dist/__tests__/components/BaseTabs.test.d.ts +1 -0
- package/dist/__tests__/components/BatchProgressList.test.d.ts +1 -0
- package/dist/__tests__/components/BioTemplateExperimentWorkspaceView.test.d.ts +1 -0
- package/dist/__tests__/components/BioTemplatePackWorkspaceView.test.d.ts +1 -0
- package/dist/__tests__/components/BioTemplatePresetWorkspaceView.test.d.ts +1 -0
- package/dist/__tests__/components/BioTemplateRenderer.test.d.ts +1 -0
- package/dist/__tests__/components/Breadcrumb.test.d.ts +1 -0
- package/dist/__tests__/components/CalendarGridPanel.test.d.ts +1 -0
- package/dist/__tests__/components/ConcentrationInput.test.d.ts +1 -0
- package/dist/__tests__/components/ControlWorkspaceView.test.d.ts +1 -0
- package/dist/__tests__/components/DatePicker.test.d.ts +1 -0
- package/dist/__tests__/components/DateTimePicker.test.d.ts +1 -0
- package/dist/__tests__/components/EmptyState.test.d.ts +1 -0
- package/dist/__tests__/components/ExperimentPopover.test.d.ts +1 -0
- package/dist/__tests__/components/FormBuilder.test.d.ts +1 -0
- package/dist/__tests__/components/FormCompatibility.test.d.ts +1 -0
- package/dist/__tests__/components/GroupAssigner.test.d.ts +1 -0
- package/dist/__tests__/components/GroupingModal.test.d.ts +1 -0
- package/dist/__tests__/components/MultiSelect.test.d.ts +1 -0
- package/dist/__tests__/components/ProtocolStepEditor.test.d.ts +1 -0
- package/dist/__tests__/components/ReagentList.test.d.ts +1 -0
- package/dist/__tests__/components/SampleHierarchyTree.test.d.ts +1 -0
- package/dist/__tests__/components/SampleSelector.test.d.ts +1 -0
- package/dist/__tests__/components/SegmentedControl.test.d.ts +1 -0
- package/dist/__tests__/components/SettingsButton.test.d.ts +1 -0
- package/dist/__tests__/components/SettingsModal.test.d.ts +1 -0
- package/dist/__tests__/components/TagsInput.test.d.ts +1 -0
- package/dist/__tests__/components/ThemeToggle.test.d.ts +1 -0
- package/dist/__tests__/components/TimePicker.test.d.ts +1 -0
- package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +1 -0
- package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +1 -0
- package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +1 -0
- package/dist/__tests__/composables/useCalendarGrid.test.d.ts +1 -0
- package/dist/__tests__/composables/useControlSchema.test.d.ts +1 -0
- package/dist/__tests__/composables/useDebouncedWatch.test.d.ts +1 -0
- package/dist/__tests__/composables/useDropdownState.test.d.ts +1 -0
- package/dist/__tests__/composables/useEventListener.test.d.ts +1 -0
- package/dist/__tests__/composables/useExpansionSet.test.d.ts +1 -0
- package/dist/__tests__/composables/useExperimentData.test.d.ts +1 -0
- package/dist/__tests__/composables/useExperimentSelector.test.d.ts +1 -0
- package/dist/__tests__/composables/useGroupAssignment.test.d.ts +1 -0
- package/dist/__tests__/composables/useListSelection.test.d.ts +1 -0
- package/dist/__tests__/composables/usePluginClient.test.d.ts +1 -0
- package/dist/__tests__/composables/usePluginConfig.test.d.ts +1 -0
- package/dist/__tests__/composables/useRequestSyncState.test.d.ts +1 -0
- package/dist/__tests__/composables/useSampleGroups.test.d.ts +1 -0
- package/dist/__tests__/composables/useSelectionLimit.test.d.ts +1 -0
- package/dist/__tests__/composables/useSortedItems.test.d.ts +1 -0
- package/dist/__tests__/composables/useTemplateCollection.test.d.ts +1 -0
- package/dist/__tests__/composables/useTextSearch.test.d.ts +1 -0
- package/dist/__tests__/composables/useTheme.test.d.ts +1 -0
- package/dist/__tests__/composables/useTimeUtils.test.d.ts +1 -0
- package/dist/__tests__/docs/frontendDocsCatalog.test.d.ts +1 -0
- package/dist/__tests__/templates/templates.test.d.ts +1 -0
- package/dist/{auth-DsI0rQ7_.js → auth-QQj2kkze.js} +12 -5
- package/dist/auth-QQj2kkze.js.map +1 -0
- package/dist/components/ActionItem.vue.d.ts +32 -0
- package/dist/components/AppAvatarMenu.vue.d.ts +2 -7
- package/dist/components/AppPageSelector.vue.d.ts +3 -6
- package/dist/components/AppPillNav.vue.d.ts +2 -2
- package/dist/components/AppSidebar.vue.d.ts +56 -3
- package/dist/components/AppToastContainer.vue.d.ts +2 -0
- package/dist/components/AppTopBar.vue.d.ts +41 -10
- package/dist/components/BaseButton.vue.d.ts +1 -1
- package/dist/components/BaseCheckbox.vue.d.ts +1 -1
- package/dist/components/BaseInput.vue.d.ts +2 -2
- package/dist/components/BasePill.vue.d.ts +2 -2
- package/dist/components/BaseRadioGroup.vue.d.ts +3 -3
- package/dist/components/BaseSelect.vue.d.ts +3 -3
- package/dist/components/BaseTabs.vue.d.ts +2 -2
- package/dist/components/BaseTextarea.vue.d.ts +1 -1
- package/dist/components/BaseToggle.vue.d.ts +1 -1
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +117 -0
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +92 -0
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +82 -0
- package/dist/components/BioTemplateRenderer.vue.d.ts +29 -0
- package/dist/components/Breadcrumb.vue.d.ts +2 -2
- package/dist/components/Calendar.vue.d.ts +1 -1
- package/dist/components/CalendarGridPanel.vue.d.ts +25 -0
- package/dist/components/CollapsibleCard.vue.d.ts +1 -1
- package/dist/components/ConcentrationInput.vue.d.ts +2 -2
- package/dist/components/ConfirmDialog.vue.d.ts +2 -2
- package/dist/components/ControlWorkspaceView.vue.d.ts +130 -0
- package/dist/components/DatePicker.vue.d.ts +1 -1
- package/dist/components/DateTimePicker.vue.d.ts +3 -3
- package/dist/components/Divider.vue.d.ts +1 -1
- package/dist/components/DropdownButton.vue.d.ts +3 -3
- package/dist/components/EmptyState.vue.d.ts +1 -2
- package/dist/components/ExperimentDataViewer.vue.d.ts +1 -1
- package/dist/components/ExperimentTimeline.vue.d.ts +2 -2
- package/dist/components/FileUploader.vue.d.ts +1 -1
- package/dist/components/FitPanel.vue.d.ts +1 -1
- package/dist/components/FormActions.vue.d.ts +4 -4
- package/dist/components/FormBuilder.vue.d.ts +22 -8
- package/dist/components/FormFieldRenderer.vue.d.ts +7 -10
- package/dist/components/FormSection.vue.d.ts +11 -24
- package/dist/components/FormulaInput.vue.d.ts +2 -2
- package/dist/components/MoleculeInput.vue.d.ts +2 -2
- package/dist/components/MultiSelect.vue.d.ts +3 -3
- package/dist/components/NumberInput.vue.d.ts +1 -1
- package/dist/components/ProgressBar.vue.d.ts +1 -1
- package/dist/components/ProtocolStepEditor.vue.d.ts +3 -1
- package/dist/components/RackEditor.vue.d.ts +2 -2
- package/dist/components/SampleLegend.vue.d.ts +2 -2
- package/dist/components/ScheduleCalendar.vue.d.ts +2 -2
- package/dist/components/SegmentedControl.vue.d.ts +2 -2
- package/dist/components/SequenceInput.vue.d.ts +3 -3
- package/dist/components/SettingsButton.vue.d.ts +2 -2
- package/dist/components/SettingsModal.vue.d.ts +13 -5
- package/dist/components/StatusIndicator.vue.d.ts +1 -1
- package/dist/components/TagsInput.vue.d.ts +3 -2
- package/dist/components/TimePicker.vue.d.ts +3 -3
- package/dist/components/TimeRangeInput.vue.d.ts +1 -1
- package/dist/components/UnitInput.vue.d.ts +2 -2
- package/dist/components/WellPlate.vue.d.ts +8 -8
- package/dist/components/index.d.ts +11 -1
- package/dist/components/index.js +3 -3
- package/dist/components/internal/FormFieldRendererInternal.vue.d.ts +31 -0
- package/dist/components/internal/FormSectionRenderer.vue.d.ts +43 -0
- package/dist/{components-_XqPEhP9.js → components-D_Sr0adg.js} +7290 -6518
- package/dist/components-D_Sr0adg.js.map +1 -0
- package/dist/composables/index.d.ts +21 -2
- package/dist/composables/index.js +4 -3
- package/dist/composables/platformContextHelpers.d.ts +14 -0
- package/dist/composables/useBioTemplateComponents.d.ts +20 -0
- package/dist/composables/useBioTemplateControls.d.ts +6 -0
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +45 -0
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +74 -0
- package/dist/composables/useBioTemplateWorkspace.d.ts +50 -0
- package/dist/composables/useCalendarGrid.d.ts +26 -0
- package/dist/composables/useControlSchema.d.ts +321 -0
- package/dist/composables/useDebouncedWatch.d.ts +20 -0
- package/dist/composables/useDropdownState.d.ts +19 -0
- package/dist/composables/useEventListener.d.ts +13 -0
- package/dist/composables/useExpansionSet.d.ts +21 -0
- package/dist/composables/useExperimentData.d.ts +10 -0
- package/dist/composables/useExperimentSave.d.ts +31 -2
- package/dist/composables/useExperimentSelector.d.ts +20 -0
- package/dist/composables/useForm.d.ts +2 -0
- package/dist/composables/useGroupAssignment.d.ts +31 -0
- package/dist/composables/useListSelection.d.ts +35 -0
- package/dist/composables/usePlatformContext.d.ts +21 -3
- package/dist/composables/usePluginApi.d.ts +7 -14
- package/dist/composables/usePluginClient.d.ts +109 -0
- package/dist/composables/usePluginConfig.d.ts +12 -0
- package/dist/composables/useRequestSyncState.d.ts +34 -0
- package/dist/composables/useSampleGroups.d.ts +32 -0
- package/dist/composables/useSelectionLimit.d.ts +17 -0
- package/dist/composables/useSortedItems.d.ts +32 -0
- package/dist/composables/useTemplateCollection.d.ts +58 -0
- package/dist/composables/useTextSearch.d.ts +18 -0
- package/dist/composables/useTimeUtils.d.ts +8 -0
- package/dist/{composables-tiZqLu1M.js → composables-C3dpXQN5.js} +228 -146
- package/dist/composables-C3dpXQN5.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.js +6 -5
- package/dist/install.d.ts +7 -2
- package/dist/install.js +2 -2
- package/dist/install.js.map +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/stores/settings.d.ts +4 -1
- package/dist/styles.css +5235 -5977
- package/dist/templates/adapters.d.ts +43 -0
- package/dist/templates/builders.d.ts +63 -0
- package/dist/templates/catalog.d.ts +188 -0
- package/dist/templates/componentBindings.d.ts +58 -0
- package/dist/templates/controlSchemas.d.ts +25 -0
- package/dist/templates/index.d.ts +15 -0
- package/dist/templates/index.js +2 -0
- package/dist/templates/lookup.d.ts +4 -0
- package/dist/templates/packs.d.ts +18 -0
- package/dist/templates/presets.d.ts +90 -0
- package/dist/templates/types.d.ts +531 -0
- package/dist/templates-50NPjaxL.js +9333 -0
- package/dist/templates-50NPjaxL.js.map +1 -0
- package/dist/types/components.d.ts +26 -4
- package/dist/types/form-builder.d.ts +6 -8
- package/dist/types/index.d.ts +2 -2
- package/dist/types/platform.d.ts +7 -1
- package/dist/useScheduleDrag-D4oWdh41.js +4371 -0
- package/dist/useScheduleDrag-D4oWdh41.js.map +1 -0
- package/dist/utils/formModelSync.d.ts +5 -0
- package/dist/utils/items.d.ts +8 -0
- package/dist/utils/options.d.ts +6 -0
- package/dist/utils/pluginIcon.d.ts +9 -0
- package/package.json +7 -2
- package/src/__tests__/components/ActionItem.test.ts +99 -0
- package/src/__tests__/components/AppAvatarMenu.test.ts +27 -0
- package/src/__tests__/components/AppPageSelector.test.ts +134 -0
- package/src/__tests__/components/AppPillNav.test.ts +78 -0
- package/src/__tests__/components/AppPluginSwitcher.test.ts +44 -0
- package/src/__tests__/components/AppSidebar.test.ts +370 -0
- package/src/__tests__/components/AppToastContainer.test.ts +48 -0
- package/src/__tests__/components/AppTopBar.test.ts +383 -0
- package/src/__tests__/components/BaseRadioGroup.test.ts +25 -0
- package/src/__tests__/components/BaseSelect.test.ts +21 -0
- package/src/__tests__/components/BaseTabs.test.ts +25 -0
- package/src/__tests__/components/BatchProgressList.test.ts +52 -0
- package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +153 -0
- package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +161 -0
- package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +281 -0
- package/src/__tests__/components/BioTemplateRenderer.test.ts +71 -0
- package/src/__tests__/components/Breadcrumb.test.ts +23 -0
- package/src/__tests__/components/CalendarGridPanel.test.ts +36 -0
- package/src/__tests__/components/ConcentrationInput.test.ts +45 -0
- package/src/__tests__/components/ControlWorkspaceView.test.ts +1031 -0
- package/src/__tests__/components/DataFrame.test.ts +11 -0
- package/src/__tests__/components/DatePicker.test.ts +45 -0
- package/src/__tests__/components/DateTimePicker.test.ts +48 -0
- package/src/__tests__/components/DropdownButton.test.ts +23 -0
- package/src/__tests__/components/EmptyState.test.ts +23 -0
- package/src/__tests__/components/ExperimentPopover.test.ts +56 -0
- package/src/__tests__/components/FormBuilder.test.ts +296 -0
- package/src/__tests__/components/FormCompatibility.test.ts +94 -0
- package/src/__tests__/components/GroupAssigner.test.ts +30 -0
- package/src/__tests__/components/GroupingModal.test.ts +73 -0
- package/src/__tests__/components/MultiSelect.test.ts +48 -0
- package/src/__tests__/components/ProtocolStepEditor.test.ts +33 -0
- package/src/__tests__/components/ReagentList.test.ts +82 -0
- package/src/__tests__/components/SampleHierarchyTree.test.ts +53 -0
- package/src/__tests__/components/SampleSelector.test.ts +60 -0
- package/src/__tests__/components/SegmentedControl.test.ts +24 -0
- package/src/__tests__/components/SettingsButton.test.ts +44 -0
- package/src/__tests__/components/SettingsModal.test.ts +296 -0
- package/src/__tests__/components/TagsInput.test.ts +75 -0
- package/src/__tests__/components/ThemeToggle.test.ts +47 -0
- package/src/__tests__/components/TimePicker.test.ts +38 -0
- package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +122 -0
- package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +199 -0
- package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +99 -0
- package/src/__tests__/composables/useCalendarGrid.test.ts +38 -0
- package/src/__tests__/composables/useControlSchema.test.ts +919 -0
- package/src/__tests__/composables/useDebouncedWatch.test.ts +93 -0
- package/src/__tests__/composables/useDropdownState.test.ts +95 -0
- package/src/__tests__/composables/useEventListener.test.ts +116 -0
- package/src/__tests__/composables/useExpansionSet.test.ts +62 -0
- package/src/__tests__/composables/useExperimentData.test.ts +4 -0
- package/src/__tests__/composables/useExperimentSave.test.ts +203 -8
- package/src/__tests__/composables/useExperimentSelector.test.ts +164 -0
- package/src/__tests__/composables/useForm.test.ts +58 -0
- package/src/__tests__/composables/useFormBuilder.test.ts +77 -0
- package/src/__tests__/composables/useGroupAssignment.test.ts +73 -0
- package/src/__tests__/composables/useListSelection.test.ts +66 -0
- package/src/__tests__/composables/usePluginClient.test.ts +444 -0
- package/src/__tests__/composables/usePluginConfig.test.ts +5 -0
- package/src/__tests__/composables/useRequestSyncState.test.ts +92 -0
- package/src/__tests__/composables/useSampleGroups.test.ts +66 -0
- package/src/__tests__/composables/useSelectionLimit.test.ts +41 -0
- package/src/__tests__/composables/useSortedItems.test.ts +87 -0
- package/src/__tests__/composables/useTemplateCollection.test.ts +147 -0
- package/src/__tests__/composables/useTextSearch.test.ts +55 -0
- package/src/__tests__/composables/useTheme.test.ts +91 -0
- package/src/__tests__/composables/useTimeUtils.test.ts +35 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +229 -0
- package/src/__tests__/fixtures/templates/dose-response.json +81 -0
- package/src/__tests__/fixtures/templates/plate-map.json +54 -0
- package/src/__tests__/fixtures/templates/qpcr-plate.json +96 -0
- package/src/__tests__/fixtures/templates/sample-sheet.json +71 -0
- package/src/__tests__/templates/templates.test.ts +1043 -0
- package/src/components/ActionItem.vue +82 -0
- package/src/components/AppAvatarMenu.vue +15 -69
- package/src/components/AppLayout.story.vue +25 -25
- package/src/components/AppPageSelector.vue +63 -94
- package/src/components/AppPillNav.vue +44 -39
- package/src/components/AppPluginSwitcher.vue +41 -145
- package/src/components/AppSidebar.story.vue +94 -0
- package/src/components/AppSidebar.vue +187 -12
- package/src/components/{ToastNotification.story.vue → AppToastContainer.story.vue} +6 -6
- package/src/components/AppToastContainer.vue +62 -0
- package/src/components/AppTopBar.story.vue +7 -30
- package/src/components/AppTopBar.vue +251 -57
- package/src/components/BaseModal.vue +3 -5
- package/src/components/BaseRadioGroup.vue +7 -3
- package/src/components/BaseSelect.vue +11 -7
- package/src/components/BaseTabs.vue +6 -4
- package/src/components/BatchProgressList.vue +5 -8
- package/src/components/BioTemplateExperimentWorkspaceView.story.vue +123 -0
- package/src/components/BioTemplateExperimentWorkspaceView.vue +337 -0
- package/src/components/BioTemplatePackWorkspaceView.story.vue +107 -0
- package/src/components/BioTemplatePackWorkspaceView.vue +176 -0
- package/src/components/BioTemplatePresetWorkspaceView.story.vue +151 -0
- package/src/components/BioTemplatePresetWorkspaceView.vue +392 -0
- package/src/components/BioTemplateRenderer.story.vue +57 -0
- package/src/components/BioTemplateRenderer.vue +269 -0
- package/src/components/Breadcrumb.vue +14 -8
- package/src/components/CalendarGridPanel.vue +120 -0
- package/src/components/ConcentrationInput.vue +27 -64
- package/src/components/ControlWorkspaceView.story.vue +336 -0
- package/src/components/ControlWorkspaceView.vue +347 -0
- package/src/components/DataFrame.vue +34 -50
- package/src/components/DatePicker.vue +59 -192
- package/src/components/DateTimePicker.vue +50 -171
- package/src/components/DropdownButton.vue +14 -32
- package/src/components/EmptyState.vue +4 -2
- package/src/components/ExperimentPopover.vue +5 -22
- package/src/components/FormBuilder.vue +124 -27
- package/src/components/FormFieldRenderer.vue +15 -38
- package/src/components/FormSection.vue +20 -73
- package/src/components/GroupAssigner.vue +24 -56
- package/src/components/GroupingModal.story.vue +3 -3
- package/src/components/GroupingModal.vue +30 -391
- package/src/components/MultiSelect.vue +17 -12
- package/src/components/PlateMapEditor.vue +3 -8
- package/src/components/PluginIcon.vue +2 -22
- package/src/components/ProtocolStepEditor.vue +13 -22
- package/src/components/ReagentList.vue +25 -33
- package/src/components/SampleHierarchyTree.vue +12 -23
- package/src/components/SampleSelector.vue +42 -122
- package/src/components/SegmentedControl.vue +7 -3
- package/src/components/SettingsButton.story.vue +1 -1
- package/src/components/SettingsButton.vue +15 -27
- package/src/components/SettingsModal.story.vue +1 -1
- package/src/components/SettingsModal.vue +120 -29
- package/src/components/TagsInput.vue +29 -14
- package/src/components/ThemeToggle.vue +9 -7
- package/src/components/TimePicker.vue +19 -41
- package/src/components/ToastNotification.vue +4 -57
- package/src/components/Tooltip.vue +7 -12
- package/src/components/WellEditPopup.vue +3 -8
- package/src/components/WellPlate.vue +4 -10
- package/src/components/index.ts +11 -1
- package/src/components/internal/FormFieldRendererInternal.vue +50 -0
- package/src/components/internal/FormSectionRenderer.vue +78 -0
- package/src/composables/index.ts +212 -0
- package/src/composables/platformContextHelpers.ts +74 -0
- package/src/composables/useBioTemplateComponents.ts +93 -0
- package/src/composables/useBioTemplateControls.ts +41 -0
- package/src/composables/useBioTemplatePackWorkspace.ts +181 -0
- package/src/composables/useBioTemplatePresetWorkspace.ts +337 -0
- package/src/composables/useBioTemplateWorkspace.ts +139 -0
- package/src/composables/useCalendarGrid.ts +140 -0
- package/src/composables/useControlSchema.ts +1274 -0
- package/src/composables/useDebouncedWatch.ts +119 -0
- package/src/composables/useDropdownState.ts +83 -0
- package/src/composables/useEventListener.ts +111 -0
- package/src/composables/useExpansionSet.ts +117 -0
- package/src/composables/useExperimentData.ts +20 -11
- package/src/composables/useExperimentSave.ts +202 -50
- package/src/composables/useExperimentSelector.ts +86 -72
- package/src/composables/useForm.ts +49 -4
- package/src/composables/useFormBuilder.ts +93 -42
- package/src/composables/useGroupAssignment.ts +148 -0
- package/src/composables/useListSelection.ts +158 -0
- package/src/composables/usePluginApi.ts +7 -14
- package/src/composables/usePluginClient.ts +425 -0
- package/src/composables/usePluginConfig.ts +34 -13
- package/src/composables/useRequestSyncState.ts +126 -0
- package/src/composables/useSampleGroups.ts +126 -0
- package/src/composables/useSelectionLimit.ts +57 -0
- package/src/composables/useSortedItems.ts +118 -0
- package/src/composables/useTemplateCollection.ts +229 -0
- package/src/composables/useTextSearch.ts +60 -0
- package/src/composables/useTheme.ts +2 -28
- package/src/composables/useTimeUtils.ts +26 -2
- package/src/composables/useWellPlateEditor.ts +13 -9
- package/src/index.ts +224 -4
- package/src/install.ts +11 -4
- package/src/stores/settings.ts +13 -9
- package/src/styles/components/app-page-selector.css +23 -0
- package/src/styles/components/app-pill-nav.css +7 -0
- package/src/styles/components/app-top-bar.css +34 -0
- package/src/styles/components/concentration-input.css +3 -142
- package/src/styles/components/empty-state.css +0 -16
- package/src/styles/components/settings-button.css +3 -66
- package/src/styles/components/theme-toggle.css +3 -66
- package/src/styles/index.css +0 -1
- package/src/templates/adapters.ts +785 -0
- package/src/templates/builders.ts +2149 -0
- package/src/templates/catalog.ts +245 -0
- package/src/templates/componentBindings.ts +615 -0
- package/src/templates/controlSchemas.ts +718 -0
- package/src/templates/index.ts +314 -0
- package/src/templates/lookup.ts +18 -0
- package/src/templates/packs.ts +156 -0
- package/src/templates/presets.ts +146 -0
- package/src/templates/types.ts +668 -0
- package/src/types/components.ts +41 -4
- package/src/types/form-builder.ts +7 -2
- package/src/types/index.ts +14 -0
- package/src/types/platform.ts +7 -1
- package/src/utils/formModelSync.ts +52 -0
- package/src/utils/items.ts +28 -0
- package/src/utils/options.ts +23 -0
- package/src/utils/pluginIcon.ts +30 -0
- package/dist/auth-DsI0rQ7_.js.map +0 -1
- package/dist/components-_XqPEhP9.js.map +0 -1
- package/dist/composables-tiZqLu1M.js.map +0 -1
- package/dist/useScheduleDrag-CA9sGNJG.js +0 -7181
- package/dist/useScheduleDrag-CA9sGNJG.js.map +0 -1
- package/src/styles/components/grouping-modal.css +0 -323
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
/** Interactive 96/384-well plate grid with drag-to-select, heatmap overlays, per-well editing, and sample-color mapping. */
|
|
3
|
-
import { ref, computed
|
|
3
|
+
import { ref, computed } from 'vue'
|
|
4
4
|
import type { WellPlateFormat, WellPlateSelectionMode, WellPlateSize, Well, HeatmapConfig, WellShape, WellEditField, WellEditData, WellLegendItem, ColumnCondition, RowCondition } from '../types'
|
|
5
|
+
import { useEventListener } from '../composables/useEventListener'
|
|
5
6
|
import WellEditPopup from './WellEditPopup.vue'
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
@@ -562,15 +563,8 @@ function handleKeyDown(event: KeyboardEvent) {
|
|
|
562
563
|
}
|
|
563
564
|
}
|
|
564
565
|
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
document.addEventListener('keydown', handleKeyDown)
|
|
568
|
-
})
|
|
569
|
-
|
|
570
|
-
onUnmounted(() => {
|
|
571
|
-
document.removeEventListener('mouseup', handleMouseUp)
|
|
572
|
-
document.removeEventListener('keydown', handleKeyDown)
|
|
573
|
-
})
|
|
566
|
+
useEventListener(() => document, 'mouseup', handleMouseUp)
|
|
567
|
+
useEventListener(() => document, 'keydown', handleKeyDown)
|
|
574
568
|
|
|
575
569
|
const containerStyle = computed(() =>
|
|
576
570
|
isFillMode.value ? {} : {
|
package/src/components/index.ts
CHANGED
|
@@ -27,12 +27,14 @@ export { default as FileUploader } from './FileUploader.vue'
|
|
|
27
27
|
|
|
28
28
|
// Feedback components
|
|
29
29
|
export { default as AlertBox } from './AlertBox.vue'
|
|
30
|
+
/** @deprecated Use AppToastContainer instead. */
|
|
30
31
|
export { default as ToastNotification } from './ToastNotification.vue'
|
|
31
|
-
export { default as AppToastContainer } from './
|
|
32
|
+
export { default as AppToastContainer } from './AppToastContainer.vue'
|
|
32
33
|
|
|
33
34
|
// Action components
|
|
34
35
|
export { default as IconButton } from './IconButton.vue'
|
|
35
36
|
export { default as ThemeToggle } from './ThemeToggle.vue'
|
|
37
|
+
/** @deprecated Use AppTopBar instead. */
|
|
36
38
|
export { default as SettingsButton } from './SettingsButton.vue'
|
|
37
39
|
|
|
38
40
|
// Layout components
|
|
@@ -44,6 +46,7 @@ export { default as AppAvatarMenu } from './AppAvatarMenu.vue'
|
|
|
44
46
|
export { default as AppPluginSwitcher } from './AppPluginSwitcher.vue'
|
|
45
47
|
export { default as AppSidebar } from './AppSidebar.vue'
|
|
46
48
|
export { default as AppLayout } from './AppLayout.vue'
|
|
49
|
+
export { default as ControlWorkspaceView } from './ControlWorkspaceView.vue'
|
|
47
50
|
export { default as AppContainer } from './AppContainer.vue'
|
|
48
51
|
export { default as PluginIcon } from './PluginIcon.vue'
|
|
49
52
|
|
|
@@ -62,6 +65,10 @@ export { default as ChartContainer } from './ChartContainer.vue'
|
|
|
62
65
|
export { default as SettingsModal } from './SettingsModal.vue'
|
|
63
66
|
|
|
64
67
|
// Biological experiment components
|
|
68
|
+
export { default as BioTemplateRenderer } from './BioTemplateRenderer.vue'
|
|
69
|
+
export { default as BioTemplateExperimentWorkspaceView } from './BioTemplateExperimentWorkspaceView.vue'
|
|
70
|
+
export { default as BioTemplatePackWorkspaceView } from './BioTemplatePackWorkspaceView.vue'
|
|
71
|
+
export { default as BioTemplatePresetWorkspaceView } from './BioTemplatePresetWorkspaceView.vue'
|
|
65
72
|
export { default as WellPlate } from './WellPlate.vue'
|
|
66
73
|
export { default as RackEditor } from './RackEditor.vue'
|
|
67
74
|
export { default as SampleLegend } from './SampleLegend.vue'
|
|
@@ -70,6 +77,7 @@ export { default as ExperimentTimeline } from './ExperimentTimeline.vue'
|
|
|
70
77
|
|
|
71
78
|
// Sample management components
|
|
72
79
|
export { default as SampleSelector } from './SampleSelector.vue'
|
|
80
|
+
/** @deprecated Use AutoGroupModal instead. */
|
|
73
81
|
export { default as GroupingModal } from './GroupingModal.vue'
|
|
74
82
|
export { default as AutoGroupModal } from './AutoGroupModal.vue'
|
|
75
83
|
export { default as GroupAssigner } from './GroupAssigner.vue'
|
|
@@ -99,8 +107,10 @@ export { default as BatchProgressList } from './BatchProgressList.vue'
|
|
|
99
107
|
|
|
100
108
|
// Form builder components
|
|
101
109
|
export { default as FormBuilder } from './FormBuilder.vue'
|
|
110
|
+
/** @deprecated Use FormBuilder instead. */
|
|
102
111
|
export { default as FormSection } from './FormSection.vue'
|
|
103
112
|
export { default as FormActions } from './FormActions.vue'
|
|
113
|
+
/** @deprecated Use FormBuilder instead. */
|
|
104
114
|
export { default as FormFieldRenderer } from './FormFieldRenderer.vue'
|
|
105
115
|
|
|
106
116
|
// Experiment data display components
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import type { FormFieldSchema } from '../../types/form-builder'
|
|
4
|
+
import type { UseFormReturn } from '../../composables/useForm'
|
|
5
|
+
import { getFieldRegistryEntry } from '../../composables/formBuilderRegistry'
|
|
6
|
+
import FormField from '../FormField.vue'
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
field: FormFieldSchema
|
|
10
|
+
resolvedProps: Record<string, unknown>
|
|
11
|
+
form: UseFormReturn<Record<string, unknown>>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const props = defineProps<Props>()
|
|
15
|
+
|
|
16
|
+
const entry = computed(() => getFieldRegistryEntry(props.field.type))
|
|
17
|
+
|
|
18
|
+
const errorMessage = computed(() => {
|
|
19
|
+
const name = props.field.name
|
|
20
|
+
return props.form.touched[name] ? props.form.errors[name] : null
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
function handleUpload(files: File[]) {
|
|
24
|
+
props.form.setFieldValue(props.field.name, files)
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<FormField
|
|
30
|
+
:label="field.label"
|
|
31
|
+
:error="errorMessage ?? undefined"
|
|
32
|
+
:hint="field.hint"
|
|
33
|
+
:required="!!field.validation?.required"
|
|
34
|
+
:html-for="field.name"
|
|
35
|
+
>
|
|
36
|
+
<slot :name="`field:${field.name}`" :field="field" :form="form" :field-props="form.getFieldProps(field.name)">
|
|
37
|
+
<component
|
|
38
|
+
:is="entry.component"
|
|
39
|
+
v-if="entry.vModel"
|
|
40
|
+
v-bind="resolvedProps"
|
|
41
|
+
/>
|
|
42
|
+
<component
|
|
43
|
+
:is="entry.component"
|
|
44
|
+
v-else
|
|
45
|
+
v-bind="resolvedProps"
|
|
46
|
+
@upload="handleUpload"
|
|
47
|
+
/>
|
|
48
|
+
</slot>
|
|
49
|
+
</FormField>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import type { FormSectionSchema, UseFormBuilderReturn } from '../../types/form-builder'
|
|
4
|
+
import CollapsibleCard from '../CollapsibleCard.vue'
|
|
5
|
+
import FormFieldRendererInternal from './FormFieldRendererInternal.vue'
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
section: FormSectionSchema
|
|
9
|
+
builder: UseFormBuilderReturn<Record<string, unknown>>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const props = defineProps<Props>()
|
|
13
|
+
|
|
14
|
+
const visibleFields = computed(() =>
|
|
15
|
+
props.section.fields.filter((f) => props.builder.isFieldVisible(f.name)),
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const gridStyle = computed(() => ({
|
|
19
|
+
gridTemplateColumns: `repeat(${props.section.columns ?? 1}, 1fr)`,
|
|
20
|
+
}))
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div v-if="visibleFields.length > 0" class="mint-form-section">
|
|
25
|
+
<slot :name="`section:${section.id}`" :section="section" :form="builder.form">
|
|
26
|
+
<CollapsibleCard
|
|
27
|
+
v-if="section.collapsible"
|
|
28
|
+
:title="section.title"
|
|
29
|
+
:subtitle="section.description"
|
|
30
|
+
:default-open="section.defaultOpen ?? true"
|
|
31
|
+
>
|
|
32
|
+
<div class="mint-form-section__grid" :style="gridStyle">
|
|
33
|
+
<div
|
|
34
|
+
v-for="field in visibleFields"
|
|
35
|
+
:key="field.name"
|
|
36
|
+
:style="field.colSpan ? { gridColumn: `span ${field.colSpan}` } : undefined"
|
|
37
|
+
>
|
|
38
|
+
<slot :name="`field:${field.name}`" :field="field" :form="builder.form" :field-props="builder.form.getFieldProps(field.name)">
|
|
39
|
+
<FormFieldRendererInternal
|
|
40
|
+
:field="field"
|
|
41
|
+
:resolved-props="builder.getResolvedFieldProps(field)"
|
|
42
|
+
:form="builder.form"
|
|
43
|
+
/>
|
|
44
|
+
</slot>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</CollapsibleCard>
|
|
48
|
+
|
|
49
|
+
<div v-else class="mint-form-section--static">
|
|
50
|
+
<div v-if="section.title || section.description" class="mint-form-section__header">
|
|
51
|
+
<h3 v-if="section.title" class="mint-form-section__title">{{ section.title }}</h3>
|
|
52
|
+
<p v-if="section.description" class="mint-form-section__description">{{ section.description }}</p>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="mint-form-section__grid" :style="gridStyle">
|
|
55
|
+
<div
|
|
56
|
+
v-for="field in visibleFields"
|
|
57
|
+
:key="field.name"
|
|
58
|
+
:style="field.colSpan ? { gridColumn: `span ${field.colSpan}` } : undefined"
|
|
59
|
+
>
|
|
60
|
+
<slot :name="`field:${field.name}`" :field="field" :form="builder.form" :field-props="builder.form.getFieldProps(field.name)">
|
|
61
|
+
<FormFieldRendererInternal
|
|
62
|
+
:field="field"
|
|
63
|
+
:resolved-props="builder.getResolvedFieldProps(field)"
|
|
64
|
+
:form="builder.form"
|
|
65
|
+
/>
|
|
66
|
+
</slot>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</slot>
|
|
71
|
+
|
|
72
|
+
<slot :name="`section:${section.id}:after`" :form="builder.form" />
|
|
73
|
+
</div>
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
<style>
|
|
77
|
+
@import '../../styles/components/form-builder.css';
|
|
78
|
+
</style>
|
package/src/composables/index.ts
CHANGED
|
@@ -43,6 +43,7 @@ export {
|
|
|
43
43
|
type SerialDilutionParams,
|
|
44
44
|
type SerialDilutionStep,
|
|
45
45
|
type SerialDilutionResult,
|
|
46
|
+
type ConversionResult,
|
|
46
47
|
type WellConcentration,
|
|
47
48
|
type UseDoseCalculatorReturn,
|
|
48
49
|
} from './useDoseCalculator'
|
|
@@ -75,6 +76,7 @@ export {
|
|
|
75
76
|
useTimeUtils,
|
|
76
77
|
parseTime,
|
|
77
78
|
formatTime,
|
|
79
|
+
formatTimeSlot,
|
|
78
80
|
generateTimeSlots,
|
|
79
81
|
rangesOverlap,
|
|
80
82
|
durationMinutes,
|
|
@@ -84,8 +86,30 @@ export {
|
|
|
84
86
|
snapToSlot,
|
|
85
87
|
addMinutes,
|
|
86
88
|
compareTime,
|
|
89
|
+
findNearestTimeSlotIndex,
|
|
90
|
+
toMinutes,
|
|
91
|
+
fromMinutes,
|
|
87
92
|
} from './useTimeUtils'
|
|
88
93
|
export { useScheduleDrag } from './useScheduleDrag'
|
|
94
|
+
export {
|
|
95
|
+
useEventListener,
|
|
96
|
+
type EventListenerEnabled,
|
|
97
|
+
type EventFor,
|
|
98
|
+
type EventListenerStop,
|
|
99
|
+
type EventMapFor,
|
|
100
|
+
type EventTargetGetter,
|
|
101
|
+
type EventTargetLike,
|
|
102
|
+
type UseEventListenerObjectOptions,
|
|
103
|
+
type UseEventListenerOptions,
|
|
104
|
+
} from './useEventListener'
|
|
105
|
+
export {
|
|
106
|
+
useDebouncedWatch,
|
|
107
|
+
type DebouncedWatchCallback,
|
|
108
|
+
type DebouncedWatchCleanup,
|
|
109
|
+
type DebouncedWatchSource,
|
|
110
|
+
type UseDebouncedWatchOptions,
|
|
111
|
+
type UseDebouncedWatchReturn,
|
|
112
|
+
} from './useDebouncedWatch'
|
|
89
113
|
export { useFormBuilder, evaluateCondition } from './useFormBuilder'
|
|
90
114
|
export { useAutoGroup, DEFAULT_COLORS, extractSamplesFromDesignData } from './useAutoGroup'
|
|
91
115
|
export {
|
|
@@ -134,7 +158,195 @@ export {
|
|
|
134
158
|
type UseExperimentSaveOptions,
|
|
135
159
|
type UseExperimentSaveReturn,
|
|
136
160
|
} from './useExperimentSave'
|
|
161
|
+
export {
|
|
162
|
+
useTemplateCollection,
|
|
163
|
+
type TemplateCollectionInput,
|
|
164
|
+
type UseTemplateCollectionOptions,
|
|
165
|
+
type UseTemplateCollectionReturn,
|
|
166
|
+
} from './useTemplateCollection'
|
|
167
|
+
export {
|
|
168
|
+
useRequestSyncState,
|
|
169
|
+
type RequestSyncRunOptions,
|
|
170
|
+
type RequestSyncSuccessKind,
|
|
171
|
+
type UseRequestSyncStateReturn,
|
|
172
|
+
} from './useRequestSyncState'
|
|
173
|
+
export {
|
|
174
|
+
useSelectionLimit,
|
|
175
|
+
type SelectionLimitSource,
|
|
176
|
+
type UseSelectionLimitOptions,
|
|
177
|
+
type UseSelectionLimitReturn,
|
|
178
|
+
} from './useSelectionLimit'
|
|
179
|
+
export {
|
|
180
|
+
useListSelection,
|
|
181
|
+
type ListSelectionSource,
|
|
182
|
+
type ListSelectionValue,
|
|
183
|
+
type UseListSelectionOptions,
|
|
184
|
+
type UseListSelectionReturn,
|
|
185
|
+
type WidenListSelectionValue,
|
|
186
|
+
} from './useListSelection'
|
|
187
|
+
export {
|
|
188
|
+
useGroupAssignment,
|
|
189
|
+
type GroupAssignmentSource,
|
|
190
|
+
type GroupAssignmentState,
|
|
191
|
+
type GroupAssignmentZone,
|
|
192
|
+
type UseGroupAssignmentOptions,
|
|
193
|
+
type UseGroupAssignmentReturn,
|
|
194
|
+
} from './useGroupAssignment'
|
|
195
|
+
export {
|
|
196
|
+
useSampleGroups,
|
|
197
|
+
type DisplaySampleSubGroup,
|
|
198
|
+
type SampleGroupSource,
|
|
199
|
+
type SampleMajorGroup,
|
|
200
|
+
type UseSampleGroupsOptions,
|
|
201
|
+
type UseSampleGroupsReturn,
|
|
202
|
+
} from './useSampleGroups'
|
|
203
|
+
export {
|
|
204
|
+
useExpansionSet,
|
|
205
|
+
type ExpansionSetSource,
|
|
206
|
+
type UseExpansionSetOptions,
|
|
207
|
+
type UseExpansionSetReturn,
|
|
208
|
+
} from './useExpansionSet'
|
|
209
|
+
export {
|
|
210
|
+
compareSortValues,
|
|
211
|
+
useSortedItems,
|
|
212
|
+
type CompareSortValuesOptions,
|
|
213
|
+
type SortComparator,
|
|
214
|
+
type SortComparatorContext,
|
|
215
|
+
type SortDescriptor,
|
|
216
|
+
type SortedItemsSource,
|
|
217
|
+
type SortOrder,
|
|
218
|
+
type UseSortedItemsOptions,
|
|
219
|
+
type UseSortedItemsReturn,
|
|
220
|
+
} from './useSortedItems'
|
|
221
|
+
export {
|
|
222
|
+
candidateMatchesSearch,
|
|
223
|
+
normalizeSearchQuery,
|
|
224
|
+
useTextSearch,
|
|
225
|
+
type TextSearchCandidate,
|
|
226
|
+
type TextSearchSource,
|
|
227
|
+
type UseTextSearchOptions,
|
|
228
|
+
type UseTextSearchReturn,
|
|
229
|
+
} from './useTextSearch'
|
|
230
|
+
/** @deprecated Use generated plugin clients from `mint sdk generate` instead. */
|
|
137
231
|
export {
|
|
138
232
|
usePluginApi,
|
|
139
233
|
type UsePluginApiOptions,
|
|
140
234
|
} from './usePluginApi'
|
|
235
|
+
export {
|
|
236
|
+
controlsToFormSchema,
|
|
237
|
+
controlsToSectionFormSchema,
|
|
238
|
+
controlsToSectionFormSchemas,
|
|
239
|
+
controlsToSidebarPanels,
|
|
240
|
+
controlsToSettingsSchema,
|
|
241
|
+
controlsToTopBarSettingsConfig,
|
|
242
|
+
controlsToTopBarTabs,
|
|
243
|
+
controlsToViewIds,
|
|
244
|
+
controlsToViewItems,
|
|
245
|
+
controlValuesToComponentProps,
|
|
246
|
+
defineControlModel,
|
|
247
|
+
defineDoseDesignControlModel,
|
|
248
|
+
defineDoseCalculatorControlProps,
|
|
249
|
+
defineControls,
|
|
250
|
+
defineWellPlateControlProps,
|
|
251
|
+
defineWellPlateDoseControlProps,
|
|
252
|
+
getDefaultControlView,
|
|
253
|
+
getControlDefaults,
|
|
254
|
+
useControlSchema,
|
|
255
|
+
useControlWorkspace,
|
|
256
|
+
type ControlDefinition,
|
|
257
|
+
type ControlComponentPropSource,
|
|
258
|
+
type ControlComponentPropsByIdMap,
|
|
259
|
+
type ControlComponentPropsMap,
|
|
260
|
+
type DoseDesignControlModelOptions,
|
|
261
|
+
type DoseCalculatorControlPropsOptions,
|
|
262
|
+
type ControlFormSchema,
|
|
263
|
+
type ControlInput,
|
|
264
|
+
type ControlModel,
|
|
265
|
+
type ControlModelBinding,
|
|
266
|
+
type ControlModelSectionConfig,
|
|
267
|
+
type ControlModelViewConfig,
|
|
268
|
+
type ControlOption,
|
|
269
|
+
type ControlOptionValue,
|
|
270
|
+
type ControlPrimitive,
|
|
271
|
+
type ControlSchema,
|
|
272
|
+
type ControlSchemaOptions,
|
|
273
|
+
type ControlShorthand,
|
|
274
|
+
type ControlWorkspaceOptions,
|
|
275
|
+
type ControlFormBinding,
|
|
276
|
+
type ControlSettingsBinding,
|
|
277
|
+
type ControlSidebarBinding,
|
|
278
|
+
type ControlSectionConfig,
|
|
279
|
+
type ControlSidebarConfig,
|
|
280
|
+
type ControlTopBarSettingsBinding,
|
|
281
|
+
type ControlViewConfig,
|
|
282
|
+
type ControlValues,
|
|
283
|
+
type UseControlSchemaReturn,
|
|
284
|
+
type ControlWorkspaceAppTopBarPillBinding,
|
|
285
|
+
type ControlWorkspaceAppTopBarTabsBinding,
|
|
286
|
+
type ControlWorkspaceComponentBindings,
|
|
287
|
+
type ControlWorkspaceFormBinding,
|
|
288
|
+
type ControlWorkspacePillNavBinding,
|
|
289
|
+
type ControlWorkspaceSidebarBinding,
|
|
290
|
+
type ControlWorkspaceTopBarBinding,
|
|
291
|
+
type ControlWorkspaceTopBarSettingsBinding,
|
|
292
|
+
type UseControlWorkspaceReturn,
|
|
293
|
+
type WellPlateControlPropsOptions,
|
|
294
|
+
type WellPlateDoseControlPropsOptions,
|
|
295
|
+
} from './useControlSchema'
|
|
296
|
+
export {
|
|
297
|
+
getBioTemplateControlSchema,
|
|
298
|
+
requireBioTemplateControlSchema,
|
|
299
|
+
useBioTemplateControls,
|
|
300
|
+
type BioTemplateControlSchema,
|
|
301
|
+
type BioTemplateControlTarget,
|
|
302
|
+
} from './useBioTemplateControls'
|
|
303
|
+
export {
|
|
304
|
+
getBioTemplateComponentProps,
|
|
305
|
+
getBioTemplateComponentBindings,
|
|
306
|
+
toBioTemplateComponentProps,
|
|
307
|
+
toBioTemplateComponentPropsByComponent,
|
|
308
|
+
toBioTemplateComponentPropsById,
|
|
309
|
+
useBioTemplateComponents,
|
|
310
|
+
type BioTemplateComponentBinding,
|
|
311
|
+
type BioTemplateComponentPropsByComponent,
|
|
312
|
+
type BioTemplateComponentPropsBinding,
|
|
313
|
+
type BioTemplateComponentPropsById,
|
|
314
|
+
type BioTemplateComponentPropsLookupOptions,
|
|
315
|
+
type BioTemplateComponentTarget,
|
|
316
|
+
type UseBioTemplateComponentsReturn,
|
|
317
|
+
} from './useBioTemplateComponents'
|
|
318
|
+
export {
|
|
319
|
+
useBioTemplateWorkspace,
|
|
320
|
+
type BioTemplateRendererBinding,
|
|
321
|
+
type BioTemplateWorkspaceBindings,
|
|
322
|
+
type BioTemplateWorkspaceTarget,
|
|
323
|
+
type UseBioTemplateWorkspaceReturn,
|
|
324
|
+
} from './useBioTemplateWorkspace'
|
|
325
|
+
export {
|
|
326
|
+
useBioTemplatePresetWorkspace,
|
|
327
|
+
type BioTemplatePresetWorkspaceBindings,
|
|
328
|
+
type UseBioTemplatePresetWorkspaceOptions,
|
|
329
|
+
type UseBioTemplatePresetWorkspaceReturn,
|
|
330
|
+
} from './useBioTemplatePresetWorkspace'
|
|
331
|
+
export {
|
|
332
|
+
useBioTemplatePackWorkspace,
|
|
333
|
+
type UseBioTemplatePackWorkspaceOptions,
|
|
334
|
+
type UseBioTemplatePackWorkspaceReturn,
|
|
335
|
+
} from './useBioTemplatePackWorkspace'
|
|
336
|
+
export {
|
|
337
|
+
buildPluginEndpointUrl,
|
|
338
|
+
createPluginClient,
|
|
339
|
+
resolvePluginBaseUrl,
|
|
340
|
+
usePluginClient,
|
|
341
|
+
usePluginSettings,
|
|
342
|
+
useCurrentExperiment,
|
|
343
|
+
type BuildPluginEndpointUrlOptions,
|
|
344
|
+
type PluginContract,
|
|
345
|
+
type PluginEndpointContract,
|
|
346
|
+
type PluginEndpointDefinition,
|
|
347
|
+
type PluginHttpMethod,
|
|
348
|
+
type PluginNavItemContract,
|
|
349
|
+
type CreatePluginClientOptions,
|
|
350
|
+
type UseCurrentExperimentOptions,
|
|
351
|
+
type UseCurrentExperimentReturn,
|
|
352
|
+
} from './usePluginClient'
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { PlatformContext } from '../types'
|
|
2
|
+
|
|
3
|
+
export type ExperimentAwarePlatformContext = PlatformContext & {
|
|
4
|
+
currentExperiment?: unknown
|
|
5
|
+
currentExperimentId?: unknown
|
|
6
|
+
experiment?: unknown
|
|
7
|
+
experimentId?: unknown
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function getInjectedPlatformContext(): PlatformContext | undefined {
|
|
11
|
+
if (typeof window === 'undefined') return undefined
|
|
12
|
+
return (window as unknown as { __MINT_PLATFORM__?: PlatformContext }).__MINT_PLATFORM__
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getInjectedExperimentContext(): ExperimentAwarePlatformContext | undefined {
|
|
16
|
+
return getInjectedPlatformContext() as ExperimentAwarePlatformContext | undefined
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function currentExperimentFromContext<TExperiment>(
|
|
20
|
+
context: ExperimentAwarePlatformContext | undefined = getInjectedExperimentContext(),
|
|
21
|
+
): TExperiment | undefined {
|
|
22
|
+
const candidate = context?.currentExperiment ?? context?.experiment
|
|
23
|
+
return candidate && typeof candidate === 'object'
|
|
24
|
+
? candidate as TExperiment
|
|
25
|
+
: undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function currentExperimentIdFromContext(
|
|
29
|
+
context: ExperimentAwarePlatformContext | undefined = getInjectedExperimentContext(),
|
|
30
|
+
): number | undefined {
|
|
31
|
+
return parseExperimentId(
|
|
32
|
+
context?.currentExperimentId ??
|
|
33
|
+
context?.experimentId ??
|
|
34
|
+
context?.currentExperiment ??
|
|
35
|
+
context?.experiment,
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function currentExperimentIdFromUrl(): number | undefined {
|
|
40
|
+
if (typeof window === 'undefined') return undefined
|
|
41
|
+
const params = new URLSearchParams(window.location.search)
|
|
42
|
+
return parseExperimentId(params.get('experimentId') ?? params.get('experiment_id'))
|
|
43
|
+
?? experimentIdFromPath(window.location.pathname)
|
|
44
|
+
?? experimentIdFromPath(window.location.hash.replace(/^#\/?/, '/'))
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function resolveCurrentExperimentId(
|
|
48
|
+
context: ExperimentAwarePlatformContext | undefined = getInjectedExperimentContext(),
|
|
49
|
+
): number | undefined {
|
|
50
|
+
return currentExperimentIdFromContext(context) ?? currentExperimentIdFromUrl()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function parseExperimentId(value: unknown): number | undefined {
|
|
54
|
+
if (typeof value === 'number' && Number.isFinite(value)) return value
|
|
55
|
+
if (typeof value === 'string' && value.trim()) {
|
|
56
|
+
const parsed = Number(value)
|
|
57
|
+
return Number.isFinite(parsed) ? parsed : undefined
|
|
58
|
+
}
|
|
59
|
+
if (value && typeof value === 'object' && 'id' in value) {
|
|
60
|
+
return parseExperimentId((value as { id?: unknown }).id)
|
|
61
|
+
}
|
|
62
|
+
return undefined
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function experimentIdFromPath(path: string): number | undefined {
|
|
66
|
+
const segments = path.split('/').filter(Boolean)
|
|
67
|
+
for (let index = 0; index < segments.length - 1; index += 1) {
|
|
68
|
+
const segment = segments[index]?.toLowerCase()
|
|
69
|
+
if (segment === 'experiment' || segment === 'experiments') {
|
|
70
|
+
return parseExperimentId(decodeURIComponent(segments[index + 1] ?? ''))
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return undefined
|
|
74
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getBioTemplateComponentBindings,
|
|
3
|
+
getBioTemplateComponentProps as getTemplateComponentProps,
|
|
4
|
+
toBioTemplateComponentImports,
|
|
5
|
+
toBioTemplateComponentProps,
|
|
6
|
+
toBioTemplateComponentPropsByComponent as toTemplateComponentPropsByComponent,
|
|
7
|
+
toBioTemplateComponentPropsById,
|
|
8
|
+
toBioTemplateComponentSnippets,
|
|
9
|
+
toBioTemplateComponentUsage,
|
|
10
|
+
type BioTemplateComponentBinding,
|
|
11
|
+
type BioTemplateComponentImport,
|
|
12
|
+
type BioTemplateComponentPropsByComponent,
|
|
13
|
+
type BioTemplateComponentPropsBinding,
|
|
14
|
+
type BioTemplateComponentPropsById,
|
|
15
|
+
type BioTemplateComponentPropsLookupOptions,
|
|
16
|
+
type BioTemplateComponentSnippet,
|
|
17
|
+
type BioTemplateComponentTarget,
|
|
18
|
+
type BioTemplateComponentUsage,
|
|
19
|
+
} from '../templates/componentBindings'
|
|
20
|
+
import type {
|
|
21
|
+
BioTemplateEnvelope,
|
|
22
|
+
TemplateCollectionEnvelope,
|
|
23
|
+
} from '../templates/types'
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
getBioTemplateComponentBindings,
|
|
27
|
+
toBioTemplateComponentImports,
|
|
28
|
+
toBioTemplateComponentProps,
|
|
29
|
+
toBioTemplateComponentPropsById,
|
|
30
|
+
toBioTemplateComponentSnippets,
|
|
31
|
+
toBioTemplateComponentUsage,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type {
|
|
35
|
+
BioTemplateComponentBinding,
|
|
36
|
+
BioTemplateComponentImport,
|
|
37
|
+
BioTemplateComponentPropsByComponent,
|
|
38
|
+
BioTemplateComponentPropsBinding,
|
|
39
|
+
BioTemplateComponentPropsById,
|
|
40
|
+
BioTemplateComponentPropsLookupOptions,
|
|
41
|
+
BioTemplateComponentSnippet,
|
|
42
|
+
BioTemplateComponentTarget,
|
|
43
|
+
BioTemplateComponentUsage,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface UseBioTemplateComponentsReturn {
|
|
47
|
+
bindings: BioTemplateComponentBinding[]
|
|
48
|
+
imports: BioTemplateComponentImport[]
|
|
49
|
+
componentProps: BioTemplateComponentPropsBinding[]
|
|
50
|
+
componentPropsById: BioTemplateComponentPropsById
|
|
51
|
+
componentPropsByComponent: BioTemplateComponentPropsByComponent
|
|
52
|
+
snippets: BioTemplateComponentSnippet[]
|
|
53
|
+
usage: BioTemplateComponentUsage | null
|
|
54
|
+
getComponentProps: (
|
|
55
|
+
component: string,
|
|
56
|
+
options?: BioTemplateComponentPropsLookupOptions,
|
|
57
|
+
) => Record<string, unknown> | undefined
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding. */
|
|
61
|
+
export function toBioTemplateComponentPropsByComponent(
|
|
62
|
+
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
63
|
+
): BioTemplateComponentPropsByComponent {
|
|
64
|
+
return toTemplateComponentPropsByComponent(target)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Return the first props object for an SDK component, optionally restricted by template id or binding id. */
|
|
68
|
+
export function getBioTemplateComponentProps(
|
|
69
|
+
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
70
|
+
component: string,
|
|
71
|
+
options: BioTemplateComponentPropsLookupOptions = {},
|
|
72
|
+
): Record<string, unknown> | undefined {
|
|
73
|
+
return getTemplateComponentProps(target, component, options)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateMapEditor. */
|
|
77
|
+
export function useBioTemplateComponents(
|
|
78
|
+
target: BioTemplateComponentTarget
|
|
79
|
+
): UseBioTemplateComponentsReturn {
|
|
80
|
+
return {
|
|
81
|
+
bindings: getBioTemplateComponentBindings(target),
|
|
82
|
+
imports: toBioTemplateComponentImports(target),
|
|
83
|
+
componentProps: typeof target === 'string' ? [] : toBioTemplateComponentProps(target),
|
|
84
|
+
componentPropsById: typeof target === 'string' ? {} : toBioTemplateComponentPropsById(target),
|
|
85
|
+
componentPropsByComponent: typeof target === 'string' ? {} : toBioTemplateComponentPropsByComponent(target),
|
|
86
|
+
snippets: typeof target === 'string' ? [] : toBioTemplateComponentSnippets(target),
|
|
87
|
+
usage: typeof target === 'string' ? null : toBioTemplateComponentUsage(target),
|
|
88
|
+
getComponentProps: (component, options) =>
|
|
89
|
+
typeof target === 'string'
|
|
90
|
+
? undefined
|
|
91
|
+
: getBioTemplateComponentProps(target, component, options),
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createBioTemplateControlToolkit,
|
|
3
|
+
getBioTemplateControlSchema,
|
|
4
|
+
requireBioTemplateControlSchema,
|
|
5
|
+
type BioTemplateControlSchema,
|
|
6
|
+
type BioTemplateControlTarget,
|
|
7
|
+
} from '../templates/controlSchemas'
|
|
8
|
+
import type {
|
|
9
|
+
ControlSchemaOptions,
|
|
10
|
+
ControlWorkspaceOptions,
|
|
11
|
+
UseControlSchemaReturn,
|
|
12
|
+
} from './useControlSchema'
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
getBioTemplateControlSchema,
|
|
16
|
+
requireBioTemplateControlSchema,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type {
|
|
20
|
+
BioTemplateControlSchema,
|
|
21
|
+
BioTemplateControlTarget,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset. */
|
|
25
|
+
export function useBioTemplateControls(
|
|
26
|
+
target: BioTemplateControlTarget,
|
|
27
|
+
options: ControlWorkspaceOptions = {},
|
|
28
|
+
): UseControlSchemaReturn<BioTemplateControlSchema> {
|
|
29
|
+
const { initialValues, topBarSettings: _topBarSettings, ...schemaOptions } = options
|
|
30
|
+
const controls = createBioTemplateControlToolkit(target, schemaOptions as ControlSchemaOptions)
|
|
31
|
+
|
|
32
|
+
if (initialValues === undefined) return controls
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
...controls,
|
|
36
|
+
initialValues: {
|
|
37
|
+
...controls.initialValues,
|
|
38
|
+
...initialValues,
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}
|