@morscherlab/mint-sdk 1.0.0-beta.1 → 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/PluginIcon.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 +43 -10
- package/dist/components/BaseButton.vue.d.ts +2 -2
- 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 +3 -3
- package/dist/components/BaseRadioGroup.vue.d.ts +4 -4
- package/dist/components/BaseSelect.vue.d.ts +4 -4
- package/dist/components/BaseSlider.vue.d.ts +1 -1
- package/dist/components/BaseTabs.vue.d.ts +2 -2
- package/dist/components/BaseTextarea.vue.d.ts +2 -2
- 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/ColorSlider.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 +2 -2
- package/dist/components/DateTimePicker.vue.d.ts +3 -3
- package/dist/components/DropdownButton.vue.d.ts +4 -4
- 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 +2 -2
- 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/IconButton.vue.d.ts +1 -1
- package/dist/components/LoadingSpinner.vue.d.ts +1 -1
- 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 +2 -2
- package/dist/components/PluginIcon.vue.d.ts +11 -0
- package/dist/components/ProgressBar.vue.d.ts +2 -2
- package/dist/components/ProtocolStepEditor.vue.d.ts +3 -1
- package/dist/components/RackEditor.vue.d.ts +2 -2
- package/dist/components/ReagentEditor.vue.d.ts +1 -1
- package/dist/components/ResourceCard.vue.d.ts +1 -1
- package/dist/components/SampleLegend.vue.d.ts +2 -2
- package/dist/components/SampleSelector.vue.d.ts +1 -1
- package/dist/components/ScheduleCalendar.vue.d.ts +2 -2
- package/dist/components/ScientificNumber.vue.d.ts +1 -1
- package/dist/components/SegmentedControl.vue.d.ts +3 -3
- 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 +32 -4
- 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 +2 -2
- package/dist/components/UnitInput.vue.d.ts +2 -2
- package/dist/components/WellPlate.vue.d.ts +8 -8
- package/dist/components/index.d.ts +12 -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-CzbQQPCb.js → components-D_Sr0adg.js} +9629 -8647
- 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 +24 -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-BXklV5ii.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/auth.d.ts +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/stores/settings.d.ts +4 -1
- package/dist/styles.css +5255 -5654
- 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 +62 -1
- package/dist/types/form-builder.d.ts +6 -8
- package/dist/types/index.d.ts +2 -2
- package/dist/types/platform.d.ts +8 -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 +414 -13
- 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/PluginIcon.test.ts +119 -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 +283 -84
- 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.story.vue +71 -0
- package/src/components/PluginIcon.vue +68 -0
- 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 +337 -45
- package/src/components/SettingsModal.vue +344 -66
- 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 +12 -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 +228 -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 +8 -2
- package/src/styles/components/app-top-bar.css +35 -2
- package/src/styles/components/button.css +3 -7
- package/src/styles/components/concentration-input.css +3 -142
- package/src/styles/components/dropdown-button.css +4 -4
- package/src/styles/components/empty-state.css +0 -16
- package/src/styles/components/input.css +4 -5
- package/src/styles/components/number-input.css +3 -3
- package/src/styles/components/plugin-icon.css +38 -0
- package/src/styles/components/segmented-control.css +4 -7
- package/src/styles/components/settings-button.css +3 -66
- package/src/styles/components/settings-modal.css +184 -0
- package/src/styles/components/tabs.css +1 -2
- package/src/styles/components/textarea.css +4 -5
- package/src/styles/components/theme-toggle.css +3 -66
- package/src/styles/components/unit-input.css +3 -3
- 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 +80 -1
- package/src/types/form-builder.ts +7 -2
- package/src/types/index.ts +17 -0
- package/src/types/platform.ts +8 -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-CzbQQPCb.js.map +0 -1
- package/dist/composables-BXklV5ii.js.map +0 -1
- package/dist/useScheduleDrag-CxBeqYcu.js +0 -7181
- package/dist/useScheduleDrag-CxBeqYcu.js.map +0 -1
- package/src/styles/components/grouping-modal.css +0 -323
|
@@ -34,13 +34,18 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
34
34
|
version: string;
|
|
35
35
|
description?: string | undefined;
|
|
36
36
|
icon?: string | undefined;
|
|
37
|
+
color?: string | undefined;
|
|
37
38
|
route_prefix: string;
|
|
38
39
|
api_prefix: string;
|
|
39
40
|
nav_items?: {
|
|
40
|
-
id
|
|
41
|
+
id?: string | undefined;
|
|
41
42
|
label: string;
|
|
42
43
|
path: string;
|
|
43
44
|
icon?: string | undefined;
|
|
45
|
+
description?: string | undefined;
|
|
46
|
+
requiresAuth?: boolean | undefined;
|
|
47
|
+
requiresAdmin?: boolean | undefined;
|
|
48
|
+
requiresFeature?: string | undefined;
|
|
44
49
|
children?: /*elided*/ any[] | undefined;
|
|
45
50
|
}[] | undefined;
|
|
46
51
|
settings?: import('..').PluginSettings | undefined;
|
|
@@ -56,7 +61,9 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
56
61
|
theme: "light" | "dark" | "system";
|
|
57
62
|
allowedExperimentTypes?: string[] | null | undefined;
|
|
58
63
|
features?: {
|
|
64
|
+
admin?: boolean | undefined;
|
|
59
65
|
experiments?: boolean | undefined;
|
|
66
|
+
samples?: boolean | undefined;
|
|
60
67
|
passkey?: boolean | undefined;
|
|
61
68
|
multiUser?: boolean | undefined;
|
|
62
69
|
} | undefined;
|
|
@@ -68,13 +75,18 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
68
75
|
version: string;
|
|
69
76
|
description?: string | undefined;
|
|
70
77
|
icon?: string | undefined;
|
|
78
|
+
color?: string | undefined;
|
|
71
79
|
route_prefix: string;
|
|
72
80
|
api_prefix: string;
|
|
73
81
|
nav_items?: {
|
|
74
|
-
id
|
|
82
|
+
id?: string | undefined;
|
|
75
83
|
label: string;
|
|
76
84
|
path: string;
|
|
77
85
|
icon?: string | undefined;
|
|
86
|
+
description?: string | undefined;
|
|
87
|
+
requiresAuth?: boolean | undefined;
|
|
88
|
+
requiresAdmin?: boolean | undefined;
|
|
89
|
+
requiresFeature?: string | undefined;
|
|
78
90
|
children?: /*elided*/ any[] | undefined;
|
|
79
91
|
}[] | undefined;
|
|
80
92
|
settings?: import('..').PluginSettings | undefined;
|
|
@@ -90,7 +102,9 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
90
102
|
theme: "light" | "dark" | "system";
|
|
91
103
|
allowedExperimentTypes?: string[] | null | undefined;
|
|
92
104
|
features?: {
|
|
105
|
+
admin?: boolean | undefined;
|
|
93
106
|
experiments?: boolean | undefined;
|
|
107
|
+
samples?: boolean | undefined;
|
|
94
108
|
passkey?: boolean | undefined;
|
|
95
109
|
multiUser?: boolean | undefined;
|
|
96
110
|
} | undefined;
|
|
@@ -102,13 +116,18 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
102
116
|
version: string;
|
|
103
117
|
description?: string | undefined;
|
|
104
118
|
icon?: string | undefined;
|
|
119
|
+
color?: string | undefined;
|
|
105
120
|
route_prefix: string;
|
|
106
121
|
api_prefix: string;
|
|
107
122
|
nav_items?: {
|
|
108
|
-
id
|
|
123
|
+
id?: string | undefined;
|
|
109
124
|
label: string;
|
|
110
125
|
path: string;
|
|
111
126
|
icon?: string | undefined;
|
|
127
|
+
description?: string | undefined;
|
|
128
|
+
requiresAuth?: boolean | undefined;
|
|
129
|
+
requiresAdmin?: boolean | undefined;
|
|
130
|
+
requiresFeature?: string | undefined;
|
|
112
131
|
children?: /*elided*/ any[] | undefined;
|
|
113
132
|
}[] | undefined;
|
|
114
133
|
settings?: import('..').PluginSettings | undefined;
|
|
@@ -121,7 +140,9 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
121
140
|
} | undefined>;
|
|
122
141
|
theme: import('vue').ComputedRef<"light" | "dark" | "system">;
|
|
123
142
|
features: import('vue').ComputedRef<{
|
|
143
|
+
admin?: boolean | undefined;
|
|
124
144
|
experiments?: boolean | undefined;
|
|
145
|
+
samples?: boolean | undefined;
|
|
125
146
|
passkey?: boolean | undefined;
|
|
126
147
|
multiUser?: boolean | undefined;
|
|
127
148
|
} | undefined>;
|
|
@@ -6,24 +6,17 @@ export interface UsePluginApiOptions {
|
|
|
6
6
|
fallbackPrefix?: string;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Legacy plugin API client resolving the plugin base URL from VITE_API_PREFIX or a fallback prefix.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* 3. `'/api'` (default)
|
|
11
|
+
* @deprecated Use `useGeneratedPluginClient()` from `mint sdk generate` for new
|
|
12
|
+
* plugin frontends. This helper remains as a compatibility shim for older
|
|
13
|
+
* plugins that still hand-wire API prefixes.
|
|
15
14
|
*
|
|
16
|
-
*
|
|
15
|
+
* Migration shape for generated plugins:
|
|
17
16
|
* ```ts
|
|
18
|
-
*
|
|
19
|
-
* const api = useApi({ baseUrl: API_BASE })
|
|
20
|
-
* ```
|
|
17
|
+
* import { useGeneratedPluginClient } from '../generated/mint-plugin'
|
|
21
18
|
*
|
|
22
|
-
*
|
|
23
|
-
* ```ts
|
|
24
|
-
* const api = usePluginApi({ fallbackPrefix: '/api/drp' })
|
|
25
|
-
* const data = await api.get('/sessions')
|
|
19
|
+
* const pluginClient = useGeneratedPluginClient()
|
|
26
20
|
* ```
|
|
27
21
|
*/
|
|
28
|
-
/** Pre-configured API client resolving the plugin base URL from VITE_API_PREFIX or a fallback prefix. */
|
|
29
22
|
export declare function usePluginApi(options?: UsePluginApiOptions): import('./useApi').UseApiReturn;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
export type PluginHttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
3
|
+
export interface PluginEndpointContract {
|
|
4
|
+
name: string;
|
|
5
|
+
method: PluginHttpMethod;
|
|
6
|
+
path: string;
|
|
7
|
+
pathParams?: string[];
|
|
8
|
+
queryParams?: PluginEndpointParamContract[];
|
|
9
|
+
requestType?: string | null;
|
|
10
|
+
responseType?: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface PluginEndpointParamContract {
|
|
13
|
+
name: string;
|
|
14
|
+
fieldName: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface PluginNavItemContract {
|
|
19
|
+
path: string;
|
|
20
|
+
label: string;
|
|
21
|
+
id?: string;
|
|
22
|
+
icon?: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
requiresAuth?: boolean;
|
|
25
|
+
requiresAdmin?: boolean;
|
|
26
|
+
requiresFeature?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface PluginContract {
|
|
29
|
+
schemaVersion: number;
|
|
30
|
+
plugin: {
|
|
31
|
+
name?: string;
|
|
32
|
+
packageName?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
routesPrefix: string;
|
|
36
|
+
apiPrefix: string;
|
|
37
|
+
type: 'analysis' | 'experiment-design' | string;
|
|
38
|
+
analysisType?: string;
|
|
39
|
+
icon?: string;
|
|
40
|
+
color?: string;
|
|
41
|
+
navItems?: PluginNavItemContract[];
|
|
42
|
+
capabilities?: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
endpoints: PluginEndpointContract[];
|
|
45
|
+
hash: string;
|
|
46
|
+
}
|
|
47
|
+
export interface PluginEndpointDefinition {
|
|
48
|
+
method: PluginHttpMethod;
|
|
49
|
+
path: string;
|
|
50
|
+
pathParams?: string[];
|
|
51
|
+
queryParams?: PluginEndpointParamDefinition[];
|
|
52
|
+
hasBody?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export type PluginEndpointParamDefinition = string | {
|
|
55
|
+
name: string;
|
|
56
|
+
fieldName?: string;
|
|
57
|
+
type?: string;
|
|
58
|
+
required?: boolean;
|
|
59
|
+
};
|
|
60
|
+
export interface CreatePluginClientOptions {
|
|
61
|
+
endpoints: Record<string, PluginEndpointDefinition>;
|
|
62
|
+
baseUrl?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface BuildPluginEndpointUrlOptions {
|
|
65
|
+
/** Override the generated or platform-injected API base URL. */
|
|
66
|
+
baseUrl?: string;
|
|
67
|
+
/** Return only the endpoint path and query string instead of base URL + path. */
|
|
68
|
+
includeBaseUrl?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface UseCurrentExperimentOptions {
|
|
71
|
+
apiBaseUrl?: string;
|
|
72
|
+
immediate?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface UseCurrentExperimentReturn<TExperiment = unknown> {
|
|
75
|
+
/** Current experiment id resolved from platform injection or URL conventions. */
|
|
76
|
+
experimentId: ComputedRef<number | undefined>;
|
|
77
|
+
/** Whether a current experiment id is available. */
|
|
78
|
+
hasExperiment: ComputedRef<boolean>;
|
|
79
|
+
/** Current experiment payload, if injected or successfully fetched. */
|
|
80
|
+
experiment: Ref<TExperiment | undefined>;
|
|
81
|
+
/** Whether the current experiment is currently loading. */
|
|
82
|
+
isLoading: Ref<boolean>;
|
|
83
|
+
/** Error message from the last failed current-experiment fetch, or null. */
|
|
84
|
+
error: Ref<string | null>;
|
|
85
|
+
/** Timestamp of the last successful current-experiment fetch, or null. */
|
|
86
|
+
lastLoadedAt: Ref<Date | null>;
|
|
87
|
+
/** Return the current experiment id or throw a clear SDK error when absent. */
|
|
88
|
+
requireExperimentId: () => number;
|
|
89
|
+
/** Fetch a specific experiment id, defaulting to the current experiment id. */
|
|
90
|
+
fetch: (experimentId?: number) => Promise<TExperiment | undefined>;
|
|
91
|
+
/** Refetch the currently resolved experiment id. */
|
|
92
|
+
refresh: () => Promise<TExperiment | undefined>;
|
|
93
|
+
}
|
|
94
|
+
export type PluginEndpointCaller = (payload?: unknown) => Promise<unknown>;
|
|
95
|
+
export type GeneratedPluginClient = Record<string, (...args: any[]) => Promise<any>>;
|
|
96
|
+
/** Resolve the runtime plugin API base URL from env, explicit options, platform injection, or contract metadata. */
|
|
97
|
+
export declare function resolvePluginBaseUrl(contract: PluginContract, explicitBaseUrl?: string): string;
|
|
98
|
+
/** Build the concrete URL for a generated plugin endpoint without making a request. */
|
|
99
|
+
export declare function buildPluginEndpointUrl(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: BuildPluginEndpointUrlOptions): string;
|
|
100
|
+
/** Create a typed plugin API client from a generated MINT plugin contract. */
|
|
101
|
+
export declare function createPluginClient<TClient extends object = GeneratedPluginClient>(contract: PluginContract, options: CreatePluginClientOptions): TClient;
|
|
102
|
+
/** Return a generated plugin client from setup code with a stable typed identity. */
|
|
103
|
+
export declare function usePluginClient<TClient>(client: TClient): TClient;
|
|
104
|
+
/** Read plugin settings exposed through the platform context. */
|
|
105
|
+
export declare function usePluginSettings<TSettings = Record<string, unknown>>(): {
|
|
106
|
+
settings: ComputedRef<TSettings | undefined>;
|
|
107
|
+
};
|
|
108
|
+
/** Read and optionally load the current platform experiment for integrated plugin views. */
|
|
109
|
+
export declare function useCurrentExperiment<TExperiment = unknown>(options?: UseCurrentExperimentOptions): UseCurrentExperimentReturn<TExperiment>;
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import { Ref, ComputedRef } from 'vue';
|
|
2
2
|
export interface UsePluginConfigReturn {
|
|
3
|
+
/** Editable plugin configuration values. */
|
|
3
4
|
config: Ref<Record<string, unknown>>;
|
|
5
|
+
/** Whether the config is currently loading. */
|
|
4
6
|
isLoading: Ref<boolean>;
|
|
7
|
+
/** Whether the config is currently saving. */
|
|
5
8
|
isSaving: Ref<boolean>;
|
|
9
|
+
/** Error message from the last failed operation, or null. */
|
|
6
10
|
error: Ref<string | null>;
|
|
11
|
+
/** Timestamp of the last successful load, or null. */
|
|
12
|
+
lastLoadedAt: Ref<Date | null>;
|
|
13
|
+
/** Timestamp of the last successful save, or null. */
|
|
14
|
+
lastSavedAt: Ref<Date | null>;
|
|
15
|
+
/** Whether local config differs from the last loaded or saved snapshot. */
|
|
7
16
|
isDirty: ComputedRef<boolean>;
|
|
17
|
+
/** Load plugin configuration from the platform. */
|
|
8
18
|
load: () => Promise<void>;
|
|
19
|
+
/** Save plugin configuration to the platform. */
|
|
9
20
|
save: () => Promise<boolean>;
|
|
21
|
+
/** Restore the last loaded or saved configuration snapshot. */
|
|
10
22
|
reset: () => void;
|
|
11
23
|
}
|
|
12
24
|
/** Loads, saves, and tracks dirty state for a plugin's persistent configuration via the platform API. */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
export type RequestSyncSuccessKind = 'load' | 'save' | 'run';
|
|
3
|
+
export interface RequestSyncRunOptions {
|
|
4
|
+
success?: RequestSyncSuccessKind;
|
|
5
|
+
errorMessage?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface UseRequestSyncStateReturn {
|
|
8
|
+
/** Whether a request is in progress. */
|
|
9
|
+
loading: Ref<boolean>;
|
|
10
|
+
/** Message from the last failed request, or null. */
|
|
11
|
+
error: Ref<string | null>;
|
|
12
|
+
/** Timestamp of the last successful load operation, or null. */
|
|
13
|
+
lastLoadedAt: Ref<Date | null>;
|
|
14
|
+
/** Timestamp of the last successful save operation, or null. */
|
|
15
|
+
lastSavedAt: Ref<Date | null>;
|
|
16
|
+
/** Timestamp of the last successful run operation, or null. */
|
|
17
|
+
lastRunAt: Ref<Date | null>;
|
|
18
|
+
/** Clear the current error without changing loading or timestamps. */
|
|
19
|
+
clearError: () => void;
|
|
20
|
+
/** Convert thrown values into a developer-facing error message. */
|
|
21
|
+
readErrorMessage: (value: unknown, fallback?: string) => string;
|
|
22
|
+
/** Store and return a normalized error message. */
|
|
23
|
+
setError: (value: unknown, fallback?: string) => string;
|
|
24
|
+
/** Mark the resource as successfully loaded. */
|
|
25
|
+
markLoaded: (date?: Date) => void;
|
|
26
|
+
/** Mark the resource as successfully saved. */
|
|
27
|
+
markSaved: (date?: Date) => void;
|
|
28
|
+
/** Mark the operation as successfully run. */
|
|
29
|
+
markRun: (date?: Date) => void;
|
|
30
|
+
/** Run a request with shared loading/error handling and optional sync marking. */
|
|
31
|
+
run: <T>(operation: () => Promise<T>, options?: RequestSyncRunOptions) => Promise<T>;
|
|
32
|
+
}
|
|
33
|
+
/** Shared loading/error/timestamp state for generated plugin request helpers. */
|
|
34
|
+
export declare function useRequestSyncState(defaultErrorMessage?: string): UseRequestSyncStateReturn;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { SampleGroup } from '../types';
|
|
3
|
+
export type SampleGroupSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
4
|
+
export interface DisplaySampleSubGroup extends SampleGroup {
|
|
5
|
+
displayColor: string;
|
|
6
|
+
displayBg: string;
|
|
7
|
+
displayBorder: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SampleMajorGroup {
|
|
10
|
+
name: string;
|
|
11
|
+
color: string;
|
|
12
|
+
subGroups: DisplaySampleSubGroup[];
|
|
13
|
+
allSamples: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface UseSampleGroupsOptions {
|
|
16
|
+
groups: SampleGroupSource<readonly SampleGroup[]>;
|
|
17
|
+
samples?: SampleGroupSource<readonly string[]>;
|
|
18
|
+
separator?: SampleGroupSource<string | null | undefined>;
|
|
19
|
+
fallbackColor?: SampleGroupSource<string | null | undefined>;
|
|
20
|
+
}
|
|
21
|
+
export interface UseSampleGroupsReturn {
|
|
22
|
+
groups: ComputedRef<SampleGroup[]>;
|
|
23
|
+
separator: ComputedRef<string>;
|
|
24
|
+
hierarchicalGroups: ComputedRef<SampleMajorGroup[]>;
|
|
25
|
+
showHierarchy: ComputedRef<boolean>;
|
|
26
|
+
groupedSamples: ComputedRef<Set<string>>;
|
|
27
|
+
ungroupedSamples: ComputedRef<string[]>;
|
|
28
|
+
findGroup: (groupName: string) => SampleGroup | undefined;
|
|
29
|
+
getGroupColor: (groupName: string) => string;
|
|
30
|
+
}
|
|
31
|
+
/** Shared sample-group hierarchy, color, and ungrouped-sample derivation for lab selectors. */
|
|
32
|
+
export declare function useSampleGroups(options: UseSampleGroupsOptions): UseSampleGroupsReturn;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
export type SelectionLimitSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
3
|
+
export interface UseSelectionLimitOptions {
|
|
4
|
+
count: SelectionLimitSource<number>;
|
|
5
|
+
max?: SelectionLimitSource<number | null | undefined>;
|
|
6
|
+
}
|
|
7
|
+
export interface UseSelectionLimitReturn {
|
|
8
|
+
count: ComputedRef<number>;
|
|
9
|
+
max: ComputedRef<number | undefined>;
|
|
10
|
+
isLimited: ComputedRef<boolean>;
|
|
11
|
+
isAtLimit: ComputedRef<boolean>;
|
|
12
|
+
canAddMore: ComputedRef<boolean>;
|
|
13
|
+
remaining: ComputedRef<number | undefined>;
|
|
14
|
+
canAdd: (amount?: number, fromCount?: number) => boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Shared cap logic for chip, tag, and multi-select controls. */
|
|
17
|
+
export declare function useSelectionLimit(options: UseSelectionLimitOptions): UseSelectionLimitReturn;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
export type SortedItemsSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
3
|
+
export type SortOrder = 'asc' | 'desc';
|
|
4
|
+
export interface SortDescriptor<TKey extends string = string> {
|
|
5
|
+
key: TKey;
|
|
6
|
+
direction?: SortOrder | null;
|
|
7
|
+
}
|
|
8
|
+
export interface CompareSortValuesOptions {
|
|
9
|
+
caseSensitive?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface SortComparatorContext<TItem, TKey extends string = string> {
|
|
12
|
+
key: TKey;
|
|
13
|
+
direction: SortOrder;
|
|
14
|
+
a: TItem;
|
|
15
|
+
b: TItem;
|
|
16
|
+
}
|
|
17
|
+
export type SortComparator<TItem, TKey extends string = string> = (aValue: unknown, bValue: unknown, context: SortComparatorContext<TItem, TKey>) => number;
|
|
18
|
+
export interface UseSortedItemsOptions<TItem, TKey extends string = string> {
|
|
19
|
+
items: SortedItemsSource<readonly TItem[]>;
|
|
20
|
+
sort: SortedItemsSource<SortDescriptor<TKey> | null | undefined>;
|
|
21
|
+
enabled?: SortedItemsSource<boolean | null | undefined>;
|
|
22
|
+
caseSensitive?: SortedItemsSource<boolean | null | undefined>;
|
|
23
|
+
getValue: (item: TItem, key: TKey) => unknown;
|
|
24
|
+
compare?: SortComparator<TItem, TKey>;
|
|
25
|
+
}
|
|
26
|
+
export interface UseSortedItemsReturn<TItem, TKey extends string = string> {
|
|
27
|
+
sort: ComputedRef<SortDescriptor<TKey> | null | undefined>;
|
|
28
|
+
sortedItems: ComputedRef<TItem[]>;
|
|
29
|
+
}
|
|
30
|
+
/** Shared sorting for SDK tables and lists with stable empty-value handling. */
|
|
31
|
+
export declare function useSortedItems<TItem, TKey extends string = string>(options: UseSortedItemsOptions<TItem, TKey>): UseSortedItemsReturn<TItem, TKey>;
|
|
32
|
+
export declare function compareSortValues(aValue: unknown, bValue: unknown, direction?: SortOrder, options?: CompareSortValuesOptions): number;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { UseExperimentSaveOptions } from './useExperimentSave';
|
|
3
|
+
import { BioTemplateEnvelope, TemplateCollection, TemplateCollectionEnvelope } from '../templates';
|
|
4
|
+
export type TemplateCollectionInput = TemplateCollectionEnvelope | BioTemplateEnvelope<unknown> | Array<BioTemplateEnvelope<unknown>>;
|
|
5
|
+
export interface UseTemplateCollectionOptions extends UseExperimentSaveOptions {
|
|
6
|
+
/** Initial template collection or factory; defaults to an empty collection. */
|
|
7
|
+
initial?: TemplateCollectionInput | (() => TemplateCollectionInput);
|
|
8
|
+
}
|
|
9
|
+
export interface UseTemplateCollectionReturn {
|
|
10
|
+
/** Current experiment id from platform injection, URL query, or URL path. */
|
|
11
|
+
currentExperimentId: ComputedRef<number | undefined>;
|
|
12
|
+
/** Whether a current experiment id is available. */
|
|
13
|
+
hasCurrentExperiment: ComputedRef<boolean>;
|
|
14
|
+
/** Full template collection envelope ready to save into design_data. */
|
|
15
|
+
templateCollection: Ref<TemplateCollectionEnvelope>;
|
|
16
|
+
/** Template map keyed by template_id. */
|
|
17
|
+
templates: ComputedRef<TemplateCollection>;
|
|
18
|
+
/** Collection-level metadata, or an empty object. */
|
|
19
|
+
metadata: ComputedRef<Record<string, unknown>>;
|
|
20
|
+
/** Template ids currently present in the collection. */
|
|
21
|
+
templateIds: ComputedRef<string[]>;
|
|
22
|
+
/** Whether the collection contains at least one template. */
|
|
23
|
+
hasTemplates: ComputedRef<boolean>;
|
|
24
|
+
/** Whether a load or delete operation is in progress. */
|
|
25
|
+
isLoading: Ref<boolean>;
|
|
26
|
+
/** Whether a save operation is in progress. */
|
|
27
|
+
isSaving: Ref<boolean>;
|
|
28
|
+
/** Error message from the last failed operation, or null. */
|
|
29
|
+
error: Ref<string | null>;
|
|
30
|
+
/** Timestamp of the last successful load, or null. */
|
|
31
|
+
lastLoadedAt: Ref<Date | null>;
|
|
32
|
+
/** Timestamp of the last successful save, or null. */
|
|
33
|
+
lastSavedAt: Ref<Date | null>;
|
|
34
|
+
/** Replace local state from a template envelope, collection envelope, or raw design_data. */
|
|
35
|
+
apply: (value: unknown, metadata?: Record<string, unknown>) => TemplateCollectionEnvelope;
|
|
36
|
+
/** Reset local state to the configured initial collection. */
|
|
37
|
+
reset: () => TemplateCollectionEnvelope;
|
|
38
|
+
/** Add or replace one template in the local collection. */
|
|
39
|
+
setTemplate: (template: BioTemplateEnvelope<unknown>) => TemplateCollectionEnvelope;
|
|
40
|
+
/** Remove one template from the local collection. */
|
|
41
|
+
removeTemplate: (templateId: string) => boolean;
|
|
42
|
+
/** Read one template from the local collection, returning null when missing. */
|
|
43
|
+
getTemplate: <TTemplate extends BioTemplateEnvelope<unknown> = BioTemplateEnvelope<unknown>>(templateId: string) => TTemplate | null;
|
|
44
|
+
/** Read one template from the local collection, throwing when missing or mismatched. */
|
|
45
|
+
requireTemplate: <TTemplate extends BioTemplateEnvelope<unknown> = BioTemplateEnvelope<unknown>>(templateId: string) => TTemplate;
|
|
46
|
+
/** Load template design_data for an experiment and apply it locally. */
|
|
47
|
+
load: (experimentId: number) => Promise<TemplateCollectionEnvelope | null>;
|
|
48
|
+
/** Load template design_data for the current experiment and apply it locally. */
|
|
49
|
+
loadCurrent: () => Promise<TemplateCollectionEnvelope | null>;
|
|
50
|
+
/** Save the local template collection as experiment design_data. */
|
|
51
|
+
save: (experimentId: number) => Promise<boolean>;
|
|
52
|
+
/** Save the local template collection as current experiment design_data. */
|
|
53
|
+
saveCurrent: () => Promise<boolean>;
|
|
54
|
+
/** Require and return the current experiment id, or throw when missing. */
|
|
55
|
+
requireCurrentExperimentId: () => number;
|
|
56
|
+
}
|
|
57
|
+
/** Manages a biology template collection in the current experiment's design_data. */
|
|
58
|
+
export declare function useTemplateCollection(options?: UseTemplateCollectionOptions): UseTemplateCollectionReturn;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComputedRef, Ref } from 'vue';
|
|
2
|
+
export type TextSearchSource<T> = T | Ref<T> | ComputedRef<T> | (() => T);
|
|
3
|
+
export type TextSearchCandidate = unknown | readonly unknown[];
|
|
4
|
+
export interface UseTextSearchOptions<TItem> {
|
|
5
|
+
items: TextSearchSource<readonly TItem[]>;
|
|
6
|
+
query: TextSearchSource<string | null | undefined>;
|
|
7
|
+
enabled?: TextSearchSource<boolean | null | undefined>;
|
|
8
|
+
getText: (item: TItem) => TextSearchCandidate;
|
|
9
|
+
}
|
|
10
|
+
export interface UseTextSearchReturn<TItem> {
|
|
11
|
+
query: ComputedRef<string>;
|
|
12
|
+
filteredItems: ComputedRef<TItem[]>;
|
|
13
|
+
matches: (item: TItem, query?: string | null | undefined) => boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Shared text-search filtering for tables, lists, selectors, and chip inputs. */
|
|
16
|
+
export declare function useTextSearch<TItem>(options: UseTextSearchOptions<TItem>): UseTextSearchReturn<TItem>;
|
|
17
|
+
export declare function normalizeSearchQuery(value: string | null | undefined): string;
|
|
18
|
+
export declare function candidateMatchesSearch(candidate: TextSearchCandidate, query: string): boolean;
|
|
@@ -4,6 +4,7 @@ export declare function parseTime(time: string): {
|
|
|
4
4
|
minute: number;
|
|
5
5
|
};
|
|
6
6
|
export declare function formatTime(hour: number, minute: number, format?: '12h' | '24h'): string;
|
|
7
|
+
export declare function formatTimeSlot(time: string, format?: '12h' | '24h'): string;
|
|
7
8
|
export declare function generateTimeSlots(start: string, end: string, stepMinutes: number): string[];
|
|
8
9
|
export declare function rangesOverlap(a: TimeRange, b: TimeRange): boolean;
|
|
9
10
|
export declare function durationMinutes(start: string, end: string): number;
|
|
@@ -13,10 +14,14 @@ export declare function findAvailableSlots(dayStart: string, dayEnd: string, occ
|
|
|
13
14
|
export declare function snapToSlot(time: string, stepMinutes: number): string;
|
|
14
15
|
export declare function addMinutes(time: string, minutes: number): string;
|
|
15
16
|
export declare function compareTime(a: string, b: string): number;
|
|
17
|
+
export declare function findNearestTimeSlotIndex(time: string, slots: readonly string[]): number;
|
|
18
|
+
export declare function toMinutes(time: string): number;
|
|
19
|
+
export declare function fromMinutes(total: number): string;
|
|
16
20
|
/** Time utility helpers for parsing, formatting, comparing, and snapping HH:MM strings. */
|
|
17
21
|
export declare function useTimeUtils(): {
|
|
18
22
|
parseTime: typeof parseTime;
|
|
19
23
|
formatTime: typeof formatTime;
|
|
24
|
+
formatTimeSlot: typeof formatTimeSlot;
|
|
20
25
|
generateTimeSlots: typeof generateTimeSlots;
|
|
21
26
|
rangesOverlap: typeof rangesOverlap;
|
|
22
27
|
durationMinutes: typeof durationMinutes;
|
|
@@ -26,4 +31,7 @@ export declare function useTimeUtils(): {
|
|
|
26
31
|
snapToSlot: typeof snapToSlot;
|
|
27
32
|
addMinutes: typeof addMinutes;
|
|
28
33
|
compareTime: typeof compareTime;
|
|
34
|
+
findNearestTimeSlotIndex: typeof findNearestTimeSlotIndex;
|
|
35
|
+
toMinutes: typeof toMinutes;
|
|
36
|
+
fromMinutes: typeof fromMinutes;
|
|
29
37
|
};
|