@morscherlab/mint-sdk 1.0.0-rc.1 → 1.0.0-rc.4
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 +9 -1
- package/dist/__tests__/components/LcmsSequenceTable.test.d.ts +1 -0
- package/dist/__tests__/components/ProgressBar.test.d.ts +1 -0
- package/dist/__tests__/components/RackEditor.test.d.ts +1 -0
- package/dist/__tests__/components/SequenceProgressBar.test.d.ts +1 -0
- package/dist/__tests__/composables/useExperimentSamples.test.d.ts +1 -0
- package/dist/__tests__/utils/instrument.test.d.ts +1 -0
- package/dist/__tests__/utils/lcms.test.d.ts +1 -0
- package/dist/__tests__/utils/permissions.test.d.ts +1 -0
- package/dist/__tests__/utils/rack.test.d.ts +1 -0
- package/dist/{auth-CBG3bWEc.js → auth-B7g4J4ZF.js} +99 -5
- package/dist/auth-B7g4J4ZF.js.map +1 -0
- package/dist/components/AppSidebar.vue.d.ts +3 -3
- package/dist/components/AutoGroupModal.vue.d.ts +1 -1
- package/dist/components/BaseCheckbox.vue.d.ts +1 -1
- package/dist/components/BaseToggle.vue.d.ts +2 -2
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +1 -1
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +1 -1
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +1 -1
- package/dist/components/ControlWorkspaceView.vue.d.ts +3 -3
- package/dist/components/DoseDesignWorkspaceView.vue.d.ts +2 -2
- package/dist/components/FormulaInput.vue.d.ts +1 -1
- package/dist/components/InstrumentAlertLog.vue.d.ts +22 -0
- package/dist/components/InstrumentStateBadge.vue.d.ts +11 -0
- package/dist/components/InstrumentStatusCard.vue.d.ts +13 -0
- package/dist/components/LcmsSequenceTable.vue.d.ts +26 -0
- package/dist/components/PluginWorkspaceView.vue.d.ts +3 -3
- package/dist/components/ProgressBar.vue.d.ts +1 -0
- package/dist/components/RackEditor.vue.d.ts +41 -3
- package/dist/components/ReagentList.vue.d.ts +1 -1
- package/dist/components/SampleSelector.vue.d.ts +5 -2
- package/dist/components/SegmentedControl.vue.d.ts +2 -0
- package/dist/components/SequenceInput.vue.d.ts +1 -1
- package/dist/components/SequenceProgressBar.vue.d.ts +15 -0
- package/dist/components/SettingsModal.vue.d.ts +3 -1
- package/dist/components/TagsInput.vue.d.ts +1 -1
- package/dist/components/WellPlate.vue.d.ts +42 -3
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.js +3 -3
- package/dist/{components-5KSfsVqf.js → components-DafPc4rM.js} +2091 -1051
- package/dist/components-DafPc4rM.js.map +1 -0
- package/dist/composables/controlComponentBindings.d.ts +7 -0
- package/dist/composables/controlSchemaAdapters.d.ts +20 -0
- package/dist/composables/controlSchemaFormFields.d.ts +3 -0
- package/dist/composables/controlSchemaLayout.d.ts +7 -0
- package/dist/composables/controlSchemaNormalize.d.ts +15 -0
- package/dist/composables/controlSchemaUtils.d.ts +9 -0
- package/dist/composables/controlWorkspaceOptions.d.ts +2 -0
- package/dist/composables/experimentDesignData.d.ts +17 -0
- package/dist/composables/index.d.ts +2 -0
- package/dist/composables/index.js +4 -4
- package/dist/composables/useControlSchema.d.ts +15 -30
- package/dist/composables/useControlWorkspace.d.ts +5 -0
- package/dist/composables/useExperimentData.d.ts +11 -3
- package/dist/composables/useExperimentSamples.d.ts +42 -0
- package/dist/composables/usePlatformContext.d.ts +54 -0
- package/dist/{composables-D4Myb30a.js → composables-BMkPQhVK.js} +5 -3
- package/dist/composables-BMkPQhVK.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +168 -6
- package/dist/index.js.map +1 -0
- package/dist/install.js +2 -2
- package/dist/instrument.d.ts +7 -0
- package/dist/lcms.d.ts +27 -0
- package/dist/permissions.d.ts +46 -0
- package/dist/stores/auth.d.ts +74 -2
- package/dist/stores/index.js +1 -1
- package/dist/styles.css +3316 -1216
- package/dist/templates/adapters.d.ts +14 -47
- package/dist/templates/assayLookups.d.ts +3 -0
- package/dist/templates/assayMatrixAdapters.d.ts +6 -0
- package/dist/templates/assayMatrixBuilder.d.ts +2 -0
- package/dist/templates/assayNormalizers.d.ts +4 -0
- package/dist/templates/builderDefaults.d.ts +1 -0
- package/dist/templates/builderIdUtils.d.ts +4 -0
- package/dist/templates/builderPresetControls.d.ts +10 -0
- package/dist/templates/builderReadUtils.d.ts +8 -0
- package/dist/templates/builders.d.ts +26 -63
- package/dist/templates/calibrationCurveAdapters.d.ts +4 -0
- package/dist/templates/calibrationCurveBuilder.d.ts +2 -0
- package/dist/templates/calibrationNormalizers.d.ts +5 -0
- package/dist/templates/componentBindingCatalog.d.ts +25 -0
- package/dist/templates/componentBindingHelpers.d.ts +17 -0
- package/dist/templates/componentDoseResponseProps.d.ts +3 -0
- package/dist/templates/componentGenericProps.d.ts +8 -0
- package/dist/templates/componentPlateHelpers.d.ts +5 -0
- package/dist/templates/componentPlateMapProps.d.ts +3 -0
- package/dist/templates/componentPropsFactory.d.ts +3 -0
- package/dist/templates/componentQpcrPlateProps.d.ts +3 -0
- package/dist/templates/componentTargetResolvers.d.ts +5 -0
- package/dist/templates/componentTemplateProps.d.ts +3 -0
- package/dist/templates/controlSchemaClone.d.ts +4 -0
- package/dist/templates/controlSchemaConstants.d.ts +10 -0
- package/dist/templates/controlSchemaMerge.d.ts +3 -0
- package/dist/templates/controlSchemaTargets.d.ts +17 -0
- package/dist/templates/controlSchemaTypes.d.ts +4 -0
- package/dist/templates/controlSchemas.d.ts +4 -4
- package/dist/templates/defaultBioTemplateBuilder.d.ts +2 -0
- package/dist/templates/doseResponseAdapters.d.ts +4 -0
- package/dist/templates/doseResponseBuilder.d.ts +2 -0
- package/dist/templates/elisaAssayCollectionBuilder.d.ts +2 -0
- package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +2 -0
- package/dist/templates/flowCytometryPanelBuilder.d.ts +2 -0
- package/dist/templates/flowNormalizers.d.ts +8 -0
- package/dist/templates/flowPanelAdapters.d.ts +4 -0
- package/dist/templates/index.d.ts +2 -2
- package/dist/templates/index.js +2 -2
- package/dist/templates/instrumentRunAdapterHelpers.d.ts +8 -0
- package/dist/templates/instrumentRunAdapters.d.ts +8 -0
- package/dist/templates/instrumentRunBuilder.d.ts +2 -0
- package/dist/templates/lcmsBatchCollectionBuilder.d.ts +2 -0
- package/dist/templates/plateGeometry.d.ts +4 -0
- package/dist/templates/plateMapAdapters.d.ts +3 -0
- package/dist/templates/plateMapBuilder.d.ts +2 -0
- package/dist/templates/presetControlSchemas.d.ts +534 -0
- package/dist/templates/presets.d.ts +12 -0
- package/dist/templates/protocolAdapters.d.ts +5 -0
- package/dist/templates/protocolNormalizers.d.ts +6 -0
- package/dist/templates/protocolStepsBuilder.d.ts +2 -0
- package/dist/templates/qpcrAdapters.d.ts +5 -0
- package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +2 -0
- package/dist/templates/qpcrPlateBuilder.d.ts +2 -0
- package/dist/templates/reagentAdapters.d.ts +5 -0
- package/dist/templates/reagentListBuilder.d.ts +2 -0
- package/dist/templates/runNormalizers.d.ts +10 -0
- package/dist/templates/sampleNormalizers.d.ts +4 -0
- package/dist/templates/samplePrepAdapters.d.ts +4 -0
- package/dist/templates/samplePrepBuilder.d.ts +2 -0
- package/dist/templates/sampleSheetAdapters.d.ts +5 -0
- package/dist/templates/sampleSheetBuilder.d.ts +2 -0
- package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +2 -0
- package/dist/templates/targetedMetabolomicsHelpers.d.ts +5 -0
- package/dist/templates/templateControlSchemas.d.ts +400 -0
- package/dist/templates/templateEnvelopes.d.ts +9 -0
- package/dist/templates/templatePackCollectionBuilder.d.ts +2 -0
- package/dist/templates/templatePresetCollectionBuilder.d.ts +18 -0
- package/dist/templates/templateValidators.d.ts +13 -0
- package/dist/templates/timeCourseAdapters.d.ts +5 -0
- package/dist/templates/timeCourseBuilder.d.ts +2 -0
- package/dist/templates/types.d.ts +16 -1
- package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +2 -0
- package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +2 -0
- package/dist/{templates-BSlxwV2c.js → templates-bUAWMn5L.js} +3610 -3154
- package/dist/templates-bUAWMn5L.js.map +1 -0
- package/dist/types/auth.d.ts +2 -0
- package/dist/types/components.d.ts +32 -3
- package/dist/types/form-builder.d.ts +2 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/instrument.d.ts +56 -0
- package/dist/types/platform.d.ts +3 -0
- package/dist/{useExperimentData-BbbdI5xT.js → useProtocolTemplates-QZtHFFH2.js} +534 -359
- package/dist/useProtocolTemplates-QZtHFFH2.js.map +1 -0
- package/dist/utils/rack.d.ts +47 -0
- package/package.json +1 -1
- package/src/__tests__/components/AppTopBar.test.ts +15 -0
- package/src/__tests__/components/BaseTabs.test.ts +15 -0
- package/src/__tests__/components/LcmsSequenceTable.test.ts +57 -0
- package/src/__tests__/components/ProgressBar.test.ts +18 -0
- package/src/__tests__/components/RackEditor.test.ts +125 -0
- package/src/__tests__/components/SampleSelector.test.ts +25 -0
- package/src/__tests__/components/SegmentedControl.test.ts +45 -0
- package/src/__tests__/components/SequenceProgressBar.test.ts +39 -0
- package/src/__tests__/components/SettingsModal.test.ts +83 -2
- package/src/__tests__/composables/useControlSchema.test.ts +4 -0
- package/src/__tests__/composables/useExperimentData.test.ts +23 -0
- package/src/__tests__/composables/useExperimentSamples.test.ts +91 -0
- package/src/__tests__/templates/templates.test.ts +86 -0
- package/src/__tests__/utils/instrument.test.ts +47 -0
- package/src/__tests__/utils/lcms.test.ts +73 -0
- package/src/__tests__/utils/permissions.test.ts +50 -0
- package/src/__tests__/utils/rack.test.ts +120 -0
- package/src/components/AppTopBar.vue +1 -0
- package/src/components/BaseTabs.vue +22 -1
- package/src/components/InstrumentAlertLog.vue +191 -0
- package/src/components/InstrumentStateBadge.vue +50 -0
- package/src/components/InstrumentStatusCard.vue +188 -0
- package/src/components/LcmsSequenceTable.vue +191 -0
- package/src/components/ProgressBar.vue +3 -0
- package/src/components/RackEditor.vue +73 -2
- package/src/components/SampleSelector.vue +28 -9
- package/src/components/SegmentedControl.story.vue +17 -0
- package/src/components/SegmentedControl.vue +14 -3
- package/src/components/SequenceProgressBar.vue +71 -0
- package/src/components/SettingsModal.vue +42 -2
- package/src/components/WellPlate.vue +142 -21
- package/src/components/index.ts +5 -0
- package/src/components/internal/WellEditPopupInternal.vue +1 -0
- package/src/composables/controlComponentBindings.ts +80 -0
- package/src/composables/controlSchemaAdapters.ts +196 -0
- package/src/composables/controlSchemaFormFields.ts +61 -0
- package/src/composables/controlSchemaLayout.ts +59 -0
- package/src/composables/controlSchemaNormalize.ts +101 -0
- package/src/composables/controlSchemaUtils.ts +36 -0
- package/src/composables/controlWorkspaceOptions.ts +21 -0
- package/src/composables/experimentDesignData.ts +182 -0
- package/src/composables/index.ts +14 -0
- package/src/composables/useAuth.ts +4 -0
- package/src/composables/useAutoGroup.ts +5 -1
- package/src/composables/useControlSchema.ts +62 -618
- package/src/composables/useControlWorkspace.ts +207 -0
- package/src/composables/useExperimentData.ts +57 -16
- package/src/composables/useExperimentSamples.ts +142 -0
- package/src/index.ts +27 -0
- package/src/instrument.ts +90 -0
- package/src/lcms.ts +108 -0
- package/src/permissions.ts +143 -0
- package/src/stores/auth.ts +31 -3
- package/src/styles/components/instrument-monitor.css +478 -0
- package/src/styles/components/lcms-sequence-table.css +189 -0
- package/src/styles/components/sequence-progress-bar.css +63 -0
- package/src/styles/components/tabs.css +9 -0
- package/src/styles/components/well-edit-popup.css +7 -1
- package/src/styles/components/well-plate.css +5 -0
- package/src/styles/index.css +3 -0
- package/src/templates/adapters.ts +89 -930
- package/src/templates/assayLookups.ts +33 -0
- package/src/templates/assayMatrixAdapters.ts +78 -0
- package/src/templates/assayMatrixBuilder.ts +59 -0
- package/src/templates/assayNormalizers.ts +34 -0
- package/src/templates/builderDefaults.ts +11 -0
- package/src/templates/builderIdUtils.ts +20 -0
- package/src/templates/builderPresetControls.ts +165 -0
- package/src/templates/builderReadUtils.ts +57 -0
- package/src/templates/builders.ts +122 -2149
- package/src/templates/calibrationCurveAdapters.ts +59 -0
- package/src/templates/calibrationCurveBuilder.ts +99 -0
- package/src/templates/calibrationNormalizers.ts +60 -0
- package/src/templates/componentBindingCatalog.ts +90 -0
- package/src/templates/componentBindingHelpers.ts +93 -0
- package/src/templates/componentBindings.ts +12 -461
- package/src/templates/componentDoseResponseProps.ts +42 -0
- package/src/templates/componentGenericProps.ts +77 -0
- package/src/templates/componentPlateHelpers.ts +29 -0
- package/src/templates/componentPlateMapProps.ts +32 -0
- package/src/templates/componentPropsFactory.ts +21 -0
- package/src/templates/componentQpcrPlateProps.ts +28 -0
- package/src/templates/componentTargetResolvers.ts +69 -0
- package/src/templates/componentTemplateProps.ts +78 -0
- package/src/templates/controlSchemaClone.ts +32 -0
- package/src/templates/controlSchemaConstants.ts +11 -0
- package/src/templates/controlSchemaMerge.ts +40 -0
- package/src/templates/controlSchemaTargets.ts +87 -0
- package/src/templates/controlSchemaTypes.ts +20 -0
- package/src/templates/controlSchemas.ts +22 -636
- package/src/templates/defaultBioTemplateBuilder.ts +124 -0
- package/src/templates/doseResponseAdapters.ts +45 -0
- package/src/templates/doseResponseBuilder.ts +44 -0
- package/src/templates/elisaAssayCollectionBuilder.ts +62 -0
- package/src/templates/flowCytometryAssayCollectionBuilder.ts +41 -0
- package/src/templates/flowCytometryPanelBuilder.ts +53 -0
- package/src/templates/flowNormalizers.ts +58 -0
- package/src/templates/flowPanelAdapters.ts +58 -0
- package/src/templates/index.ts +2 -0
- package/src/templates/instrumentRunAdapterHelpers.ts +94 -0
- package/src/templates/instrumentRunAdapters.ts +163 -0
- package/src/templates/instrumentRunBuilder.ts +97 -0
- package/src/templates/lcmsBatchCollectionBuilder.ts +38 -0
- package/src/templates/plateGeometry.ts +62 -0
- package/src/templates/plateMapAdapters.ts +36 -0
- package/src/templates/plateMapBuilder.ts +43 -0
- package/src/templates/presetControlSchemas.ts +258 -0
- package/src/templates/presets.ts +23 -0
- package/src/templates/protocolAdapters.ts +69 -0
- package/src/templates/protocolNormalizers.ts +37 -0
- package/src/templates/protocolStepsBuilder.ts +36 -0
- package/src/templates/qpcrAdapters.ts +104 -0
- package/src/templates/qpcrExpressionCollectionBuilder.ts +33 -0
- package/src/templates/qpcrPlateBuilder.ts +96 -0
- package/src/templates/reagentAdapters.ts +77 -0
- package/src/templates/reagentListBuilder.ts +30 -0
- package/src/templates/runNormalizers.ts +63 -0
- package/src/templates/sampleNormalizers.ts +58 -0
- package/src/templates/samplePrepAdapters.ts +63 -0
- package/src/templates/samplePrepBuilder.ts +51 -0
- package/src/templates/sampleSheetAdapters.ts +75 -0
- package/src/templates/sampleSheetBuilder.ts +23 -0
- package/src/templates/targetedMetabolomicsCollectionBuilder.ts +79 -0
- package/src/templates/targetedMetabolomicsHelpers.ts +102 -0
- package/src/templates/templateControlSchemas.ts +320 -0
- package/src/templates/templateEnvelopes.ts +137 -0
- package/src/templates/templatePackCollectionBuilder.ts +23 -0
- package/src/templates/templatePresetCollectionBuilder.ts +139 -0
- package/src/templates/templateValidators.ts +414 -0
- package/src/templates/timeCourseAdapters.ts +73 -0
- package/src/templates/timeCourseBuilder.ts +64 -0
- package/src/templates/types.ts +17 -0
- package/src/templates/wellPlateScreenCollectionBuilder.ts +36 -0
- package/src/templates/westernBlotAssayCollectionBuilder.ts +68 -0
- package/src/types/auth.ts +3 -0
- package/src/types/components.ts +45 -3
- package/src/types/form-builder.ts +2 -1
- package/src/types/index.ts +35 -0
- package/src/types/instrument.ts +61 -0
- package/src/types/platform.ts +4 -0
- package/src/utils/rack.ts +209 -0
- package/dist/auth-CBG3bWEc.js.map +0 -1
- package/dist/components-5KSfsVqf.js.map +0 -1
- package/dist/composables-D4Myb30a.js.map +0 -1
- package/dist/templates-BSlxwV2c.js.map +0 -1
- package/dist/useExperimentData-BbbdI5xT.js.map +0 -1
package/README.md
CHANGED
|
@@ -318,7 +318,7 @@ template presets such as `createWellPlateScreenCollection()`,
|
|
|
318
318
|
- `FileUploader` - Drag-and-drop file upload with file/folder mode support
|
|
319
319
|
|
|
320
320
|
### Sample Management Components
|
|
321
|
-
- `SampleSelector` - Hierarchical sample grouping with auto-group
|
|
321
|
+
- `SampleSelector` - Hierarchical sample grouping with auto-group, CSV metadata import, and optional experiment `design_data` sample loading
|
|
322
322
|
- `AutoGroupModal` - Smart sample grouping wizard for names and design metadata
|
|
323
323
|
- `GroupAssigner` - Drag-and-drop group assignment for comparisons (e.g., Control vs Treatment)
|
|
324
324
|
|
|
@@ -416,6 +416,14 @@ if (isIntegrated.value) {
|
|
|
416
416
|
}
|
|
417
417
|
```
|
|
418
418
|
|
|
419
|
+
### `useExperimentSamples(options?)`
|
|
420
|
+
Load experiment `design_data` and derive `SampleSelector`-compatible sample values.
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
const { samples, sampleOptions, fetch } = useExperimentSamples({ experimentId: 42 })
|
|
424
|
+
await fetch()
|
|
425
|
+
```
|
|
426
|
+
|
|
419
427
|
## Stores
|
|
420
428
|
|
|
421
429
|
### `useAuthStore`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -199,6 +199,84 @@ var useSettingsStore = defineStore("mint-settings", () => {
|
|
|
199
199
|
};
|
|
200
200
|
});
|
|
201
201
|
//#endregion
|
|
202
|
+
//#region src/permissions.ts
|
|
203
|
+
var ADMIN_ROLE = "admin";
|
|
204
|
+
var ADMIN_PANEL_PERMISSIONS = [
|
|
205
|
+
"users.view",
|
|
206
|
+
"users.invite",
|
|
207
|
+
"users.manage",
|
|
208
|
+
"platform.configure",
|
|
209
|
+
"platform.view_logs",
|
|
210
|
+
"plugins.configure",
|
|
211
|
+
"plugins.install"
|
|
212
|
+
];
|
|
213
|
+
function getRoleInfo(user) {
|
|
214
|
+
return user?.roleObj ?? user?.role_obj ?? null;
|
|
215
|
+
}
|
|
216
|
+
function isAdminRole(role) {
|
|
217
|
+
return role === ADMIN_ROLE;
|
|
218
|
+
}
|
|
219
|
+
function isAdminUser(user) {
|
|
220
|
+
return isAdminRole(user?.role) || getRoleInfo(user)?.slug === "admin";
|
|
221
|
+
}
|
|
222
|
+
function getAccessAudience(user) {
|
|
223
|
+
return isAdminUser(user) ? "admin" : "user";
|
|
224
|
+
}
|
|
225
|
+
function getUserPermissions(user) {
|
|
226
|
+
const rolePermissions = getRoleInfo(user)?.permissions;
|
|
227
|
+
if (rolePermissions?.length) return [...rolePermissions];
|
|
228
|
+
return [...user?.permissions ?? []];
|
|
229
|
+
}
|
|
230
|
+
function hasAllPermissions(user, permissions = []) {
|
|
231
|
+
if (permissions.length === 0) return true;
|
|
232
|
+
if (isAdminUser(user)) return true;
|
|
233
|
+
const granted = new Set(getUserPermissions(user));
|
|
234
|
+
return permissions.every((permission) => granted.has(permission));
|
|
235
|
+
}
|
|
236
|
+
function hasAnyPermission(user, permissions = []) {
|
|
237
|
+
if (permissions.length === 0) return true;
|
|
238
|
+
if (isAdminUser(user)) return true;
|
|
239
|
+
const granted = new Set(getUserPermissions(user));
|
|
240
|
+
return permissions.some((permission) => granted.has(permission));
|
|
241
|
+
}
|
|
242
|
+
function canAccessAdmin(user) {
|
|
243
|
+
return isAdminUser(user) || hasAnyPermission(user, ADMIN_PANEL_PERMISSIONS);
|
|
244
|
+
}
|
|
245
|
+
function canAccessPlugin(user, pluginName) {
|
|
246
|
+
if (!pluginName) return true;
|
|
247
|
+
const access = getRoleInfo(user)?.plugin_access;
|
|
248
|
+
if (!access || access === "all") return true;
|
|
249
|
+
return Array.isArray(access) && access.includes(pluginName);
|
|
250
|
+
}
|
|
251
|
+
function normalizeAccessPolicy(rule) {
|
|
252
|
+
if (!rule) return {};
|
|
253
|
+
const { access: nested, ...direct } = rule;
|
|
254
|
+
return {
|
|
255
|
+
...nested ?? {},
|
|
256
|
+
...direct,
|
|
257
|
+
..."visibleFor" in rule && rule.visibleFor !== void 0 ? { visibleFor: rule.visibleFor } : {},
|
|
258
|
+
..."requiresAdmin" in rule && rule.requiresAdmin !== void 0 ? { requiresAdmin: rule.requiresAdmin } : {},
|
|
259
|
+
..."permissions" in rule && rule.permissions !== void 0 ? { permissions: rule.permissions } : {},
|
|
260
|
+
..."anyPermissions" in rule && rule.anyPermissions !== void 0 ? { anyPermissions: rule.anyPermissions } : {}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function canAccessByPolicy(user, rule, isAuthenticated = user !== null && user !== void 0) {
|
|
264
|
+
const policy = normalizeAccessPolicy(rule);
|
|
265
|
+
if (policy.requiresAuth && !isAuthenticated) return false;
|
|
266
|
+
if (policy.requiresAdmin && !isAdminUser(user)) return false;
|
|
267
|
+
if (!audienceAllowsUser(policy.visibleFor ?? policy.audience, user)) return false;
|
|
268
|
+
if (!hasAllPermissions(user, policy.permissions)) return false;
|
|
269
|
+
if (!hasAnyPermission(user, policy.anyPermissions)) return false;
|
|
270
|
+
if (policy.plugin && !canAccessPlugin(user, policy.plugin)) return false;
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
function audienceAllowsUser(audience, user) {
|
|
274
|
+
if (audience === void 0) return true;
|
|
275
|
+
const allowed = Array.isArray(audience) ? audience : [audience];
|
|
276
|
+
if (allowed.includes("all")) return true;
|
|
277
|
+
return allowed.includes(getAccessAudience(user));
|
|
278
|
+
}
|
|
279
|
+
//#endregion
|
|
202
280
|
//#region src/stores/auth.ts
|
|
203
281
|
var AUTH_TOKEN_KEY = "mint-auth-token";
|
|
204
282
|
var AUTH_EXPIRES_KEY = "mint-auth-expires";
|
|
@@ -251,9 +329,10 @@ var useAuthStore = defineStore("mint-auth", () => {
|
|
|
251
329
|
const needsAuth = computed(() => {
|
|
252
330
|
return authConfig.value.authRequired && !isAuthenticated.value;
|
|
253
331
|
});
|
|
254
|
-
const isAdmin = computed(() =>
|
|
255
|
-
|
|
256
|
-
|
|
332
|
+
const isAdmin = computed(() => isAdminUser(userInfo.value));
|
|
333
|
+
const userType = computed(() => getAccessAudience(userInfo.value));
|
|
334
|
+
const permissions = computed(() => getUserPermissions(userInfo.value));
|
|
335
|
+
const canAccessAdmin$1 = computed(() => canAccessAdmin(userInfo.value));
|
|
257
336
|
const canRegister = computed(() => {
|
|
258
337
|
return authConfig.value.registrationEnabled;
|
|
259
338
|
});
|
|
@@ -289,6 +368,15 @@ var useAuthStore = defineStore("mint-auth", () => {
|
|
|
289
368
|
userInfo.value = info;
|
|
290
369
|
username.value = info.username;
|
|
291
370
|
}
|
|
371
|
+
function hasPermission(...perms) {
|
|
372
|
+
return hasAllPermissions(userInfo.value, perms);
|
|
373
|
+
}
|
|
374
|
+
function hasAnyPermissionForUser(...perms) {
|
|
375
|
+
return hasAnyPermission(userInfo.value, perms);
|
|
376
|
+
}
|
|
377
|
+
function canAccessPlugin$1(pluginName) {
|
|
378
|
+
return canAccessPlugin(userInfo.value, pluginName);
|
|
379
|
+
}
|
|
292
380
|
function setAuthConfig(config) {
|
|
293
381
|
authConfig.value = config;
|
|
294
382
|
}
|
|
@@ -316,6 +404,9 @@ var useAuthStore = defineStore("mint-auth", () => {
|
|
|
316
404
|
isAuthenticated,
|
|
317
405
|
needsAuth,
|
|
318
406
|
isAdmin,
|
|
407
|
+
userType,
|
|
408
|
+
permissions,
|
|
409
|
+
canAccessAdmin: canAccessAdmin$1,
|
|
319
410
|
canRegister,
|
|
320
411
|
initialize,
|
|
321
412
|
setToken,
|
|
@@ -325,10 +416,13 @@ var useAuthStore = defineStore("mint-auth", () => {
|
|
|
325
416
|
setUserInfo,
|
|
326
417
|
setError,
|
|
327
418
|
setLoading,
|
|
419
|
+
hasPermission,
|
|
420
|
+
hasAnyPermission: hasAnyPermissionForUser,
|
|
421
|
+
canAccessPlugin: canAccessPlugin$1,
|
|
328
422
|
logout
|
|
329
423
|
};
|
|
330
424
|
});
|
|
331
425
|
//#endregion
|
|
332
|
-
export { colorPalettes as n,
|
|
426
|
+
export { canAccessByPolicy as a, getRoleInfo as c, hasAnyPermission as d, isAdminRole as f, useSettingsStore as g, colorPalettes as h, canAccessAdmin as i, getUserPermissions as l, normalizeAccessPolicy as m, ADMIN_PANEL_PERMISSIONS as n, canAccessPlugin as o, isAdminUser as p, ADMIN_ROLE as r, getAccessAudience as s, useAuthStore as t, hasAllPermissions as u };
|
|
333
427
|
|
|
334
|
-
//# sourceMappingURL=auth-
|
|
428
|
+
//# sourceMappingURL=auth-B7g4J4ZF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-B7g4J4ZF.js","names":[],"sources":["../src/stores/settings.ts","../src/permissions.ts","../src/stores/auth.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { ref, watch } from 'vue'\nimport type { ThemeMode, ColorPalette, TableDensity } from '../types'\n\ndeclare global {\n interface ImportMetaEnv {\n readonly VITE_API_PREFIX?: string\n }\n\n interface ImportMeta {\n readonly env: ImportMetaEnv\n }\n}\n\nexport interface SettingsState {\n serverHost: string\n serverPort: number\n requestTimeout: number\n wsAutoReconnect: boolean\n wsReconnectInterval: number\n theme: ThemeMode\n colorPalette: ColorPalette\n tableDensity: TableDensity\n}\n\nconst STORAGE_KEY = 'mint-settings'\nconst LEGACY_STORAGE_KEY = 'mld-settings'\n\nfunction getDefaultServerHost(): string {\n if (typeof window !== 'undefined' && window.location.hostname !== 'localhost') {\n return window.location.hostname\n }\n return 'localhost'\n}\n\nfunction getDefaultServerPort(): number {\n if (typeof window !== 'undefined') {\n if (window.location.port) {\n return parseInt(window.location.port, 10)\n }\n // Standard ports: 443 for HTTPS, 80 for HTTP (browser omits from location.port)\n return window.location.protocol === 'https:' ? 443 : 80\n }\n return 8000\n}\n\nconst defaultSettings: SettingsState = {\n serverHost: getDefaultServerHost(),\n serverPort: getDefaultServerPort(),\n requestTimeout: 120000,\n wsAutoReconnect: true,\n wsReconnectInterval: 5000,\n theme: 'system',\n colorPalette: 'default',\n tableDensity: 'normal',\n}\n\nexport const colorPalettes: Record<ColorPalette, { name: string; hues: [number, number] }> = {\n default: { name: 'Default (Cyan-Pink)', hues: [180, 320] },\n colorblind: { name: 'Colorblind-friendly', hues: [45, 260] },\n viridis: { name: 'Viridis', hues: [280, 80] },\n pastel: { name: 'Pastel', hues: [200, 340] },\n}\n\nfunction loadSettings(): SettingsState {\n try {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) {\n const parsed = JSON.parse(stored)\n return { ...defaultSettings, ...parsed }\n }\n\n const legacyStored = localStorage.getItem(LEGACY_STORAGE_KEY)\n if (legacyStored) {\n const parsed = JSON.parse(legacyStored)\n const migrated = { ...defaultSettings, ...parsed }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(migrated))\n localStorage.removeItem(LEGACY_STORAGE_KEY)\n return migrated\n }\n } catch (e) {\n console.warn('Failed to load settings from localStorage:', e)\n }\n return { ...defaultSettings }\n}\n\nfunction saveSettings(settings: SettingsState): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(settings))\n } catch (e) {\n console.warn('Failed to save settings to localStorage:', e)\n }\n}\n\nfunction getSystemPrefersDark(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n}\n\nexport const useSettingsStore = defineStore('mint-settings', () => {\n // State\n const serverHost = ref(defaultSettings.serverHost)\n const serverPort = ref(defaultSettings.serverPort)\n const requestTimeout = ref(defaultSettings.requestTimeout)\n const wsAutoReconnect = ref(defaultSettings.wsAutoReconnect)\n const wsReconnectInterval = ref(defaultSettings.wsReconnectInterval)\n const theme = ref<ThemeMode>(defaultSettings.theme)\n const systemPrefersDark = ref(getSystemPrefersDark())\n const colorPalette = ref<ColorPalette>(defaultSettings.colorPalette)\n const tableDensity = ref<TableDensity>(defaultSettings.tableDensity)\n\n // API prefix - can be configured via env variable VITE_API_PREFIX\n const apiPrefix: string = (import.meta.env?.VITE_API_PREFIX as string | undefined) ?? '/api'\n\n function _isSameOrigin(): { same: boolean; currentHost: string; currentPort: string } {\n const currentHost = typeof window !== 'undefined' ? window.location.hostname : 'localhost'\n const currentPort = typeof window !== 'undefined' ? window.location.port : '8000'\n const effectivePort = currentPort || (window.location.protocol === 'https:' ? '443' : '80')\n const same =\n (serverHost.value === currentHost && String(serverPort.value) === effectivePort) ||\n (serverHost.value === 'localhost' && currentHost !== 'localhost')\n return { same, currentHost, currentPort }\n }\n\n function getApiBaseUrl(): string {\n const { same } = _isSameOrigin()\n if (same) return apiPrefix\n return `http://${serverHost.value}:${serverPort.value}${apiPrefix}`\n }\n\n function getWsBaseUrl(): string {\n const { same, currentHost, currentPort } = _isSameOrigin()\n const protocol = typeof window !== 'undefined' && window.location.protocol === 'https:' ? 'wss:' : 'ws:'\n if (same) return `${protocol}//${currentHost}${currentPort ? ':' + currentPort : ''}${apiPrefix}`\n return `ws://${serverHost.value}:${serverPort.value}${apiPrefix}`\n }\n\n let _initialized = false\n\n function initialize() {\n if (_initialized) return\n _initialized = true\n\n const loaded = loadSettings()\n serverHost.value = loaded.serverHost\n serverPort.value = loaded.serverPort\n requestTimeout.value = loaded.requestTimeout\n wsAutoReconnect.value = loaded.wsAutoReconnect\n wsReconnectInterval.value = loaded.wsReconnectInterval\n theme.value = loaded.theme\n colorPalette.value = loaded.colorPalette\n tableDensity.value = loaded.tableDensity\n\n applyTheme()\n }\n\n function applyTheme() {\n if (typeof document === 'undefined') return\n const dark = theme.value === 'system' ? systemPrefersDark.value : theme.value === 'dark'\n document.documentElement.classList.toggle('dark', dark)\n }\n\n watch(theme, () => {\n applyTheme()\n persistSettings()\n })\n\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {\n systemPrefersDark.value = event.matches\n if (theme.value === 'system') {\n applyTheme()\n }\n })\n }\n\n function persistSettings() {\n saveSettings({\n serverHost: serverHost.value,\n serverPort: serverPort.value,\n requestTimeout: requestTimeout.value,\n wsAutoReconnect: wsAutoReconnect.value,\n wsReconnectInterval: wsReconnectInterval.value,\n theme: theme.value,\n colorPalette: colorPalette.value,\n tableDensity: tableDensity.value,\n })\n }\n\n watch([serverHost, serverPort, requestTimeout, wsAutoReconnect, wsReconnectInterval, colorPalette, tableDensity], () => {\n persistSettings()\n })\n\n function resetToDefaults() {\n serverHost.value = defaultSettings.serverHost\n serverPort.value = defaultSettings.serverPort\n requestTimeout.value = defaultSettings.requestTimeout\n wsAutoReconnect.value = defaultSettings.wsAutoReconnect\n wsReconnectInterval.value = defaultSettings.wsReconnectInterval\n theme.value = defaultSettings.theme\n colorPalette.value = defaultSettings.colorPalette\n tableDensity.value = defaultSettings.tableDensity\n }\n\n function getPaletteHues(): [number, number] {\n return colorPalettes[colorPalette.value].hues\n }\n\n function isDark(): boolean {\n return theme.value === 'system' ? systemPrefersDark.value : theme.value === 'dark'\n }\n\n return {\n serverHost,\n serverPort,\n requestTimeout,\n wsAutoReconnect,\n wsReconnectInterval,\n theme,\n systemPrefersDark,\n colorPalette,\n tableDensity,\n initialize,\n applyTheme,\n persistSettings,\n resetToDefaults,\n getPaletteHues,\n isDark,\n getApiBaseUrl,\n getWsBaseUrl,\n }\n})\n","export const ADMIN_ROLE = 'admin'\n\nexport const ADMIN_PANEL_PERMISSIONS = [\n 'users.view',\n 'users.invite',\n 'users.manage',\n 'platform.configure',\n 'platform.view_logs',\n 'plugins.configure',\n 'plugins.install',\n] as const\n\nexport type AccessAudience = 'all' | 'admin' | 'user'\nexport type AccessAudienceInput = AccessAudience | readonly AccessAudience[]\n\nexport interface RoleInfo {\n id?: number\n slug: string\n name?: string\n color?: string\n permissions?: readonly string[] | null\n project_scope?: 'all' | 'assigned' | string\n plugin_access?: readonly string[] | 'all' | null\n}\n\nexport interface PermissionUser {\n role?: string | null\n role_obj?: RoleInfo | null\n roleObj?: RoleInfo | null\n permissions?: readonly string[] | null\n}\n\nexport interface AccessPolicy {\n audience?: AccessAudienceInput\n visibleFor?: AccessAudienceInput\n requiresAuth?: boolean\n requiresAdmin?: boolean\n permissions?: readonly string[]\n anyPermissions?: readonly string[]\n plugin?: string\n}\n\nexport interface AccessControlled {\n access?: AccessPolicy\n visibleFor?: AccessAudienceInput\n requiresAdmin?: boolean\n permissions?: readonly string[]\n anyPermissions?: readonly string[]\n}\n\nexport function getRoleInfo(user: PermissionUser | null | undefined): RoleInfo | null {\n return user?.roleObj ?? user?.role_obj ?? null\n}\n\nexport function isAdminRole(role: string | null | undefined): boolean {\n return role === ADMIN_ROLE\n}\n\nexport function isAdminUser(user: PermissionUser | null | undefined): boolean {\n return isAdminRole(user?.role) || getRoleInfo(user)?.slug === ADMIN_ROLE\n}\n\nexport function getAccessAudience(user: PermissionUser | null | undefined): Exclude<AccessAudience, 'all'> {\n return isAdminUser(user) ? 'admin' : 'user'\n}\n\nexport function getUserPermissions(user: PermissionUser | null | undefined): string[] {\n const rolePermissions = getRoleInfo(user)?.permissions\n if (rolePermissions?.length) return [...rolePermissions]\n return [...(user?.permissions ?? [])]\n}\n\nexport function hasAllPermissions(\n user: PermissionUser | null | undefined,\n permissions: readonly string[] = [],\n): boolean {\n if (permissions.length === 0) return true\n if (isAdminUser(user)) return true\n const granted = new Set(getUserPermissions(user))\n return permissions.every(permission => granted.has(permission))\n}\n\nexport function hasAnyPermission(\n user: PermissionUser | null | undefined,\n permissions: readonly string[] = [],\n): boolean {\n if (permissions.length === 0) return true\n if (isAdminUser(user)) return true\n const granted = new Set(getUserPermissions(user))\n return permissions.some(permission => granted.has(permission))\n}\n\nexport function canAccessAdmin(user: PermissionUser | null | undefined): boolean {\n return isAdminUser(user) || hasAnyPermission(user, ADMIN_PANEL_PERMISSIONS)\n}\n\nexport function canAccessPlugin(\n user: PermissionUser | null | undefined,\n pluginName: string | null | undefined,\n): boolean {\n if (!pluginName) return true\n const access = getRoleInfo(user)?.plugin_access\n if (!access || access === 'all') return true\n return Array.isArray(access) && access.includes(pluginName)\n}\n\nexport function normalizeAccessPolicy(rule: AccessControlled | AccessPolicy | undefined): AccessPolicy {\n if (!rule) return {}\n const { access: nested, ...direct } = rule as AccessPolicy & { access?: AccessPolicy }\n return {\n ...(nested ?? {}),\n ...direct,\n ...('visibleFor' in rule && rule.visibleFor !== undefined ? { visibleFor: rule.visibleFor } : {}),\n ...('requiresAdmin' in rule && rule.requiresAdmin !== undefined ? { requiresAdmin: rule.requiresAdmin } : {}),\n ...('permissions' in rule && rule.permissions !== undefined ? { permissions: rule.permissions } : {}),\n ...('anyPermissions' in rule && rule.anyPermissions !== undefined ? { anyPermissions: rule.anyPermissions } : {}),\n }\n}\n\nexport function canAccessByPolicy(\n user: PermissionUser | null | undefined,\n rule: AccessControlled | AccessPolicy | undefined,\n isAuthenticated = user !== null && user !== undefined,\n): boolean {\n const policy = normalizeAccessPolicy(rule)\n if (policy.requiresAuth && !isAuthenticated) return false\n if (policy.requiresAdmin && !isAdminUser(user)) return false\n if (!audienceAllowsUser(policy.visibleFor ?? policy.audience, user)) return false\n if (!hasAllPermissions(user, policy.permissions)) return false\n if (!hasAnyPermission(user, policy.anyPermissions)) return false\n if (policy.plugin && !canAccessPlugin(user, policy.plugin)) return false\n return true\n}\n\nfunction audienceAllowsUser(\n audience: AccessAudienceInput | undefined,\n user: PermissionUser | null | undefined,\n): boolean {\n if (audience === undefined) return true\n const allowed = Array.isArray(audience) ? audience : [audience]\n if (allowed.includes('all')) return true\n return allowed.includes(getAccessAudience(user))\n}\n","import { defineStore } from 'pinia'\nimport { ref, computed } from 'vue'\nimport type { AuthConfig, UserInfo } from '../types'\nimport {\n canAccessAdmin as canUserAccessAdmin,\n canAccessPlugin as canUserAccessPlugin,\n getAccessAudience,\n getUserPermissions,\n hasAllPermissions,\n hasAnyPermission,\n isAdminUser,\n} from '../permissions'\n\nconst AUTH_TOKEN_KEY = 'mint-auth-token'\nconst AUTH_EXPIRES_KEY = 'mint-auth-expires'\n\nfunction getLocalStorage(): Storage | null {\n try {\n const storage = globalThis.localStorage\n return typeof storage?.getItem === 'function' ? storage : null\n } catch {\n return null\n }\n}\n\nfunction readStoredItem(key: string): string | null {\n try {\n return getLocalStorage()?.getItem(key) ?? null\n } catch {\n return null\n }\n}\n\nfunction writeStoredItem(key: string, value: string): void {\n try {\n getLocalStorage()?.setItem(key, value)\n } catch {\n // Keep auth usable in-memory when browser storage is blocked.\n }\n}\n\nfunction removeStoredItem(key: string): void {\n try {\n getLocalStorage()?.removeItem(key)\n } catch {\n // Keep auth cleanup usable in-memory when browser storage is blocked.\n }\n}\n\nexport const useAuthStore = defineStore('mint-auth', () => {\n // State\n const token = ref<string | null>(null)\n const tokenExpires = ref<Date | null>(null)\n const username = ref<string | null>(null)\n const userInfo = ref<UserInfo | null>(null)\n const authConfig = ref<AuthConfig>({\n authRequired: true,\n passkeyEnabled: false,\n passkeyRegistered: false,\n registrationEnabled: false,\n databaseMode: 'none',\n })\n const isInitialized = ref(false)\n const isLoading = ref(false)\n const error = ref<string | null>(null)\n\n // Computed\n const isAuthenticated = computed(() => {\n if (!authConfig.value.authRequired) {\n return true\n }\n if (!token.value) {\n return false\n }\n if (tokenExpires.value && tokenExpires.value < new Date()) {\n return false\n }\n return true\n })\n\n const needsAuth = computed(() => {\n return authConfig.value.authRequired && !isAuthenticated.value\n })\n\n const isAdmin = computed(() => isAdminUser(userInfo.value))\n const userType = computed(() => getAccessAudience(userInfo.value))\n const permissions = computed(() => getUserPermissions(userInfo.value))\n const canAccessAdmin = computed(() => canUserAccessAdmin(userInfo.value))\n\n const canRegister = computed(() => {\n return authConfig.value.registrationEnabled\n })\n\n // Actions\n function initialize() {\n const storedToken = readStoredItem(AUTH_TOKEN_KEY)\n const storedExpires = readStoredItem(AUTH_EXPIRES_KEY)\n\n if (storedToken) {\n token.value = storedToken\n\n if (storedExpires) {\n const expires = new Date(storedExpires)\n if (expires > new Date()) {\n tokenExpires.value = expires\n } else {\n clearToken()\n }\n }\n }\n\n isInitialized.value = true\n }\n\n function setToken(accessToken: string, expiresIn: number) {\n token.value = accessToken\n const expires = new Date(Date.now() + expiresIn * 1000)\n tokenExpires.value = expires\n\n writeStoredItem(AUTH_TOKEN_KEY, accessToken)\n writeStoredItem(AUTH_EXPIRES_KEY, expires.toISOString())\n }\n\n function clearToken() {\n token.value = null\n tokenExpires.value = null\n username.value = null\n userInfo.value = null\n\n removeStoredItem(AUTH_TOKEN_KEY)\n removeStoredItem(AUTH_EXPIRES_KEY)\n }\n\n function setUserInfo(info: UserInfo) {\n userInfo.value = info\n username.value = info.username\n }\n\n function hasPermission(...perms: string[]): boolean {\n return hasAllPermissions(userInfo.value, perms)\n }\n\n function hasAnyPermissionForUser(...perms: string[]): boolean {\n return hasAnyPermission(userInfo.value, perms)\n }\n\n function canAccessPlugin(pluginName: string): boolean {\n return canUserAccessPlugin(userInfo.value, pluginName)\n }\n\n function setAuthConfig(config: AuthConfig) {\n authConfig.value = config\n }\n\n function setUsername(name: string) {\n username.value = name\n }\n\n function setError(message: string | null) {\n error.value = message\n }\n\n function setLoading(loading: boolean) {\n isLoading.value = loading\n }\n\n function logout() {\n clearToken()\n }\n\n return {\n // State\n token,\n tokenExpires,\n username,\n userInfo,\n authConfig,\n isInitialized,\n isLoading,\n error,\n\n // Computed\n isAuthenticated,\n needsAuth,\n isAdmin,\n userType,\n permissions,\n canAccessAdmin,\n canRegister,\n\n // Actions\n initialize,\n setToken,\n clearToken,\n setAuthConfig,\n setUsername,\n setUserInfo,\n setError,\n setLoading,\n hasPermission,\n hasAnyPermission: hasAnyPermissionForUser,\n canAccessPlugin,\n logout,\n }\n})\n"],"mappings":";;;AAyBA,IAAM,cAAc;AACpB,IAAM,qBAAqB;AAE3B,SAAS,uBAA+B;AACtC,KAAI,OAAO,WAAW,eAAe,OAAO,SAAS,aAAa,YAChE,QAAO,OAAO,SAAS;AAEzB,QAAO;;AAGT,SAAS,uBAA+B;AACtC,KAAI,OAAO,WAAW,aAAa;AACjC,MAAI,OAAO,SAAS,KAClB,QAAO,SAAS,OAAO,SAAS,MAAM,GAAG;AAG3C,SAAO,OAAO,SAAS,aAAa,WAAW,MAAM;;AAEvD,QAAO;;AAGT,IAAM,kBAAiC;CACrC,YAAY,sBAAsB;CAClC,YAAY,sBAAsB;CAClC,gBAAgB;CAChB,iBAAiB;CACjB,qBAAqB;CACrB,OAAO;CACP,cAAc;CACd,cAAc;CACf;AAED,IAAa,gBAAgF;CAC3F,SAAS;EAAE,MAAM;EAAuB,MAAM,CAAC,KAAK,IAAI;EAAE;CAC1D,YAAY;EAAE,MAAM;EAAuB,MAAM,CAAC,IAAI,IAAI;EAAE;CAC5D,SAAS;EAAE,MAAM;EAAW,MAAM,CAAC,KAAK,GAAG;EAAE;CAC7C,QAAQ;EAAE,MAAM;EAAU,MAAM,CAAC,KAAK,IAAI;EAAE;CAC7C;AAED,SAAS,eAA8B;AACrC,KAAI;EACF,MAAM,SAAS,aAAa,QAAQ,YAAY;AAChD,MAAI,QAAQ;GACV,MAAM,SAAS,KAAK,MAAM,OAAO;AACjC,UAAO;IAAE,GAAG;IAAiB,GAAG;IAAQ;;EAG1C,MAAM,eAAe,aAAa,QAAQ,mBAAmB;AAC7D,MAAI,cAAc;GAChB,MAAM,SAAS,KAAK,MAAM,aAAa;GACvC,MAAM,WAAW;IAAE,GAAG;IAAiB,GAAG;IAAQ;AAClD,gBAAa,QAAQ,aAAa,KAAK,UAAU,SAAS,CAAC;AAC3D,gBAAa,WAAW,mBAAmB;AAC3C,UAAO;;UAEF,GAAG;AACV,UAAQ,KAAK,8CAA8C,EAAE;;AAE/D,QAAO,EAAE,GAAG,iBAAiB;;AAG/B,SAAS,aAAa,UAA+B;AACnD,KAAI;AACF,eAAa,QAAQ,aAAa,KAAK,UAAU,SAAS,CAAC;UACpD,GAAG;AACV,UAAQ,KAAK,4CAA4C,EAAE;;;AAI/D,SAAS,uBAAgC;AACvC,KAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,WAAY,QAAO;AACrF,QAAO,OAAO,WAAW,+BAA+B,CAAC;;AAG3D,IAAa,mBAAmB,YAAY,uBAAuB;CAEjE,MAAM,aAAa,IAAI,gBAAgB,WAAW;CAClD,MAAM,aAAa,IAAI,gBAAgB,WAAW;CAClD,MAAM,iBAAiB,IAAI,gBAAgB,eAAe;CAC1D,MAAM,kBAAkB,IAAI,gBAAgB,gBAAgB;CAC5D,MAAM,sBAAsB,IAAI,gBAAgB,oBAAoB;CACpE,MAAM,QAAQ,IAAe,gBAAgB,MAAM;CACnD,MAAM,oBAAoB,IAAI,sBAAsB,CAAC;CACrD,MAAM,eAAe,IAAkB,gBAAgB,aAAa;CACpE,MAAM,eAAe,IAAkB,gBAAgB,aAAa;CAGpE,MAAM,YAAgF;CAEtF,SAAS,gBAA6E;EACpF,MAAM,cAAc,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;EAC/E,MAAM,cAAc,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;EAC3E,MAAM,gBAAgB,gBAAgB,OAAO,SAAS,aAAa,WAAW,QAAQ;AAItF,SAAO;GAAE,MAFN,WAAW,UAAU,eAAe,OAAO,WAAW,MAAM,KAAK,iBACjE,WAAW,UAAU,eAAe,gBAAgB;GACxC;GAAa;GAAa;;CAG3C,SAAS,gBAAwB;EAC/B,MAAM,EAAE,SAAS,eAAe;AAChC,MAAI,KAAM,QAAO;AACjB,SAAO,UAAU,WAAW,MAAM,GAAG,WAAW,QAAQ;;CAG1D,SAAS,eAAuB;EAC9B,MAAM,EAAE,MAAM,aAAa,gBAAgB,eAAe;EAC1D,MAAM,WAAW,OAAO,WAAW,eAAe,OAAO,SAAS,aAAa,WAAW,SAAS;AACnG,MAAI,KAAM,QAAO,GAAG,SAAS,IAAI,cAAc,cAAc,MAAM,cAAc,KAAK;AACtF,SAAO,QAAQ,WAAW,MAAM,GAAG,WAAW,QAAQ;;CAGxD,IAAI,eAAe;CAEnB,SAAS,aAAa;AACpB,MAAI,aAAc;AAClB,iBAAe;EAEf,MAAM,SAAS,cAAc;AAC7B,aAAW,QAAQ,OAAO;AAC1B,aAAW,QAAQ,OAAO;AAC1B,iBAAe,QAAQ,OAAO;AAC9B,kBAAgB,QAAQ,OAAO;AAC/B,sBAAoB,QAAQ,OAAO;AACnC,QAAM,QAAQ,OAAO;AACrB,eAAa,QAAQ,OAAO;AAC5B,eAAa,QAAQ,OAAO;AAE5B,cAAY;;CAGd,SAAS,aAAa;AACpB,MAAI,OAAO,aAAa,YAAa;EACrC,MAAM,OAAO,MAAM,UAAU,WAAW,kBAAkB,QAAQ,MAAM,UAAU;AAClF,WAAS,gBAAgB,UAAU,OAAO,QAAQ,KAAK;;AAGzD,OAAM,aAAa;AACjB,cAAY;AACZ,mBAAiB;GACjB;AAEF,KAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,WAChE,QAAO,WAAW,+BAA+B,CAAC,iBAAiB,WAAW,UAAU;AACtF,oBAAkB,QAAQ,MAAM;AAChC,MAAI,MAAM,UAAU,SAClB,aAAY;GAEd;CAGJ,SAAS,kBAAkB;AACzB,eAAa;GACX,YAAY,WAAW;GACvB,YAAY,WAAW;GACvB,gBAAgB,eAAe;GAC/B,iBAAiB,gBAAgB;GACjC,qBAAqB,oBAAoB;GACzC,OAAO,MAAM;GACb,cAAc,aAAa;GAC3B,cAAc,aAAa;GAC5B,CAAC;;AAGJ,OAAM;EAAC;EAAY;EAAY;EAAgB;EAAiB;EAAqB;EAAc;EAAa,QAAQ;AACtH,mBAAiB;GACjB;CAEF,SAAS,kBAAkB;AACzB,aAAW,QAAQ,gBAAgB;AACnC,aAAW,QAAQ,gBAAgB;AACnC,iBAAe,QAAQ,gBAAgB;AACvC,kBAAgB,QAAQ,gBAAgB;AACxC,sBAAoB,QAAQ,gBAAgB;AAC5C,QAAM,QAAQ,gBAAgB;AAC9B,eAAa,QAAQ,gBAAgB;AACrC,eAAa,QAAQ,gBAAgB;;CAGvC,SAAS,iBAAmC;AAC1C,SAAO,cAAc,aAAa,OAAO;;CAG3C,SAAS,SAAkB;AACzB,SAAO,MAAM,UAAU,WAAW,kBAAkB,QAAQ,MAAM,UAAU;;AAG9E,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;EACD;;;ACvOF,IAAa,aAAa;AAE1B,IAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAwCD,SAAgB,YAAY,MAA0D;AACpF,QAAO,MAAM,WAAW,MAAM,YAAY;;AAG5C,SAAgB,YAAY,MAA0C;AACpE,QAAO,SAAS;;AAGlB,SAAgB,YAAY,MAAkD;AAC5E,QAAO,YAAY,MAAM,KAAK,IAAI,YAAY,KAAK,EAAE,SAAA;;AAGvD,SAAgB,kBAAkB,MAAyE;AACzG,QAAO,YAAY,KAAK,GAAG,UAAU;;AAGvC,SAAgB,mBAAmB,MAAmD;CACpF,MAAM,kBAAkB,YAAY,KAAK,EAAE;AAC3C,KAAI,iBAAiB,OAAQ,QAAO,CAAC,GAAG,gBAAgB;AACxD,QAAO,CAAC,GAAI,MAAM,eAAe,EAAE,CAAE;;AAGvC,SAAgB,kBACd,MACA,cAAiC,EAAE,EAC1B;AACT,KAAI,YAAY,WAAW,EAAG,QAAO;AACrC,KAAI,YAAY,KAAK,CAAE,QAAO;CAC9B,MAAM,UAAU,IAAI,IAAI,mBAAmB,KAAK,CAAC;AACjD,QAAO,YAAY,OAAM,eAAc,QAAQ,IAAI,WAAW,CAAC;;AAGjE,SAAgB,iBACd,MACA,cAAiC,EAAE,EAC1B;AACT,KAAI,YAAY,WAAW,EAAG,QAAO;AACrC,KAAI,YAAY,KAAK,CAAE,QAAO;CAC9B,MAAM,UAAU,IAAI,IAAI,mBAAmB,KAAK,CAAC;AACjD,QAAO,YAAY,MAAK,eAAc,QAAQ,IAAI,WAAW,CAAC;;AAGhE,SAAgB,eAAe,MAAkD;AAC/E,QAAO,YAAY,KAAK,IAAI,iBAAiB,MAAM,wBAAwB;;AAG7E,SAAgB,gBACd,MACA,YACS;AACT,KAAI,CAAC,WAAY,QAAO;CACxB,MAAM,SAAS,YAAY,KAAK,EAAE;AAClC,KAAI,CAAC,UAAU,WAAW,MAAO,QAAO;AACxC,QAAO,MAAM,QAAQ,OAAO,IAAI,OAAO,SAAS,WAAW;;AAG7D,SAAgB,sBAAsB,MAAiE;AACrG,KAAI,CAAC,KAAM,QAAO,EAAE;CACpB,MAAM,EAAE,QAAQ,QAAQ,GAAG,WAAW;AACtC,QAAO;EACL,GAAI,UAAU,EAAE;EAChB,GAAG;EACH,GAAI,gBAAgB,QAAQ,KAAK,eAAe,KAAA,IAAY,EAAE,YAAY,KAAK,YAAY,GAAG,EAAE;EAChG,GAAI,mBAAmB,QAAQ,KAAK,kBAAkB,KAAA,IAAY,EAAE,eAAe,KAAK,eAAe,GAAG,EAAE;EAC5G,GAAI,iBAAiB,QAAQ,KAAK,gBAAgB,KAAA,IAAY,EAAE,aAAa,KAAK,aAAa,GAAG,EAAE;EACpG,GAAI,oBAAoB,QAAQ,KAAK,mBAAmB,KAAA,IAAY,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,EAAE;EACjH;;AAGH,SAAgB,kBACd,MACA,MACA,kBAAkB,SAAS,QAAQ,SAAS,KAAA,GACnC;CACT,MAAM,SAAS,sBAAsB,KAAK;AAC1C,KAAI,OAAO,gBAAgB,CAAC,gBAAiB,QAAO;AACpD,KAAI,OAAO,iBAAiB,CAAC,YAAY,KAAK,CAAE,QAAO;AACvD,KAAI,CAAC,mBAAmB,OAAO,cAAc,OAAO,UAAU,KAAK,CAAE,QAAO;AAC5E,KAAI,CAAC,kBAAkB,MAAM,OAAO,YAAY,CAAE,QAAO;AACzD,KAAI,CAAC,iBAAiB,MAAM,OAAO,eAAe,CAAE,QAAO;AAC3D,KAAI,OAAO,UAAU,CAAC,gBAAgB,MAAM,OAAO,OAAO,CAAE,QAAO;AACnE,QAAO;;AAGT,SAAS,mBACP,UACA,MACS;AACT,KAAI,aAAa,KAAA,EAAW,QAAO;CACnC,MAAM,UAAU,MAAM,QAAQ,SAAS,GAAG,WAAW,CAAC,SAAS;AAC/D,KAAI,QAAQ,SAAS,MAAM,CAAE,QAAO;AACpC,QAAO,QAAQ,SAAS,kBAAkB,KAAK,CAAC;;;;AChIlD,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AAEzB,SAAS,kBAAkC;AACzC,KAAI;EACF,MAAM,UAAU,WAAW;AAC3B,SAAO,OAAO,SAAS,YAAY,aAAa,UAAU;SACpD;AACN,SAAO;;;AAIX,SAAS,eAAe,KAA4B;AAClD,KAAI;AACF,SAAO,iBAAiB,EAAE,QAAQ,IAAI,IAAI;SACpC;AACN,SAAO;;;AAIX,SAAS,gBAAgB,KAAa,OAAqB;AACzD,KAAI;AACF,mBAAiB,EAAE,QAAQ,KAAK,MAAM;SAChC;;AAKV,SAAS,iBAAiB,KAAmB;AAC3C,KAAI;AACF,mBAAiB,EAAE,WAAW,IAAI;SAC5B;;AAKV,IAAa,eAAe,YAAY,mBAAmB;CAEzD,MAAM,QAAQ,IAAmB,KAAK;CACtC,MAAM,eAAe,IAAiB,KAAK;CAC3C,MAAM,WAAW,IAAmB,KAAK;CACzC,MAAM,WAAW,IAAqB,KAAK;CAC3C,MAAM,aAAa,IAAgB;EACjC,cAAc;EACd,gBAAgB;EAChB,mBAAmB;EACnB,qBAAqB;EACrB,cAAc;EACf,CAAC;CACF,MAAM,gBAAgB,IAAI,MAAM;CAChC,MAAM,YAAY,IAAI,MAAM;CAC5B,MAAM,QAAQ,IAAmB,KAAK;CAGtC,MAAM,kBAAkB,eAAe;AACrC,MAAI,CAAC,WAAW,MAAM,aACpB,QAAO;AAET,MAAI,CAAC,MAAM,MACT,QAAO;AAET,MAAI,aAAa,SAAS,aAAa,wBAAQ,IAAI,MAAM,CACvD,QAAO;AAET,SAAO;GACP;CAEF,MAAM,YAAY,eAAe;AAC/B,SAAO,WAAW,MAAM,gBAAgB,CAAC,gBAAgB;GACzD;CAEF,MAAM,UAAU,eAAe,YAAY,SAAS,MAAM,CAAC;CAC3D,MAAM,WAAW,eAAe,kBAAkB,SAAS,MAAM,CAAC;CAClE,MAAM,cAAc,eAAe,mBAAmB,SAAS,MAAM,CAAC;CACtE,MAAM,mBAAiB,eAAe,eAAmB,SAAS,MAAM,CAAC;CAEzE,MAAM,cAAc,eAAe;AACjC,SAAO,WAAW,MAAM;GACxB;CAGF,SAAS,aAAa;EACpB,MAAM,cAAc,eAAe,eAAe;EAClD,MAAM,gBAAgB,eAAe,iBAAiB;AAEtD,MAAI,aAAa;AACf,SAAM,QAAQ;AAEd,OAAI,eAAe;IACjB,MAAM,UAAU,IAAI,KAAK,cAAc;AACvC,QAAI,0BAAU,IAAI,MAAM,CACtB,cAAa,QAAQ;QAErB,aAAY;;;AAKlB,gBAAc,QAAQ;;CAGxB,SAAS,SAAS,aAAqB,WAAmB;AACxD,QAAM,QAAQ;EACd,MAAM,UAAU,IAAI,KAAK,KAAK,KAAK,GAAG,YAAY,IAAK;AACvD,eAAa,QAAQ;AAErB,kBAAgB,gBAAgB,YAAY;AAC5C,kBAAgB,kBAAkB,QAAQ,aAAa,CAAC;;CAG1D,SAAS,aAAa;AACpB,QAAM,QAAQ;AACd,eAAa,QAAQ;AACrB,WAAS,QAAQ;AACjB,WAAS,QAAQ;AAEjB,mBAAiB,eAAe;AAChC,mBAAiB,iBAAiB;;CAGpC,SAAS,YAAY,MAAgB;AACnC,WAAS,QAAQ;AACjB,WAAS,QAAQ,KAAK;;CAGxB,SAAS,cAAc,GAAG,OAA0B;AAClD,SAAO,kBAAkB,SAAS,OAAO,MAAM;;CAGjD,SAAS,wBAAwB,GAAG,OAA0B;AAC5D,SAAO,iBAAiB,SAAS,OAAO,MAAM;;CAGhD,SAAS,kBAAgB,YAA6B;AACpD,SAAO,gBAAoB,SAAS,OAAO,WAAW;;CAGxD,SAAS,cAAc,QAAoB;AACzC,aAAW,QAAQ;;CAGrB,SAAS,YAAY,MAAc;AACjC,WAAS,QAAQ;;CAGnB,SAAS,SAAS,SAAwB;AACxC,QAAM,QAAQ;;CAGhB,SAAS,WAAW,SAAkB;AACpC,YAAU,QAAQ;;CAGpB,SAAS,SAAS;AAChB,cAAY;;AAGd,QAAO;EAEL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA,gBAAA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAAkB;EAClB,iBAAA;EACA;EACD;EACD"}
|
|
@@ -118,12 +118,12 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
118
118
|
subtitle: string;
|
|
119
119
|
controlOptions: ControlWorkspaceOptions;
|
|
120
120
|
model: ControlModel | ControlModelBinding;
|
|
121
|
-
viewIds: string[];
|
|
122
|
-
viewItems: PillNavItem[];
|
|
123
|
-
defaultView: string;
|
|
124
121
|
activeView: string;
|
|
125
122
|
panels: Record<string, SidebarToolSection[]>;
|
|
126
123
|
forms: Record<string, FormSchema>;
|
|
124
|
+
viewIds: string[];
|
|
125
|
+
viewItems: PillNavItem[];
|
|
126
|
+
defaultView: string;
|
|
127
127
|
dense: boolean;
|
|
128
128
|
collapsible: boolean;
|
|
129
129
|
badge: string | number;
|
|
@@ -16,8 +16,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
16
16
|
onApply?: ((result: AutoGroupResult) => any) | undefined;
|
|
17
17
|
}>, {
|
|
18
18
|
samples: string[];
|
|
19
|
-
experimentId: number;
|
|
20
19
|
designData: Record<string, unknown>;
|
|
20
|
+
experimentId: number;
|
|
21
21
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
22
22
|
wizardRef: ({
|
|
23
23
|
$: import('vue').ComponentInternalInstance;
|
|
@@ -11,7 +11,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
11
11
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
12
12
|
}>, {
|
|
13
13
|
size: "sm" | "md" | "lg";
|
|
14
|
-
modelValue: boolean;
|
|
15
14
|
disabled: boolean;
|
|
15
|
+
modelValue: boolean;
|
|
16
16
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLLabelElement>;
|
|
17
17
|
export default _default;
|
|
@@ -11,9 +11,9 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
11
11
|
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
12
12
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
13
13
|
}>, {
|
|
14
|
-
size: "sm" | "md" | "lg";
|
|
15
14
|
reverse: boolean;
|
|
16
|
-
|
|
15
|
+
size: "sm" | "md" | "lg";
|
|
17
16
|
disabled: boolean;
|
|
17
|
+
modelValue: boolean;
|
|
18
18
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
19
19
|
export default _default;
|
|
@@ -96,8 +96,8 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
96
96
|
error: string | null;
|
|
97
97
|
message: string;
|
|
98
98
|
status: TemplateWorkspaceStatus;
|
|
99
|
-
loading: boolean;
|
|
100
99
|
actions: TemplateWorkspaceActions;
|
|
100
|
+
loading: boolean;
|
|
101
101
|
dense: boolean;
|
|
102
102
|
currentExperimentId: number;
|
|
103
103
|
kind: WorkspaceKind;
|
|
@@ -69,8 +69,8 @@ declare function __VLS_template(): {
|
|
|
69
69
|
};
|
|
70
70
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
71
71
|
declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
72
|
-
readonly: boolean;
|
|
73
72
|
label: string;
|
|
73
|
+
readonly: boolean;
|
|
74
74
|
message: string;
|
|
75
75
|
status: PackWorkspaceStatus;
|
|
76
76
|
actions: PackWorkspaceActions;
|
|
@@ -63,8 +63,8 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
63
63
|
"onUpdate:values"?: ((values: BioTemplateControlValues) => any) | undefined;
|
|
64
64
|
}>, {
|
|
65
65
|
values: BioTemplateControlValues;
|
|
66
|
-
modelValue: BioTemplateControlValues;
|
|
67
66
|
readonly: boolean;
|
|
67
|
+
modelValue: BioTemplateControlValues;
|
|
68
68
|
initialValues: BioTemplateControlValues;
|
|
69
69
|
dense: boolean;
|
|
70
70
|
sidebarWidth: string;
|
|
@@ -111,13 +111,13 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
111
111
|
values: Record<string, unknown>;
|
|
112
112
|
modelValue: Record<string, unknown>;
|
|
113
113
|
title: string;
|
|
114
|
-
subtitle: string;
|
|
115
|
-
initialValues: Record<string, unknown>;
|
|
116
114
|
controls: ControlSchema;
|
|
115
|
+
subtitle: string;
|
|
117
116
|
controlOptions: ControlWorkspaceOptions;
|
|
118
117
|
model: ControlModel | ControlModelBinding;
|
|
119
|
-
|
|
118
|
+
initialValues: Record<string, unknown>;
|
|
120
119
|
componentProps: ControlComponentPropsMap;
|
|
120
|
+
componentBindings: ControlComponentBindingsConfig;
|
|
121
121
|
componentPropsById: ControlComponentPropsByIdMap;
|
|
122
122
|
dense: boolean;
|
|
123
123
|
showSettings: boolean;
|
|
@@ -113,9 +113,9 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
113
113
|
modelValue: Record<string, unknown>;
|
|
114
114
|
title: string;
|
|
115
115
|
subtitle: string;
|
|
116
|
-
initialValues: Record<string, unknown>;
|
|
117
116
|
controlOptions: ControlWorkspaceOptions;
|
|
118
117
|
model: ControlModel | ControlModelBinding;
|
|
118
|
+
initialValues: Record<string, unknown>;
|
|
119
119
|
dense: boolean;
|
|
120
120
|
showSettings: boolean;
|
|
121
121
|
floating: boolean;
|
|
@@ -133,9 +133,9 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
133
133
|
sidebarSubtitle: string;
|
|
134
134
|
sidebarBadge: string | number;
|
|
135
135
|
sidebarVariant: DoseDesignSidebarVariant;
|
|
136
|
+
plateId: string;
|
|
136
137
|
workspace: UseControlWorkspaceReturn<ControlSchema>;
|
|
137
138
|
doseDesignOptions: DoseDesignControlModelOptions;
|
|
138
|
-
plateId: string;
|
|
139
139
|
doseId: string;
|
|
140
140
|
wellPlateProps: ComponentProps;
|
|
141
141
|
doseCalculatorProps: ComponentProps;
|
|
@@ -15,9 +15,9 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
15
15
|
onMw?: ((mw: number | null) => any) | undefined;
|
|
16
16
|
}>, {
|
|
17
17
|
size: "sm" | "md" | "lg";
|
|
18
|
-
modelValue: string;
|
|
19
18
|
placeholder: string;
|
|
20
19
|
disabled: boolean;
|
|
20
|
+
modelValue: string;
|
|
21
21
|
error: boolean;
|
|
22
22
|
showPreview: boolean;
|
|
23
23
|
showMW: boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { InstrumentAlert } from '../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
alerts?: InstrumentAlert[];
|
|
4
|
+
title?: string;
|
|
5
|
+
acknowledgeable?: boolean;
|
|
6
|
+
emptyMessage?: string;
|
|
7
|
+
filteredEmptyMessage?: string;
|
|
8
|
+
locale?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
11
|
+
acknowledge: (alert: InstrumentAlert) => any;
|
|
12
|
+
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
13
|
+
onAcknowledge?: ((alert: InstrumentAlert) => any) | undefined;
|
|
14
|
+
}>, {
|
|
15
|
+
title: string;
|
|
16
|
+
locale: string;
|
|
17
|
+
emptyMessage: string;
|
|
18
|
+
alerts: InstrumentAlert[];
|
|
19
|
+
acknowledgeable: boolean;
|
|
20
|
+
filteredEmptyMessage: string;
|
|
21
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InstrumentState } from '../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
state: InstrumentState | string;
|
|
4
|
+
label?: string;
|
|
5
|
+
pulseWhenRunning?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
8
|
+
label: string;
|
|
9
|
+
pulseWhenRunning: boolean;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InstrumentStatus } from '../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
status: InstrumentStatus;
|
|
4
|
+
name?: string;
|
|
5
|
+
showPlaceholders?: boolean;
|
|
6
|
+
locale?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
9
|
+
name: string;
|
|
10
|
+
locale: string;
|
|
11
|
+
showPlaceholders: boolean;
|
|
12
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LcmsSequenceItem, LcmsSequenceTableColumn } from '../lcms';
|
|
2
|
+
interface Props {
|
|
3
|
+
items?: LcmsSequenceItem[];
|
|
4
|
+
columns?: LcmsSequenceTableColumn[];
|
|
5
|
+
editable?: boolean;
|
|
6
|
+
maxRows?: number;
|
|
7
|
+
showMoreLabel?: boolean;
|
|
8
|
+
emptyMessage?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
11
|
+
remove: (index: number) => any;
|
|
12
|
+
reorder: (fromIndex: number, toIndex: number) => any;
|
|
13
|
+
duplicate: (index: number) => any;
|
|
14
|
+
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
15
|
+
onRemove?: ((index: number) => any) | undefined;
|
|
16
|
+
onReorder?: ((fromIndex: number, toIndex: number) => any) | undefined;
|
|
17
|
+
onDuplicate?: ((index: number) => any) | undefined;
|
|
18
|
+
}>, {
|
|
19
|
+
items: LcmsSequenceItem[];
|
|
20
|
+
columns: LcmsSequenceTableColumn[];
|
|
21
|
+
editable: boolean;
|
|
22
|
+
emptyMessage: string;
|
|
23
|
+
maxRows: number;
|
|
24
|
+
showMoreLabel: boolean;
|
|
25
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
26
|
+
export default _default;
|
|
@@ -236,16 +236,16 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
236
236
|
values: Record<string, unknown>;
|
|
237
237
|
modelValue: Record<string, unknown>;
|
|
238
238
|
title: string;
|
|
239
|
-
subtitle: string;
|
|
240
239
|
controls: ControlSchema;
|
|
240
|
+
subtitle: string;
|
|
241
241
|
controlOptions: ControlWorkspaceOptions;
|
|
242
242
|
model: ControlModel | ControlModelBinding;
|
|
243
|
-
componentBindings: ControlComponentBindingsConfig;
|
|
244
243
|
componentProps: ControlComponentPropsMap;
|
|
245
|
-
componentPropsById: ControlComponentPropsByIdMap;
|
|
246
244
|
activeView: string;
|
|
247
245
|
panels: Record<string, SidebarToolSection[]>;
|
|
248
246
|
forms: Record<string, FormSchema>;
|
|
247
|
+
componentBindings: ControlComponentBindingsConfig;
|
|
248
|
+
componentPropsById: ControlComponentPropsByIdMap;
|
|
249
249
|
experiment: AppExperimentRecord | null;
|
|
250
250
|
dense: boolean;
|
|
251
251
|
userName: string;
|
|
@@ -8,6 +8,7 @@ interface Props {
|
|
|
8
8
|
indeterminate?: boolean;
|
|
9
9
|
steps?: string[];
|
|
10
10
|
currentStep?: number;
|
|
11
|
+
ariaLabel?: string;
|
|
11
12
|
}
|
|
12
13
|
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
14
|
size: "sm" | "md" | "lg";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Rack, WellPlateSize, WellEditData } from '../types';
|
|
1
|
+
import { Rack, WellPlateSize, WellEditData, Well, WellEditField, WellSampleDropData, RackSampleDropMapper } from '../types';
|
|
2
2
|
interface Props {
|
|
3
3
|
modelValue?: Rack[];
|
|
4
4
|
activeRackId?: string;
|
|
@@ -10,10 +10,39 @@ interface Props {
|
|
|
10
10
|
wellPlateSize?: WellPlateSize;
|
|
11
11
|
showLegend?: boolean;
|
|
12
12
|
showBadges?: boolean;
|
|
13
|
+
allowSampleDrop?: boolean;
|
|
14
|
+
sampleDropMapper?: RackSampleDropMapper;
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
interface RackWellEditorSlotProps {
|
|
17
|
+
rack?: Rack;
|
|
18
|
+
rackId: string;
|
|
19
|
+
wellId: string;
|
|
20
|
+
wellData?: Partial<Well>;
|
|
21
|
+
editFields: WellEditField[];
|
|
22
|
+
defaultInjectionVolume: number;
|
|
23
|
+
position: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
};
|
|
27
|
+
save: (data: WellEditData) => void;
|
|
28
|
+
clear: () => void;
|
|
29
|
+
close: () => void;
|
|
30
|
+
}
|
|
31
|
+
declare function __VLS_template(): {
|
|
32
|
+
attrs: Partial<{}>;
|
|
33
|
+
slots: Readonly<{
|
|
34
|
+
'well-editor'?: (props: RackWellEditorSlotProps) => unknown;
|
|
35
|
+
}> & {
|
|
36
|
+
'well-editor'?: (props: RackWellEditorSlotProps) => unknown;
|
|
37
|
+
};
|
|
38
|
+
refs: {};
|
|
39
|
+
rootEl: HTMLDivElement;
|
|
40
|
+
};
|
|
41
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
42
|
+
declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
15
43
|
"update:modelValue": (racks: Rack[]) => any;
|
|
16
44
|
"well-edit": (rackId: string, wellId: string, data: WellEditData) => any;
|
|
45
|
+
"sample-drop": (rackId: string, wellId: string, data: WellSampleDropData, event: DragEvent) => any;
|
|
17
46
|
"update:activeRackId": (rackId: string) => any;
|
|
18
47
|
"rack-add": (rack: Rack) => any;
|
|
19
48
|
"rack-remove": (rackId: string) => any;
|
|
@@ -21,20 +50,29 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
21
50
|
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
22
51
|
"onUpdate:modelValue"?: ((racks: Rack[]) => any) | undefined;
|
|
23
52
|
"onWell-edit"?: ((rackId: string, wellId: string, data: WellEditData) => any) | undefined;
|
|
53
|
+
"onSample-drop"?: ((rackId: string, wellId: string, data: WellSampleDropData, event: DragEvent) => any) | undefined;
|
|
24
54
|
"onUpdate:activeRackId"?: ((rackId: string) => any) | undefined;
|
|
25
55
|
"onRack-add"?: ((rack: Rack) => any) | undefined;
|
|
26
56
|
"onRack-remove"?: ((rackId: string) => any) | undefined;
|
|
27
57
|
"onRack-reorder"?: ((rackIds: string[]) => any) | undefined;
|
|
28
58
|
}>, {
|
|
29
|
-
modelValue: Rack[];
|
|
30
59
|
readonly: boolean;
|
|
60
|
+
modelValue: Rack[];
|
|
31
61
|
showLegend: boolean;
|
|
32
62
|
editable: boolean;
|
|
33
63
|
showBadges: boolean;
|
|
64
|
+
allowSampleDrop: boolean;
|
|
34
65
|
activeRackId: string;
|
|
35
66
|
maxRacks: number;
|
|
36
67
|
minRacks: number;
|
|
37
68
|
allowReorder: boolean;
|
|
38
69
|
wellPlateSize: WellPlateSize;
|
|
70
|
+
sampleDropMapper: RackSampleDropMapper;
|
|
39
71
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
72
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
40
73
|
export default _default;
|
|
74
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
75
|
+
new (): {
|
|
76
|
+
$slots: S;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
@@ -21,8 +21,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
21
21
|
onEdit?: ((reagent: Reagent) => any) | undefined;
|
|
22
22
|
onReorder?: ((reagentId: string, fromIndex: number, toIndex: number) => any) | undefined;
|
|
23
23
|
}>, {
|
|
24
|
-
modelValue: Reagent[];
|
|
25
24
|
readonly: boolean;
|
|
25
|
+
modelValue: Reagent[];
|
|
26
26
|
columns: ReagentColumn[];
|
|
27
27
|
sortable: boolean;
|
|
28
28
|
searchable: boolean;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { SampleGroup } from '../types';
|
|
2
2
|
import { AutoGroupResult } from '../types/auto-group';
|
|
3
3
|
interface Props {
|
|
4
|
-
samples
|
|
4
|
+
samples?: string[];
|
|
5
5
|
modelValue: string[];
|
|
6
6
|
groups?: SampleGroup[];
|
|
7
7
|
enableGrouping?: boolean;
|
|
8
8
|
enableSmartGroup?: boolean;
|
|
9
9
|
experimentId?: number;
|
|
10
10
|
designData?: Record<string, unknown>;
|
|
11
|
+
autoloadExperimentData?: boolean;
|
|
11
12
|
}
|
|
12
13
|
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
13
14
|
"update:modelValue": (samples: string[]) => any;
|
|
@@ -19,10 +20,12 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
19
20
|
onSmartGroup?: ((result: AutoGroupResult) => any) | undefined;
|
|
20
21
|
}>, {
|
|
21
22
|
groups: SampleGroup[];
|
|
22
|
-
|
|
23
|
+
samples: string[];
|
|
23
24
|
designData: Record<string, unknown>;
|
|
25
|
+
experimentId: number;
|
|
24
26
|
enableGrouping: boolean;
|
|
25
27
|
enableSmartGroup: boolean;
|
|
28
|
+
autoloadExperimentData: boolean;
|
|
26
29
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
27
30
|
colorPickerInput: HTMLInputElement;
|
|
28
31
|
}, HTMLDivElement>;
|
|
@@ -6,6 +6,7 @@ interface Props {
|
|
|
6
6
|
size?: SegmentedControlSize;
|
|
7
7
|
fullWidth?: boolean;
|
|
8
8
|
disabled?: boolean;
|
|
9
|
+
disabledValues?: Array<string | number>;
|
|
9
10
|
}
|
|
10
11
|
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
11
12
|
"update:modelValue": (value: string | number) => any;
|
|
@@ -16,5 +17,6 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
16
17
|
disabled: boolean;
|
|
17
18
|
variant: SegmentedControlVariant;
|
|
18
19
|
fullWidth: boolean;
|
|
20
|
+
disabledValues: Array<string | number>;
|
|
19
21
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
20
22
|
export default _default;
|