@morscherlab/mint-sdk 1.2.0-beta.4 → 1.2.0-beta.5
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/dist/{EmptyState-p90quq8Z.js → EmptyState-NBqf2_8z.js} +2 -2
- package/dist/{EmptyState-p90quq8Z.js.map → EmptyState-NBqf2_8z.js.map} +1 -1
- package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-CfOdh5Rm.js} +3 -3
- package/dist/{ExperimentPopover-tLwJ7XF4.js.map → ExperimentPopover-CfOdh5Rm.js.map} +1 -1
- package/dist/{ExperimentSelectorModal-B6P2msT4.js → ExperimentSelectorModal-DvIagrxY.js} +4 -4
- package/dist/{ExperimentSelectorModal-B6P2msT4.js.map → ExperimentSelectorModal-DvIagrxY.js.map} +1 -1
- package/dist/{SettingsModal-CkNM8qAI.js → SettingsModal-W3TYfnP9.js} +4 -7
- package/dist/SettingsModal-W3TYfnP9.js.map +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/components/AppAvatarMenu.vue.d.ts +4 -0
- package/dist/components/AppSidebar.vue.d.ts +1 -1
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +1 -1
- package/dist/components/DropdownButton.vue.d.ts +2 -0
- package/dist/components/FitPanel.vue.d.ts +1 -1
- package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
- package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
- package/dist/components/SecretInput.vue.d.ts +28 -0
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.js +8 -8
- 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-MGNL6tRn.js → components-B80gV0P6.js} +575 -561
- package/dist/components-B80gV0P6.js.map +1 -0
- package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
- package/dist/composables/index.d.ts +5 -0
- package/dist/composables/index.js +9 -9
- package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
- 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/useFocusTrap.d.ts +21 -0
- package/dist/composables/useMenuKeyboard.d.ts +29 -0
- package/dist/composables/useOptimisticMutation.d.ts +5 -1
- package/dist/composables/usePluginWorkspace.d.ts +51 -0
- package/dist/composables/useResourceCrud.d.ts +5 -1
- package/dist/composables/useRovingFocus.d.ts +24 -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-CKxOcvgh.js → composables-C8mmD5ta.js} +65 -17
- package/dist/composables-C8mmD5ta.js.map +1 -0
- package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-DV3DrvE_.js} +70 -51
- package/dist/experiment-utils-DV3DrvE_.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +13 -13
- package/dist/install.js +7 -7
- package/dist/styles.css +100 -49
- package/dist/templates/builderReadUtils.d.ts +1 -1
- package/dist/templates/index.js +4 -4
- package/dist/{templates-BTJ9C9Kb.js → templates-CK72aKO1.js} +14 -23
- package/dist/templates-CK72aKO1.js.map +1 -0
- package/dist/types/form-builder.d.ts +1 -1
- package/dist/{useControlSchema-CXhxTul7.js → useControlSchema-_OVhavKq.js} +280 -63
- package/dist/useControlSchema-_OVhavKq.js.map +1 -0
- package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-D5G4UvWd.js} +2 -2
- package/dist/{useDropdownState-DSb3BC3N.js.map → useDropdownState-D5G4UvWd.js.map} +1 -1
- package/dist/{useExperimentSelector-D0pjj9WH.js → useExperimentSelector-DSEckf_g.js} +3 -3
- package/dist/{useExperimentSelector-D0pjj9WH.js.map → useExperimentSelector-DSEckf_g.js.map} +1 -1
- package/dist/{useFormBuilder-CuOFB3aP.js → useFormBuilder-Bd714C7y.js} +2 -2
- package/dist/{useFormBuilder-CuOFB3aP.js.map → useFormBuilder-Bd714C7y.js.map} +1 -1
- package/dist/{useProtocolTemplates-BWhQIWV5.js → useProtocolTemplates-Dq5Pzwyd.js} +481 -46
- package/dist/useProtocolTemplates-Dq5Pzwyd.js.map +1 -0
- package/dist/utils/pluginSecrets.d.ts +53 -0
- package/dist/utils/records.d.ts +4 -0
- package/package.json +1 -1
- package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
- package/src/__tests__/components/BaseTabs.test.ts +67 -0
- package/src/__tests__/components/DropdownButton.test.ts +134 -0
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
- package/src/__tests__/components/SecretInput.test.ts +87 -0
- package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
- package/src/__tests__/composables/usePluginClient.test.ts +140 -0
- package/src/components/AppAvatarMenu.vue +34 -3
- package/src/components/BaseModal.vue +8 -56
- package/src/components/BaseTabs.vue +26 -1
- package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
- package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
- package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
- package/src/components/ComponentBindingRenderer.vue +1 -3
- package/src/components/ControlWorkspaceView.vue +11 -22
- package/src/components/DoseDesignWorkspaceView.vue +6 -25
- package/src/components/DropdownButton.vue +32 -2
- package/src/components/PluginWorkspaceView.props.ts +38 -0
- package/src/components/PluginWorkspaceView.vue +53 -224
- package/src/components/SecretInput.story.vue +79 -0
- package/src/components/SecretInput.vue +150 -0
- package/src/components/index.ts +9 -0
- package/src/components/internal/WellEditPopupInternal.vue +20 -1
- 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/experimentDesignData.ts +1 -3
- package/src/composables/flattenWorkspaceBindings.ts +104 -0
- package/src/composables/formBuilderRegistry.ts +5 -0
- package/src/composables/index.ts +26 -0
- package/src/composables/pluginWorkspaceModel.ts +182 -0
- package/src/composables/useAsync.ts +5 -1
- 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/useFocusTrap.ts +91 -0
- package/src/composables/useMenuKeyboard.ts +90 -0
- package/src/composables/useOptimisticMutation.ts +5 -1
- package/src/composables/usePluginClient.ts +42 -4
- package/src/composables/usePluginWorkspace.ts +208 -0
- package/src/composables/useResourceCrud.ts +5 -1
- package/src/composables/useRovingFocus.ts +66 -0
- package/src/composables/useWellPainting.ts +5 -1
- package/src/composables/useWellPlateAdapter.ts +5 -1
- package/src/composables/useWellPlateValidation.ts +5 -1
- package/src/composables/workspaceRecipes.ts +267 -0
- package/src/index.ts +16 -0
- package/src/styles/components/secret-input.css +60 -0
- package/src/styles/index.css +1 -0
- package/src/templates/builderReadUtils.ts +1 -3
- package/src/templates/componentTargetResolvers.ts +1 -3
- package/src/templates/controlSchemaTargets.ts +1 -3
- package/src/types/form-builder.ts +1 -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/SettingsModal-CkNM8qAI.js.map +0 -1
- package/dist/components-MGNL6tRn.js.map +0 -1
- package/dist/composables-CKxOcvgh.js.map +0 -1
- package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
- package/dist/templates-BTJ9C9Kb.js.map +0 -1
- package/dist/useControlSchema-CXhxTul7.js.map +0 -1
- package/dist/useProtocolTemplates-BWhQIWV5.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { n as __exportAll, r as __toESM } from "./chunk-BoAXSpZd.js";
|
|
2
|
-
import { f as BaseModal_default,
|
|
3
|
-
import { a as BaseSelect_default, i as BasePill_default, n as Skeleton_default, o as normalizeOptionInput, r as useRequestSyncState, s as BaseInput_default, t as EmptyState_default } from "./EmptyState-
|
|
4
|
-
import { A as useConcentrationUnits,
|
|
5
|
-
import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-
|
|
6
|
-
import { t as
|
|
7
|
-
import {
|
|
2
|
+
import { f as BaseModal_default, h as BaseButton_default, m as useEventListener, p as useFocusTrap } from "./experiment-utils-DV3DrvE_.js";
|
|
3
|
+
import { a as BaseSelect_default, i as BasePill_default, n as Skeleton_default, o as normalizeOptionInput, r as useRequestSyncState, s as BaseInput_default, t as EmptyState_default } from "./EmptyState-NBqf2_8z.js";
|
|
4
|
+
import { A as useConcentrationUnits, Bt as MultiSelect_default, Gt as BaseToggle_default, I as useChemicalFormula, Jt as computePosition, K as useGeneratedAnalysis, Kt as BaseCheckbox_default, L as GeneratedPathInput_default, M as SequenceInput_default, O as ConcentrationInput_default, Ot as formatDuration, P as FormulaInput_default, Qt as BaseTextarea_default, R as ArtifactSelectorModal_default, St as TimePicker_default, Tt as durationMinutes, U as resolveCurrentExperimentId, Ut as BaseSlider_default, V as getInjectedPlatformContext, Vt as useListSelection, Wt as BaseRadioGroup_default, X as jobStatusLabel, Xt as offset, Yt as flip, Z as normalizeJobPercent, Zt as shift, _ as controlsToFormSchema, at as AlertBox_default, ct as SecretInput_default, f as resolveControlModel, g as mergeControlWorkspaceOptions, it as _plugin_vue_export_helper_default, j as MoleculeInput_default, k as UnitInput_default, kt as formatTime, o as defineDoseDesignControlModel, ot as FileUploader_default, qt as Tooltip_default, r as getControlDefaults, rt as isRecord, st as NumberInput_default, tt as DateTimePicker_default, u as useControlWorkspace, wt as compareTime, x as controlsToSidebarPanels, xt as TagsInput_default, y as controlsToSectionFormSchemas, zt as DatePicker_default } from "./useControlSchema-_OVhavKq.js";
|
|
5
|
+
import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-W3TYfnP9.js";
|
|
6
|
+
import { $ as useTheme, B as useDoseCalculator, C as getSampleGroupParentPath, G as DEFAULT_MOBILE_VIEWPORT_QUERY, J as useAppExperiment, K as useMobileSupportGate, N as useAutoGroup, P as parseCSV, Q as usePresenceHeartbeat, R as DEFAULT_COLORS, S as getSampleGroupMajorPrefix, U as usePluginJobCenter, W as usePluginWorkspace, X as useRuntimeAlignment, Y as getInjectedFrontendRevision, _ as useScheduleDrag, a as useReagentSeries, at as useSortedItems, b as useExpansionSet, c as useBioTemplatePresetWorkspace, et as useToast, k as readFileAsText, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, ot as useMenuKeyboard, q as APP_EXPERIMENT_KEY, r as DEFAULT_UNITS, rt as useTextSearch, s as useRackEditor, st as useRovingFocus, t as useProtocolTemplates, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData, z as useWellPlateEditor } from "./useProtocolTemplates-Dq5Pzwyd.js";
|
|
7
|
+
import { t as useDropdownState } from "./useDropdownState-D5G4UvWd.js";
|
|
8
8
|
import { r as useApi } from "./useApi-CDBq6z23.js";
|
|
9
|
-
import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-
|
|
9
|
+
import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-Bd714C7y.js";
|
|
10
10
|
import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-DQ0MjwHZ.js";
|
|
11
|
-
import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-
|
|
12
|
-
import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-
|
|
13
|
-
import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-
|
|
11
|
+
import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-CfOdh5Rm.js";
|
|
12
|
+
import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-CK72aKO1.js";
|
|
13
|
+
import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-DvIagrxY.js";
|
|
14
14
|
import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRaw, toRef, unref, useId, useModel, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
15
15
|
//#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
|
|
16
16
|
var _hoisted_1$77 = { class: "mint-color-slider__row" };
|
|
@@ -167,8 +167,11 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
|
|
|
167
167
|
//#endregion
|
|
168
168
|
//#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
|
|
169
169
|
var _hoisted_1$76 = [
|
|
170
|
+
"id",
|
|
170
171
|
"aria-selected",
|
|
171
172
|
"aria-disabled",
|
|
173
|
+
"aria-controls",
|
|
174
|
+
"tabindex",
|
|
172
175
|
"onClick"
|
|
173
176
|
];
|
|
174
177
|
var _hoisted_2$67 = { class: "mint-tab__content" };
|
|
@@ -217,23 +220,40 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
|
|
|
217
220
|
const tab = normalizedTabs.value.find((t) => t.id === tabId);
|
|
218
221
|
if (tab && !tab.disabled) emit("update:modelValue", tabId);
|
|
219
222
|
}
|
|
223
|
+
const tabButtonRefs = /* @__PURE__ */ new Map();
|
|
224
|
+
function setTabButtonRef(id, el) {
|
|
225
|
+
if (el instanceof HTMLElement) tabButtonRefs.set(id, el);
|
|
226
|
+
else tabButtonRefs.delete(id);
|
|
227
|
+
}
|
|
228
|
+
const { handleKeydown } = useRovingFocus({
|
|
229
|
+
ids: () => normalizedTabs.value.filter((tab) => !tab.disabled).map((tab) => tab.id),
|
|
230
|
+
activeId: () => activeTab.value,
|
|
231
|
+
activate: selectTab,
|
|
232
|
+
getElement: (id) => tabButtonRefs.get(id)
|
|
233
|
+
});
|
|
220
234
|
return (_ctx, _cache) => {
|
|
221
235
|
return openBlock(), createElementBlock("div", {
|
|
222
236
|
class: normalizeClass(["mint-tabs", `mint-tabs--${__props.variant}`]),
|
|
223
237
|
role: "tablist"
|
|
224
238
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedTabs.value, (tab) => {
|
|
225
239
|
return openBlock(), createElementBlock("button", {
|
|
240
|
+
id: `mint-tab-${tab.id}`,
|
|
226
241
|
key: tab.id,
|
|
242
|
+
ref_for: true,
|
|
243
|
+
ref: (el) => setTabButtonRef(tab.id, el),
|
|
227
244
|
type: "button",
|
|
228
245
|
role: "tab",
|
|
229
246
|
"aria-selected": activeTab.value === tab.id,
|
|
230
247
|
"aria-disabled": tab.disabled,
|
|
248
|
+
"aria-controls": `mint-tabpanel-${tab.id}`,
|
|
249
|
+
tabindex: activeTab.value === tab.id ? 0 : -1,
|
|
231
250
|
class: normalizeClass([
|
|
232
251
|
"mint-tab",
|
|
233
252
|
activeTab.value === tab.id ? "mint-tab--active" : "",
|
|
234
253
|
tab.disabled ? "mint-tab--disabled" : ""
|
|
235
254
|
]),
|
|
236
|
-
onClick: ($event) => selectTab(tab.id)
|
|
255
|
+
onClick: ($event) => selectTab(tab.id),
|
|
256
|
+
onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeydown) && unref(handleKeydown)(...args))
|
|
237
257
|
}, [createElementVNode("span", _hoisted_2$67, [
|
|
238
258
|
isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$60, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
|
|
239
259
|
return openBlock(), createElementBlock("path", {
|
|
@@ -246,7 +266,7 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
|
|
|
246
266
|
}, null, 8, _hoisted_5$54))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$50, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
|
|
247
267
|
createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
|
|
248
268
|
tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$44, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
|
|
249
|
-
])],
|
|
269
|
+
])], 42, _hoisted_1$76);
|
|
250
270
|
}), 128))], 2);
|
|
251
271
|
};
|
|
252
272
|
}
|
|
@@ -353,7 +373,8 @@ var _hoisted_5$53 = [
|
|
|
353
373
|
"id",
|
|
354
374
|
"aria-selected",
|
|
355
375
|
"aria-disabled",
|
|
356
|
-
"onClick"
|
|
376
|
+
"onClick",
|
|
377
|
+
"onKeydown"
|
|
357
378
|
];
|
|
358
379
|
var _hoisted_6$49 = { class: "mint-dropdown-button__option-label" };
|
|
359
380
|
var _hoisted_7$43 = {
|
|
@@ -398,8 +419,24 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
398
419
|
* @event select - Emitted when an option is selected, includes full option object
|
|
399
420
|
*/
|
|
400
421
|
const emit = __emit;
|
|
401
|
-
const { isOpen, rootRef, close, toggle: toggleDropdown } = useDropdownState();
|
|
422
|
+
const { isOpen, rootRef, open, close: closeDropdown, toggle: toggleDropdown } = useDropdownState();
|
|
402
423
|
const normalizedOptions = computed(() => props.options.map(normalizeOptionInput));
|
|
424
|
+
const triggerRef = ref(null);
|
|
425
|
+
const panelRef = ref(null);
|
|
426
|
+
function optionItems() {
|
|
427
|
+
if (!panelRef.value) return [];
|
|
428
|
+
return Array.from(panelRef.value.querySelectorAll("[role=\"option\"]:not([aria-disabled=\"true\"])"));
|
|
429
|
+
}
|
|
430
|
+
function close(returnFocus = false) {
|
|
431
|
+
closeDropdown();
|
|
432
|
+
if (returnFocus) nextTick(() => triggerRef.value?.focus());
|
|
433
|
+
}
|
|
434
|
+
const { handleTriggerKeydown, handlePanelKeydown } = useMenuKeyboard({
|
|
435
|
+
items: optionItems,
|
|
436
|
+
isOpen: () => isOpen.value,
|
|
437
|
+
open,
|
|
438
|
+
close
|
|
439
|
+
});
|
|
403
440
|
const selectedLabel = computed(() => {
|
|
404
441
|
if (props.modelValue === void 0) return props.placeholder ?? "Select...";
|
|
405
442
|
return normalizedOptions.value.find((o) => o.value === props.modelValue)?.label ?? String(props.modelValue);
|
|
@@ -420,6 +457,8 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
420
457
|
ref: rootRef,
|
|
421
458
|
class: "mint-dropdown-button"
|
|
422
459
|
}, [createElementVNode("button", {
|
|
460
|
+
ref_key: "triggerRef",
|
|
461
|
+
ref: triggerRef,
|
|
423
462
|
type: "button",
|
|
424
463
|
disabled: __props.disabled || __props.loading,
|
|
425
464
|
class: normalizeClass([
|
|
@@ -433,9 +472,10 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
433
472
|
]),
|
|
434
473
|
"aria-expanded": unref(isOpen),
|
|
435
474
|
"aria-haspopup": "listbox",
|
|
436
|
-
onClick: toggle
|
|
475
|
+
onClick: toggle,
|
|
476
|
+
onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleTriggerKeydown) && unref(handleTriggerKeydown)(...args))
|
|
437
477
|
}, [
|
|
438
|
-
__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$65, [..._cache[
|
|
478
|
+
__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$65, [..._cache[2] || (_cache[2] = [createElementVNode("circle", {
|
|
439
479
|
cx: "12",
|
|
440
480
|
cy: "12",
|
|
441
481
|
r: "10",
|
|
@@ -457,31 +497,36 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
457
497
|
"stroke-width": "2",
|
|
458
498
|
"stroke-linecap": "round",
|
|
459
499
|
"stroke-linejoin": "round"
|
|
460
|
-
}, [..._cache[
|
|
461
|
-
],
|
|
500
|
+
}, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
|
|
501
|
+
], 42, _hoisted_1$74), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
|
|
462
502
|
default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("ul", {
|
|
463
503
|
key: 0,
|
|
504
|
+
ref_key: "panelRef",
|
|
505
|
+
ref: panelRef,
|
|
464
506
|
class: "mint-dropdown-button__menu",
|
|
465
507
|
role: "listbox",
|
|
466
|
-
"aria-activedescendant": __props.modelValue !== void 0 ? `mint-dropdown-option-${__props.modelValue}` : void 0
|
|
508
|
+
"aria-activedescendant": __props.modelValue !== void 0 ? `mint-dropdown-option-${__props.modelValue}` : void 0,
|
|
509
|
+
onKeydown: _cache[1] || (_cache[1] = (...args) => unref(handlePanelKeydown) && unref(handlePanelKeydown)(...args))
|
|
467
510
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedOptions.value, (option) => {
|
|
468
511
|
return openBlock(), createElementBlock("li", {
|
|
469
512
|
id: `mint-dropdown-option-${option.value}`,
|
|
470
513
|
key: String(option.value),
|
|
471
514
|
role: "option",
|
|
515
|
+
tabindex: -1,
|
|
472
516
|
"aria-selected": option.value === __props.modelValue,
|
|
473
517
|
"aria-disabled": option.disabled,
|
|
474
518
|
class: normalizeClass(["mint-dropdown-button__option", {
|
|
475
519
|
"mint-dropdown-button__option--selected": option.value === __props.modelValue,
|
|
476
520
|
"mint-dropdown-button__option--disabled": option.disabled
|
|
477
521
|
}]),
|
|
478
|
-
onClick: ($event) => selectOption(option)
|
|
522
|
+
onClick: ($event) => selectOption(option),
|
|
523
|
+
onKeydown: [withKeys(withModifiers(($event) => selectOption(option), ["prevent"]), ["enter"]), withKeys(withModifiers(($event) => selectOption(option), ["prevent"]), ["space"])]
|
|
479
524
|
}, [
|
|
480
525
|
createElementVNode("span", _hoisted_6$49, toDisplayString(option.label), 1),
|
|
481
526
|
option.description ? (openBlock(), createElementBlock("span", _hoisted_7$43, toDisplayString(option.description), 1)) : createCommentVNode("", true),
|
|
482
|
-
option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$39, [..._cache[
|
|
483
|
-
],
|
|
484
|
-
}), 128))],
|
|
527
|
+
option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$39, [..._cache[4] || (_cache[4] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : createCommentVNode("", true)
|
|
528
|
+
], 42, _hoisted_5$53);
|
|
529
|
+
}), 128))], 40, _hoisted_4$55)) : createCommentVNode("", true)]),
|
|
485
530
|
_: 1
|
|
486
531
|
})], 512);
|
|
487
532
|
};
|
|
@@ -822,7 +867,7 @@ var _hoisted_11$29 = {
|
|
|
822
867
|
key: 0,
|
|
823
868
|
class: "mint-dataframe__td mint-dataframe__td--checkbox"
|
|
824
869
|
};
|
|
825
|
-
var _hoisted_12$
|
|
870
|
+
var _hoisted_12$25 = ["checked", "onChange"];
|
|
826
871
|
var _hoisted_13$25 = ["onClick"];
|
|
827
872
|
var _hoisted_14$22 = [
|
|
828
873
|
"aria-label",
|
|
@@ -1192,7 +1237,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1192
1237
|
class: "mint-dataframe__checkbox",
|
|
1193
1238
|
onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
|
|
1194
1239
|
onChange: ($event) => toggleRowSelect(getRowKey(row, rowIndex))
|
|
1195
|
-
}, null, 40, _hoisted_12$
|
|
1240
|
+
}, null, 40, _hoisted_12$25)])) : createCommentVNode("", true),
|
|
1196
1241
|
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
1197
1242
|
return openBlock(), createElementBlock("td", {
|
|
1198
1243
|
key: col.key,
|
|
@@ -1942,7 +1987,7 @@ var _hoisted_11$28 = {
|
|
|
1942
1987
|
"stroke-linejoin": "round",
|
|
1943
1988
|
"aria-hidden": "true"
|
|
1944
1989
|
};
|
|
1945
|
-
var _hoisted_12$
|
|
1990
|
+
var _hoisted_12$24 = ["d"];
|
|
1946
1991
|
var _hoisted_13$24 = ["d"];
|
|
1947
1992
|
var _hoisted_14$21 = {
|
|
1948
1993
|
key: 1,
|
|
@@ -2086,7 +2131,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
|
|
|
2086
2131
|
return openBlock(), createElementBlock("path", {
|
|
2087
2132
|
key: i,
|
|
2088
2133
|
d
|
|
2089
|
-
}, null, 8, _hoisted_12$
|
|
2134
|
+
}, null, 8, _hoisted_12$24);
|
|
2090
2135
|
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
2091
2136
|
key: 1,
|
|
2092
2137
|
d: action.icon
|
|
@@ -2252,9 +2297,6 @@ function parseOffset(value) {
|
|
|
2252
2297
|
if (typeof value !== "string") return void 0;
|
|
2253
2298
|
if (/^(?:100|(?:[1-9]?\d)(?:\.\d+)?)%$/.test(value)) return value;
|
|
2254
2299
|
}
|
|
2255
|
-
function isRecord(value) {
|
|
2256
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2257
|
-
}
|
|
2258
2300
|
function isSafeColor(value) {
|
|
2259
2301
|
return typeof value === "string" && COLOR_REGEX.test(value);
|
|
2260
2302
|
}
|
|
@@ -2824,37 +2866,32 @@ var _hoisted_3$49 = {
|
|
|
2824
2866
|
class: "mint-avatar-menu__name"
|
|
2825
2867
|
};
|
|
2826
2868
|
var _hoisted_4$48 = {
|
|
2827
|
-
key: 0,
|
|
2828
|
-
class: "mint-avatar-menu__panel",
|
|
2829
|
-
role: "menu"
|
|
2830
|
-
};
|
|
2831
|
-
var _hoisted_5$46 = {
|
|
2832
2869
|
key: 0,
|
|
2833
2870
|
class: "mint-avatar-menu__header"
|
|
2834
2871
|
};
|
|
2835
|
-
var
|
|
2872
|
+
var _hoisted_5$46 = {
|
|
2836
2873
|
key: 0,
|
|
2837
2874
|
class: "mint-avatar-menu__user-name"
|
|
2838
2875
|
};
|
|
2839
|
-
var
|
|
2876
|
+
var _hoisted_6$42 = {
|
|
2840
2877
|
key: 1,
|
|
2841
2878
|
class: "mint-avatar-menu__user-email"
|
|
2842
2879
|
};
|
|
2843
|
-
var
|
|
2880
|
+
var _hoisted_7$36 = {
|
|
2844
2881
|
key: 0,
|
|
2845
2882
|
class: "mint-avatar-menu__divider",
|
|
2846
2883
|
role: "separator"
|
|
2847
2884
|
};
|
|
2848
|
-
var
|
|
2885
|
+
var _hoisted_8$33 = {
|
|
2849
2886
|
key: 0,
|
|
2850
2887
|
class: "mint-avatar-menu__item-icon"
|
|
2851
2888
|
};
|
|
2852
|
-
var
|
|
2853
|
-
var
|
|
2889
|
+
var _hoisted_9$31 = { class: "mint-avatar-menu__item-label" };
|
|
2890
|
+
var _hoisted_10$28 = {
|
|
2854
2891
|
key: 1,
|
|
2855
2892
|
class: "mint-avatar-menu__item-right"
|
|
2856
2893
|
};
|
|
2857
|
-
var
|
|
2894
|
+
var _hoisted_11$26 = { class: "mint-avatar-menu__item-label" };
|
|
2858
2895
|
//#endregion
|
|
2859
2896
|
//#region src/components/AppAvatarMenu.vue
|
|
2860
2897
|
var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
@@ -2880,10 +2917,26 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
|
2880
2917
|
/** Avatar-triggered dropdown with user name/email header, configurable menu items, dividers, and a sign-out action. */
|
|
2881
2918
|
const props = __props;
|
|
2882
2919
|
const emit = __emit;
|
|
2883
|
-
const { isOpen, rootRef, close, toggle } = useDropdownState({
|
|
2920
|
+
const { isOpen, rootRef, open, close: closeDropdown, toggle } = useDropdownState({
|
|
2884
2921
|
onOpen: () => emit("menu-open"),
|
|
2885
2922
|
onClose: () => emit("menu-close")
|
|
2886
2923
|
});
|
|
2924
|
+
const triggerRef = ref(null);
|
|
2925
|
+
const panelRef = ref(null);
|
|
2926
|
+
function menuItems() {
|
|
2927
|
+
if (!panelRef.value) return [];
|
|
2928
|
+
return Array.from(panelRef.value.querySelectorAll("[role=\"menuitem\"]"));
|
|
2929
|
+
}
|
|
2930
|
+
function close(returnFocus = false) {
|
|
2931
|
+
closeDropdown();
|
|
2932
|
+
if (returnFocus) nextTick(() => triggerRef.value?.focus());
|
|
2933
|
+
}
|
|
2934
|
+
const { handleTriggerKeydown, handlePanelKeydown } = useMenuKeyboard({
|
|
2935
|
+
items: menuItems,
|
|
2936
|
+
isOpen: () => isOpen.value,
|
|
2937
|
+
open,
|
|
2938
|
+
close
|
|
2939
|
+
});
|
|
2887
2940
|
const initials = computed(() => {
|
|
2888
2941
|
if (props.userInitial) return props.userInitial.slice(0, 2).toUpperCase();
|
|
2889
2942
|
if (props.userName) {
|
|
@@ -2914,16 +2967,26 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
|
2914
2967
|
ref: rootRef,
|
|
2915
2968
|
class: "mint-avatar-menu"
|
|
2916
2969
|
}, [createElementVNode("button", {
|
|
2970
|
+
ref_key: "triggerRef",
|
|
2971
|
+
ref: triggerRef,
|
|
2917
2972
|
type: "button",
|
|
2918
2973
|
class: normalizeClass(["mint-avatar-menu__trigger", { "mint-avatar-menu__trigger--open": unref(isOpen) }]),
|
|
2919
2974
|
"aria-expanded": unref(isOpen),
|
|
2920
2975
|
"aria-haspopup": "menu",
|
|
2921
2976
|
title: __props.userName ? `${__props.userName} · Account menu` : "Account menu",
|
|
2922
|
-
onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"]))
|
|
2923
|
-
|
|
2924
|
-
|
|
2977
|
+
onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"])),
|
|
2978
|
+
onKeydown: _cache[1] || (_cache[1] = (...args) => unref(handleTriggerKeydown) && unref(handleTriggerKeydown)(...args))
|
|
2979
|
+
}, [createElementVNode("span", _hoisted_2$54, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$49, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 42, _hoisted_1$61), unref(isOpen) ? (openBlock(), createElementBlock("div", {
|
|
2980
|
+
key: 0,
|
|
2981
|
+
ref_key: "panelRef",
|
|
2982
|
+
ref: panelRef,
|
|
2983
|
+
class: "mint-avatar-menu__panel",
|
|
2984
|
+
role: "menu",
|
|
2985
|
+
onKeydown: _cache[2] || (_cache[2] = (...args) => unref(handlePanelKeydown) && unref(handlePanelKeydown)(...args))
|
|
2986
|
+
}, [
|
|
2987
|
+
__props.userName || __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_4$48, [__props.userName ? (openBlock(), createElementBlock("div", _hoisted_5$46, toDisplayString(__props.userName), 1)) : createCommentVNode("", true), __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_6$42, toDisplayString(__props.userEmail), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
|
|
2925
2988
|
renderSlot(_ctx.$slots, "items", { close: closeSilently }, () => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
|
|
2926
|
-
return openBlock(), createElementBlock(Fragment, { key: item.id }, [item.divider ? (openBlock(), createElementBlock("div",
|
|
2989
|
+
return openBlock(), createElementBlock(Fragment, { key: item.id }, [item.divider ? (openBlock(), createElementBlock("div", _hoisted_7$36)) : (openBlock(), createBlock(ActionItemInternal_default, {
|
|
2927
2990
|
key: 1,
|
|
2928
2991
|
href: item.href,
|
|
2929
2992
|
to: item.to,
|
|
@@ -2932,9 +2995,9 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
|
2932
2995
|
onClick: ($event) => handleSelect(item)
|
|
2933
2996
|
}, {
|
|
2934
2997
|
default: withCtx(() => [
|
|
2935
|
-
item.icon ? (openBlock(), createElementBlock("span",
|
|
2936
|
-
createElementVNode("span",
|
|
2937
|
-
item.rightLabel ? (openBlock(), createElementBlock("span",
|
|
2998
|
+
item.icon ? (openBlock(), createElementBlock("span", _hoisted_8$33, [renderSlot(_ctx.$slots, "item-icon", { item })])) : createCommentVNode("", true),
|
|
2999
|
+
createElementVNode("span", _hoisted_9$31, toDisplayString(item.label), 1),
|
|
3000
|
+
item.rightLabel ? (openBlock(), createElementBlock("span", _hoisted_10$28, toDisplayString(item.rightLabel), 1)) : createCommentVNode("", true)
|
|
2938
3001
|
]),
|
|
2939
3002
|
_: 2
|
|
2940
3003
|
}, 1032, [
|
|
@@ -2944,7 +3007,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
|
2944
3007
|
"onClick"
|
|
2945
3008
|
]))], 64);
|
|
2946
3009
|
}), 128))]),
|
|
2947
|
-
__props.showSignOut ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [_cache[
|
|
3010
|
+
__props.showSignOut ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [_cache[4] || (_cache[4] = createElementVNode("div", {
|
|
2948
3011
|
class: "mint-avatar-menu__divider",
|
|
2949
3012
|
role: "separator"
|
|
2950
3013
|
}, null, -1)), createElementVNode("button", {
|
|
@@ -2952,8 +3015,8 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
|
|
|
2952
3015
|
class: "mint-avatar-menu__item mint-avatar-menu__item--danger",
|
|
2953
3016
|
role: "menuitem",
|
|
2954
3017
|
onClick: handleSignOut
|
|
2955
|
-
}, [_cache[
|
|
2956
|
-
])) : createCommentVNode("", true)], 512);
|
|
3018
|
+
}, [_cache[3] || (_cache[3] = createStaticVNode("<span class=\"mint-avatar-menu__item-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"></path><polyline points=\"16 17 21 12 16 7\"></polyline><line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"></line></svg></span>", 1)), createElementVNode("span", _hoisted_11$26, toDisplayString(__props.signOutLabel), 1)])], 64)) : createCommentVNode("", true)
|
|
3019
|
+
], 544)) : createCommentVNode("", true)], 512);
|
|
2957
3020
|
};
|
|
2958
3021
|
}
|
|
2959
3022
|
});
|
|
@@ -3267,9 +3330,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
|
|
|
3267
3330
|
setup(__props, { emit: __emit }) {
|
|
3268
3331
|
/** Full application top bar with brand logo, page selector or plugin switcher, centered pill nav, experiment popover, and avatar menu. */
|
|
3269
3332
|
const props = __props;
|
|
3270
|
-
const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-
|
|
3271
|
-
const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-
|
|
3272
|
-
const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-
|
|
3333
|
+
const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-W3TYfnP9.js").then((n) => n.n));
|
|
3334
|
+
const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-CfOdh5Rm.js").then((n) => n.n));
|
|
3335
|
+
const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-DvIagrxY.js").then((n) => n.n));
|
|
3273
3336
|
const emit = __emit;
|
|
3274
3337
|
const settingsOpen = ref(false);
|
|
3275
3338
|
const { isIntegrated, plugin } = usePlatformContext();
|
|
@@ -4744,162 +4807,236 @@ var MobileSupportGate_default = /* @__PURE__ */ defineComponent({
|
|
|
4744
4807
|
}
|
|
4745
4808
|
});
|
|
4746
4809
|
//#endregion
|
|
4747
|
-
//#region src/components/
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
return {
|
|
4758
|
-
|
|
4759
|
-
...resolvedControlOptions.value.initialValues ?? {}
|
|
4810
|
+
//#region src/components/internal/WorkspaceControlsInternal.vue
|
|
4811
|
+
var WorkspaceControlsInternal_default = /* @__PURE__ */ defineComponent({
|
|
4812
|
+
__name: "WorkspaceControlsInternal",
|
|
4813
|
+
props: { controls: {} },
|
|
4814
|
+
setup(__props) {
|
|
4815
|
+
/**
|
|
4816
|
+
* Internal: renders PluginWorkspaceView's default (main content) slot bound to the
|
|
4817
|
+
* control-schema-derived scoped-slot payload (active view, values, component bindings/props).
|
|
4818
|
+
* Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
|
|
4819
|
+
*/
|
|
4820
|
+
return (_ctx, _cache) => {
|
|
4821
|
+
return renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(__props.controls)));
|
|
4760
4822
|
};
|
|
4761
|
-
});
|
|
4762
|
-
function replaceControlValues(values) {
|
|
4763
|
-
for (const key of Object.keys(internalControlValues)) if (!(key in values)) delete internalControlValues[key];
|
|
4764
|
-
Object.assign(internalControlValues, values);
|
|
4765
|
-
}
|
|
4766
|
-
function emitControlValues() {
|
|
4767
|
-
options.emitValues({ ...internalControlValues });
|
|
4768
|
-
}
|
|
4769
|
-
function syncResolvedControlValues() {
|
|
4770
|
-
syncingControlValues = true;
|
|
4771
|
-
replaceControlValues({
|
|
4772
|
-
...generatedControlDefaults.value,
|
|
4773
|
-
...externalControlValues.value === void 0 ? internalControlValues : externalControlValues.value
|
|
4774
|
-
});
|
|
4775
|
-
syncingControlValues = false;
|
|
4776
4823
|
}
|
|
4777
|
-
|
|
4778
|
-
syncingControlValues = true;
|
|
4779
|
-
replaceControlValues({
|
|
4780
|
-
...generatedControlDefaults.value,
|
|
4781
|
-
...values
|
|
4782
|
-
});
|
|
4783
|
-
syncingControlValues = false;
|
|
4784
|
-
emitControlValues();
|
|
4785
|
-
}
|
|
4786
|
-
const resolvedComponentBindings = computed(() => controlValuesToComponentBindings(internalControlValues, options.componentBindings() ?? resolvedModel.value?.componentBindings));
|
|
4787
|
-
const resolvedComponentBindingsById = computed(() => controlValuesToComponentBindingsById(internalControlValues, options.componentBindings() ?? resolvedModel.value?.componentBindings));
|
|
4788
|
-
const resolvedComponentProps = computed(() => {
|
|
4789
|
-
const mapping = options.componentProps() ?? resolvedModel.value?.componentProps;
|
|
4790
|
-
return mapping === void 0 ? {} : controlValuesToComponentProps(internalControlValues, mapping);
|
|
4791
|
-
});
|
|
4792
|
-
const resolvedComponentPropsById = computed(() => {
|
|
4793
|
-
const mappings = options.componentPropsById() ?? resolvedModel.value?.componentPropsById;
|
|
4794
|
-
if (mappings === void 0) return {};
|
|
4795
|
-
return Object.fromEntries(Object.entries(mappings).map(([id, mapping]) => [id, controlValuesToComponentProps(internalControlValues, mapping)]));
|
|
4796
|
-
});
|
|
4797
|
-
const generatedPillNav = computed(() => {
|
|
4798
|
-
if (!resolvedControls.value) return [];
|
|
4799
|
-
return controlsToViewItems(resolvedControls.value, resolvedControlOptions.value);
|
|
4800
|
-
});
|
|
4801
|
-
const generatedDefaultView = computed(() => {
|
|
4802
|
-
if (!resolvedControls.value) return "";
|
|
4803
|
-
return getDefaultControlView(resolvedControls.value, resolvedControlOptions.value);
|
|
4804
|
-
});
|
|
4805
|
-
syncResolvedControlValues();
|
|
4806
|
-
watch([generatedControlDefaults, externalControlValues], syncResolvedControlValues, { deep: true });
|
|
4807
|
-
watch(internalControlValues, () => {
|
|
4808
|
-
if (syncingControlValues) return;
|
|
4809
|
-
emitControlValues();
|
|
4810
|
-
}, {
|
|
4811
|
-
deep: true,
|
|
4812
|
-
flush: "sync"
|
|
4813
|
-
});
|
|
4814
|
-
return {
|
|
4815
|
-
resolvedModel,
|
|
4816
|
-
resolvedControls,
|
|
4817
|
-
resolvedControlOptions,
|
|
4818
|
-
generatedPillNav,
|
|
4819
|
-
generatedDefaultView,
|
|
4820
|
-
internalControlValues,
|
|
4821
|
-
resolvedComponentBindings,
|
|
4822
|
-
resolvedComponentBindingsById,
|
|
4823
|
-
resolvedComponentProps,
|
|
4824
|
-
resolvedComponentPropsById,
|
|
4825
|
-
handleControlValuesUpdate
|
|
4826
|
-
};
|
|
4827
|
-
}
|
|
4824
|
+
});
|
|
4828
4825
|
//#endregion
|
|
4829
|
-
//#region src/components/
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4826
|
+
//#region src/components/internal/WorkspaceShellInternal.vue
|
|
4827
|
+
var WorkspaceShellInternal_default = /* @__PURE__ */ defineComponent({
|
|
4828
|
+
__name: "WorkspaceShellInternal",
|
|
4829
|
+
props: { shell: {} },
|
|
4830
|
+
emits: [
|
|
4831
|
+
"page-selector-select",
|
|
4832
|
+
"pill-select",
|
|
4833
|
+
"pill-option-select",
|
|
4834
|
+
"plugin-switcher-select",
|
|
4835
|
+
"plugin-switcher-install",
|
|
4836
|
+
"account-menu-select",
|
|
4837
|
+
"sign-out",
|
|
4838
|
+
"notifications-click",
|
|
4839
|
+
"settings-values-change",
|
|
4840
|
+
"admin-click"
|
|
4841
|
+
],
|
|
4842
|
+
setup(__props, { emit: __emit }) {
|
|
4843
|
+
/**
|
|
4844
|
+
* Internal: AppLayout + AppTopBar for PluginWorkspaceView, driven by a single `shell` model.
|
|
4845
|
+
* Owns the responsive/collapse layout props and the top bar's default rendering; the caller
|
|
4846
|
+
* decides whether to override the `topbar`/`sidebar` slots and supplies the sidebar content.
|
|
4847
|
+
* Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
|
|
4848
|
+
*/
|
|
4849
|
+
const emit = __emit;
|
|
4850
|
+
function handlePillOptionSelect(option, item) {
|
|
4851
|
+
emit("pill-option-select", option, item);
|
|
4842
4852
|
}
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4853
|
+
return (_ctx, _cache) => {
|
|
4854
|
+
return openBlock(), createBlock(AppLayout_default, {
|
|
4855
|
+
class: "mint-plugin-workspace-view",
|
|
4856
|
+
"sidebar-position": __props.shell.sidebarPosition,
|
|
4857
|
+
"sidebar-width": __props.shell.sidebarWidth,
|
|
4858
|
+
floating: __props.shell.floating,
|
|
4859
|
+
"responsive-sidebar": __props.shell.responsiveSidebar,
|
|
4860
|
+
"sidebar-toggle-label": __props.shell.sidebarToggleLabel,
|
|
4861
|
+
"sidebar-close-label": __props.shell.sidebarCloseLabel
|
|
4862
|
+
}, createSlots({
|
|
4863
|
+
topbar: withCtx(() => [renderSlot(_ctx.$slots, "topbar", normalizeProps(guardReactiveProps(__props.shell.controls)), () => [createVNode(AppTopBar_default, {
|
|
4864
|
+
title: __props.shell.title,
|
|
4865
|
+
subtitle: __props.shell.subtitle,
|
|
4866
|
+
variant: __props.shell.topBarVariant,
|
|
4867
|
+
"home-path": __props.shell.homePath,
|
|
4868
|
+
"show-logo": __props.shell.showLogo,
|
|
4869
|
+
"page-selector": __props.shell.pageSelector,
|
|
4870
|
+
"current-page-selector-id": __props.shell.currentPageSelectorId,
|
|
4871
|
+
"plugin-switcher": __props.shell.pluginSwitcher,
|
|
4872
|
+
"pill-nav": __props.shell.pillNav,
|
|
4873
|
+
"current-pill-id": __props.shell.currentPillId,
|
|
4874
|
+
"show-theme-toggle": __props.shell.showThemeToggle,
|
|
4875
|
+
"show-settings": __props.shell.showSettings,
|
|
4876
|
+
"settings-config": __props.shell.settingsConfig,
|
|
4877
|
+
"show-standalone-label": __props.shell.showStandaloneLabel,
|
|
4878
|
+
"standalone-label": __props.shell.standaloneLabel,
|
|
4879
|
+
"account-menu": __props.shell.accountMenu,
|
|
4880
|
+
"show-notifications": __props.shell.showNotifications,
|
|
4881
|
+
"has-notification-dot": __props.shell.hasNotificationDot,
|
|
4882
|
+
"show-admin": __props.shell.showAdmin,
|
|
4883
|
+
"admin-path": __props.shell.adminPath,
|
|
4884
|
+
"user-name": __props.shell.userName,
|
|
4885
|
+
"user-initial": __props.shell.userInitial,
|
|
4886
|
+
"user-email": __props.shell.userEmail,
|
|
4887
|
+
onPageSelectorSelect: _cache[0] || (_cache[0] = ($event) => emit("page-selector-select", $event)),
|
|
4888
|
+
onPillSelect: _cache[1] || (_cache[1] = ($event) => emit("pill-select", $event)),
|
|
4889
|
+
onPillOptionSelect: handlePillOptionSelect,
|
|
4890
|
+
onPluginSwitcherSelect: _cache[2] || (_cache[2] = ($event) => emit("plugin-switcher-select", $event)),
|
|
4891
|
+
onPluginSwitcherInstall: _cache[3] || (_cache[3] = ($event) => emit("plugin-switcher-install")),
|
|
4892
|
+
onAccountMenuSelect: _cache[4] || (_cache[4] = ($event) => emit("account-menu-select", $event)),
|
|
4893
|
+
onSignOut: _cache[5] || (_cache[5] = ($event) => emit("sign-out")),
|
|
4894
|
+
onNotificationsClick: _cache[6] || (_cache[6] = ($event) => emit("notifications-click")),
|
|
4895
|
+
onSettingsValuesChange: _cache[7] || (_cache[7] = ($event) => emit("settings-values-change", $event)),
|
|
4896
|
+
onAdminClick: _cache[8] || (_cache[8] = ($event) => emit("admin-click"))
|
|
4897
|
+
}, createSlots({ _: 2 }, [renderList(__props.shell.topBarSlotNames, (slotName) => {
|
|
4898
|
+
return {
|
|
4899
|
+
name: slotName,
|
|
4900
|
+
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
|
|
4901
|
+
};
|
|
4902
|
+
})]), 1032, [
|
|
4903
|
+
"title",
|
|
4904
|
+
"subtitle",
|
|
4905
|
+
"variant",
|
|
4906
|
+
"home-path",
|
|
4907
|
+
"show-logo",
|
|
4908
|
+
"page-selector",
|
|
4909
|
+
"current-page-selector-id",
|
|
4910
|
+
"plugin-switcher",
|
|
4911
|
+
"pill-nav",
|
|
4912
|
+
"current-pill-id",
|
|
4913
|
+
"show-theme-toggle",
|
|
4914
|
+
"show-settings",
|
|
4915
|
+
"settings-config",
|
|
4916
|
+
"show-standalone-label",
|
|
4917
|
+
"standalone-label",
|
|
4918
|
+
"account-menu",
|
|
4919
|
+
"show-notifications",
|
|
4920
|
+
"has-notification-dot",
|
|
4921
|
+
"show-admin",
|
|
4922
|
+
"admin-path",
|
|
4923
|
+
"user-name",
|
|
4924
|
+
"user-initial",
|
|
4925
|
+
"user-email"
|
|
4926
|
+
])])]),
|
|
4927
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(__props.shell.controls)))]),
|
|
4928
|
+
_: 2
|
|
4929
|
+
}, [__props.shell.hasSidebarSurface ? {
|
|
4930
|
+
name: "sidebar",
|
|
4931
|
+
fn: withCtx(() => [renderSlot(_ctx.$slots, "sidebar", normalizeProps(guardReactiveProps(__props.shell.controls)))]),
|
|
4932
|
+
key: "0"
|
|
4933
|
+
} : void 0]), 1032, [
|
|
4934
|
+
"sidebar-position",
|
|
4935
|
+
"sidebar-width",
|
|
4936
|
+
"floating",
|
|
4937
|
+
"responsive-sidebar",
|
|
4938
|
+
"sidebar-toggle-label",
|
|
4939
|
+
"sidebar-close-label"
|
|
4940
|
+
]);
|
|
4941
|
+
};
|
|
4856
4942
|
}
|
|
4857
|
-
|
|
4858
|
-
resolvedPillNav,
|
|
4859
|
-
firstConfiguredViewId,
|
|
4860
|
-
resolvedActiveView,
|
|
4861
|
-
resolvedCurrentPillId,
|
|
4862
|
-
resolvedCurrentPageSelectorId,
|
|
4863
|
-
setActiveView,
|
|
4864
|
-
handlePageSelectorSelect,
|
|
4865
|
-
handlePillSelect
|
|
4866
|
-
};
|
|
4867
|
-
}
|
|
4868
|
-
function firstItemId(items) {
|
|
4869
|
-
const item = items?.[0];
|
|
4870
|
-
if (item === void 0) return void 0;
|
|
4871
|
-
return typeof item === "string" ? item : item.id;
|
|
4872
|
-
}
|
|
4943
|
+
});
|
|
4873
4944
|
//#endregion
|
|
4874
|
-
//#region src/components/
|
|
4875
|
-
var
|
|
4876
|
-
"
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4945
|
+
//#region src/components/internal/WorkspaceSidebarInternal.vue
|
|
4946
|
+
var WorkspaceSidebarInternal_default = /* @__PURE__ */ defineComponent({
|
|
4947
|
+
__name: "WorkspaceSidebarInternal",
|
|
4948
|
+
props: { sidebar: {} },
|
|
4949
|
+
emits: [
|
|
4950
|
+
"update:modelValue",
|
|
4951
|
+
"update:collapsed",
|
|
4952
|
+
"update:toggle",
|
|
4953
|
+
"section-action",
|
|
4954
|
+
"form-submit",
|
|
4955
|
+
"form-cancel"
|
|
4956
|
+
],
|
|
4957
|
+
setup(__props) {
|
|
4958
|
+
/**
|
|
4959
|
+
* Internal: AppSidebar for PluginWorkspaceView, driven by a single `sidebar` model covering
|
|
4960
|
+
* chrome, panels/forms, collapse behavior, and the compact control-schema props that drive
|
|
4961
|
+
* AppSidebar's auto-generated form.
|
|
4962
|
+
* Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
|
|
4963
|
+
*/
|
|
4964
|
+
return (_ctx, _cache) => {
|
|
4965
|
+
return openBlock(), createBlock(AppSidebar_default, {
|
|
4966
|
+
title: __props.sidebar.title,
|
|
4967
|
+
subtitle: __props.sidebar.subtitle,
|
|
4968
|
+
badge: __props.sidebar.badge,
|
|
4969
|
+
variant: __props.sidebar.variant,
|
|
4970
|
+
panels: __props.sidebar.panels,
|
|
4971
|
+
"active-view": __props.sidebar.activeView,
|
|
4972
|
+
floating: __props.sidebar.floating,
|
|
4973
|
+
dense: __props.sidebar.dense,
|
|
4974
|
+
width: __props.sidebar.width,
|
|
4975
|
+
side: __props.sidebar.side,
|
|
4976
|
+
forms: __props.sidebar.forms,
|
|
4977
|
+
"content-id": __props.sidebar.contentId,
|
|
4978
|
+
"show-when-empty": __props.sidebar.showWhenEmpty,
|
|
4979
|
+
model: __props.sidebar.model,
|
|
4980
|
+
controls: __props.sidebar.controlSchema,
|
|
4981
|
+
"control-options": __props.sidebar.controlOptions,
|
|
4982
|
+
values: __props.sidebar.values,
|
|
4983
|
+
"form-enhancements": __props.sidebar.formEnhancements,
|
|
4984
|
+
"show-form-actions": __props.sidebar.showFormActions,
|
|
4985
|
+
"form-loading": __props.sidebar.formLoading,
|
|
4986
|
+
"form-disabled": __props.sidebar.formDisabled,
|
|
4987
|
+
"form-readonly": __props.sidebar.formReadonly,
|
|
4988
|
+
"form-size": __props.sidebar.formSize,
|
|
4989
|
+
collapsible: __props.sidebar.collapsible,
|
|
4990
|
+
collapsed: __props.sidebar.collapsed,
|
|
4991
|
+
"default-collapsed": __props.sidebar.defaultCollapsed,
|
|
4992
|
+
"collapsed-width": __props.sidebar.collapsedWidth,
|
|
4993
|
+
"collapse-button-label": __props.sidebar.collapseButtonLabel,
|
|
4994
|
+
"expand-button-label": __props.sidebar.expandButtonLabel,
|
|
4995
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event)),
|
|
4996
|
+
"onUpdate:collapsed": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:collapsed", $event)),
|
|
4997
|
+
"onUpdate:toggle": _cache[2] || (_cache[2] = (sectionId, value) => _ctx.$emit("update:toggle", sectionId, value)),
|
|
4998
|
+
onSectionAction: _cache[3] || (_cache[3] = (sectionId, actionId) => _ctx.$emit("section-action", sectionId, actionId)),
|
|
4999
|
+
onFormSubmit: _cache[4] || (_cache[4] = (sectionId, values) => _ctx.$emit("form-submit", sectionId, values)),
|
|
5000
|
+
onFormCancel: _cache[5] || (_cache[5] = ($event) => _ctx.$emit("form-cancel", $event))
|
|
5001
|
+
}, createSlots({ _: 2 }, [renderList(__props.sidebar.slotNames, (slotName) => {
|
|
5002
|
+
return {
|
|
5003
|
+
name: slotName,
|
|
5004
|
+
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
|
|
5005
|
+
};
|
|
5006
|
+
})]), 1032, [
|
|
5007
|
+
"title",
|
|
5008
|
+
"subtitle",
|
|
5009
|
+
"badge",
|
|
5010
|
+
"variant",
|
|
5011
|
+
"panels",
|
|
5012
|
+
"active-view",
|
|
5013
|
+
"floating",
|
|
5014
|
+
"dense",
|
|
5015
|
+
"width",
|
|
5016
|
+
"side",
|
|
5017
|
+
"forms",
|
|
5018
|
+
"content-id",
|
|
5019
|
+
"show-when-empty",
|
|
5020
|
+
"model",
|
|
5021
|
+
"controls",
|
|
5022
|
+
"control-options",
|
|
5023
|
+
"values",
|
|
5024
|
+
"form-enhancements",
|
|
5025
|
+
"show-form-actions",
|
|
5026
|
+
"form-loading",
|
|
5027
|
+
"form-disabled",
|
|
5028
|
+
"form-readonly",
|
|
5029
|
+
"form-size",
|
|
5030
|
+
"collapsible",
|
|
5031
|
+
"collapsed",
|
|
5032
|
+
"default-collapsed",
|
|
5033
|
+
"collapsed-width",
|
|
5034
|
+
"collapse-button-label",
|
|
5035
|
+
"expand-button-label"
|
|
5036
|
+
]);
|
|
5037
|
+
};
|
|
5038
|
+
}
|
|
5039
|
+
});
|
|
4903
5040
|
//#endregion
|
|
4904
5041
|
//#region src/components/PluginWorkspaceView.vue
|
|
4905
5042
|
var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
@@ -5080,55 +5217,11 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
|
5080
5217
|
saveDisabled: computed(() => props.experimentSaveDisabled),
|
|
5081
5218
|
saveDisabledMessage: computed(() => props.experimentSaveDisabledMessage)
|
|
5082
5219
|
});
|
|
5083
|
-
const
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
controls: () => props.controls,
|
|
5088
|
-
controlOptions: () => props.controlOptions,
|
|
5089
|
-
modelValue: () => props.modelValue,
|
|
5090
|
-
values: () => props.values,
|
|
5091
|
-
componentBindings: () => props.componentBindings,
|
|
5092
|
-
componentProps: () => props.componentProps,
|
|
5093
|
-
componentPropsById: () => props.componentPropsById,
|
|
5094
|
-
emitValues: (values) => {
|
|
5095
|
-
emit("update:modelValue", values);
|
|
5096
|
-
emit("update:values", values);
|
|
5097
|
-
}
|
|
5220
|
+
const { shell, sidebar, controls, handleControlValuesUpdate, handlePageSelectorSelect, handlePillSelect } = usePluginWorkspace({
|
|
5221
|
+
props,
|
|
5222
|
+
slots,
|
|
5223
|
+
emit
|
|
5098
5224
|
});
|
|
5099
|
-
const { resolvedPillNav, resolvedActiveView, resolvedCurrentPillId, resolvedCurrentPageSelectorId, setActiveView, handlePageSelectorSelect, handlePillSelect } = usePluginWorkspaceNavigation({
|
|
5100
|
-
activeView: () => props.activeView,
|
|
5101
|
-
defaultActiveView: () => props.defaultActiveView,
|
|
5102
|
-
currentPillId: () => props.currentPillId,
|
|
5103
|
-
currentPageSelectorId: () => props.currentPageSelectorId,
|
|
5104
|
-
pillNav: () => props.pillNav,
|
|
5105
|
-
pageSelector: () => props.pageSelector,
|
|
5106
|
-
panelIds: () => Object.keys(props.panels),
|
|
5107
|
-
generatedPillNav,
|
|
5108
|
-
generatedDefaultView,
|
|
5109
|
-
emitActiveView: (viewId) => emit("update:activeView", viewId),
|
|
5110
|
-
emitPageSelectorSelect: (page) => emit("page-selector-select", page),
|
|
5111
|
-
emitPillSelect: (item) => emit("pill-select", item)
|
|
5112
|
-
});
|
|
5113
|
-
const hasSidebarSurface = computed(() => {
|
|
5114
|
-
return hasPluginWorkspaceSidebarSurface({
|
|
5115
|
-
showSidebar: props.showSidebar,
|
|
5116
|
-
panels: props.panels,
|
|
5117
|
-
forms: props.forms,
|
|
5118
|
-
model: props.model,
|
|
5119
|
-
controls: props.controls,
|
|
5120
|
-
showSidebarWhenEmpty: props.showSidebarWhenEmpty,
|
|
5121
|
-
sidebarContentId: props.sidebarContentId,
|
|
5122
|
-
sidebarTitle: props.sidebarTitle,
|
|
5123
|
-
sidebarSubtitle: props.sidebarSubtitle,
|
|
5124
|
-
sidebarBadge: props.sidebarBadge,
|
|
5125
|
-
hasSidebarSlot: Boolean(slots.sidebar),
|
|
5126
|
-
sidebarSlotCount: sidebarSlotNames.value.length
|
|
5127
|
-
});
|
|
5128
|
-
});
|
|
5129
|
-
function handlePillOptionSelect(option, item) {
|
|
5130
|
-
emit("pill-option-select", option, item);
|
|
5131
|
-
}
|
|
5132
5225
|
function handleToggle(sectionId, value) {
|
|
5133
5226
|
emit("update:toggle", sectionId, value);
|
|
5134
5227
|
}
|
|
@@ -5139,189 +5232,58 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
|
5139
5232
|
emit("form-cancel", sectionId);
|
|
5140
5233
|
}
|
|
5141
5234
|
return (_ctx, _cache) => {
|
|
5142
|
-
return openBlock(), createBlock(
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
"
|
|
5148
|
-
"
|
|
5149
|
-
"
|
|
5235
|
+
return openBlock(), createBlock(WorkspaceShellInternal_default, {
|
|
5236
|
+
shell: unref(shell),
|
|
5237
|
+
onPageSelectorSelect: unref(handlePageSelectorSelect),
|
|
5238
|
+
onPillSelect: unref(handlePillSelect),
|
|
5239
|
+
onPillOptionSelect: _cache[2] || (_cache[2] = (option, item) => emit("pill-option-select", option, item)),
|
|
5240
|
+
onPluginSwitcherSelect: _cache[3] || (_cache[3] = (plugin) => emit("plugin-switcher-select", plugin)),
|
|
5241
|
+
onPluginSwitcherInstall: _cache[4] || (_cache[4] = ($event) => emit("plugin-switcher-install")),
|
|
5242
|
+
onAccountMenuSelect: _cache[5] || (_cache[5] = (item) => emit("account-menu-select", item)),
|
|
5243
|
+
onSignOut: _cache[6] || (_cache[6] = ($event) => emit("sign-out")),
|
|
5244
|
+
onNotificationsClick: _cache[7] || (_cache[7] = ($event) => emit("notifications-click")),
|
|
5245
|
+
onSettingsValuesChange: _cache[8] || (_cache[8] = ($event) => emit("settings-values-change", $event)),
|
|
5246
|
+
onAdminClick: _cache[9] || (_cache[9] = ($event) => emit("admin-click"))
|
|
5150
5247
|
}, createSlots({
|
|
5151
|
-
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
componentBindings: unref(resolvedComponentBindings),
|
|
5156
|
-
componentBindingsById: unref(resolvedComponentBindingsById),
|
|
5157
|
-
componentProps: unref(resolvedComponentProps),
|
|
5158
|
-
componentPropsById: unref(resolvedComponentPropsById)
|
|
5159
|
-
}, () => [createVNode(AppTopBar_default, {
|
|
5160
|
-
title: __props.title,
|
|
5161
|
-
subtitle: __props.subtitle,
|
|
5162
|
-
variant: __props.topBarVariant,
|
|
5163
|
-
"home-path": __props.homePath,
|
|
5164
|
-
"show-logo": __props.showLogo,
|
|
5165
|
-
"page-selector": __props.pageSelector,
|
|
5166
|
-
"current-page-selector-id": unref(resolvedCurrentPageSelectorId),
|
|
5167
|
-
"plugin-switcher": __props.pluginSwitcher,
|
|
5168
|
-
"pill-nav": unref(resolvedPillNav),
|
|
5169
|
-
"current-pill-id": unref(resolvedCurrentPillId),
|
|
5170
|
-
"show-theme-toggle": __props.showThemeToggle,
|
|
5171
|
-
"show-settings": __props.showSettings,
|
|
5172
|
-
"settings-config": __props.settingsConfig,
|
|
5173
|
-
"show-standalone-label": __props.showStandaloneLabel,
|
|
5174
|
-
"standalone-label": __props.standaloneLabel,
|
|
5175
|
-
"account-menu": __props.accountMenu,
|
|
5176
|
-
"show-notifications": __props.showNotifications,
|
|
5177
|
-
"has-notification-dot": __props.hasNotificationDot,
|
|
5178
|
-
"show-admin": __props.showAdmin,
|
|
5179
|
-
"admin-path": __props.adminPath,
|
|
5180
|
-
"user-name": __props.userName,
|
|
5181
|
-
"user-initial": __props.userInitial,
|
|
5182
|
-
"user-email": __props.userEmail,
|
|
5183
|
-
onPageSelectorSelect: unref(handlePageSelectorSelect),
|
|
5184
|
-
onPillSelect: unref(handlePillSelect),
|
|
5185
|
-
onPillOptionSelect: handlePillOptionSelect,
|
|
5186
|
-
onPluginSwitcherSelect: _cache[0] || (_cache[0] = ($event) => emit("plugin-switcher-select", $event)),
|
|
5187
|
-
onPluginSwitcherInstall: _cache[1] || (_cache[1] = ($event) => emit("plugin-switcher-install")),
|
|
5188
|
-
onAccountMenuSelect: _cache[2] || (_cache[2] = ($event) => emit("account-menu-select", $event)),
|
|
5189
|
-
onSignOut: _cache[3] || (_cache[3] = ($event) => emit("sign-out")),
|
|
5190
|
-
onNotificationsClick: _cache[4] || (_cache[4] = ($event) => emit("notifications-click")),
|
|
5191
|
-
onSettingsValuesChange: _cache[5] || (_cache[5] = ($event) => emit("settings-values-change", $event)),
|
|
5192
|
-
onAdminClick: _cache[6] || (_cache[6] = ($event) => emit("admin-click"))
|
|
5193
|
-
}, createSlots({ _: 2 }, [renderList(topBarSlotNames.value, (slotName) => {
|
|
5194
|
-
return {
|
|
5195
|
-
name: slotName,
|
|
5196
|
-
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
|
|
5197
|
-
};
|
|
5198
|
-
})]), 1032, [
|
|
5199
|
-
"title",
|
|
5200
|
-
"subtitle",
|
|
5201
|
-
"variant",
|
|
5202
|
-
"home-path",
|
|
5203
|
-
"show-logo",
|
|
5204
|
-
"page-selector",
|
|
5205
|
-
"current-page-selector-id",
|
|
5206
|
-
"plugin-switcher",
|
|
5207
|
-
"pill-nav",
|
|
5208
|
-
"current-pill-id",
|
|
5209
|
-
"show-theme-toggle",
|
|
5210
|
-
"show-settings",
|
|
5211
|
-
"settings-config",
|
|
5212
|
-
"show-standalone-label",
|
|
5213
|
-
"standalone-label",
|
|
5214
|
-
"account-menu",
|
|
5215
|
-
"show-notifications",
|
|
5216
|
-
"has-notification-dot",
|
|
5217
|
-
"show-admin",
|
|
5218
|
-
"admin-path",
|
|
5219
|
-
"user-name",
|
|
5220
|
-
"user-initial",
|
|
5221
|
-
"user-email",
|
|
5222
|
-
"onPageSelectorSelect",
|
|
5223
|
-
"onPillSelect"
|
|
5224
|
-
])])]),
|
|
5225
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, "default", {
|
|
5226
|
-
activeView: unref(resolvedActiveView),
|
|
5227
|
-
setActiveView: unref(setActiveView),
|
|
5228
|
-
values: unref(internalControlValues),
|
|
5229
|
-
componentBindings: unref(resolvedComponentBindings),
|
|
5230
|
-
componentBindingsById: unref(resolvedComponentBindingsById),
|
|
5231
|
-
componentProps: unref(resolvedComponentProps),
|
|
5232
|
-
componentPropsById: unref(resolvedComponentPropsById)
|
|
5233
|
-
})]),
|
|
5248
|
+
default: withCtx(() => [createVNode(WorkspaceControlsInternal_default, { controls: unref(controls) }, {
|
|
5249
|
+
default: withCtx((controlsScope) => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(controlsScope)))]),
|
|
5250
|
+
_: 3
|
|
5251
|
+
}, 8, ["controls"])]),
|
|
5234
5252
|
_: 2
|
|
5235
|
-
}, [
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
componentBindingsById: unref(resolvedComponentBindingsById),
|
|
5243
|
-
componentProps: unref(resolvedComponentProps),
|
|
5244
|
-
componentPropsById: unref(resolvedComponentPropsById)
|
|
5245
|
-
}, () => [createVNode(AppSidebar_default, {
|
|
5246
|
-
title: __props.sidebarTitle,
|
|
5247
|
-
subtitle: __props.sidebarSubtitle,
|
|
5248
|
-
badge: __props.sidebarBadge,
|
|
5249
|
-
variant: __props.sidebarVariant,
|
|
5250
|
-
panels: __props.panels,
|
|
5251
|
-
"active-view": unref(resolvedActiveView),
|
|
5252
|
-
floating: false,
|
|
5253
|
-
dense: __props.dense,
|
|
5254
|
-
width: __props.sidebarWidth,
|
|
5255
|
-
side: __props.sidebarPosition,
|
|
5256
|
-
forms: __props.forms,
|
|
5257
|
-
"content-id": __props.sidebarContentId,
|
|
5258
|
-
"show-when-empty": __props.showSidebarWhenEmpty || __props.sidebarContentId !== void 0,
|
|
5259
|
-
model: __props.model,
|
|
5260
|
-
controls: __props.controls,
|
|
5261
|
-
"control-options": __props.controlOptions,
|
|
5262
|
-
values: unref(internalControlValues),
|
|
5263
|
-
"form-enhancements": __props.formEnhancements,
|
|
5264
|
-
"show-form-actions": __props.showFormActions,
|
|
5265
|
-
"form-loading": __props.formLoading,
|
|
5266
|
-
"form-disabled": __props.formDisabled,
|
|
5267
|
-
"form-readonly": __props.formReadonly,
|
|
5268
|
-
"form-size": __props.formSize,
|
|
5269
|
-
collapsible: __props.sidebarCollapsible,
|
|
5270
|
-
collapsed: __props.sidebarCollapsed,
|
|
5271
|
-
"default-collapsed": __props.defaultSidebarCollapsed,
|
|
5272
|
-
"collapsed-width": __props.sidebarCollapsedWidth,
|
|
5273
|
-
"collapse-button-label": __props.sidebarCollapseButtonLabel,
|
|
5274
|
-
"expand-button-label": __props.sidebarExpandButtonLabel,
|
|
5275
|
-
"onUpdate:modelValue": unref(handleControlValuesUpdate),
|
|
5276
|
-
"onUpdate:collapsed": _cache[7] || (_cache[7] = ($event) => emit("update:sidebarCollapsed", $event)),
|
|
5277
|
-
"onUpdate:toggle": handleToggle,
|
|
5278
|
-
onSectionAction: _cache[8] || (_cache[8] = (sectionId, actionId) => emit("section-action", sectionId, actionId)),
|
|
5279
|
-
onFormSubmit: handleFormSubmit,
|
|
5280
|
-
onFormCancel: handleFormCancel
|
|
5281
|
-
}, createSlots({ _: 2 }, [renderList(sidebarSlotNames.value, (slotName) => {
|
|
5253
|
+
}, [
|
|
5254
|
+
unref(slots).topbar ? {
|
|
5255
|
+
name: "topbar",
|
|
5256
|
+
fn: withCtx((scope) => [renderSlot(_ctx.$slots, "topbar", normalizeProps(guardReactiveProps(scope)))]),
|
|
5257
|
+
key: "0"
|
|
5258
|
+
} : void 0,
|
|
5259
|
+
renderList(unref(shell).topBarSlotNames, (slotName) => {
|
|
5282
5260
|
return {
|
|
5283
5261
|
name: slotName,
|
|
5284
5262
|
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
|
|
5285
5263
|
};
|
|
5286
|
-
})
|
|
5287
|
-
|
|
5288
|
-
"
|
|
5289
|
-
"
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
5293
|
-
|
|
5294
|
-
|
|
5295
|
-
|
|
5296
|
-
|
|
5297
|
-
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
"
|
|
5303
|
-
"
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
"collapsible",
|
|
5310
|
-
"collapsed",
|
|
5311
|
-
"default-collapsed",
|
|
5312
|
-
"collapsed-width",
|
|
5313
|
-
"collapse-button-label",
|
|
5314
|
-
"expand-button-label",
|
|
5315
|
-
"onUpdate:modelValue"
|
|
5316
|
-
])])]),
|
|
5317
|
-
key: "0"
|
|
5318
|
-
} : void 0]), 1032, [
|
|
5319
|
-
"sidebar-position",
|
|
5320
|
-
"sidebar-width",
|
|
5321
|
-
"floating",
|
|
5322
|
-
"responsive-sidebar",
|
|
5323
|
-
"sidebar-toggle-label",
|
|
5324
|
-
"sidebar-close-label"
|
|
5264
|
+
}),
|
|
5265
|
+
unref(shell).hasSidebarSurface ? {
|
|
5266
|
+
name: "sidebar",
|
|
5267
|
+
fn: withCtx((scope) => [renderSlot(_ctx.$slots, "sidebar", normalizeProps(guardReactiveProps(scope)), () => [createVNode(WorkspaceSidebarInternal_default, {
|
|
5268
|
+
sidebar: unref(sidebar),
|
|
5269
|
+
"onUpdate:modelValue": unref(handleControlValuesUpdate),
|
|
5270
|
+
"onUpdate:collapsed": _cache[0] || (_cache[0] = ($event) => emit("update:sidebarCollapsed", $event)),
|
|
5271
|
+
"onUpdate:toggle": handleToggle,
|
|
5272
|
+
onSectionAction: _cache[1] || (_cache[1] = (sectionId, actionId) => emit("section-action", sectionId, actionId)),
|
|
5273
|
+
onFormSubmit: handleFormSubmit,
|
|
5274
|
+
onFormCancel: handleFormCancel
|
|
5275
|
+
}, createSlots({ _: 2 }, [renderList(unref(sidebar).slotNames, (slotName) => {
|
|
5276
|
+
return {
|
|
5277
|
+
name: slotName,
|
|
5278
|
+
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
|
|
5279
|
+
};
|
|
5280
|
+
})]), 1032, ["sidebar", "onUpdate:modelValue"])])]),
|
|
5281
|
+
key: "1"
|
|
5282
|
+
} : void 0
|
|
5283
|
+
]), 1032, [
|
|
5284
|
+
"shell",
|
|
5285
|
+
"onPageSelectorSelect",
|
|
5286
|
+
"onPillSelect"
|
|
5325
5287
|
]);
|
|
5326
5288
|
};
|
|
5327
5289
|
}
|
|
@@ -7035,6 +6997,18 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
7035
6997
|
if (e.key === "Escape") close();
|
|
7036
6998
|
}
|
|
7037
6999
|
useEventListener(() => document, "keydown", handleKeydown);
|
|
7000
|
+
const containerRef = ref(null);
|
|
7001
|
+
const trapActive = ref(false);
|
|
7002
|
+
useFocusTrap({
|
|
7003
|
+
containerRef,
|
|
7004
|
+
active: trapActive
|
|
7005
|
+
});
|
|
7006
|
+
onMounted(() => {
|
|
7007
|
+
trapActive.value = true;
|
|
7008
|
+
});
|
|
7009
|
+
onBeforeUnmount(() => {
|
|
7010
|
+
trapActive.value = false;
|
|
7011
|
+
});
|
|
7038
7012
|
const sampleTypeButtons = [
|
|
7039
7013
|
{
|
|
7040
7014
|
type: "sample",
|
|
@@ -7062,8 +7036,11 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
7062
7036
|
class: "mint-well-edit-popup__backdrop",
|
|
7063
7037
|
onClick: close
|
|
7064
7038
|
}), createElementVNode("div", {
|
|
7039
|
+
ref_key: "containerRef",
|
|
7040
|
+
ref: containerRef,
|
|
7065
7041
|
class: "mint-well-edit-popup",
|
|
7066
7042
|
style: normalizeStyle(popupStyle.value),
|
|
7043
|
+
tabindex: "-1",
|
|
7067
7044
|
onClick: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop"]))
|
|
7068
7045
|
}, [
|
|
7069
7046
|
createElementVNode("div", _hoisted_1$42, [createElementVNode("div", _hoisted_2$38, [createElementVNode("span", _hoisted_3$34, toDisplayString(__props.wellId), 1), _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-well-edit-popup__title" }, "Edit Well", -1))]), createElementVNode("button", {
|
|
@@ -12529,9 +12506,6 @@ var ComponentBindingRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper
|
|
|
12529
12506
|
default: return base;
|
|
12530
12507
|
}
|
|
12531
12508
|
}
|
|
12532
|
-
function isRecord(value) {
|
|
12533
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12534
|
-
}
|
|
12535
12509
|
return (_ctx, _cache) => {
|
|
12536
12510
|
return openBlock(), createElementBlock("div", { class: normalizeClass(rendererClasses.value) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(renderableBindings.value, (renderableBinding) => {
|
|
12537
12511
|
return openBlock(), createElementBlock("section", {
|
|
@@ -12544,7 +12518,140 @@ var ComponentBindingRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper
|
|
|
12544
12518
|
}), 128)), renderableBindings.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_8$15, toDisplayString(__props.emptyText), 1)) : createCommentVNode("", true)], 2);
|
|
12545
12519
|
};
|
|
12546
12520
|
}
|
|
12547
|
-
}), [["__scopeId", "data-v-
|
|
12521
|
+
}), [["__scopeId", "data-v-e6c3e169"]]);
|
|
12522
|
+
//#endregion
|
|
12523
|
+
//#region src/composables/workspaceRecipes.ts
|
|
12524
|
+
/**
|
|
12525
|
+
* Merges `initialValues`/external `modelValue`/`values` on top of a base
|
|
12526
|
+
* `ControlWorkspaceOptions.initialValues`, matching the layering FormBuilder expects: base
|
|
12527
|
+
* defaults, then caller-supplied initial values, then live external values win last. Shared by
|
|
12528
|
+
* {@link controlWorkspaceProps} and {@link bioTemplatePresetWorkspaceProps} so both "generate a
|
|
12529
|
+
* workspace from options, initialValues, and v-model" views merge options identically.
|
|
12530
|
+
*/
|
|
12531
|
+
function resolveControlOptionsWithExternalValues(base, initialValues, externalValues) {
|
|
12532
|
+
if (initialValues === void 0 && externalValues === void 0) return base;
|
|
12533
|
+
return {
|
|
12534
|
+
...base,
|
|
12535
|
+
initialValues: {
|
|
12536
|
+
...base.initialValues ?? {},
|
|
12537
|
+
...initialValues ?? {},
|
|
12538
|
+
...externalValues ?? {}
|
|
12539
|
+
}
|
|
12540
|
+
};
|
|
12541
|
+
}
|
|
12542
|
+
/**
|
|
12543
|
+
* Resolves ControlWorkspaceView's `model`/`controls`/`controlOptions`/`initialValues`/
|
|
12544
|
+
* `modelValue`/`values` props into the schema + options pair `useControlWorkspace()` needs.
|
|
12545
|
+
* Pure and framework-free so callers wrap each field in their own `computed()`.
|
|
12546
|
+
*
|
|
12547
|
+
* @example Recommended
|
|
12548
|
+
* ```ts
|
|
12549
|
+
* const resolved = computed(() => controlWorkspaceProps(props))
|
|
12550
|
+
* const resolvedControls = computed(() => resolved.value.resolvedControls)
|
|
12551
|
+
* ```
|
|
12552
|
+
*/
|
|
12553
|
+
function controlWorkspaceProps(props) {
|
|
12554
|
+
const externalValues = props.modelValue ?? props.values;
|
|
12555
|
+
const resolvedModel = resolveControlModel(props.model);
|
|
12556
|
+
return {
|
|
12557
|
+
externalValues,
|
|
12558
|
+
resolvedModel,
|
|
12559
|
+
resolvedControls: props.controls ?? resolvedModel?.controls ?? {},
|
|
12560
|
+
resolvedControlOptions: resolveControlOptionsWithExternalValues(mergeControlWorkspaceOptions(resolvedModel?.controlOptions, props.controlOptions), props.initialValues, externalValues)
|
|
12561
|
+
};
|
|
12562
|
+
}
|
|
12563
|
+
/**
|
|
12564
|
+
* Maps DoseDesignWorkspaceView's props straight through to the identically-named
|
|
12565
|
+
* ControlWorkspaceView props it wraps — the ~25-key pass-through list that used to be spelled
|
|
12566
|
+
* out attribute-by-attribute in the template. `model` is the caller's already-resolved dose
|
|
12567
|
+
* design model, not the raw (possibly absent) `props.model`.
|
|
12568
|
+
*
|
|
12569
|
+
* @example Recommended
|
|
12570
|
+
* ```vue
|
|
12571
|
+
* <ControlWorkspaceView v-bind="doseDesignWorkspaceProps(props, resolvedModel)" />
|
|
12572
|
+
* ```
|
|
12573
|
+
*/
|
|
12574
|
+
function doseDesignWorkspaceProps(props, model) {
|
|
12575
|
+
return {
|
|
12576
|
+
model,
|
|
12577
|
+
workspace: props.workspace,
|
|
12578
|
+
controlOptions: props.controlOptions,
|
|
12579
|
+
initialValues: props.initialValues,
|
|
12580
|
+
modelValue: props.modelValue,
|
|
12581
|
+
values: props.values,
|
|
12582
|
+
title: props.title,
|
|
12583
|
+
subtitle: props.subtitle,
|
|
12584
|
+
topBarVariant: props.topBarVariant,
|
|
12585
|
+
sidebarWidth: props.sidebarWidth,
|
|
12586
|
+
sidebarVariant: props.sidebarVariant,
|
|
12587
|
+
responsiveSidebar: props.responsiveSidebar,
|
|
12588
|
+
sidebarPosition: props.sidebarPosition,
|
|
12589
|
+
sidebarTitle: props.sidebarTitle,
|
|
12590
|
+
sidebarSubtitle: props.sidebarSubtitle,
|
|
12591
|
+
sidebarBadge: props.sidebarBadge,
|
|
12592
|
+
floating: props.floating,
|
|
12593
|
+
dense: props.dense,
|
|
12594
|
+
showSettings: props.showSettings,
|
|
12595
|
+
showFormActions: props.showFormActions,
|
|
12596
|
+
formEnhancements: props.formEnhancements,
|
|
12597
|
+
formLoading: props.formLoading,
|
|
12598
|
+
formDisabled: props.formDisabled,
|
|
12599
|
+
formReadonly: props.formReadonly,
|
|
12600
|
+
formSize: props.formSize
|
|
12601
|
+
};
|
|
12602
|
+
}
|
|
12603
|
+
/**
|
|
12604
|
+
* Merges BioTemplateExperimentWorkspaceView's grouped `status` prop over its individual
|
|
12605
|
+
* `loading`/`error`/`hasExperiment`/... props: `status` wins whenever the corresponding field
|
|
12606
|
+
* on it is set, otherwise the flat prop (or its default) is used. Centralizes the six
|
|
12607
|
+
* independent fallback rules generated plugin pages rely on when they pass a request/experiment
|
|
12608
|
+
* `status` object instead of wiring each field by hand.
|
|
12609
|
+
*/
|
|
12610
|
+
function bioTemplateExperimentWorkspaceProps(props) {
|
|
12611
|
+
const status = props.status;
|
|
12612
|
+
return {
|
|
12613
|
+
loading: status?.loading !== void 0 || status?.saving !== void 0 ? Boolean(status?.loading) || Boolean(status?.saving) : Boolean(props.loading),
|
|
12614
|
+
error: status?.error !== void 0 ? status.error : props.error,
|
|
12615
|
+
hasExperiment: status?.hasExperiment ?? props.hasExperiment ?? false,
|
|
12616
|
+
currentExperimentId: status?.currentExperimentId ?? props.currentExperimentId,
|
|
12617
|
+
lastLoadedAt: status?.lastLoadedAt !== void 0 ? status.lastLoadedAt : props.lastLoadedAt,
|
|
12618
|
+
lastSavedAt: status?.lastSavedAt !== void 0 ? status.lastSavedAt : props.lastSavedAt
|
|
12619
|
+
};
|
|
12620
|
+
}
|
|
12621
|
+
/**
|
|
12622
|
+
* Assembles the prop object BioTemplatePackWorkspaceView binds onto the
|
|
12623
|
+
* BioTemplateExperimentWorkspaceView it wraps: its own display props passed straight through,
|
|
12624
|
+
* plus the pack-derived `target`/`label`/`status`/`actions` computed by the caller.
|
|
12625
|
+
*/
|
|
12626
|
+
function bioTemplatePackWorkspaceProps(props, derived) {
|
|
12627
|
+
return {
|
|
12628
|
+
target: derived.target,
|
|
12629
|
+
kind: "collection",
|
|
12630
|
+
label: derived.label,
|
|
12631
|
+
message: props.message,
|
|
12632
|
+
status: derived.status,
|
|
12633
|
+
actions: derived.actions,
|
|
12634
|
+
dense: props.dense,
|
|
12635
|
+
readonly: props.readonly,
|
|
12636
|
+
showStatus: props.showStatus,
|
|
12637
|
+
showTemplateSummary: props.showTemplateSummary,
|
|
12638
|
+
loadLabel: props.loadLabel,
|
|
12639
|
+
resetLabel: props.resetLabel,
|
|
12640
|
+
saveLabel: props.saveLabel
|
|
12641
|
+
};
|
|
12642
|
+
}
|
|
12643
|
+
/**
|
|
12644
|
+
* Resolves BioTemplatePresetWorkspaceView's `workspaceOptions`/`initialValues`/`modelValue`/
|
|
12645
|
+
* `values` props into the single options object `useBioTemplatePresetWorkspace()` needs,
|
|
12646
|
+
* reusing the same base/initialValues/external-values layering as {@link controlWorkspaceProps}.
|
|
12647
|
+
*/
|
|
12648
|
+
function bioTemplatePresetWorkspaceProps(props) {
|
|
12649
|
+
const externalValues = props.modelValue ?? props.values;
|
|
12650
|
+
return {
|
|
12651
|
+
externalValues,
|
|
12652
|
+
resolvedWorkspaceOptions: resolveControlOptionsWithExternalValues(props.workspaceOptions ?? {}, props.initialValues, externalValues)
|
|
12653
|
+
};
|
|
12654
|
+
}
|
|
12548
12655
|
//#endregion
|
|
12549
12656
|
//#region src/components/ControlWorkspaceView.vue?vue&type=script&setup=true&lang.ts
|
|
12550
12657
|
var _hoisted_1$29 = { class: "mint-control-workspace-view__content" };
|
|
@@ -12624,23 +12731,11 @@ var ControlWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_def
|
|
|
12624
12731
|
*/
|
|
12625
12732
|
const emit = __emit;
|
|
12626
12733
|
const props = __props;
|
|
12627
|
-
const
|
|
12628
|
-
const
|
|
12629
|
-
|
|
12630
|
-
|
|
12631
|
-
const
|
|
12632
|
-
const baseControlOptions = computed(() => mergeControlWorkspaceOptions(resolvedModel.value?.controlOptions ?? {}, props.controlOptions));
|
|
12633
|
-
const resolvedControlOptions = computed(() => {
|
|
12634
|
-
if (props.initialValues === void 0 && externalValues.value === void 0) return baseControlOptions.value;
|
|
12635
|
-
return {
|
|
12636
|
-
...baseControlOptions.value,
|
|
12637
|
-
initialValues: {
|
|
12638
|
-
...baseControlOptions.value.initialValues ?? {},
|
|
12639
|
-
...props.initialValues ?? {},
|
|
12640
|
-
...externalValues.value ?? {}
|
|
12641
|
-
}
|
|
12642
|
-
};
|
|
12643
|
-
});
|
|
12734
|
+
const resolvedWorkspaceModel = computed(() => controlWorkspaceProps(props));
|
|
12735
|
+
const externalValues = computed(() => resolvedWorkspaceModel.value.externalValues);
|
|
12736
|
+
const resolvedModel = computed(() => resolvedWorkspaceModel.value.resolvedModel);
|
|
12737
|
+
const resolvedControls = computed(() => resolvedWorkspaceModel.value.resolvedControls);
|
|
12738
|
+
const resolvedControlOptions = computed(() => resolvedWorkspaceModel.value.resolvedControlOptions);
|
|
12644
12739
|
let generatedWorkspaceScope;
|
|
12645
12740
|
function createGeneratedWorkspace(seedValues = {}) {
|
|
12646
12741
|
generatedWorkspaceScope?.stop();
|
|
@@ -12810,7 +12905,7 @@ var ControlWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_def
|
|
|
12810
12905
|
]);
|
|
12811
12906
|
};
|
|
12812
12907
|
}
|
|
12813
|
-
}), [["__scopeId", "data-v-
|
|
12908
|
+
}), [["__scopeId", "data-v-f3b22df2"]]);
|
|
12814
12909
|
//#endregion
|
|
12815
12910
|
//#region src/components/DoseDesignWorkspaceView.vue?vue&type=script&setup=true&lang.ts
|
|
12816
12911
|
var _hoisted_1$28 = { class: "mint-dose-design-workspace" };
|
|
@@ -12892,6 +12987,7 @@ var DoseDesignWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_
|
|
|
12892
12987
|
const props = __props;
|
|
12893
12988
|
const emit = __emit;
|
|
12894
12989
|
const resolvedModel = computed(() => props.model ?? defineDoseDesignControlModel(props.doseDesignOptions));
|
|
12990
|
+
const controlWorkspaceRecipe = computed(() => doseDesignWorkspaceProps(props, resolvedModel.value));
|
|
12895
12991
|
function resolvedPlateId() {
|
|
12896
12992
|
return props.plateId ?? props.doseDesignOptions.componentProps?.plateId ?? "plate";
|
|
12897
12993
|
}
|
|
@@ -12920,69 +13016,18 @@ var DoseDesignWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_
|
|
|
12920
13016
|
};
|
|
12921
13017
|
}
|
|
12922
13018
|
return (_ctx, _cache) => {
|
|
12923
|
-
return openBlock(), createBlock(ControlWorkspaceView_default, {
|
|
12924
|
-
model: resolvedModel.value,
|
|
12925
|
-
workspace: __props.workspace,
|
|
12926
|
-
"control-options": __props.controlOptions,
|
|
12927
|
-
"initial-values": __props.initialValues,
|
|
12928
|
-
"model-value": __props.modelValue,
|
|
12929
|
-
values: __props.values,
|
|
12930
|
-
title: __props.title,
|
|
12931
|
-
subtitle: __props.subtitle,
|
|
12932
|
-
"top-bar-variant": __props.topBarVariant,
|
|
12933
|
-
"sidebar-width": __props.sidebarWidth,
|
|
12934
|
-
"sidebar-variant": __props.sidebarVariant,
|
|
12935
|
-
"responsive-sidebar": __props.responsiveSidebar,
|
|
12936
|
-
"sidebar-position": __props.sidebarPosition,
|
|
12937
|
-
"sidebar-title": __props.sidebarTitle,
|
|
12938
|
-
"sidebar-subtitle": __props.sidebarSubtitle,
|
|
12939
|
-
"sidebar-badge": __props.sidebarBadge,
|
|
12940
|
-
floating: __props.floating,
|
|
12941
|
-
dense: __props.dense,
|
|
12942
|
-
"show-settings": __props.showSettings,
|
|
12943
|
-
"show-form-actions": __props.showFormActions,
|
|
12944
|
-
"form-enhancements": __props.formEnhancements,
|
|
12945
|
-
"form-loading": __props.formLoading,
|
|
12946
|
-
"form-disabled": __props.formDisabled,
|
|
12947
|
-
"form-readonly": __props.formReadonly,
|
|
12948
|
-
"form-size": __props.formSize,
|
|
13019
|
+
return openBlock(), createBlock(ControlWorkspaceView_default, mergeProps(controlWorkspaceRecipe.value, {
|
|
12949
13020
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event)),
|
|
12950
13021
|
"onUpdate:values": _cache[1] || (_cache[1] = ($event) => emit("update:values", $event)),
|
|
12951
13022
|
onSubmit: _cache[2] || (_cache[2] = ($event) => emit("submit", $event)),
|
|
12952
13023
|
onCancel: _cache[3] || (_cache[3] = ($event) => emit("cancel"))
|
|
12953
|
-
}, {
|
|
13024
|
+
}), {
|
|
12954
13025
|
default: withCtx((workspaceSlotProps) => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps(workspaceSlotProps))), () => [createElementVNode("div", _hoisted_1$28, [renderSlot(_ctx.$slots, "plate", normalizeProps(guardReactiveProps(slotProps(workspaceSlotProps))), () => [createVNode(WellPlate_default, normalizeProps(guardReactiveProps(wellPlateBinding(workspaceSlotProps.componentPropsById))), null, 16)], true), renderSlot(_ctx.$slots, "dose", normalizeProps(guardReactiveProps(slotProps(workspaceSlotProps))), () => [createVNode(DoseCalculator_default, normalizeProps(guardReactiveProps(doseCalculatorBinding(workspaceSlotProps.componentPropsById))), null, 16)], true)])], true)]),
|
|
12955
13026
|
_: 3
|
|
12956
|
-
},
|
|
12957
|
-
"model",
|
|
12958
|
-
"workspace",
|
|
12959
|
-
"control-options",
|
|
12960
|
-
"initial-values",
|
|
12961
|
-
"model-value",
|
|
12962
|
-
"values",
|
|
12963
|
-
"title",
|
|
12964
|
-
"subtitle",
|
|
12965
|
-
"top-bar-variant",
|
|
12966
|
-
"sidebar-width",
|
|
12967
|
-
"sidebar-variant",
|
|
12968
|
-
"responsive-sidebar",
|
|
12969
|
-
"sidebar-position",
|
|
12970
|
-
"sidebar-title",
|
|
12971
|
-
"sidebar-subtitle",
|
|
12972
|
-
"sidebar-badge",
|
|
12973
|
-
"floating",
|
|
12974
|
-
"dense",
|
|
12975
|
-
"show-settings",
|
|
12976
|
-
"show-form-actions",
|
|
12977
|
-
"form-enhancements",
|
|
12978
|
-
"form-loading",
|
|
12979
|
-
"form-disabled",
|
|
12980
|
-
"form-readonly",
|
|
12981
|
-
"form-size"
|
|
12982
|
-
]);
|
|
13027
|
+
}, 16);
|
|
12983
13028
|
};
|
|
12984
13029
|
}
|
|
12985
|
-
}), [["__scopeId", "data-v-
|
|
13030
|
+
}), [["__scopeId", "data-v-76c99098"]]);
|
|
12986
13031
|
//#endregion
|
|
12987
13032
|
//#region src/components/AppContainer.vue
|
|
12988
13033
|
var AppContainer_default = /* @__PURE__ */ defineComponent({
|
|
@@ -13491,15 +13536,13 @@ var BioTemplateExperimentWorkspaceView_default = /* @__PURE__ */ _plugin_vue_exp
|
|
|
13491
13536
|
if (props.kind === "collection") return `${props.label} saves the full template collection to the current experiment.`;
|
|
13492
13537
|
return `${props.label} template data saves to experiment design_data.`;
|
|
13493
13538
|
});
|
|
13494
|
-
const
|
|
13495
|
-
|
|
13496
|
-
|
|
13497
|
-
|
|
13498
|
-
const
|
|
13499
|
-
const
|
|
13500
|
-
const
|
|
13501
|
-
const resolvedLastLoadedAt = computed(() => props.status?.lastLoadedAt !== void 0 ? props.status.lastLoadedAt : props.lastLoadedAt);
|
|
13502
|
-
const resolvedLastSavedAt = computed(() => props.status?.lastSavedAt !== void 0 ? props.status.lastSavedAt : props.lastSavedAt);
|
|
13539
|
+
const resolvedStatus = computed(() => bioTemplateExperimentWorkspaceProps(props));
|
|
13540
|
+
const resolvedLoading = computed(() => resolvedStatus.value.loading);
|
|
13541
|
+
const resolvedError = computed(() => resolvedStatus.value.error);
|
|
13542
|
+
const resolvedHasExperiment = computed(() => resolvedStatus.value.hasExperiment);
|
|
13543
|
+
const resolvedCurrentExperimentId = computed(() => resolvedStatus.value.currentExperimentId);
|
|
13544
|
+
const resolvedLastLoadedAt = computed(() => resolvedStatus.value.lastLoadedAt);
|
|
13545
|
+
const resolvedLastSavedAt = computed(() => resolvedStatus.value.lastSavedAt);
|
|
13503
13546
|
const templateSummaries = computed(() => Object.values(extractTemplateCollection(props.target)).map((template) => ({
|
|
13504
13547
|
id: String(template.template_id),
|
|
13505
13548
|
version: String(template.template_version ?? "unknown")
|
|
@@ -13603,7 +13646,7 @@ var BioTemplateExperimentWorkspaceView_default = /* @__PURE__ */ _plugin_vue_exp
|
|
|
13603
13646
|
]);
|
|
13604
13647
|
};
|
|
13605
13648
|
}
|
|
13606
|
-
}), [["__scopeId", "data-v-
|
|
13649
|
+
}), [["__scopeId", "data-v-d823d800"]]);
|
|
13607
13650
|
//#endregion
|
|
13608
13651
|
//#region src/components/BioTemplatePackWorkspaceView.vue
|
|
13609
13652
|
var BioTemplatePackWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
@@ -13678,26 +13721,18 @@ var BioTemplatePackWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
|
13678
13721
|
reset: props.actions?.reset ?? (() => resolvedWorkspace.value.resetToDefaultCollection()),
|
|
13679
13722
|
save: props.actions?.save ?? (() => resolvedWorkspace.value.saveCurrent())
|
|
13680
13723
|
}));
|
|
13724
|
+
const experimentWorkspaceRecipe = computed(() => bioTemplatePackWorkspaceProps(props, {
|
|
13725
|
+
target: target.value,
|
|
13726
|
+
label: label.value,
|
|
13727
|
+
status: resolvedStatus.value,
|
|
13728
|
+
actions: resolvedActions.value
|
|
13729
|
+
}));
|
|
13681
13730
|
watch([() => props.pack, () => props.workspaceOptions], () => {
|
|
13682
13731
|
generatedWorkspace.value = createGeneratedWorkspace();
|
|
13683
13732
|
}, { deep: true });
|
|
13684
13733
|
onScopeDispose(() => generatedWorkspaceScope?.stop());
|
|
13685
13734
|
return (_ctx, _cache) => {
|
|
13686
|
-
return openBlock(), createBlock(BioTemplateExperimentWorkspaceView_default, {
|
|
13687
|
-
target: target.value,
|
|
13688
|
-
kind: "collection",
|
|
13689
|
-
label: label.value,
|
|
13690
|
-
message: __props.message,
|
|
13691
|
-
status: resolvedStatus.value,
|
|
13692
|
-
actions: resolvedActions.value,
|
|
13693
|
-
dense: __props.dense,
|
|
13694
|
-
readonly: __props.readonly,
|
|
13695
|
-
"show-status": __props.showStatus,
|
|
13696
|
-
"show-template-summary": __props.showTemplateSummary,
|
|
13697
|
-
"load-label": __props.loadLabel,
|
|
13698
|
-
"reset-label": __props.resetLabel,
|
|
13699
|
-
"save-label": __props.saveLabel
|
|
13700
|
-
}, createSlots({ _: 2 }, [hasDefaultSlot.value ? {
|
|
13735
|
+
return openBlock(), createBlock(BioTemplateExperimentWorkspaceView_default, normalizeProps(guardReactiveProps(experimentWorkspaceRecipe.value)), createSlots({ _: 2 }, [hasDefaultSlot.value ? {
|
|
13701
13736
|
name: "default",
|
|
13702
13737
|
fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "default", mergeProps(slotProps, {
|
|
13703
13738
|
workspace: resolvedWorkspace.value,
|
|
@@ -13710,20 +13745,7 @@ var BioTemplatePackWorkspaceView_default = /* @__PURE__ */ defineComponent({
|
|
|
13710
13745
|
topBarSettings: topBarSettings.value
|
|
13711
13746
|
}))]),
|
|
13712
13747
|
key: "0"
|
|
13713
|
-
} : void 0]),
|
|
13714
|
-
"target",
|
|
13715
|
-
"label",
|
|
13716
|
-
"message",
|
|
13717
|
-
"status",
|
|
13718
|
-
"actions",
|
|
13719
|
-
"dense",
|
|
13720
|
-
"readonly",
|
|
13721
|
-
"show-status",
|
|
13722
|
-
"show-template-summary",
|
|
13723
|
-
"load-label",
|
|
13724
|
-
"reset-label",
|
|
13725
|
-
"save-label"
|
|
13726
|
-
]);
|
|
13748
|
+
} : void 0]), 1040);
|
|
13727
13749
|
};
|
|
13728
13750
|
}
|
|
13729
13751
|
});
|
|
@@ -13797,18 +13819,9 @@ var BioTemplatePresetWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_
|
|
|
13797
13819
|
*/
|
|
13798
13820
|
const emit = __emit;
|
|
13799
13821
|
const props = __props;
|
|
13800
|
-
const
|
|
13801
|
-
const
|
|
13802
|
-
|
|
13803
|
-
return {
|
|
13804
|
-
...props.workspaceOptions,
|
|
13805
|
-
initialValues: {
|
|
13806
|
-
...props.workspaceOptions.initialValues ?? {},
|
|
13807
|
-
...props.initialValues ?? {},
|
|
13808
|
-
...externalValues.value ?? {}
|
|
13809
|
-
}
|
|
13810
|
-
};
|
|
13811
|
-
});
|
|
13822
|
+
const resolvedPresetProps = computed(() => bioTemplatePresetWorkspaceProps(props));
|
|
13823
|
+
const externalValues = computed(() => resolvedPresetProps.value.externalValues);
|
|
13824
|
+
const resolvedWorkspaceOptions = computed(() => resolvedPresetProps.value.resolvedWorkspaceOptions);
|
|
13812
13825
|
let generatedWorkspaceScope;
|
|
13813
13826
|
function createGeneratedWorkspace() {
|
|
13814
13827
|
generatedWorkspaceScope?.stop();
|
|
@@ -13968,7 +13981,7 @@ var BioTemplatePresetWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_
|
|
|
13968
13981
|
]);
|
|
13969
13982
|
};
|
|
13970
13983
|
}
|
|
13971
|
-
}), [["__scopeId", "data-v-
|
|
13984
|
+
}), [["__scopeId", "data-v-7935b698"]]);
|
|
13972
13985
|
//#endregion
|
|
13973
13986
|
//#region src/components/RackEditor.vue?vue&type=script&setup=true&lang.ts
|
|
13974
13987
|
var _hoisted_1$20 = { class: "mint-rack-editor__tabs" };
|
|
@@ -18320,6 +18333,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
|
|
|
18320
18333
|
SampleSelector: () => SampleSelector_default,
|
|
18321
18334
|
ScheduleCalendar: () => ScheduleCalendar_default,
|
|
18322
18335
|
ScientificNumber: () => ScientificNumber_default,
|
|
18336
|
+
SecretInput: () => SecretInput_default,
|
|
18323
18337
|
SectionCard: () => SectionCard_default,
|
|
18324
18338
|
SegmentedControl: () => SegmentedControl_default,
|
|
18325
18339
|
SequenceInput: () => SequenceInput_default,
|
|
@@ -18342,4 +18356,4 @@ var components_exports = /* @__PURE__ */ __exportAll({
|
|
|
18342
18356
|
//#endregion
|
|
18343
18357
|
export { SmartGroupFieldRecipe_default as $, ProtocolStepEditor_default as A, RuntimeUpdateNotice_default as At, Breadcrumb_default as B, estimateSequenceRemainingSeconds as C, AppPluginSwitcher_default as Ct, sequenceSamplesRemaining as D, ThemeToggle_default as Dt, sequenceProgressPercent as E, CollapsibleCard_default as Et, RackEditor_default as F, SegmentedControl_default as Ft, AppContainer_default as G, ProgressBar_default as H, BioTemplatePresetWorkspaceView_default as I, BaseTabs_default as It, ComponentBindingRenderer_default as J, DoseDesignWorkspaceView_default as K, BioTemplatePackWorkspaceView_default as L, ColorSlider_default as Lt, ReagentEditor_default as M, DataFrame_default as Mt, SmartGroupModal_default as N, Calendar_default as Nt, ChemicalFormula_default as O, ActionMenu_default as Ot, GroupAssigner_default as P, DropdownButton_default as Pt, SmartGroupManual_default as Q, BioTemplateExperimentWorkspaceView_default as R, estimateSequenceFinishDate as S, AppTopBar_default as St, formatSequenceRemaining as T, PluginIcon_default as Tt, StatusIndicator_default as U, Avatar_default as V, Divider_default as W, SampleSelector_default as X, ScheduleCalendar_default as Y, AutoGroupModal_default as Z, reconstructLcmsPlateCellsFromSequenceItems as _, AppLayout_default as _t, ResourceCard_default as a, DoseCalculator_default as at, InstrumentAlertLog_default as b, FormActions_default as bt, BatchProgressList_default as c, GeneratedResultRenderer_default as ct, DEFAULT_LCMS_SEQUENCE_COLUMNS as d, LoadingSpinner_default as dt, ReagentList_default as et, basenameFromWindowsPath as f, generatedJobDefaults as ft, lcmsWellIdFromPosition as g, MobileSupportGate_default as gt, inferLcmsPlateTypeFromWellIds as h, PluginWorkspaceView_default as ht, SectionCard_default as i, ExperimentTimeline_default as it, SampleHierarchyTree_default as j, AppToastContainer_default as jt, ScientificNumber_default as k, IconButton_default as kt, AuditTrail_default as l, GeneratedPlotlyResult_default as lt, extractLcmsSampleName as m, normalizeGeneratedJobInput as mt, FitPanel_default as n, SampleLegend_default as nt, TimeRangeInput_default as o, GeneratedPluginView_default as ot, extractLcmsCommonPrefix as p, generatedJobFormSchema as pt, ControlWorkspaceView_default as q, ArtifactSaveDialog_default as r, WellPlate_default as rt, ExperimentDataViewer_default as s, JobsStatusTray_default as st, components_exports as t, PlateMapEditor_default as tt, LcmsSequenceTable_default as u, ChartContainer_default as ut, InstrumentStatusCard_default as v, AppSidebar_default as vt, formatSequenceEta as w, AppAvatarMenu_default as wt, SequenceProgressBar_default as x, StepWizard_default as xt, InstrumentStateBadge_default as y, FormBuilder_default as yt, BioTemplateRenderer_default as z };
|
|
18344
18358
|
|
|
18345
|
-
//# sourceMappingURL=components-
|
|
18359
|
+
//# sourceMappingURL=components-B80gV0P6.js.map
|