@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
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { PillNavItem, SidebarToolSection, SelectOption, SettingsModalSchema, TopBarSettingsConfig, TopBarTab } from '../types';
|
|
3
|
+
import { FieldCondition, FieldValidation, FormFieldSchema, FormFieldType, FormSchema, FormSectionSchema } from '../types/form-builder';
|
|
4
|
+
import { WellConcentration } from './useDoseCalculator';
|
|
5
|
+
export type ControlOptionValue = string | number | boolean;
|
|
6
|
+
export type ControlOption = ControlOptionValue | SelectOption<unknown>;
|
|
7
|
+
export type ControlPrimitive = string | number | boolean;
|
|
8
|
+
export type ControlShorthand = ControlPrimitive | readonly ControlOption[];
|
|
9
|
+
export type ControlInput = ControlDefinition | ControlShorthand;
|
|
10
|
+
export interface ControlSectionConfig {
|
|
11
|
+
id?: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
subtitle?: string;
|
|
16
|
+
icon?: string | string[];
|
|
17
|
+
iconColor?: string;
|
|
18
|
+
iconBg?: string;
|
|
19
|
+
columns?: 1 | 2 | 3;
|
|
20
|
+
condition?: FieldCondition;
|
|
21
|
+
defaultOpen?: boolean;
|
|
22
|
+
showToggle?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ControlViewConfig {
|
|
25
|
+
label?: string;
|
|
26
|
+
icon?: string;
|
|
27
|
+
to?: string;
|
|
28
|
+
href?: string;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
children?: TopBarTab['children'];
|
|
31
|
+
}
|
|
32
|
+
export interface ControlSidebarConfig extends Omit<ControlSectionConfig, 'id' | 'title' | 'description' | 'columns'> {
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface ControlDefinition {
|
|
36
|
+
type?: FormFieldType;
|
|
37
|
+
label?: string;
|
|
38
|
+
default?: unknown;
|
|
39
|
+
defaultValue?: unknown;
|
|
40
|
+
placeholder?: string;
|
|
41
|
+
hint?: string;
|
|
42
|
+
size?: 'sm' | 'md' | 'lg';
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
readonly?: boolean;
|
|
45
|
+
required?: boolean | string;
|
|
46
|
+
min?: number | {
|
|
47
|
+
value: number;
|
|
48
|
+
message: string;
|
|
49
|
+
};
|
|
50
|
+
max?: number | {
|
|
51
|
+
value: number;
|
|
52
|
+
message: string;
|
|
53
|
+
};
|
|
54
|
+
minLength?: number | {
|
|
55
|
+
value: number;
|
|
56
|
+
message: string;
|
|
57
|
+
};
|
|
58
|
+
maxLength?: number | {
|
|
59
|
+
value: number;
|
|
60
|
+
message: string;
|
|
61
|
+
};
|
|
62
|
+
email?: boolean | string;
|
|
63
|
+
pattern?: string | {
|
|
64
|
+
value: string;
|
|
65
|
+
message: string;
|
|
66
|
+
};
|
|
67
|
+
validation?: FieldValidation;
|
|
68
|
+
condition?: FieldCondition;
|
|
69
|
+
options?: readonly ControlOption[];
|
|
70
|
+
section?: string;
|
|
71
|
+
sectionLabel?: string;
|
|
72
|
+
sectionDescription?: string;
|
|
73
|
+
sectionSubtitle?: string;
|
|
74
|
+
view?: string;
|
|
75
|
+
order?: number;
|
|
76
|
+
colSpan?: number;
|
|
77
|
+
props?: Record<string, unknown>;
|
|
78
|
+
sidebar?: boolean | ControlSidebarConfig;
|
|
79
|
+
}
|
|
80
|
+
export type ControlSchema = Record<string, ControlInput>;
|
|
81
|
+
export type ControlFormSchema = Extract<FormSchema, {
|
|
82
|
+
sections: FormSectionSchema[];
|
|
83
|
+
}>;
|
|
84
|
+
export interface ControlSchemaOptions {
|
|
85
|
+
view?: string;
|
|
86
|
+
views?: Record<string, ControlViewConfig>;
|
|
87
|
+
section?: string;
|
|
88
|
+
sectionLabel?: string;
|
|
89
|
+
sections?: Record<string, ControlSectionConfig>;
|
|
90
|
+
columns?: 1 | 2 | 3;
|
|
91
|
+
submitLabel?: string;
|
|
92
|
+
cancelLabel?: string;
|
|
93
|
+
showCancel?: boolean;
|
|
94
|
+
}
|
|
95
|
+
export interface ControlWorkspaceOptions extends ControlSchemaOptions {
|
|
96
|
+
initialValues?: Record<string, unknown>;
|
|
97
|
+
topBarSettings?: Omit<TopBarSettingsConfig, 'schema' | 'controls' | 'controlOptions' | 'values'>;
|
|
98
|
+
}
|
|
99
|
+
export interface ControlModelSectionConfig extends ControlSectionConfig {
|
|
100
|
+
controls: ControlSchema;
|
|
101
|
+
sidebar?: boolean | ControlSidebarConfig;
|
|
102
|
+
}
|
|
103
|
+
export interface ControlModelViewConfig extends ControlViewConfig {
|
|
104
|
+
controls?: ControlSchema;
|
|
105
|
+
section?: string;
|
|
106
|
+
sectionLabel?: string;
|
|
107
|
+
sectionDescription?: string;
|
|
108
|
+
sections?: Record<string, ControlModelSectionConfig>;
|
|
109
|
+
}
|
|
110
|
+
export interface ControlModel extends Omit<ControlWorkspaceOptions, 'sections' | 'views'> {
|
|
111
|
+
controls?: ControlSchema;
|
|
112
|
+
sections?: Record<string, ControlModelSectionConfig>;
|
|
113
|
+
views?: Record<string, ControlModelViewConfig>;
|
|
114
|
+
/** Optional ControlWorkspaceView componentProps mapping returned with the generated controls/options. */
|
|
115
|
+
componentProps?: ControlComponentPropsMap;
|
|
116
|
+
/** Optional named componentProps mappings returned for multiple SDK components. */
|
|
117
|
+
componentPropsById?: ControlComponentPropsByIdMap;
|
|
118
|
+
}
|
|
119
|
+
export interface ControlModelBinding {
|
|
120
|
+
controls: ControlSchema;
|
|
121
|
+
controlOptions: ControlWorkspaceOptions;
|
|
122
|
+
componentProps?: ControlComponentPropsMap;
|
|
123
|
+
componentPropsById?: ControlComponentPropsByIdMap;
|
|
124
|
+
}
|
|
125
|
+
export interface ControlSidebarBinding {
|
|
126
|
+
panels: Record<string, SidebarToolSection[]>;
|
|
127
|
+
forms: Record<string, ControlFormSchema>;
|
|
128
|
+
viewIds: string[];
|
|
129
|
+
viewItems: PillNavItem[];
|
|
130
|
+
defaultView: string;
|
|
131
|
+
}
|
|
132
|
+
export interface ControlFormBinding {
|
|
133
|
+
schema: ControlFormSchema;
|
|
134
|
+
}
|
|
135
|
+
export interface ControlSettingsBinding {
|
|
136
|
+
schema: SettingsModalSchema;
|
|
137
|
+
}
|
|
138
|
+
export interface ControlTopBarSettingsBinding {
|
|
139
|
+
showSettings: true;
|
|
140
|
+
settingsConfig: TopBarSettingsConfig;
|
|
141
|
+
}
|
|
142
|
+
export interface ControlWorkspaceFormBinding extends ControlFormBinding {
|
|
143
|
+
modelValue: Record<string, unknown>;
|
|
144
|
+
'onUpdate:modelValue': (values: Record<string, unknown>) => void;
|
|
145
|
+
}
|
|
146
|
+
export interface ControlWorkspaceSidebarBinding extends ControlSidebarBinding {
|
|
147
|
+
activeView: string;
|
|
148
|
+
modelValue: Record<string, unknown>;
|
|
149
|
+
'onUpdate:modelValue': (values: Record<string, unknown>) => void;
|
|
150
|
+
values: Record<string, unknown>;
|
|
151
|
+
'onUpdate:values': (values: Record<string, unknown>) => void;
|
|
152
|
+
}
|
|
153
|
+
export interface ControlWorkspaceTopBarSettingsBinding extends ControlTopBarSettingsBinding {
|
|
154
|
+
onSettingsValuesChange: (values: Record<string, unknown>) => void;
|
|
155
|
+
}
|
|
156
|
+
export interface ControlWorkspaceTopBarBinding {
|
|
157
|
+
tabs: TopBarTab[];
|
|
158
|
+
currentTabId: string;
|
|
159
|
+
onTabSelect: (tab: TopBarTab) => void;
|
|
160
|
+
}
|
|
161
|
+
export interface ControlWorkspacePillNavBinding {
|
|
162
|
+
items: PillNavItem[];
|
|
163
|
+
currentItemId: string;
|
|
164
|
+
onSelect: (item: PillNavItem) => void;
|
|
165
|
+
}
|
|
166
|
+
export interface ControlWorkspaceAppTopBarPillBinding extends ControlWorkspaceTopBarSettingsBinding {
|
|
167
|
+
pillNav: PillNavItem[];
|
|
168
|
+
currentPillId: string;
|
|
169
|
+
onPillSelect: (item: PillNavItem) => void;
|
|
170
|
+
}
|
|
171
|
+
export interface ControlWorkspaceAppTopBarTabsBinding extends ControlWorkspaceTopBarSettingsBinding {
|
|
172
|
+
tabs: TopBarTab[];
|
|
173
|
+
currentTabId: string;
|
|
174
|
+
onTabSelect: (tab: TopBarTab) => void;
|
|
175
|
+
}
|
|
176
|
+
export interface ControlWorkspaceComponentBindings {
|
|
177
|
+
form: ControlWorkspaceFormBinding;
|
|
178
|
+
sidebar: ControlWorkspaceSidebarBinding;
|
|
179
|
+
topBar: ComputedRef<ControlWorkspaceAppTopBarPillBinding>;
|
|
180
|
+
topBarTabs: ComputedRef<ControlWorkspaceAppTopBarTabsBinding>;
|
|
181
|
+
topBarSettings: ControlWorkspaceTopBarSettingsBinding;
|
|
182
|
+
pillNav: ControlWorkspacePillNavBinding;
|
|
183
|
+
componentProps: ComputedRef<Record<string, unknown>>;
|
|
184
|
+
componentPropsById: ComputedRef<Record<string, Record<string, unknown>>>;
|
|
185
|
+
}
|
|
186
|
+
export type ControlComponentPropSource<TValues extends Record<string, unknown> = Record<string, unknown>> = (keyof TValues & string) | ((values: TValues) => unknown);
|
|
187
|
+
export type ControlComponentPropsMap<TValues extends Record<string, unknown> = Record<string, unknown>> = readonly (keyof TValues & string)[] | Record<string, ControlComponentPropSource<TValues>>;
|
|
188
|
+
export type ControlComponentPropsByIdMap<TValues extends Record<string, unknown> = Record<string, unknown>> = Record<string, ControlComponentPropsMap<TValues>>;
|
|
189
|
+
export interface WellPlateControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
|
|
190
|
+
selectedWells?: ControlComponentPropSource<TValues>;
|
|
191
|
+
format?: ControlComponentPropSource<TValues>;
|
|
192
|
+
wells?: ControlComponentPropSource<TValues>;
|
|
193
|
+
disabled?: ControlComponentPropSource<TValues>;
|
|
194
|
+
readonly?: ControlComponentPropSource<TValues>;
|
|
195
|
+
showLegend?: ControlComponentPropSource<TValues>;
|
|
196
|
+
showSampleTypeIndicator?: ControlComponentPropSource<TValues>;
|
|
197
|
+
/** Listener for WellPlate v-model updates. Set false to keep generated props one-way. */
|
|
198
|
+
onUpdateModelValue?: ((values: TValues) => (wellIds: string[]) => void) | false;
|
|
199
|
+
}
|
|
200
|
+
export interface DoseCalculatorControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
|
|
201
|
+
mode?: ControlComponentPropSource<TValues>;
|
|
202
|
+
targetWells?: ControlComponentPropSource<TValues>;
|
|
203
|
+
/** Control value key used by the default apply-to-wells handler. */
|
|
204
|
+
wells?: ControlComponentPropSource<TValues>;
|
|
205
|
+
disabled?: ControlComponentPropSource<TValues>;
|
|
206
|
+
molecularWeight?: ControlComponentPropSource<TValues>;
|
|
207
|
+
/** Listener for DoseCalculator apply-to-wells. Set false to keep generated props one-way. */
|
|
208
|
+
onApplyToWells?: ((values: TValues) => (results: WellConcentration[]) => void) | false;
|
|
209
|
+
}
|
|
210
|
+
export interface WellPlateDoseControlPropsOptions<TValues extends Record<string, unknown> = Record<string, unknown>> {
|
|
211
|
+
plateId?: string;
|
|
212
|
+
doseId?: string;
|
|
213
|
+
plate?: WellPlateControlPropsOptions<TValues>;
|
|
214
|
+
dose?: DoseCalculatorControlPropsOptions<TValues>;
|
|
215
|
+
}
|
|
216
|
+
export interface DoseDesignControlModelOptions {
|
|
217
|
+
viewId?: string;
|
|
218
|
+
viewLabel?: string;
|
|
219
|
+
sectionId?: string;
|
|
220
|
+
sectionLabel?: string;
|
|
221
|
+
sectionDescription?: string;
|
|
222
|
+
selectedWells?: readonly string[];
|
|
223
|
+
plateFormat?: number;
|
|
224
|
+
plateFormats?: readonly number[];
|
|
225
|
+
doseMode?: 'serial' | 'dilution' | 'conversion';
|
|
226
|
+
doseModes?: readonly ('serial' | 'dilution' | 'conversion')[];
|
|
227
|
+
disabled?: boolean;
|
|
228
|
+
includeMolecularWeight?: boolean;
|
|
229
|
+
molecularWeight?: number;
|
|
230
|
+
componentProps?: WellPlateDoseControlPropsOptions;
|
|
231
|
+
}
|
|
232
|
+
export interface UseControlSchemaReturn<TControls extends ControlSchema> {
|
|
233
|
+
controls: TControls;
|
|
234
|
+
fields: FormFieldSchema[];
|
|
235
|
+
formSchema: ControlFormSchema;
|
|
236
|
+
form: ControlFormBinding;
|
|
237
|
+
settingsSchema: SettingsModalSchema;
|
|
238
|
+
settings: ControlSettingsBinding;
|
|
239
|
+
topBarSettingsConfig: TopBarSettingsConfig;
|
|
240
|
+
topBarSettings: ControlTopBarSettingsBinding;
|
|
241
|
+
sidebarPanels: Record<string, SidebarToolSection[]>;
|
|
242
|
+
viewIds: string[];
|
|
243
|
+
viewItems: PillNavItem[];
|
|
244
|
+
topBarTabs: TopBarTab[];
|
|
245
|
+
defaultView: string;
|
|
246
|
+
sectionSchemas: Record<string, ControlFormSchema>;
|
|
247
|
+
sidebar: ControlSidebarBinding;
|
|
248
|
+
initialValues: ControlValues<TControls>;
|
|
249
|
+
sectionSchema: (sectionId: string) => ControlFormSchema;
|
|
250
|
+
}
|
|
251
|
+
export interface UseControlWorkspaceReturn<TControls extends ControlSchema> extends Omit<UseControlSchemaReturn<TControls>, 'form' | 'sidebar' | 'topBarSettings'> {
|
|
252
|
+
schema: UseControlSchemaReturn<TControls>;
|
|
253
|
+
values: ControlValues<TControls> & Record<string, unknown>;
|
|
254
|
+
activeView: Ref<string>;
|
|
255
|
+
form: ControlWorkspaceFormBinding;
|
|
256
|
+
sidebar: ControlWorkspaceSidebarBinding;
|
|
257
|
+
topBar: ControlWorkspaceTopBarBinding;
|
|
258
|
+
pillNav: ControlWorkspacePillNavBinding;
|
|
259
|
+
topBarSettings: ControlWorkspaceTopBarSettingsBinding;
|
|
260
|
+
bindings: ControlWorkspaceComponentBindings;
|
|
261
|
+
componentProps: ComputedRef<Record<string, unknown>>;
|
|
262
|
+
componentPropsById: ComputedRef<Record<string, Record<string, unknown>>>;
|
|
263
|
+
setActiveView: (viewId: string) => void;
|
|
264
|
+
setValues: (values: Record<string, unknown>) => void;
|
|
265
|
+
resetValues: (values?: Record<string, unknown>) => void;
|
|
266
|
+
getComponentProps: (mapping?: ControlComponentPropsMap<ControlValues<TControls> & Record<string, unknown>>) => Record<string, unknown>;
|
|
267
|
+
getComponentPropsById: (mappings?: ControlComponentPropsByIdMap<ControlValues<TControls> & Record<string, unknown>>) => Record<string, Record<string, unknown>>;
|
|
268
|
+
}
|
|
269
|
+
export type ControlValues<TControls extends ControlSchema> = {
|
|
270
|
+
[K in keyof TControls]: ControlValue<TControls[K]>;
|
|
271
|
+
};
|
|
272
|
+
type ControlValue<TControl> = TControl extends {
|
|
273
|
+
default: infer TDefault;
|
|
274
|
+
} ? TDefault : TControl extends {
|
|
275
|
+
defaultValue: infer TDefaultValue;
|
|
276
|
+
} ? TDefaultValue : TControl extends readonly [infer First, ...unknown[]] ? OptionValue<First> : TControl extends ControlPrimitive ? TControl : unknown;
|
|
277
|
+
type OptionValue<TOption> = TOption extends SelectOption<infer TValue> ? TValue : TOption;
|
|
278
|
+
/** Preserve literal control keys while marking an object as a MINT control schema. */
|
|
279
|
+
export declare function defineControls<TControls extends ControlSchema>(controls: TControls): TControls;
|
|
280
|
+
/** Flatten a simple view/section control data model into ControlWorkspaceView props for generated forms and sidebars. */
|
|
281
|
+
export declare function defineControlModel(model: ControlModel): ControlModelBinding;
|
|
282
|
+
/** Build default values for a control schema, matching FormBuilder field defaults. */
|
|
283
|
+
export declare function getControlDefaults<TControls extends ControlSchema>(controls: TControls): ControlValues<TControls>;
|
|
284
|
+
/** Map control workspace values into component props for direct `v-bind` usage. */
|
|
285
|
+
export declare function controlValuesToComponentProps<TValues extends Record<string, unknown>>(values: TValues, mapping?: ControlComponentPropsMap<TValues>): Record<string, unknown>;
|
|
286
|
+
/** Return a default WellPlate prop mapping for generated control workspaces. */
|
|
287
|
+
export declare function defineWellPlateControlProps<TValues extends Record<string, unknown> = Record<string, unknown>>(options?: WellPlateControlPropsOptions<TValues>): ControlComponentPropsMap<TValues>;
|
|
288
|
+
/** Return a default DoseCalculator prop mapping for generated control workspaces. */
|
|
289
|
+
export declare function defineDoseCalculatorControlProps<TValues extends Record<string, unknown> = Record<string, unknown>>(options?: DoseCalculatorControlPropsOptions<TValues>): ControlComponentPropsMap<TValues>;
|
|
290
|
+
/** Return named WellPlate + DoseCalculator prop mappings for one dose-design control model. */
|
|
291
|
+
export declare function defineWellPlateDoseControlProps<TValues extends Record<string, unknown> = Record<string, unknown>>(options?: WellPlateDoseControlPropsOptions<TValues>): ControlComponentPropsByIdMap<TValues>;
|
|
292
|
+
/** Return a complete ControlWorkspaceView model for WellPlate + DoseCalculator dose design. */
|
|
293
|
+
export declare function defineDoseDesignControlModel(options?: DoseDesignControlModelOptions): ControlModelBinding;
|
|
294
|
+
export declare function mergeControlWorkspaceOptions(base?: ControlWorkspaceOptions, override?: ControlWorkspaceOptions): ControlWorkspaceOptions;
|
|
295
|
+
/** Convert a compact control schema into a FormBuilder schema. */
|
|
296
|
+
export declare function controlsToFormSchema(controls: ControlSchema, options?: ControlSchemaOptions): ControlFormSchema;
|
|
297
|
+
/** Convert controls into AppSidebar panels grouped by view and section. */
|
|
298
|
+
export declare function controlsToSidebarPanels(controls: ControlSchema, options?: ControlSchemaOptions): Record<string, SidebarToolSection[]>;
|
|
299
|
+
/** Convert controls into a SettingsModal schema grouped by the same sections. */
|
|
300
|
+
export declare function controlsToSettingsSchema(controls: ControlSchema, options?: ControlSchemaOptions): SettingsModalSchema;
|
|
301
|
+
/** Convert controls into an AppTopBar settingsConfig object that passes compact controls through to SettingsModal. */
|
|
302
|
+
export declare function controlsToTopBarSettingsConfig(controls: ControlSchema, options?: ControlSchemaOptions, config?: Omit<TopBarSettingsConfig, 'schema' | 'controls' | 'controlOptions'>): TopBarSettingsConfig;
|
|
303
|
+
/** Return generated control view IDs that have at least one sidebar panel. */
|
|
304
|
+
export declare function controlsToViewIds(controls: ControlSchema, options?: ControlSchemaOptions): string[];
|
|
305
|
+
/** Return AppPillNav-compatible view items for switching generated control sidebars. */
|
|
306
|
+
export declare function controlsToViewItems(controls: ControlSchema, options?: ControlSchemaOptions): PillNavItem[];
|
|
307
|
+
/** Return AppTopBar-compatible tabs for the same views that drive generated AppSidebar panels. */
|
|
308
|
+
export declare function controlsToTopBarTabs(controls: ControlSchema, options?: ControlSchemaOptions): TopBarTab[];
|
|
309
|
+
/** Return the first generated sidebar view ID, or an empty string when controls render no sidebar panels. */
|
|
310
|
+
export declare function getDefaultControlView(controls: ControlSchema, options?: ControlSchemaOptions): string;
|
|
311
|
+
/** Return a headerless single-section FormBuilder schema for rendering inside an AppSidebar section slot. */
|
|
312
|
+
export declare function controlsToSectionFormSchema(controls: ControlSchema, sectionId: string, options?: ControlSchemaOptions): ControlFormSchema;
|
|
313
|
+
/** Return headerless FormBuilder schemas keyed by section ID for AppSidebar auto-rendering. */
|
|
314
|
+
export declare function controlsToSectionFormSchemas(controls: ControlSchema, options?: ControlSchemaOptions): Record<string, ControlFormSchema>;
|
|
315
|
+
/** Prepare FormBuilder, SettingsModal, AppTopBar settings, AppSidebar, and initial values from one compact control model. */
|
|
316
|
+
export declare function useControlSchema<TControls extends ControlSchema>(controls: TControls, options?: ControlSchemaOptions): UseControlSchemaReturn<TControls>;
|
|
317
|
+
/** Prepare shared reactive values plus AppTopBar/AppSidebar/FormBuilder bindings from one simple controls data model. */
|
|
318
|
+
export declare function useControlWorkspace<TControls extends ControlSchema>(controlsOrModel: TControls | (ControlModelBinding & {
|
|
319
|
+
controls: TControls;
|
|
320
|
+
}), options?: ControlWorkspaceOptions): UseControlWorkspaceReturn<TControls>;
|
|
321
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Ref, WatchOptions, WatchSource, WatchStopHandle } from 'vue';
|
|
2
|
+
export type DebouncedWatchCleanup = () => void;
|
|
3
|
+
export type DebouncedWatchSource<T> = WatchSource<T> | WatchSource<unknown>[] | (() => T);
|
|
4
|
+
export type DebouncedWatchCallback<T> = (value: T, oldValue: T | undefined, onCleanup: (cleanup: DebouncedWatchCleanup) => void) => void | Promise<void>;
|
|
5
|
+
export interface UseDebouncedWatchOptions extends WatchOptions {
|
|
6
|
+
/** Debounce interval in milliseconds. */
|
|
7
|
+
delay?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface UseDebouncedWatchReturn {
|
|
10
|
+
/** Whether a callback is currently scheduled. */
|
|
11
|
+
isPending: Ref<boolean>;
|
|
12
|
+
/** Cancel the pending callback without stopping the watcher. */
|
|
13
|
+
cancel: () => void;
|
|
14
|
+
/** Run the pending callback immediately, if one is scheduled. */
|
|
15
|
+
flush: () => void;
|
|
16
|
+
/** Stop the watcher and clear pending callbacks. */
|
|
17
|
+
stop: WatchStopHandle;
|
|
18
|
+
}
|
|
19
|
+
/** Watch a Vue source with debounced callback execution and explicit cancel/flush controls. */
|
|
20
|
+
export declare function useDebouncedWatch<T>(source: DebouncedWatchSource<T>, callback: DebouncedWatchCallback<T>, options?: UseDebouncedWatchOptions): UseDebouncedWatchReturn;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
export interface UseDropdownStateOptions {
|
|
3
|
+
closeOnOutsideClick?: boolean;
|
|
4
|
+
closeOnEscape?: boolean;
|
|
5
|
+
insideRefs?: Array<Ref<HTMLElement | null>>;
|
|
6
|
+
onOpen?: () => void;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export interface UseDropdownStateReturn {
|
|
10
|
+
isOpen: Ref<boolean>;
|
|
11
|
+
rootRef: Ref<HTMLElement | null>;
|
|
12
|
+
open: () => void;
|
|
13
|
+
close: () => void;
|
|
14
|
+
toggle: () => void;
|
|
15
|
+
handleClickOutside: (event: MouseEvent) => void;
|
|
16
|
+
handleKeydown: (event: KeyboardEvent) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Shared disclosure state for dropdown-style SDK components. */
|
|
19
|
+
export declare function useDropdownState(options?: UseDropdownStateOptions): UseDropdownStateReturn;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
export type EventTargetGetter<TTarget extends EventTarget = EventTarget> = () => TTarget | null | undefined;
|
|
3
|
+
export type EventTargetLike<TTarget extends EventTarget = EventTarget> = TTarget | Ref<TTarget | null | undefined> | EventTargetGetter<TTarget> | null | undefined;
|
|
4
|
+
export type EventListenerEnabled = boolean | Ref<boolean>;
|
|
5
|
+
export interface UseEventListenerObjectOptions extends AddEventListenerOptions {
|
|
6
|
+
enabled?: EventListenerEnabled;
|
|
7
|
+
}
|
|
8
|
+
export type UseEventListenerOptions = boolean | UseEventListenerObjectOptions;
|
|
9
|
+
export type EventListenerStop = () => void;
|
|
10
|
+
export type EventMapFor<TTarget extends EventTarget> = TTarget extends Window ? WindowEventMap : TTarget extends Document ? DocumentEventMap : TTarget extends HTMLElement ? HTMLElementEventMap : Record<string, Event>;
|
|
11
|
+
export type EventFor<TTarget extends EventTarget, TType extends string> = TType extends keyof EventMapFor<TTarget> ? EventMapFor<TTarget>[TType] : Event;
|
|
12
|
+
/** Bind a DOM event listener on mount, remove it on unmount, and rebind when a ref target changes. */
|
|
13
|
+
export declare function useEventListener<TTarget extends EventTarget = EventTarget, TType extends string = string>(target: EventTargetLike<TTarget>, type: TType, listener: (event: EventFor<TTarget, TType>) => void, options?: UseEventListenerOptions): EventListenerStop;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
export type ExpansionSetSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
3
|
+
export interface UseExpansionSetOptions {
|
|
4
|
+
defaultIds?: ExpansionSetSource<readonly string[] | null | undefined>;
|
|
5
|
+
allIds?: ExpansionSetSource<readonly string[] | null | undefined>;
|
|
6
|
+
expandAll?: ExpansionSetSource<boolean | null | undefined>;
|
|
7
|
+
}
|
|
8
|
+
export interface UseExpansionSetReturn {
|
|
9
|
+
expandedIds: Ref<Set<string>>;
|
|
10
|
+
expandedList: ComputedRef<string[]>;
|
|
11
|
+
isExpanded: (id: string) => boolean;
|
|
12
|
+
expand: (id: string) => void;
|
|
13
|
+
collapse: (id: string) => void;
|
|
14
|
+
toggle: (id: string) => boolean;
|
|
15
|
+
expandMany: (ids: readonly string[]) => void;
|
|
16
|
+
setExpanded: (ids: readonly string[]) => void;
|
|
17
|
+
collapseAll: () => void;
|
|
18
|
+
reset: () => void;
|
|
19
|
+
}
|
|
20
|
+
/** Shared expansion state for trees, grouped selectors, and disclosure lists. */
|
|
21
|
+
export declare function useExpansionSet(options?: UseExpansionSetOptions): UseExpansionSetReturn;
|
|
@@ -5,13 +5,23 @@ export interface UseExperimentDataOptions {
|
|
|
5
5
|
immediate?: boolean;
|
|
6
6
|
}
|
|
7
7
|
export interface UseExperimentDataReturn {
|
|
8
|
+
/** Raw experiment data payload from `/experiments/{id}/data`, or null. */
|
|
8
9
|
data: Ref<Record<string, unknown> | null>;
|
|
10
|
+
/** Hierarchy tree rows normalised from `tree_data` or `treeData`. */
|
|
9
11
|
treeData: ComputedRef<TreeNode[]>;
|
|
12
|
+
/** Table rows normalised from `table_data` or `tableData`. */
|
|
10
13
|
tableData: ComputedRef<Record<string, unknown>[]>;
|
|
14
|
+
/** Summary payload normalised from `summary_data` or `summaryData`, or null. */
|
|
11
15
|
summaryData: ComputedRef<SummaryData | null>;
|
|
16
|
+
/** Whether experiment data is currently loading. */
|
|
12
17
|
isLoading: Ref<boolean>;
|
|
18
|
+
/** Error message from the last failed fetch, or null. */
|
|
13
19
|
error: Ref<string | null>;
|
|
20
|
+
/** Timestamp of the last successful experiment data fetch, or null. */
|
|
21
|
+
lastLoadedAt: Ref<Date | null>;
|
|
22
|
+
/** Fetch experiment data for an experiment id. */
|
|
14
23
|
fetch: (experimentId: number) => Promise<void>;
|
|
24
|
+
/** Refetch the most recently fetched experiment id. */
|
|
15
25
|
refresh: () => Promise<void>;
|
|
16
26
|
}
|
|
17
27
|
/** Fetches and normalises experiment output data (tree, table, summary) from the platform API. */
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Ref } from 'vue';
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { CreateLcmsBatchCollectionOptions, CreateQpcrExpressionCollectionOptions, CreateWellPlateScreenCollectionOptions, TemplatePresetId } from '../templates';
|
|
3
|
+
type TemplatePresetCollectionOptions = CreateWellPlateScreenCollectionOptions | CreateQpcrExpressionCollectionOptions | CreateLcmsBatchCollectionOptions;
|
|
2
4
|
export interface UseExperimentSaveOptions {
|
|
3
5
|
/** Default plugin_id for all save/load calls. */
|
|
4
6
|
pluginId?: string;
|
|
@@ -8,16 +10,32 @@ export interface UseExperimentSaveOptions {
|
|
|
8
10
|
apiBaseUrl?: string;
|
|
9
11
|
}
|
|
10
12
|
export interface UseExperimentSaveReturn {
|
|
13
|
+
/** Current experiment id from platform injection, URL query, or URL path. */
|
|
14
|
+
currentExperimentId: ComputedRef<number | undefined>;
|
|
15
|
+
/** Whether a current experiment id is available. */
|
|
16
|
+
hasCurrentExperiment: ComputedRef<boolean>;
|
|
11
17
|
/** Whether a save operation is in progress. */
|
|
12
18
|
isSaving: Ref<boolean>;
|
|
19
|
+
/** Whether a load or delete operation is in progress. */
|
|
20
|
+
isLoading: Ref<boolean>;
|
|
13
21
|
/** Error message from the last failed operation, or null. */
|
|
14
22
|
error: Ref<string | null>;
|
|
23
|
+
/** Timestamp of the last successful load, or null. */
|
|
24
|
+
lastLoadedAt: Ref<Date | null>;
|
|
15
25
|
/** Timestamp of the last successful save, or null. */
|
|
16
26
|
lastSavedAt: Ref<Date | null>;
|
|
17
27
|
/** Save design data for an experiment. */
|
|
18
28
|
saveDesign: (experimentId: number, data: Record<string, unknown>) => Promise<boolean>;
|
|
29
|
+
/** Save design data for the current experiment. */
|
|
30
|
+
saveCurrentDesign: (data: Record<string, unknown>) => Promise<boolean>;
|
|
31
|
+
/** Create and save a built-in biology template preset as experiment design data. */
|
|
32
|
+
saveTemplatePreset: (experimentId: number, name: TemplatePresetId | string, options?: TemplatePresetCollectionOptions) => Promise<boolean>;
|
|
33
|
+
/** Create and save a built-in biology template preset for the current experiment. */
|
|
34
|
+
saveCurrentTemplatePreset: (name: TemplatePresetId | string, options?: TemplatePresetCollectionOptions) => Promise<boolean>;
|
|
19
35
|
/** Save analysis result for an experiment. */
|
|
20
36
|
saveAnalysis: (experimentId: number, result: Record<string, unknown>) => Promise<boolean>;
|
|
37
|
+
/** Save analysis result for the current experiment. */
|
|
38
|
+
saveCurrentAnalysis: (result: Record<string, unknown>) => Promise<boolean>;
|
|
21
39
|
/** Save design and/or analysis in one call. */
|
|
22
40
|
save: (experimentId: number, opts: {
|
|
23
41
|
design?: Record<string, unknown>;
|
|
@@ -25,12 +43,23 @@ export interface UseExperimentSaveReturn {
|
|
|
25
43
|
}) => Promise<boolean>;
|
|
26
44
|
/** Load design data for an experiment. */
|
|
27
45
|
loadDesign: (experimentId: number) => Promise<Record<string, unknown> | null>;
|
|
46
|
+
/** Load design data for the current experiment. */
|
|
47
|
+
loadCurrentDesign: () => Promise<Record<string, unknown> | null>;
|
|
28
48
|
/** Load analysis result for an experiment. */
|
|
29
49
|
loadAnalysis: (experimentId: number) => Promise<Record<string, unknown> | null>;
|
|
50
|
+
/** Load analysis result for the current experiment. */
|
|
51
|
+
loadCurrentAnalysis: () => Promise<Record<string, unknown> | null>;
|
|
30
52
|
/** Delete design data for an experiment. */
|
|
31
53
|
deleteDesign: (experimentId: number) => Promise<boolean>;
|
|
54
|
+
/** Delete design data for the current experiment. */
|
|
55
|
+
deleteCurrentDesign: () => Promise<boolean>;
|
|
32
56
|
/** Delete analysis result for an experiment. */
|
|
33
57
|
deleteAnalysis: (experimentId: number) => Promise<boolean>;
|
|
58
|
+
/** Delete analysis result for the current experiment. */
|
|
59
|
+
deleteCurrentAnalysis: () => Promise<boolean>;
|
|
60
|
+
/** Require and return the current experiment id, or throw when missing. */
|
|
61
|
+
requireCurrentExperimentId: () => number;
|
|
34
62
|
}
|
|
35
|
-
/** Persists
|
|
63
|
+
/** Persists experiment design, analysis, and built-in template preset data through the platform API. */
|
|
36
64
|
export declare function useExperimentSave(options?: UseExperimentSaveOptions): UseExperimentSaveReturn;
|
|
65
|
+
export {};
|
|
@@ -7,23 +7,43 @@ export interface UseExperimentSelectorOptions {
|
|
|
7
7
|
immediate?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export interface UseExperimentSelectorReturn {
|
|
10
|
+
/** Current page of fetched experiment rows. */
|
|
10
11
|
experiments: Ref<ExperimentSummary[]>;
|
|
12
|
+
/** Total matching experiment count reported by the platform. */
|
|
11
13
|
total: Ref<number>;
|
|
14
|
+
/** Currently selected experiment, or null. */
|
|
12
15
|
selectedExperiment: Ref<ExperimentSummary | null>;
|
|
16
|
+
/** Mutable filters used for the next fetch. */
|
|
13
17
|
filters: ExperimentFilters;
|
|
18
|
+
/** Whether experiment rows are currently loading. */
|
|
14
19
|
isLoading: Ref<boolean>;
|
|
20
|
+
/** Error message from the last failed fetch, or null. */
|
|
15
21
|
error: Ref<string | null>;
|
|
22
|
+
/** Timestamp of the last successful experiment fetch, or null. */
|
|
23
|
+
lastLoadedAt: Ref<Date | null>;
|
|
24
|
+
/** Current zero-based page index. */
|
|
16
25
|
page: Ref<number>;
|
|
26
|
+
/** Whether another page can be loaded. */
|
|
17
27
|
hasMore: ComputedRef<boolean>;
|
|
28
|
+
/** Combined sort key in the form `<field>:<asc|desc>`. */
|
|
18
29
|
sortKey: Ref<string>;
|
|
30
|
+
/** Available experiment type options for filter UI. */
|
|
19
31
|
experimentTypes: Ref<ExperimentTypeOption[]>;
|
|
32
|
+
/** Available project options for filter UI. */
|
|
20
33
|
projects: Ref<SelectOption<string>[]>;
|
|
34
|
+
/** Fetched experiments grouped by project name. */
|
|
21
35
|
groupedByProject: ComputedRef<[string, ExperimentSummary[]][]>;
|
|
36
|
+
/** Fetch the current page with the current filters. */
|
|
22
37
|
fetch: () => Promise<void>;
|
|
38
|
+
/** Fetch and append the next page when available. */
|
|
23
39
|
loadMore: () => Promise<void>;
|
|
40
|
+
/** Clear fetched rows and refetch page zero. */
|
|
24
41
|
reset: () => void;
|
|
42
|
+
/** Select an experiment. */
|
|
25
43
|
select: (experiment: ExperimentSummary) => void;
|
|
44
|
+
/** Clear selection and filters. */
|
|
26
45
|
clear: () => void;
|
|
46
|
+
/** Fetch experiment type and project filter options. */
|
|
27
47
|
fetchFilterOptions: () => Promise<void>;
|
|
28
48
|
}
|
|
29
49
|
/** Fetches a paginated, filtered experiment list from the platform API for picker and selector UIs. */
|
|
@@ -58,6 +58,8 @@ export interface UseFormReturn<T extends Record<string, unknown>> {
|
|
|
58
58
|
validateField: (field: string) => boolean;
|
|
59
59
|
validate: () => boolean;
|
|
60
60
|
reset: (values?: Partial<T>) => void;
|
|
61
|
+
/** Replace the full form state and treat the provided values as the new clean baseline. */
|
|
62
|
+
replaceState: (values: T) => void;
|
|
61
63
|
handleSubmit: (onSubmit: (data: T) => Promise<void> | void) => (e?: Event) => Promise<void>;
|
|
62
64
|
getFieldProps: <K extends keyof T>(field: K) => {
|
|
63
65
|
modelValue: T[K];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { GroupItem } from '../types';
|
|
3
|
+
export type GroupAssignmentZone = 'zone1' | 'zone2';
|
|
4
|
+
export type GroupAssignmentSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
5
|
+
export interface GroupAssignmentState {
|
|
6
|
+
group1: string[];
|
|
7
|
+
group2: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface UseGroupAssignmentOptions {
|
|
10
|
+
groups: GroupAssignmentSource<readonly GroupItem[]>;
|
|
11
|
+
group1: GroupAssignmentSource<readonly string[]>;
|
|
12
|
+
group2: GroupAssignmentSource<readonly string[]>;
|
|
13
|
+
label1?: GroupAssignmentSource<string | null | undefined>;
|
|
14
|
+
label2?: GroupAssignmentSource<string | null | undefined>;
|
|
15
|
+
minPerGroup?: GroupAssignmentSource<number | null | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export interface UseGroupAssignmentReturn {
|
|
18
|
+
unassignedGroups: ComputedRef<GroupItem[]>;
|
|
19
|
+
zone1Groups: ComputedRef<GroupItem[]>;
|
|
20
|
+
zone2Groups: ComputedRef<GroupItem[]>;
|
|
21
|
+
zone1Count: ComputedRef<number>;
|
|
22
|
+
zone2Count: ComputedRef<number>;
|
|
23
|
+
isValid: ComputedRef<boolean>;
|
|
24
|
+
validationMessage: ComputedRef<string | null>;
|
|
25
|
+
getZoneForGroup: (groupName: string) => GroupAssignmentZone | null;
|
|
26
|
+
assignToZone: (groupName: string, zone: GroupAssignmentZone) => GroupAssignmentState;
|
|
27
|
+
removeFromZone: (groupName: string, zone: GroupAssignmentZone) => GroupAssignmentState;
|
|
28
|
+
clearAll: () => GroupAssignmentState;
|
|
29
|
+
}
|
|
30
|
+
/** Shared two-zone group assignment model for control/treatment style workflows. */
|
|
31
|
+
export declare function useGroupAssignment(options: UseGroupAssignmentOptions): UseGroupAssignmentReturn;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { SelectionLimitSource } from './useSelectionLimit';
|
|
3
|
+
export type ListSelectionValue = string | number;
|
|
4
|
+
export type ListSelectionSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
5
|
+
export type WidenListSelectionValue<TValue extends ListSelectionValue> = TValue extends string ? string : TValue extends number ? number : TValue;
|
|
6
|
+
export interface UseListSelectionOptions<TItem, TValue extends ListSelectionValue = ListSelectionValue> {
|
|
7
|
+
selected: ListSelectionSource<readonly TValue[]>;
|
|
8
|
+
items?: ListSelectionSource<readonly TItem[]>;
|
|
9
|
+
getValue?: (item: TItem) => TValue;
|
|
10
|
+
disabled?: ListSelectionSource<boolean | null | undefined>;
|
|
11
|
+
max?: SelectionLimitSource<number | null | undefined>;
|
|
12
|
+
}
|
|
13
|
+
export interface UseListSelectionReturn<TValue extends ListSelectionValue = ListSelectionValue> {
|
|
14
|
+
selectedValues: ComputedRef<TValue[]>;
|
|
15
|
+
selectedSet: ComputedRef<Set<TValue>>;
|
|
16
|
+
itemValues: ComputedRef<TValue[]>;
|
|
17
|
+
selectedCount: ComputedRef<number>;
|
|
18
|
+
itemCount: ComputedRef<number>;
|
|
19
|
+
isAllSelected: ComputedRef<boolean>;
|
|
20
|
+
isLimited: ComputedRef<boolean>;
|
|
21
|
+
isAtLimit: ComputedRef<boolean>;
|
|
22
|
+
canAddMore: ComputedRef<boolean>;
|
|
23
|
+
remaining: ComputedRef<number | undefined>;
|
|
24
|
+
isSelected: (value: TValue) => boolean;
|
|
25
|
+
isFullySelected: (values: readonly TValue[]) => boolean;
|
|
26
|
+
isPartiallySelected: (values: readonly TValue[]) => boolean;
|
|
27
|
+
selectValues: (values: readonly TValue[]) => TValue[];
|
|
28
|
+
toggleValue: (value: TValue) => TValue[];
|
|
29
|
+
toggleValues: (values: readonly TValue[]) => TValue[];
|
|
30
|
+
selectAll: () => TValue[];
|
|
31
|
+
toggleAll: () => TValue[];
|
|
32
|
+
clear: () => TValue[];
|
|
33
|
+
}
|
|
34
|
+
/** Shared list-selection state for checkbox lists, sample selectors, and chip selectors. */
|
|
35
|
+
export declare function useListSelection<TItem = ListSelectionValue, TValue extends ListSelectionValue = TItem extends ListSelectionValue ? TItem : ListSelectionValue>(options: UseListSelectionOptions<TItem, TValue>): UseListSelectionReturn<WidenListSelectionValue<TValue>>;
|