@morscherlab/mint-sdk 1.2.0-beta.2 → 1.2.0-beta.20
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 +65 -5
- package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-CJdNlCZb.js} +24 -15
- package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
- package/dist/{ExperimentSelectorModal-DyPAUCLw.js → ExperimentSelectorModal-DCXmwKNS.js} +5 -5
- package/dist/ExperimentSelectorModal-DCXmwKNS.js.map +1 -0
- package/dist/{SettingsModal-BgKY93zh.js → SettingsModal-BYR20I4c.js} +5 -8
- package/dist/SettingsModal-BYR20I4c.js.map +1 -0
- package/dist/{EmptyState-p90quq8Z.js → Skeleton-BAF3CKY7.js} +111 -93
- package/dist/Skeleton-BAF3CKY7.js.map +1 -0
- package/dist/__tests__/components/DataStates.test.d.ts +1 -0
- package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
- package/dist/__tests__/components/FileBrowserModal.test.d.ts +1 -0
- package/dist/__tests__/components/FilePicker.state.test.d.ts +1 -0
- package/dist/__tests__/components/FilePicker.test.d.ts +1 -0
- package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
- package/dist/__tests__/components/PluginWorkspaceView.internal.test.d.ts +1 -0
- package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
- package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
- package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
- package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
- package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
- package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
- package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
- package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
- package/dist/apiErrors.d.ts +26 -0
- package/dist/components/ActionMenu.vue.d.ts +1 -1
- package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
- package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
- package/dist/components/AppSidebar.vue.d.ts +1 -1
- package/dist/components/AuditTrail.vue.d.ts +13 -0
- package/dist/components/AutoGroupModal.vue.d.ts +1 -1
- package/dist/components/BaseInput.vue.d.ts +1 -1
- package/dist/components/BaseSelect.vue.d.ts +1 -1
- package/dist/components/BaseTextarea.vue.d.ts +1 -1
- package/dist/components/BatchProgressList.vue.d.ts +17 -0
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +4 -4
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
- package/dist/components/ConcentrationInput.vue.d.ts +1 -1
- package/dist/components/DataFrame.vue.d.ts +14 -2
- package/dist/components/DatePicker.vue.d.ts +2 -2
- package/dist/components/DateTimePicker.vue.d.ts +3 -1
- package/dist/components/DropdownButton.vue.d.ts +2 -0
- package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
- package/dist/components/ExperimentPopover.vue.d.ts +1 -0
- package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
- package/dist/components/FileBrowserModal.vue.d.ts +99 -0
- package/dist/components/FilePicker.vue.d.ts +32 -0
- package/dist/components/FileUploader.vue.d.ts +5 -2
- package/dist/components/FitPanel.vue.d.ts +1 -1
- package/dist/components/FormulaInput.vue.d.ts +1 -1
- package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
- package/dist/components/JobsStatusTray.vue.d.ts +9 -2
- package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
- package/dist/components/MobileSupportGate.vue.d.ts +1 -1
- package/dist/components/MoleculeInput.vue.d.ts +1 -1
- package/dist/components/NumberInput.vue.d.ts +1 -1
- package/dist/components/PlotlyChart.vue.d.ts +59 -0
- package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
- package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
- package/dist/components/ProgressBar.vue.d.ts +1 -1
- package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
- package/dist/components/ReagentList.vue.d.ts +29 -1
- package/dist/components/ResourceCard.vue.d.ts +1 -1
- package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
- package/dist/components/SampleLegend.vue.d.ts +1 -1
- package/dist/components/SampleSelector.drag.d.ts +13 -0
- package/dist/components/SampleSelector.tree.d.ts +2 -0
- package/dist/components/SampleSelector.vue.d.ts +35 -2
- package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
- package/dist/components/SecretInput.vue.d.ts +28 -0
- package/dist/components/SequenceInput.vue.d.ts +1 -1
- package/dist/components/SettingsModal.vue.d.ts +1 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -1
- package/dist/components/StatusIndicator.vue.d.ts +1 -1
- package/dist/components/TagsInput.vue.d.ts +1 -1
- package/dist/components/TimePicker.vue.d.ts +2 -1
- package/dist/components/TimeRangeInput.vue.d.ts +1 -1
- package/dist/components/UnitInput.vue.d.ts +1 -1
- package/dist/components/WellPlate.geometry.d.ts +15 -0
- package/dist/components/WellPlate.interaction.d.ts +13 -0
- package/dist/components/WellPlate.vue.d.ts +30 -1
- package/dist/components/fileBrowserPresentation.d.ts +10 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.js +8 -8
- package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
- package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
- package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
- package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
- package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
- package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
- package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
- package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
- package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
- package/dist/{components-DkHddRMl.js → components-DIum5hkx.js} +5882 -3200
- package/dist/components-DIum5hkx.js.map +1 -0
- package/dist/composables/controlSchemaTypes.d.ts +34 -0
- package/dist/composables/filePicker/localFiles.d.ts +3 -0
- package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
- package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
- package/dist/composables/filePicker/validation.d.ts +5 -0
- package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
- package/dist/composables/index.d.ts +11 -2
- package/dist/composables/index.js +10 -10
- package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
- package/dist/composables/useApi.d.ts +14 -7
- package/dist/composables/useAsync.d.ts +5 -1
- package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
- package/dist/composables/useCommandHistory.d.ts +5 -1
- package/dist/composables/useDropdownState.d.ts +18 -2
- package/dist/composables/useEventStream.d.ts +9 -0
- package/dist/composables/useFileBrowser.d.ts +55 -0
- package/dist/composables/useFilePicker.d.ts +189 -0
- package/dist/composables/useFocusTrap.d.ts +21 -0
- package/dist/composables/useGeneratedAnalysis.d.ts +3 -1
- package/dist/composables/useJobsStatusTray.d.ts +25 -1
- package/dist/composables/useListReorder.d.ts +90 -0
- package/dist/composables/useMenuKeyboard.d.ts +29 -0
- package/dist/composables/useOptimisticMutation.d.ts +5 -1
- package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
- package/dist/composables/usePluginClient.d.ts +2 -0
- package/dist/composables/usePluginConfig.d.ts +27 -0
- package/dist/composables/usePluginWorkspace.d.ts +51 -0
- package/dist/composables/useRequestSyncState.d.ts +42 -2
- package/dist/composables/useResourceCrud.d.ts +5 -1
- package/dist/composables/useRovingFocus.d.ts +24 -0
- package/dist/composables/useScheduleDrag.d.ts +1 -0
- package/dist/composables/useWellPainting.d.ts +5 -1
- package/dist/composables/useWellPlateAdapter.d.ts +5 -1
- package/dist/composables/useWellPlateValidation.d.ts +5 -1
- package/dist/composables/workspaceRecipes.d.ts +188 -0
- package/dist/{composables-C_i90sGS.js → composables-mFXsTA4g.js} +502 -86
- package/dist/composables-mFXsTA4g.js.map +1 -0
- package/dist/{useApi-J6zFkHmn.js → errors-BLuqMee5.js} +179 -16
- package/dist/errors-BLuqMee5.js.map +1 -0
- package/dist/{experiment-Cq145oEW.js → experiment-CVDRAnqp.js} +3 -8
- package/dist/experiment-CVDRAnqp.js.map +1 -0
- package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-CV2Wza3z.js} +70 -51
- package/dist/experiment-utils-CV2Wza3z.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +15 -15
- package/dist/install.js +2 -7
- package/dist/install.js.map +1 -1
- package/dist/permissions.d.ts +42 -1
- package/dist/permissions.js +20 -10
- package/dist/permissions.js.map +1 -1
- package/dist/stores/auth.d.ts +6 -0
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +3 -3
- package/dist/stores/settings.d.ts +31 -1
- package/dist/styles.css +15135 -32397
- package/dist/templates/builderReadUtils.d.ts +1 -1
- package/dist/templates/index.js +2 -4
- package/dist/{templates-DsP51i-S.js → templates-CmGfmBRA.js} +303 -106
- package/dist/templates-CmGfmBRA.js.map +1 -0
- package/dist/types/auth.d.ts +1 -0
- package/dist/types/fileBrowserTypes.d.ts +77 -0
- package/dist/types/filePicker.d.ts +77 -0
- package/dist/types/form-builder.d.ts +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/{useControlSchema-BDx2Olha.js → useControlSchema-DldpxNOP.js} +499 -1162
- package/dist/useControlSchema-DldpxNOP.js.map +1 -0
- package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-C7hRiVQf.js} +22 -6
- package/dist/useDropdownState-C7hRiVQf.js.map +1 -0
- package/dist/{useExperimentSelector-CV4iNfMS.js → useExperimentSelector-CEcIaueJ.js} +4 -4
- package/dist/{useExperimentSelector-CV4iNfMS.js.map → useExperimentSelector-CEcIaueJ.js.map} +1 -1
- package/dist/{useFormBuilder-BLxG3BOX.js → useFormBuilder-z5L_dUIy.js} +2 -2
- package/dist/{useFormBuilder-BLxG3BOX.js.map → useFormBuilder-z5L_dUIy.js.map} +1 -1
- package/dist/utils/color.d.ts +13 -0
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/pluginSecrets.d.ts +53 -0
- package/dist/utils/records.d.ts +4 -0
- package/dist/{useProtocolTemplates-CS_SQl6U.js → validation-uwoJGEb6.js} +811 -212
- package/dist/validation-uwoJGEb6.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/apiErrors.test.ts +81 -0
- package/src/__tests__/components/ActionMenu.test.ts +94 -0
- package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
- package/src/__tests__/components/BaseTabs.test.ts +67 -0
- package/src/__tests__/components/DataFrame.test.ts +183 -11
- package/src/__tests__/components/DataStates.test.ts +176 -0
- package/src/__tests__/components/DatePicker.test.ts +76 -0
- package/src/__tests__/components/DateTimePicker.test.ts +36 -0
- package/src/__tests__/components/DropdownButton.test.ts +134 -0
- package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
- package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
- package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
- package/src/__tests__/components/FilePicker.state.test.ts +287 -0
- package/src/__tests__/components/FilePicker.test.ts +487 -0
- package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
- package/src/__tests__/components/GroupAssigner.test.ts +53 -0
- package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
- package/src/__tests__/components/PlotlyChart.test.ts +305 -0
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
- package/src/__tests__/components/RackEditor.test.ts +35 -0
- package/src/__tests__/components/ReagentList.test.ts +64 -2
- package/src/__tests__/components/RetiredStyles.test.ts +31 -0
- package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
- package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
- package/src/__tests__/components/SecretInput.test.ts +87 -0
- package/src/__tests__/components/SegmentedControl.test.ts +107 -0
- package/src/__tests__/components/TimePicker.test.ts +61 -0
- package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
- package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
- package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
- package/src/__tests__/composables/useApi.test.ts +92 -9
- package/src/__tests__/composables/useAuth.test.ts +2 -0
- package/src/__tests__/composables/useDropdownState.test.ts +58 -1
- package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
- package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
- package/src/__tests__/composables/useListReorder.test.ts +145 -0
- package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
- package/src/__tests__/composables/usePluginClient.test.ts +143 -0
- package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
- package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +39 -7
- package/src/__tests__/stores/settings.test.ts +71 -1
- package/src/__tests__/styles/cssTokens.test.ts +131 -0
- package/src/__tests__/utils/permissions.test.ts +68 -0
- package/src/apiErrors.ts +85 -0
- package/src/components/ActionMenu.vue +45 -88
- package/src/components/AlertBox.vue +0 -4
- package/src/components/AppAvatarMenu.vue +26 -7
- package/src/components/AppLayout.vue +0 -4
- package/src/components/AppPluginSwitcher.story.vue +87 -0
- package/src/components/AppPluginSwitcher.vue +2 -5
- package/src/components/AppSidebar.vue +0 -4
- package/src/components/AppToastContainer.vue +6 -8
- package/src/components/AppTopBar.vue +0 -4
- package/src/components/ArtifactSaveDialog.vue +0 -4
- package/src/components/ArtifactSelectorModal.vue +0 -4
- package/src/components/AuditTrail.story.vue +18 -0
- package/src/components/AuditTrail.vue +27 -7
- package/src/components/AutoGroupModal.vue +0 -4
- package/src/components/Avatar.vue +0 -4
- package/src/components/BaseButton.vue +0 -4
- package/src/components/BaseCheckbox.vue +0 -4
- package/src/components/BaseInput.vue +0 -4
- package/src/components/BaseModal.vue +8 -60
- package/src/components/BasePill.vue +0 -4
- package/src/components/BaseRadioGroup.vue +0 -4
- package/src/components/BaseSelect.vue +0 -4
- package/src/components/BaseSlider.vue +0 -4
- package/src/components/BaseTabs.vue +26 -5
- package/src/components/BaseTextarea.vue +0 -4
- package/src/components/BaseToggle.vue +0 -4
- package/src/components/BatchProgressList.story.vue +18 -0
- package/src/components/BatchProgressList.vue +32 -4
- package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
- package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
- package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
- package/src/components/Breadcrumb.vue +0 -4
- package/src/components/Calendar.vue +0 -4
- package/src/components/ChartContainer.story.vue +1 -1
- package/src/components/ChartContainer.vue +0 -4
- package/src/components/ChemicalFormula.vue +0 -4
- package/src/components/CollapsibleCard.vue +0 -4
- package/src/components/ColorSlider.vue +0 -4
- package/src/components/ComponentBindingRenderer.vue +1 -3
- package/src/components/ConcentrationInput.vue +0 -4
- package/src/components/ConfirmDialog.vue +0 -4
- package/src/components/ControlWorkspaceView.vue +11 -22
- package/src/components/DataFrame.story.vue +14 -0
- package/src/components/DataFrame.vue +97 -23
- package/src/components/DatePicker.vue +73 -27
- package/src/components/DateTimePicker.vue +45 -17
- package/src/components/Divider.vue +0 -4
- package/src/components/DoseCalculator.vue +0 -4
- package/src/components/DoseDesignWorkspaceView.vue +6 -25
- package/src/components/DropdownButton.vue +24 -6
- package/src/components/EmptyState.vue +0 -4
- package/src/components/ExperimentCodeBadge.vue +0 -4
- package/src/components/ExperimentDataViewer.story.vue +3 -0
- package/src/components/ExperimentDataViewer.vue +33 -13
- package/src/components/ExperimentPopover.vue +12 -7
- package/src/components/ExperimentSelectorModal.vue +0 -4
- package/src/components/ExperimentTimeline.story.vue +18 -0
- package/src/components/ExperimentTimeline.vue +81 -75
- package/src/components/FileBrowserModal.story.vue +203 -0
- package/src/components/FileBrowserModal.vue +384 -0
- package/src/components/FilePicker.story.vue +44 -0
- package/src/components/FilePicker.vue +284 -0
- package/src/components/FileUploader.vue +32 -18
- package/src/components/FitPanel.vue +0 -4
- package/src/components/FormActions.story.vue +96 -0
- package/src/components/FormActions.vue +0 -4
- package/src/components/FormBuilder.vue +0 -4
- package/src/components/FormField.vue +0 -4
- package/src/components/FormulaInput.vue +0 -4
- package/src/components/GeneratedPathInput.story.vue +68 -0
- package/src/components/GeneratedPlotlyResult.story.vue +96 -0
- package/src/components/GeneratedPlotlyResult.vue +34 -69
- package/src/components/GeneratedPluginView.story.vue +145 -0
- package/src/components/GeneratedPluginView.vue +10 -10
- package/src/components/GeneratedResultRenderer.story.vue +117 -0
- package/src/components/GeneratedResultRenderer.vue +4 -9
- package/src/components/GroupAssigner.vue +67 -5
- package/src/components/IconButton.vue +0 -4
- package/src/components/InstrumentAlertLog.vue +0 -4
- package/src/components/InstrumentStateBadge.vue +0 -4
- package/src/components/InstrumentStatusCard.vue +0 -4
- package/src/components/JobsStatusTray.vue +16 -5
- package/src/components/LcmsSequenceTable.vue +81 -50
- package/src/components/LoadingSpinner.vue +0 -4
- package/src/components/MobileSupportGate.vue +0 -4
- package/src/components/MoleculeInput.vue +0 -4
- package/src/components/MultiSelect.vue +0 -4
- package/src/components/NumberInput.vue +0 -4
- package/src/components/PlateMapEditor.vue +3 -14
- package/src/components/PlotlyChart.story.vue +61 -0
- package/src/components/PlotlyChart.vue +233 -0
- package/src/components/PluginIcon.vue +0 -4
- package/src/components/PluginWorkspaceView.props.ts +38 -0
- package/src/components/PluginWorkspaceView.vue +53 -224
- package/src/components/ProgressBar.vue +0 -4
- package/src/components/ProtocolStepEditor.vue +2 -4
- package/src/components/RackEditor.vue +51 -70
- package/src/components/ReagentEditor.vue +0 -4
- package/src/components/ReagentList.story.vue +18 -0
- package/src/components/ReagentList.vue +127 -82
- package/src/components/ResourceCard.vue +0 -4
- package/src/components/RuntimeUpdateNotice.story.vue +49 -0
- package/src/components/RuntimeUpdateNotice.vue +4 -4
- package/src/components/SampleHierarchyTree.story.vue +18 -0
- package/src/components/SampleHierarchyTree.vue +32 -9
- package/src/components/SampleLegend.vue +2 -8
- package/src/components/SampleSelector.drag.ts +51 -0
- package/src/components/SampleSelector.story.vue +6 -0
- package/src/components/SampleSelector.tree.ts +2 -0
- package/src/components/SampleSelector.vue +49 -10
- package/src/components/SampleSelectorGroupNode.vue +19 -0
- package/src/components/ScheduleCalendar.story.vue +6 -0
- package/src/components/ScheduleCalendar.vue +82 -7
- package/src/components/ScientificNumber.vue +0 -4
- package/src/components/SecretInput.story.vue +79 -0
- package/src/components/SecretInput.vue +150 -0
- package/src/components/SectionCard.vue +0 -4
- package/src/components/SegmentedControl.vue +50 -7
- package/src/components/SequenceInput.vue +0 -4
- package/src/components/SequenceProgressBar.story.vue +110 -0
- package/src/components/SequenceProgressBar.vue +0 -4
- package/src/components/SettingsModal.vue +0 -4
- package/src/components/Skeleton.vue +0 -4
- package/src/components/SmartGroupFieldRecipe.vue +8 -6
- package/src/components/SmartGroupManual.vue +0 -4
- package/src/components/StatusIndicator.vue +0 -4
- package/src/components/StepWizard.vue +0 -4
- package/src/components/TagsInput.vue +4 -6
- package/src/components/ThemeToggle.vue +0 -4
- package/src/components/TimePicker.vue +36 -7
- package/src/components/TimeRangeInput.vue +0 -4
- package/src/components/Tooltip.story.vue +3 -3
- package/src/components/Tooltip.vue +0 -4
- package/src/components/UnitInput.vue +0 -4
- package/src/components/WellPlate.geometry.ts +60 -1
- package/src/components/WellPlate.interaction.ts +44 -0
- package/src/components/WellPlate.story.vue +8 -0
- package/src/components/WellPlate.vue +53 -7
- package/src/components/fileBrowserPresentation.ts +39 -0
- package/src/components/index.ts +14 -0
- package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
- package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
- package/src/components/internal/DataStateInternal.vue +74 -0
- package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
- package/src/components/internal/FileBrowserListingInternal.vue +197 -0
- package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
- package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
- package/src/components/internal/FilePickerTreeInternal.vue +238 -0
- package/src/components/internal/FormSectionRenderer.vue +0 -4
- package/src/components/internal/WellEditPopupInternal.vue +20 -5
- package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
- package/src/components/internal/WorkspaceShellInternal.vue +125 -0
- package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
- package/src/composables/controlSchemaTypes.ts +34 -0
- package/src/composables/experimentDesignData.ts +1 -3
- package/src/composables/filePicker/localFiles.ts +58 -0
- package/src/composables/filePicker/usePickerNavigation.ts +220 -0
- package/src/composables/filePicker/usePickerSelection.ts +259 -0
- package/src/composables/filePicker/validation.ts +41 -0
- package/src/composables/flattenWorkspaceBindings.ts +104 -0
- package/src/composables/formBuilderRegistry.ts +5 -0
- package/src/composables/index.ts +50 -0
- package/src/composables/pluginWorkspaceModel.ts +182 -0
- package/src/composables/useApi.ts +57 -13
- package/src/composables/useAsync.ts +5 -1
- package/src/composables/useAuth.ts +3 -0
- package/src/composables/useBioTemplatePackWorkspace.ts +15 -9
- package/src/composables/useBioTemplatePresetWorkspace.ts +14 -15
- package/src/composables/useBioTemplateWorkspace.ts +18 -43
- package/src/composables/useCommandHistory.ts +5 -1
- package/src/composables/useDropdownState.ts +35 -5
- package/src/composables/useEventStream.ts +14 -2
- package/src/composables/useFileBrowser.ts +314 -0
- package/src/composables/useFileImport.ts +2 -7
- package/src/composables/useFilePicker.ts +366 -0
- package/src/composables/useFocusTrap.ts +91 -0
- package/src/composables/useGeneratedAnalysis.ts +32 -27
- package/src/composables/useJobsStatusTray.ts +184 -17
- package/src/composables/useListReorder.story.vue +143 -0
- package/src/composables/useListReorder.ts +242 -0
- package/src/composables/useMenuKeyboard.ts +90 -0
- package/src/composables/useOptimisticMutation.ts +6 -16
- package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
- package/src/composables/usePluginClient.ts +50 -4
- package/src/composables/usePluginConfig.ts +252 -0
- package/src/composables/usePluginWorkspace.ts +208 -0
- package/src/composables/useRackEditor.ts +2 -11
- package/src/composables/useRequestSyncState.ts +98 -28
- package/src/composables/useResourceCrud.ts +6 -16
- package/src/composables/useRovingFocus.ts +66 -0
- package/src/composables/useScheduleDrag.ts +37 -0
- package/src/composables/useWellPainting.ts +10 -30
- package/src/composables/useWellPlateAdapter.ts +5 -1
- package/src/composables/useWellPlateEditor.ts +1 -11
- package/src/composables/useWellPlateValidation.ts +5 -1
- package/src/composables/workspaceRecipes.ts +267 -0
- package/src/index.ts +19 -0
- package/src/permissions.ts +48 -9
- package/src/stores/auth.ts +1 -0
- package/src/stores/experiment.ts +2 -7
- package/src/stores/index.ts +9 -1
- package/src/stores/settings.ts +93 -1
- package/src/styles/components/audit-trail.css +5 -5
- package/src/styles/components/batch-progress-list.css +7 -0
- package/src/styles/components/color-slider.css +2 -2
- package/src/styles/components/data-state.css +30 -0
- package/src/styles/components/dataframe.css +29 -35
- package/src/styles/components/experiment-data-viewer.css +4 -4
- package/src/styles/components/experiment-timeline.css +3 -30
- package/src/styles/components/file-browser-modal.css +489 -0
- package/src/styles/components/file-picker.css +502 -0
- package/src/styles/components/form-builder.css +5 -5
- package/src/styles/components/icon-button.css +9 -0
- package/src/styles/components/lcms-sequence-table.css +16 -1
- package/src/styles/components/multi-select.css +1 -1
- package/src/styles/components/reagent-list.css +38 -31
- package/src/styles/components/sample-hierarchy-tree.css +5 -19
- package/src/styles/components/sample-selector.css +9 -2
- package/src/styles/components/schedule-calendar.css +8 -0
- package/src/styles/components/scientific-number.css +1 -1
- package/src/styles/components/secret-input.css +60 -0
- package/src/styles/components/well-plate.css +8 -0
- package/src/styles/index.css +12 -0
- package/src/styles/variables.css +29 -0
- package/src/templates/builderPresetControls.ts +1 -1
- package/src/templates/builderReadUtils.ts +1 -3
- package/src/templates/componentPlateHelpers.ts +3 -1
- package/src/templates/componentTargetResolvers.ts +1 -3
- package/src/templates/controlSchemaTargets.ts +1 -3
- package/src/templates/doseResponseAdapters.ts +2 -13
- package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
- package/src/templates/plateMapBuilder.ts +2 -2
- package/src/templates/qpcrPlateBuilder.ts +1 -1
- package/src/templates/templateValidators.ts +1 -1
- package/src/templates/timeCourseBuilder.ts +2 -2
- package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
- package/src/types/auth.ts +1 -0
- package/src/types/fileBrowserTypes.ts +85 -0
- package/src/types/filePicker.ts +72 -0
- package/src/types/form-builder.ts +1 -0
- package/src/types/index.ts +14 -0
- package/src/utils/color.ts +51 -0
- package/src/utils/errors.ts +29 -0
- package/src/utils/formModelSync.ts +1 -3
- package/src/utils/pluginIcon.ts +1 -3
- package/src/utils/pluginSecrets.ts +102 -0
- package/src/utils/records.ts +9 -0
- package/dist/EmptyState-p90quq8Z.js.map +0 -1
- package/dist/ExperimentPopover-tLwJ7XF4.js.map +0 -1
- package/dist/ExperimentSelectorModal-DyPAUCLw.js.map +0 -1
- package/dist/SettingsModal-BgKY93zh.js.map +0 -1
- package/dist/components-DkHddRMl.js.map +0 -1
- package/dist/composables/autoGroupConstants.d.ts +0 -1
- package/dist/composables/autoGroupGrouping.d.ts +0 -3
- package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
- package/dist/composables-C_i90sGS.js.map +0 -1
- package/dist/experiment-Cq145oEW.js.map +0 -1
- package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
- package/dist/templates/builderDefaults.d.ts +0 -1
- package/dist/templates/plateGeometry.d.ts +0 -4
- package/dist/templates-DsP51i-S.js.map +0 -1
- package/dist/useApi-J6zFkHmn.js.map +0 -1
- package/dist/useControlSchema-BDx2Olha.js.map +0 -1
- package/dist/useDropdownState-DSb3BC3N.js.map +0 -1
- package/dist/useProtocolTemplates-CS_SQl6U.js.map +0 -1
- package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
- package/src/composables/autoGroupConstants.ts +0 -4
- package/src/composables/autoGroupGrouping.ts +0 -148
- package/src/composables/useAutoGroupInputSources.ts +0 -147
- package/src/templates/builderDefaults.ts +0 -11
- package/src/templates/plateGeometry.ts +0 -62
- /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → apiErrors.test.d.ts} +0 -0
|
@@ -2,18 +2,34 @@ import { Ref } from 'vue';
|
|
|
2
2
|
export interface UseDropdownStateOptions {
|
|
3
3
|
closeOnOutsideClick?: boolean;
|
|
4
4
|
closeOnEscape?: boolean;
|
|
5
|
+
/** Close the panel when the page scrolls or the viewport resizes. Default `false`. */
|
|
6
|
+
closeOnScroll?: boolean;
|
|
5
7
|
insideRefs?: Array<Ref<HTMLElement | null>>;
|
|
8
|
+
/**
|
|
9
|
+
* Element focus returns to when the panel closes with `close(true)` (Escape).
|
|
10
|
+
* Pass one when the trigger lives outside `rootRef`; otherwise bind the
|
|
11
|
+
* returned `triggerRef` to the trigger element.
|
|
12
|
+
*/
|
|
13
|
+
triggerRef?: Ref<HTMLElement | null>;
|
|
6
14
|
onOpen?: () => void;
|
|
7
15
|
onClose?: () => void;
|
|
8
16
|
}
|
|
9
17
|
export interface UseDropdownStateReturn {
|
|
10
18
|
isOpen: Ref<boolean>;
|
|
11
19
|
rootRef: Ref<HTMLElement | null>;
|
|
20
|
+
/** Bind to the trigger element so Escape can return focus to it. */
|
|
21
|
+
triggerRef: Ref<HTMLElement | null>;
|
|
12
22
|
open: () => void;
|
|
13
|
-
|
|
23
|
+
/** Closes the panel; `returnFocus` moves focus back to `triggerRef`. */
|
|
24
|
+
close: (returnFocus?: boolean) => void;
|
|
14
25
|
toggle: () => void;
|
|
15
26
|
handleClickOutside: (event: MouseEvent) => void;
|
|
16
27
|
handleKeydown: (event: KeyboardEvent) => void;
|
|
17
28
|
}
|
|
18
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Shared disclosure state for dropdown-style SDK components: open/close state,
|
|
31
|
+
* outside-click and Escape closing, optional scroll/resize closing, and focus
|
|
32
|
+
* return to the trigger. `close(returnFocus)` mirrors `useMenuKeyboard`'s
|
|
33
|
+
* contract, so the two compose directly.
|
|
34
|
+
*/
|
|
19
35
|
export declare function useDropdownState(options?: UseDropdownStateOptions): UseDropdownStateReturn;
|
|
@@ -12,7 +12,16 @@ export interface EventStreamOptions<TData = string> {
|
|
|
12
12
|
headers?: HeadersInit;
|
|
13
13
|
credentials?: RequestCredentials;
|
|
14
14
|
immediate?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Reconnect after a dropped stream. Left unset, it follows the platform's
|
|
17
|
+
* `wsAutoReconnect` setting, defaulting to `true` without a settings store.
|
|
18
|
+
*/
|
|
15
19
|
reconnect?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Delay before the first reconnect attempt. Left unset, it follows the
|
|
22
|
+
* platform's `wsReconnectInterval` setting, defaulting to 2000 ms without a
|
|
23
|
+
* settings store. A server-sent `retry:` field still overrides it.
|
|
24
|
+
*/
|
|
16
25
|
reconnectDelayMs?: number;
|
|
17
26
|
parseJson?: boolean;
|
|
18
27
|
shouldReconnect?: (cause?: unknown) => boolean;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter, Ref } from 'vue';
|
|
2
|
+
import { FileBrowserSortKey, FileEntry, FilePathCrumb, FileSelection, ServerMount } from '../types/fileBrowserTypes';
|
|
3
|
+
export interface UseFileBrowserOptions {
|
|
4
|
+
/** Extensions the caller cares about; entries are flagged, never removed. */
|
|
5
|
+
typeRules?: MaybeRefOrGetter<string[] | undefined>;
|
|
6
|
+
/** Mount to open first; defaults to the first available one. */
|
|
7
|
+
initialMountId?: MaybeRefOrGetter<string | undefined>;
|
|
8
|
+
/** Override the platform API base URL (standalone plugin dev). */
|
|
9
|
+
apiBaseUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface UseFileBrowserReturn {
|
|
12
|
+
/** Every configured mount, offline ones included. */
|
|
13
|
+
mounts: Ref<ServerMount[]>;
|
|
14
|
+
/** Mount the current listing belongs to. */
|
|
15
|
+
mountId: Ref<string>;
|
|
16
|
+
/** Mount-relative path of the current listing. */
|
|
17
|
+
path: Ref<string>;
|
|
18
|
+
/** Parent path, or null at a mount root. */
|
|
19
|
+
parent: Ref<string | null>;
|
|
20
|
+
entries: Ref<FileEntry[]>;
|
|
21
|
+
breadcrumbs: Ref<FilePathCrumb[]>;
|
|
22
|
+
/** Directory size before any search filter. */
|
|
23
|
+
totalCount: Ref<number | null>;
|
|
24
|
+
/** How many entries satisfy the type rules. */
|
|
25
|
+
matchCount: Ref<number | null>;
|
|
26
|
+
/** How many rows this listing carries, after search and any cap. */
|
|
27
|
+
shownCount: Ref<number | null>;
|
|
28
|
+
/** True when the server capped the listing. */
|
|
29
|
+
truncated: Ref<boolean>;
|
|
30
|
+
search: Ref<string>;
|
|
31
|
+
sort: Ref<FileBrowserSortKey>;
|
|
32
|
+
/** Controlled selection, ready to bind to FileBrowserModal. */
|
|
33
|
+
selected: Ref<FileSelection[]>;
|
|
34
|
+
isLoading: ComputedRef<boolean>;
|
|
35
|
+
error: Ref<string | null>;
|
|
36
|
+
/** Load the mount list and open the first available mount. */
|
|
37
|
+
init: () => Promise<void>;
|
|
38
|
+
/** Open a directory, or a mount root when path is empty. */
|
|
39
|
+
navigate: (location: {
|
|
40
|
+
mount_id: string;
|
|
41
|
+
path: string;
|
|
42
|
+
}) => Promise<void>;
|
|
43
|
+
/** Re-read the current directory. */
|
|
44
|
+
refresh: () => Promise<void>;
|
|
45
|
+
/** Take the directory currently being viewed as the input. */
|
|
46
|
+
selectCurrentFolder: () => void;
|
|
47
|
+
clear: () => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Drives FileBrowserModal against the platform's `/api/filesystem` routes.
|
|
51
|
+
*
|
|
52
|
+
* Requires the `filesystem.browse` permission and a deployment that declares
|
|
53
|
+
* mounts; with none configured the routes are absent and `mounts` stays empty.
|
|
54
|
+
*/
|
|
55
|
+
export declare function useFileBrowser(options?: UseFileBrowserOptions): UseFileBrowserReturn;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { PickerAdapter, PickerCapabilities, PickerNode, PickerSelection, PickerSelectionMode, PickerSource } from '../types/filePicker';
|
|
2
|
+
interface PickerStateProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
adapter: PickerAdapter;
|
|
5
|
+
selectionMode: PickerSelectionMode;
|
|
6
|
+
sources: PickerSource[];
|
|
7
|
+
capabilities: PickerCapabilities;
|
|
8
|
+
initialPath: string;
|
|
9
|
+
initialSelection: PickerSelection | null;
|
|
10
|
+
systemFilter?: (node: PickerNode, source: PickerSource) => boolean;
|
|
11
|
+
}
|
|
12
|
+
type PickerEmit = {
|
|
13
|
+
(event: 'update:open', value: boolean): void;
|
|
14
|
+
(event: 'select', value: PickerSelection): void;
|
|
15
|
+
(event: 'cancel'): void;
|
|
16
|
+
};
|
|
17
|
+
/** Internal orchestration; public consumers use FilePicker's props and events. */
|
|
18
|
+
export declare function useFilePicker(props: PickerStateProps, emit: PickerEmit): {
|
|
19
|
+
previewNode: import('vue').ComputedRef<PickerNode>;
|
|
20
|
+
sourceNames: Record<PickerSource, string>;
|
|
21
|
+
sourceIcons: Record<PickerSource, string>;
|
|
22
|
+
allowedSources: import('vue').ComputedRef<PickerSource[]>;
|
|
23
|
+
source: import('vue').ShallowRef<PickerSource, PickerSource>;
|
|
24
|
+
query: import('vue').ShallowRef<string, string>;
|
|
25
|
+
recursive: import('vue').ShallowRef<boolean, boolean>;
|
|
26
|
+
skipBlanks: import('vue').ShallowRef<boolean, boolean>;
|
|
27
|
+
reviewing: import('vue').ShallowRef<boolean, boolean>;
|
|
28
|
+
nav: {
|
|
29
|
+
path: import('vue').ShallowRef<string, string>;
|
|
30
|
+
trail: import('vue').Ref<{
|
|
31
|
+
path: string;
|
|
32
|
+
label: string;
|
|
33
|
+
}[], {
|
|
34
|
+
path: string;
|
|
35
|
+
label: string;
|
|
36
|
+
}[] | {
|
|
37
|
+
path: string;
|
|
38
|
+
label: string;
|
|
39
|
+
}[]>;
|
|
40
|
+
entries: import('vue').ShallowRef<PickerNode[], PickerNode[]>;
|
|
41
|
+
nodes: import('vue').Ref<Map<string, {
|
|
42
|
+
kind: "folder";
|
|
43
|
+
fileCount?: number | null | undefined;
|
|
44
|
+
formats?: Record<string, number> | undefined;
|
|
45
|
+
hasChildren?: boolean | undefined;
|
|
46
|
+
path: string;
|
|
47
|
+
name: string;
|
|
48
|
+
parentPath?: string | null | undefined;
|
|
49
|
+
parentName?: string | undefined;
|
|
50
|
+
bytes?: number | null | undefined;
|
|
51
|
+
unavailableReason?: string | undefined;
|
|
52
|
+
} | {
|
|
53
|
+
kind: "file";
|
|
54
|
+
format: string;
|
|
55
|
+
file?: {
|
|
56
|
+
readonly lastModified: number;
|
|
57
|
+
readonly name: string;
|
|
58
|
+
readonly webkitRelativePath: string;
|
|
59
|
+
readonly size: number;
|
|
60
|
+
readonly type: string;
|
|
61
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
62
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
|
|
63
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
64
|
+
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
|
|
65
|
+
text: () => Promise<string>;
|
|
66
|
+
} | undefined;
|
|
67
|
+
path: string;
|
|
68
|
+
name: string;
|
|
69
|
+
parentPath?: string | null | undefined;
|
|
70
|
+
parentName?: string | undefined;
|
|
71
|
+
bytes?: number | null | undefined;
|
|
72
|
+
unavailableReason?: string | undefined;
|
|
73
|
+
}> & Omit<Map<string, PickerNode>, keyof Map<any, any>>, Map<string, PickerNode> | (Map<string, {
|
|
74
|
+
kind: "folder";
|
|
75
|
+
fileCount?: number | null | undefined;
|
|
76
|
+
formats?: Record<string, number> | undefined;
|
|
77
|
+
hasChildren?: boolean | undefined;
|
|
78
|
+
path: string;
|
|
79
|
+
name: string;
|
|
80
|
+
parentPath?: string | null | undefined;
|
|
81
|
+
parentName?: string | undefined;
|
|
82
|
+
bytes?: number | null | undefined;
|
|
83
|
+
unavailableReason?: string | undefined;
|
|
84
|
+
} | {
|
|
85
|
+
kind: "file";
|
|
86
|
+
format: string;
|
|
87
|
+
file?: {
|
|
88
|
+
readonly lastModified: number;
|
|
89
|
+
readonly name: string;
|
|
90
|
+
readonly webkitRelativePath: string;
|
|
91
|
+
readonly size: number;
|
|
92
|
+
readonly type: string;
|
|
93
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
94
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
|
|
95
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
96
|
+
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
|
|
97
|
+
text: () => Promise<string>;
|
|
98
|
+
} | undefined;
|
|
99
|
+
path: string;
|
|
100
|
+
name: string;
|
|
101
|
+
parentPath?: string | null | undefined;
|
|
102
|
+
parentName?: string | undefined;
|
|
103
|
+
bytes?: number | null | undefined;
|
|
104
|
+
unavailableReason?: string | undefined;
|
|
105
|
+
}> & Omit<Map<string, PickerNode>, keyof Map<any, any>>)>;
|
|
106
|
+
children: import('vue').ShallowRef<Map<string, PickerNode[]>, Map<string, PickerNode[]>>;
|
|
107
|
+
expanded: import('vue').Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
108
|
+
expanding: import('vue').Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
109
|
+
expansionErrors: import('vue').Ref<Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>, Map<string, string> | (Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>)>;
|
|
110
|
+
loading: import('vue').ShallowRef<boolean, boolean>;
|
|
111
|
+
error: import('vue').ShallowRef<string, string>;
|
|
112
|
+
rows: import('vue').ComputedRef<import('..').PickerTreeRow[]>;
|
|
113
|
+
isAllowed: (node: PickerNode) => boolean;
|
|
114
|
+
clear: () => void;
|
|
115
|
+
invalidate: () => void;
|
|
116
|
+
register: (items: PickerNode[], parent?: string) => void;
|
|
117
|
+
loadChildren: (folder: string, ancestors?: string[], refresh?: boolean) => Promise<PickerNode[]>;
|
|
118
|
+
load: (query?: string, recursive?: boolean, refresh?: boolean) => Promise<void>;
|
|
119
|
+
expand: (node: PickerNode) => Promise<void>;
|
|
120
|
+
enter: (node: PickerNode) => void;
|
|
121
|
+
up: (target?: string) => void;
|
|
122
|
+
};
|
|
123
|
+
selection: {
|
|
124
|
+
keys: import('vue').Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
125
|
+
dropped: import('vue').Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
126
|
+
focusPath: import('vue').ShallowRef<string, string>;
|
|
127
|
+
resolving: import('vue').ShallowRef<boolean, boolean>;
|
|
128
|
+
resolutionError: import('vue').ShallowRef<string, string>;
|
|
129
|
+
roots: import('vue').ComputedRef<PickerNode[]>;
|
|
130
|
+
chosen: import('vue').ComputedRef<{
|
|
131
|
+
files: import('..').PickerFile[];
|
|
132
|
+
excluded: import('..').PickerExcluded[];
|
|
133
|
+
bytes: number;
|
|
134
|
+
}>;
|
|
135
|
+
focused: import('vue').ComputedRef<PickerNode>;
|
|
136
|
+
select: (node: PickerNode, modifiers?: {
|
|
137
|
+
metaKey?: boolean;
|
|
138
|
+
ctrlKey?: boolean;
|
|
139
|
+
shiftKey?: boolean;
|
|
140
|
+
toggle?: boolean;
|
|
141
|
+
}) => void;
|
|
142
|
+
selected: (node: PickerNode) => boolean;
|
|
143
|
+
selectable: (node: PickerNode) => boolean;
|
|
144
|
+
exclusion: (node: PickerNode) => import('..').PickerExcluded | null;
|
|
145
|
+
reset: (selection?: PickerSelection | null) => void;
|
|
146
|
+
resolve: () => Promise<void>;
|
|
147
|
+
folderProgress: (node: PickerNode) => string;
|
|
148
|
+
ancestorSelected: (node: PickerNode, candidates?: Set<string> & Omit<Set<string>, keyof Set<any>>) => boolean;
|
|
149
|
+
};
|
|
150
|
+
capability: import('vue').ComputedRef<import('..').PickerCapability | undefined>;
|
|
151
|
+
path: import('vue').ShallowRef<string, string>;
|
|
152
|
+
trail: import('vue').Ref<{
|
|
153
|
+
path: string;
|
|
154
|
+
label: string;
|
|
155
|
+
}[], {
|
|
156
|
+
path: string;
|
|
157
|
+
label: string;
|
|
158
|
+
}[] | {
|
|
159
|
+
path: string;
|
|
160
|
+
label: string;
|
|
161
|
+
}[]>;
|
|
162
|
+
loading: import('vue').ShallowRef<boolean, boolean>;
|
|
163
|
+
error: import('vue').ShallowRef<string, string>;
|
|
164
|
+
rows: import('vue').ComputedRef<import('..').PickerTreeRow[]>;
|
|
165
|
+
roots: import('vue').ComputedRef<PickerNode[]>;
|
|
166
|
+
chosen: import('vue').ComputedRef<{
|
|
167
|
+
files: import('..').PickerFile[];
|
|
168
|
+
excluded: import('..').PickerExcluded[];
|
|
169
|
+
bytes: number;
|
|
170
|
+
}>;
|
|
171
|
+
focused: import('vue').ComputedRef<PickerNode>;
|
|
172
|
+
resolving: import('vue').ShallowRef<boolean, boolean>;
|
|
173
|
+
resolutionError: import('vue').ShallowRef<string, string>;
|
|
174
|
+
searchArea: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
|
|
175
|
+
confirmLabel: import('vue').ComputedRef<string>;
|
|
176
|
+
folderCount: import('vue').ComputedRef<number>;
|
|
177
|
+
canConfirm: import('vue').ComputedRef<boolean>;
|
|
178
|
+
switchSource: (next: PickerSource) => Promise<void>;
|
|
179
|
+
selectNode: (node: PickerNode, event: MouseEvent | KeyboardEvent) => void;
|
|
180
|
+
enter: (node: PickerNode) => Promise<void>;
|
|
181
|
+
up: (target?: string) => Promise<void>;
|
|
182
|
+
refresh: () => Promise<void>;
|
|
183
|
+
selectParent: (node: PickerNode) => void;
|
|
184
|
+
chooseLocal: (files: File[], _rootName?: string, relativePaths?: string[]) => Promise<void>;
|
|
185
|
+
cancel: () => void;
|
|
186
|
+
confirm: () => void;
|
|
187
|
+
keyboard: (event: KeyboardEvent) => void;
|
|
188
|
+
};
|
|
189
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
export interface UseFocusTrapOptions {
|
|
3
|
+
/** Ref to the trap's container element. Focusable elements are queried within it. */
|
|
4
|
+
containerRef: Ref<HTMLElement | null>;
|
|
5
|
+
/** Reactive flag — the trap activates when this becomes `true` and releases when it becomes `false`. */
|
|
6
|
+
active: Ref<boolean>;
|
|
7
|
+
/** Restore focus to the element that was focused before activation, when the trap releases. Default `true`. */
|
|
8
|
+
restoreFocus?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface UseFocusTrapReturn {
|
|
11
|
+
/** Focusable descendants of the container, in DOM order, excluding roving-tabindex (`tabindex="-1"`) elements. */
|
|
12
|
+
getFocusableElements: () => HTMLElement[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Traps Tab focus within a container while `active` is true: Tab wraps from the last
|
|
16
|
+
* focusable element back to the first (and Shift+Tab from the first to the last), the
|
|
17
|
+
* first focusable element (or the container itself, if none) receives focus when the
|
|
18
|
+
* trap activates, and focus returns to whatever was focused beforehand when it releases.
|
|
19
|
+
* Used by BaseModal and WellEditPopupInternal.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useFocusTrap(options: UseFocusTrapOptions): UseFocusTrapReturn;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComputedRef, Ref, ShallowRef } from 'vue';
|
|
2
|
-
import { PluginJobCenterSource } from './useJobsStatusTray';
|
|
2
|
+
import { JobsStatusTrayAdapter, PluginJobCenterSource } from './useJobsStatusTray';
|
|
3
3
|
import { GeneratedAnalysisJob, GeneratedAnalysisResult, GeneratedSession, GeneratedAnalysisManifest, PluginJobPathInput, PluginJobPathUpload, PluginJobStagedPartInput, PluginJobStagedPartUploadResult, PluginJobStaging, PluginJobStagingPagination } from '../types/generated-ui';
|
|
4
4
|
export type GeneratedAnalysisTransport = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
5
5
|
export interface GeneratedAnalysisTransportOptions {
|
|
@@ -53,6 +53,8 @@ export interface UsePluginJobsReturn extends PluginJobCenterSource {
|
|
|
53
53
|
pause: () => void;
|
|
54
54
|
resume: () => void;
|
|
55
55
|
dispose: () => void;
|
|
56
|
+
/** @deprecated Pass the runtime itself to SDK job UI as its source. */
|
|
57
|
+
jobsAdapter: JobsStatusTrayAdapter;
|
|
56
58
|
}
|
|
57
59
|
export type UseGeneratedAnalysisReturn = UsePluginJobsReturn;
|
|
58
60
|
export declare function createGeneratedAnalysisTransport(options?: GeneratedAnalysisTransportOptions): GeneratedAnalysisTransport;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
|
|
2
|
-
import { JobListPayload, JobState, JobStateInput } from '../types/jobs';
|
|
2
|
+
import { JobListPayload, JobState, JobStateInput, JobStreamData } from '../types/jobs';
|
|
3
|
+
import { UsePluginEventStreamReturn } from './usePluginClient';
|
|
3
4
|
export type JobsStatusTrayTab = 'active' | 'history';
|
|
4
5
|
/**
|
|
5
6
|
* The canonical owner of a collection of plugin jobs.
|
|
@@ -26,10 +27,29 @@ export interface CombinedPluginJobCenterSource extends PluginJobCenterSource {
|
|
|
26
27
|
* dispatching a mutation to the wrong owner.
|
|
27
28
|
*/
|
|
28
29
|
export declare function combinePluginJobSources(sources: readonly PluginJobCenterSource[]): CombinedPluginJobCenterSource;
|
|
30
|
+
/** @deprecated Prefer a {@link PluginJobCenterSource}. */
|
|
31
|
+
export interface JobsStatusTrayAdapter {
|
|
32
|
+
listJobs?: () => Promise<JobListPayload | readonly JobStateInput[]>;
|
|
33
|
+
cancelJob?: (job: JobState) => Promise<JobStateInput | void>;
|
|
34
|
+
deleteJob?: (job: JobState) => Promise<boolean | void>;
|
|
35
|
+
clearFinishedJobs?: (jobs: readonly JobState[]) => Promise<number | void>;
|
|
36
|
+
}
|
|
29
37
|
export interface UsePluginJobCenterOptions {
|
|
30
38
|
source?: MaybeRefOrGetter<PluginJobCenterSource | undefined>;
|
|
39
|
+
/** @deprecated Pass a source with its canonical jobs ref. */
|
|
40
|
+
jobs?: MaybeRefOrGetter<readonly JobStateInput[] | undefined>;
|
|
41
|
+
/** @deprecated Pass source actions instead. */
|
|
42
|
+
adapter?: MaybeRefOrGetter<JobsStatusTrayAdapter | undefined>;
|
|
43
|
+
/** @deprecated Event handling belongs to the source runtime. */
|
|
44
|
+
eventStream?: MaybeRefOrGetter<UsePluginEventStreamReturn<JobStreamData> | undefined>;
|
|
31
45
|
loadOnMount?: boolean;
|
|
32
46
|
}
|
|
47
|
+
export interface UseJobsStatusTrayOptions extends UsePluginJobCenterOptions {
|
|
48
|
+
}
|
|
49
|
+
export interface JobStreamMessage {
|
|
50
|
+
event: string;
|
|
51
|
+
data: JobStreamData;
|
|
52
|
+
}
|
|
33
53
|
export interface UsePluginJobCenterReturn {
|
|
34
54
|
jobs: ComputedRef<JobState[]>;
|
|
35
55
|
activeJobs: ComputedRef<JobState[]>;
|
|
@@ -49,11 +69,13 @@ export interface UsePluginJobCenterReturn {
|
|
|
49
69
|
close: () => void;
|
|
50
70
|
toggle: () => void;
|
|
51
71
|
refresh: () => Promise<boolean>;
|
|
72
|
+
applyStreamMessage: (message: JobStreamMessage) => void;
|
|
52
73
|
cancelJob: (job: JobState) => Promise<boolean>;
|
|
53
74
|
deleteJob: (job: JobState) => Promise<boolean>;
|
|
54
75
|
clearFinished: () => Promise<boolean>;
|
|
55
76
|
isPending: (job: JobState) => boolean;
|
|
56
77
|
}
|
|
78
|
+
export type UseJobsStatusTrayReturn = UsePluginJobCenterReturn;
|
|
57
79
|
/**
|
|
58
80
|
* Headless controller for plugin job presentation and actions.
|
|
59
81
|
*
|
|
@@ -61,3 +83,5 @@ export interface UsePluginJobCenterReturn {
|
|
|
61
83
|
* source. The controller never mirrors source jobs into another ref.
|
|
62
84
|
*/
|
|
63
85
|
export declare function usePluginJobCenter(options?: UsePluginJobCenterOptions): UsePluginJobCenterReturn;
|
|
86
|
+
/** @deprecated Use `usePluginJobCenter()` for the plugin job-center controller. */
|
|
87
|
+
export declare function useJobsStatusTray(options?: UseJobsStatusTrayOptions): UseJobsStatusTrayReturn;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
/** Inline style for a visually hidden `aria-live` region (no global utility class in the SDK). */
|
|
3
|
+
export declare const REORDER_ANNOUNCER_STYLE: Readonly<{
|
|
4
|
+
position: "absolute";
|
|
5
|
+
width: "1px";
|
|
6
|
+
height: "1px";
|
|
7
|
+
padding: "0";
|
|
8
|
+
margin: "-1px";
|
|
9
|
+
overflow: "hidden";
|
|
10
|
+
clip: "rect(0, 0, 0, 0)";
|
|
11
|
+
whiteSpace: "nowrap";
|
|
12
|
+
border: "0";
|
|
13
|
+
}>;
|
|
14
|
+
export interface UseReorderAnnouncerReturn {
|
|
15
|
+
/** Bind to a polite live region's text content. */
|
|
16
|
+
announcement: Ref<string>;
|
|
17
|
+
/** Publishes a message to the live region. */
|
|
18
|
+
announce: (message: string) => void;
|
|
19
|
+
/** Bind to the live region's `style` so it stays visually hidden. */
|
|
20
|
+
announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Screen-reader announcements for drag/keyboard move interactions. Bind
|
|
24
|
+
* `announcement` to a `role="status" aria-live="polite"` element styled with
|
|
25
|
+
* `announcerStyle`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useReorderAnnouncer(): UseReorderAnnouncerReturn;
|
|
28
|
+
export interface ListReorderMove<T> {
|
|
29
|
+
/** Index the item moved from, within `items()`. */
|
|
30
|
+
fromIndex: number;
|
|
31
|
+
/** Index the item moved to, within `items()`. */
|
|
32
|
+
toIndex: number;
|
|
33
|
+
/** The reordered array (a copy — `items()` is never mutated). */
|
|
34
|
+
items: T[];
|
|
35
|
+
/** Whether the move came from the keyboard or a pointer drag. */
|
|
36
|
+
source: 'keyboard' | 'drag';
|
|
37
|
+
}
|
|
38
|
+
export interface UseListReorderOptions<T> {
|
|
39
|
+
/** The list being reordered, in its canonical (not merely rendered) order. */
|
|
40
|
+
items: () => T[];
|
|
41
|
+
/** Stable id for an item; falls back to the render index when ids repeat. */
|
|
42
|
+
getId: (item: T, index: number) => string;
|
|
43
|
+
/** Applies the move. The composable never mutates the source array. */
|
|
44
|
+
onReorder: (move: ListReorderMove<T>) => void;
|
|
45
|
+
/** Human-readable name used in announcements. Defaults to the item's id. */
|
|
46
|
+
getLabel?: (item: T, index: number) => string;
|
|
47
|
+
/** Blocks every reorder while it returns `true` (readonly / non-sortable lists). */
|
|
48
|
+
disabled?: () => boolean;
|
|
49
|
+
/** Resolves the focusable element for an id so keyboard moves keep focus on the item. */
|
|
50
|
+
getElement?: (id: string) => HTMLElement | null | undefined;
|
|
51
|
+
/** Noun used in announcements, e.g. `'Reagent'`. Default `'Item'`. */
|
|
52
|
+
itemNoun?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface UseListReorderReturn<T> {
|
|
55
|
+
/** Id of the item currently being dragged, or `null`. */
|
|
56
|
+
draggingId: Ref<string | null>;
|
|
57
|
+
/** Id of the item the pointer is hovering as a drop target, or `null`. */
|
|
58
|
+
dragOverId: Ref<string | null>;
|
|
59
|
+
isDragging: (id: string) => boolean;
|
|
60
|
+
isDragOver: (id: string) => boolean;
|
|
61
|
+
announcement: Ref<string>;
|
|
62
|
+
announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
|
|
63
|
+
announce: (message: string) => void;
|
|
64
|
+
/** Bind to the draggable element's `@dragstart`. */
|
|
65
|
+
onDragStart: (event: DragEvent, item: T, index: number) => void;
|
|
66
|
+
/** Bind to `@dragover` — calls `preventDefault()` so the drop is accepted. */
|
|
67
|
+
onDragOver: (event: DragEvent, item: T, index: number) => void;
|
|
68
|
+
/** Bind to `@dragleave`. */
|
|
69
|
+
onDragLeave: () => void;
|
|
70
|
+
/** Bind to `@drop`. */
|
|
71
|
+
onDrop: (event: DragEvent, item: T, index: number) => void;
|
|
72
|
+
/** Bind to `@dragend`. */
|
|
73
|
+
onDragEnd: () => void;
|
|
74
|
+
/**
|
|
75
|
+
* Bind to the item's (or its drag handle's) `@keydown`: Alt+ArrowUp / Alt+ArrowLeft
|
|
76
|
+
* moves the item one position earlier, Alt+ArrowDown / Alt+ArrowRight one later.
|
|
77
|
+
*/
|
|
78
|
+
onKeydown: (event: KeyboardEvent, item: T, index: number) => void;
|
|
79
|
+
/** Moves an item between two indices of `items()` programmatically. */
|
|
80
|
+
move: (fromIndex: number, toIndex: number, source?: 'keyboard' | 'drag') => void;
|
|
81
|
+
}
|
|
82
|
+
/** Pure helper: a copy of `items` with the entry at `from` moved to `to`. */
|
|
83
|
+
export declare function reorderList<T>(items: T[], from: number, to: number): T[];
|
|
84
|
+
/**
|
|
85
|
+
* Keyboard-accessible list reordering shared by the SDK's drag-to-reorder lists.
|
|
86
|
+
* It owns the HTML5 drag state, the drop-index maths, and an Alt+Arrow keyboard
|
|
87
|
+
* alternative that announces every move through a polite live region — so a
|
|
88
|
+
* reorder never depends on a pointer.
|
|
89
|
+
*/
|
|
90
|
+
export declare function useListReorder<T>(options: UseListReorderOptions<T>): UseListReorderReturn<T>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface UseMenuKeyboardOptions {
|
|
2
|
+
/** Returns the currently navigable items inside the open panel, in DOM order. */
|
|
3
|
+
items: () => HTMLElement[];
|
|
4
|
+
/** True while the panel is open. */
|
|
5
|
+
isOpen: () => boolean;
|
|
6
|
+
/** Opens the panel. */
|
|
7
|
+
open: () => void;
|
|
8
|
+
/** Closes the panel. When `returnFocus` is true, focus should return to the trigger. */
|
|
9
|
+
close: (returnFocus?: boolean) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface UseMenuKeyboardReturn {
|
|
12
|
+
/**
|
|
13
|
+
* Bind to the trigger's `@keydown`. ArrowDown/Enter/Space open the panel (when
|
|
14
|
+
* closed) and focus its first item; ArrowUp opens it focused on the last item.
|
|
15
|
+
*/
|
|
16
|
+
handleTriggerKeydown: (event: KeyboardEvent) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Bind to the open panel's `@keydown`. ArrowUp/ArrowDown cycle focus with
|
|
19
|
+
* wraparound, Home/End jump to the first/last item, Escape closes and returns
|
|
20
|
+
* focus to the trigger, and Tab closes without moving focus.
|
|
21
|
+
*/
|
|
22
|
+
handlePanelKeydown: (event: KeyboardEvent) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Shared keyboard contract for menu- and listbox-style disclosure panels (the
|
|
26
|
+
* WAI-ARIA menu button pattern). Used by ActionMenu, AppAvatarMenu and DropdownButton,
|
|
27
|
+
* each pairing it with `useDropdownState` for the disclosure state itself.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useMenuKeyboard(options: UseMenuKeyboardOptions): UseMenuKeyboardReturn;
|
|
@@ -24,5 +24,9 @@ export interface UseOptimisticMutationReturn<TVariables, TData, TSnapshot = unkn
|
|
|
24
24
|
clearError: () => void;
|
|
25
25
|
reset: () => void;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Run async mutations with optional optimistic local updates and rollback.
|
|
29
|
+
*
|
|
30
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useRequestSyncState()` instead.
|
|
31
|
+
*/
|
|
28
32
|
export declare function useOptimisticMutation<TVariables, TData, TSnapshot = unknown>(options: UseOptimisticMutationOptions<TVariables, TData, TSnapshot>): UseOptimisticMutationReturn<TVariables, TData, TSnapshot>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PickerAdapter } from '../types/filePicker';
|
|
2
|
+
/** Opaque picker identity; decode before passing a selection to a mount-scoped API. */
|
|
3
|
+
export declare function encodePlatformPickerPath(mountId: string, path?: string): string;
|
|
4
|
+
export declare function decodePlatformPickerPath(path: string): {
|
|
5
|
+
mountId: string;
|
|
6
|
+
path: string;
|
|
7
|
+
};
|
|
8
|
+
/** Adapt the authenticated MINT mount API without exposing absolute host paths. */
|
|
9
|
+
export declare function usePlatformFilePickerAdapter(options?: {
|
|
10
|
+
apiBaseUrl?: string;
|
|
11
|
+
}): PickerAdapter;
|
|
@@ -209,6 +209,8 @@ export declare function createPluginClient<TClient extends object = GeneratedPlu
|
|
|
209
209
|
export declare function uploadPluginEndpoint<TResponse = unknown>(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: PluginEndpointRequestOptions): Promise<TResponse>;
|
|
210
210
|
/** Fetch a generated plugin endpoint as a Blob and optionally trigger a browser download. */
|
|
211
211
|
export declare function downloadPluginEndpoint(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: DownloadPluginEndpointOptions): Promise<Blob>;
|
|
212
|
+
/** @deprecated Use `useGeneratedPluginClient()` for generated clients. */
|
|
213
|
+
export declare function usePluginClient<TClient>(client: TClient): TClient;
|
|
212
214
|
/** Load, edit, and persist plugin settings from platform config or the plugin-local settings router. */
|
|
213
215
|
export declare function usePluginSettings<TSettings = Record<string, unknown>>(options?: UsePluginSettingsOptions | string): UsePluginSettingsReturn<TSettings>;
|
|
214
216
|
/** Consume a generated plugin SSE endpoint with auth headers, reconnect, and teardown. */
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Ref, ComputedRef } from 'vue';
|
|
2
|
+
export interface UsePluginConfigReturn {
|
|
3
|
+
/** Editable plugin configuration values. */
|
|
4
|
+
config: Ref<Record<string, unknown>>;
|
|
5
|
+
/** Whether the config is currently loading. */
|
|
6
|
+
isLoading: Ref<boolean>;
|
|
7
|
+
/** Whether the config is currently saving. */
|
|
8
|
+
isSaving: Ref<boolean>;
|
|
9
|
+
/** Error message from the last failed operation, or null. */
|
|
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. */
|
|
16
|
+
isDirty: ComputedRef<boolean>;
|
|
17
|
+
/** Load plugin configuration from the platform. */
|
|
18
|
+
load: () => Promise<void>;
|
|
19
|
+
/** Save plugin configuration to the platform. */
|
|
20
|
+
save: () => Promise<boolean>;
|
|
21
|
+
/** Restore the last loaded or saved configuration snapshot. */
|
|
22
|
+
reset: () => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `usePluginSettings()` for typed plugin settings.
|
|
26
|
+
*/
|
|
27
|
+
export declare function usePluginConfig(pluginName?: string): UsePluginConfigReturn;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { PageSelectorItem, PillNavItem } from '../types';
|
|
3
|
+
import { PluginWorkspaceViewEmit, PluginWorkspaceViewProps } from '../components/PluginWorkspaceView.props';
|
|
4
|
+
import { PluginWorkspaceControlsModel, PluginWorkspaceShellModel, PluginWorkspaceSidebarModel } from './pluginWorkspaceModel';
|
|
5
|
+
/**
|
|
6
|
+
* Loosely-typed view of a component's `useSlots()` result: only slot presence and names are
|
|
7
|
+
* read here, so this accepts any `defineSlots()` shape without fighting Vue's `Slot` render
|
|
8
|
+
* function type. Mirrors the `SlotKeyMap` helper type in PluginWorkspaceView.shell.ts.
|
|
9
|
+
*/
|
|
10
|
+
export type PluginWorkspaceSlotsLike = Readonly<Record<string, unknown>>;
|
|
11
|
+
export interface UsePluginWorkspaceOptions {
|
|
12
|
+
/** PluginWorkspaceView's own reactive props object (from `defineProps`). */
|
|
13
|
+
props: PluginWorkspaceViewProps;
|
|
14
|
+
/** PluginWorkspaceView's own slots (from `useSlots()`), used to detect provided passthrough slots. */
|
|
15
|
+
slots: PluginWorkspaceSlotsLike;
|
|
16
|
+
/** PluginWorkspaceView's own typed `emit` function (from `defineEmits<PluginWorkspaceViewEmits>()`). */
|
|
17
|
+
emit: PluginWorkspaceViewEmit;
|
|
18
|
+
}
|
|
19
|
+
export interface UsePluginWorkspaceReturn {
|
|
20
|
+
/** Model consumed by WorkspaceShellInternal's `shell` prop. */
|
|
21
|
+
shell: ComputedRef<PluginWorkspaceShellModel>;
|
|
22
|
+
/** Model consumed by WorkspaceSidebarInternal's `sidebar` prop. */
|
|
23
|
+
sidebar: ComputedRef<PluginWorkspaceSidebarModel>;
|
|
24
|
+
/** Model consumed by WorkspaceControlsInternal's `controls` prop, and by the raw `default` slot. */
|
|
25
|
+
controls: ComputedRef<PluginWorkspaceControlsModel>;
|
|
26
|
+
/** Whether AppLayout should render a sidebar surface at all. */
|
|
27
|
+
hasSidebarSurface: ComputedRef<boolean>;
|
|
28
|
+
/** Applies an AppSidebar `update:model-value` payload to the shared control values and emits `update:modelValue`/`update:values`. */
|
|
29
|
+
handleControlValuesUpdate: (values: Record<string, unknown>) => void;
|
|
30
|
+
/** Resolves an AppTopBar `page-selector-select` payload into the active view and emits `page-selector-select`. */
|
|
31
|
+
handlePageSelectorSelect: (page: PageSelectorItem) => void;
|
|
32
|
+
/** Resolves an AppTopBar `pill-select` payload into the active view and emits `pill-select`. */
|
|
33
|
+
handlePillSelect: (item: PillNavItem) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Maps PluginWorkspaceView's flat 72-prop surface into the three typed model objects
|
|
37
|
+
* (`shell`, `sidebar`, `controls`) rendered by its internal pieces
|
|
38
|
+
* (WorkspaceShellInternal, WorkspaceSidebarInternal, WorkspaceControlsInternal). Reuses the
|
|
39
|
+
* existing `usePluginWorkspaceControls` / `usePluginWorkspaceNavigation` composables and the
|
|
40
|
+
* PluginWorkspaceView.shell slot-detection helpers, so it changes only how that state is
|
|
41
|
+
* assembled and exposed, not the underlying behavior.
|
|
42
|
+
*
|
|
43
|
+
* @example Recommended
|
|
44
|
+
* ```ts
|
|
45
|
+
* const props = withDefaults(defineProps<PluginWorkspaceViewProps>(), { ... })
|
|
46
|
+
* const emit = defineEmits<PluginWorkspaceViewEmits>()
|
|
47
|
+
* const slots = useSlots()
|
|
48
|
+
* const { shell, sidebar, controls } = usePluginWorkspace({ props, slots, emit })
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function usePluginWorkspace(options: UsePluginWorkspaceOptions): UsePluginWorkspaceReturn;
|