@morscherlab/mint-sdk 1.2.0 → 1.2.2

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.
Files changed (152) hide show
  1. package/dist/{ExperimentSelectorModal-DCXmwKNS.js → ExperimentSelectorModal-DHE9k8TP.js} +3 -3
  2. package/dist/{ExperimentSelectorModal-DCXmwKNS.js.map → ExperimentSelectorModal-DHE9k8TP.js.map} +1 -1
  3. package/dist/{SettingsModal-BYR20I4c.js → SettingsModal-DELMkUFR.js} +39 -16
  4. package/dist/SettingsModal-DELMkUFR.js.map +1 -0
  5. package/dist/{Skeleton-BAF3CKY7.js → Skeleton-jhF9wUkU.js} +17 -7
  6. package/dist/Skeleton-jhF9wUkU.js.map +1 -0
  7. package/dist/__tests__/components/ChartContainer.test.d.ts +1 -0
  8. package/dist/__tests__/components/ChemicalFormula.test.d.ts +1 -0
  9. package/dist/__tests__/components/FormField.test.d.ts +1 -0
  10. package/dist/__tests__/components/LayoutResizeHandle.test.d.ts +1 -0
  11. package/dist/__tests__/components/NumberInput.test.d.ts +1 -0
  12. package/dist/__tests__/components/SearchableSelect.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellPlate.decoration.test.d.ts +1 -0
  14. package/dist/__tests__/composables/localFiles.test.d.ts +1 -0
  15. package/dist/__tests__/composables/useManualLayoutResize.test.d.ts +1 -0
  16. package/dist/__tests__/composables/usePickerSelection.test.d.ts +1 -0
  17. package/dist/__tests__/styles/tokenOnlyColors.test.d.ts +1 -0
  18. package/dist/components/AdductText.vue.d.ts +17 -0
  19. package/dist/components/AppSidebar.vue.d.ts +7 -7
  20. package/dist/components/BasePill.vue.d.ts +3 -0
  21. package/dist/components/BaseTabs.vue.d.ts +1 -4
  22. package/dist/components/ChartContainer.vue.d.ts +19 -5
  23. package/dist/components/ChemicalFormula.vue.d.ts +28 -2
  24. package/dist/components/DataFrame.vue.d.ts +1 -1
  25. package/dist/components/FileUploader.vue.d.ts +3 -0
  26. package/dist/components/FormField.vue.d.ts +8 -1
  27. package/dist/components/LayoutResizeHandle.vue.d.ts +23 -0
  28. package/dist/components/PlotlyChart.vue.d.ts +34 -6
  29. package/dist/components/PluginWorkspaceView.props.d.ts +3 -3
  30. package/dist/components/SearchableSelect.vue.d.ts +57 -0
  31. package/dist/components/WellPlate.vue.d.ts +5 -1
  32. package/dist/components/index.d.ts +3 -1
  33. package/dist/components/index.js +6 -6
  34. package/dist/{components-DIum5hkx.js → components-CxQVQCpP.js} +1215 -546
  35. package/dist/components-CxQVQCpP.js.map +1 -0
  36. package/dist/composables/index.d.ts +1 -0
  37. package/dist/composables/index.js +8 -8
  38. package/dist/composables/pluginWorkspaceModel.d.ts +0 -3
  39. package/dist/composables/useManualLayoutResize.d.ts +56 -0
  40. package/dist/composables/useToast.d.ts +22 -1
  41. package/dist/{composables-mFXsTA4g.js → composables-DAqOU8Aq.js} +97 -8
  42. package/dist/composables-DAqOU8Aq.js.map +1 -0
  43. package/dist/index.js +11 -11
  44. package/dist/install.js +2 -2
  45. package/dist/styles.css +855 -320
  46. package/dist/templates/index.js +2 -2
  47. package/dist/{templates-CmGfmBRA.js → templates-NuaNHohp.js} +2 -2
  48. package/dist/{templates-CmGfmBRA.js.map → templates-NuaNHohp.js.map} +1 -1
  49. package/dist/types/componentLabTypes.d.ts +3 -0
  50. package/dist/types/components.d.ts +26 -1
  51. package/dist/types/form-builder.d.ts +2 -0
  52. package/dist/types/generated-ui.d.ts +2 -0
  53. package/dist/types/index.d.ts +1 -1
  54. package/dist/{useControlSchema-DldpxNOP.js → useControlSchema-vLiRPUmj.js} +181 -71
  55. package/dist/useControlSchema-vLiRPUmj.js.map +1 -0
  56. package/dist/{useExperimentSelector-CEcIaueJ.js → useExperimentSelector-G_CAOFTX.js} +2 -2
  57. package/dist/{useExperimentSelector-CEcIaueJ.js.map → useExperimentSelector-G_CAOFTX.js.map} +1 -1
  58. package/dist/{useFormBuilder-z5L_dUIy.js → useFormBuilder-D37ajgS8.js} +2 -2
  59. package/dist/{useFormBuilder-z5L_dUIy.js.map → useFormBuilder-D37ajgS8.js.map} +1 -1
  60. package/dist/{validation-uwoJGEb6.js → validation-ChMyixAf.js} +21 -9
  61. package/dist/validation-ChMyixAf.js.map +1 -0
  62. package/package.json +1 -1
  63. package/src/__tests__/components/AppSidebar.test.ts +84 -94
  64. package/src/__tests__/components/AppToastContainer.test.ts +55 -1
  65. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -21
  66. package/src/__tests__/components/ChartContainer.test.ts +24 -0
  67. package/src/__tests__/components/ChemicalFormula.test.ts +27 -0
  68. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -2
  69. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -2
  70. package/src/__tests__/components/FormBuilder.test.ts +26 -0
  71. package/src/__tests__/components/FormField.test.ts +26 -0
  72. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -0
  73. package/src/__tests__/components/LayoutResizeHandle.test.ts +19 -0
  74. package/src/__tests__/components/NumberInput.test.ts +149 -0
  75. package/src/__tests__/components/PlotlyChart.test.ts +48 -0
  76. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +1 -2
  77. package/src/__tests__/components/PluginWorkspaceView.test.ts +1 -2
  78. package/src/__tests__/components/RackEditor.test.ts +9 -0
  79. package/src/__tests__/components/SearchableSelect.test.ts +61 -0
  80. package/src/__tests__/components/WellPlate.decoration.test.ts +28 -0
  81. package/src/__tests__/composables/localFiles.test.ts +57 -0
  82. package/src/__tests__/composables/useManualLayoutResize.test.ts +21 -0
  83. package/src/__tests__/composables/usePickerSelection.test.ts +98 -0
  84. package/src/__tests__/generatedUi.test.ts +111 -0
  85. package/src/__tests__/styles/tokenOnlyColors.test.ts +16 -0
  86. package/src/components/AdductText.story.vue +15 -0
  87. package/src/components/AdductText.vue +40 -0
  88. package/src/components/AppLayout.story.vue +1 -1
  89. package/src/components/AppSidebar.story.vue +7 -10
  90. package/src/components/AppSidebar.vue +178 -58
  91. package/src/components/AppToastContainer.vue +65 -23
  92. package/src/components/BasePill.story.vue +2 -0
  93. package/src/components/BasePill.vue +4 -0
  94. package/src/components/BaseTabs.story.vue +0 -42
  95. package/src/components/BaseTabs.vue +3 -6
  96. package/src/components/ChartContainer.story.vue +21 -0
  97. package/src/components/ChartContainer.vue +27 -6
  98. package/src/components/ChemicalFormula.story.vue +7 -0
  99. package/src/components/ChemicalFormula.vue +40 -11
  100. package/src/components/FileUploader.vue +10 -1
  101. package/src/components/FormField.vue +10 -3
  102. package/src/components/GeneratedPathInput.vue +11 -7
  103. package/src/components/LayoutResizeHandle.story.vue +26 -0
  104. package/src/components/LayoutResizeHandle.vue +62 -0
  105. package/src/components/NumberInput.story.vue +32 -13
  106. package/src/components/NumberInput.vue +145 -56
  107. package/src/components/PlotlyChart.vue +77 -11
  108. package/src/components/PluginWorkspaceView.props.ts +3 -3
  109. package/src/components/RackEditor.vue +38 -32
  110. package/src/components/SearchableSelect.story.vue +24 -0
  111. package/src/components/SearchableSelect.vue +223 -0
  112. package/src/components/WellPlate.story.vue +16 -0
  113. package/src/components/WellPlate.vue +17 -8
  114. package/src/components/index.ts +3 -1
  115. package/src/components/internal/FormFieldRendererInternal.vue +17 -0
  116. package/src/components/internal/WorkspaceSidebarInternal.vue +1 -2
  117. package/src/composables/filePicker/localFiles.ts +21 -14
  118. package/src/composables/filePicker/usePickerSelection.ts +15 -4
  119. package/src/composables/index.ts +10 -0
  120. package/src/composables/pluginWorkspaceModel.ts +0 -3
  121. package/src/composables/useManualLayoutResize.ts +165 -0
  122. package/src/composables/usePluginWorkspace.ts +1 -2
  123. package/src/composables/useToast.ts +21 -5
  124. package/src/generated/schema.ts +58 -18
  125. package/src/styles/components/adduct-text.css +45 -0
  126. package/src/styles/components/app-sidebar.css +282 -121
  127. package/src/styles/components/chart-container.css +92 -0
  128. package/src/styles/components/chemical-formula.css +34 -4
  129. package/src/styles/components/form-builder.css +1 -1
  130. package/src/styles/components/form-field.css +28 -0
  131. package/src/styles/components/layout-resize-handle.css +60 -0
  132. package/src/styles/components/number-input.css +75 -91
  133. package/src/styles/components/pill.css +49 -51
  134. package/src/styles/components/rack-editor.css +31 -9
  135. package/src/styles/components/searchable-select.css +63 -0
  136. package/src/styles/components/segmented-control.css +16 -11
  137. package/src/styles/components/tabs.css +18 -34
  138. package/src/styles/components/toast.css +136 -27
  139. package/src/styles/components/well-plate.css +9 -0
  140. package/src/styles/index.css +3 -0
  141. package/src/styles/variables.css +25 -5
  142. package/src/types/componentLabTypes.ts +6 -0
  143. package/src/types/components.ts +30 -0
  144. package/src/types/form-builder.ts +2 -0
  145. package/src/types/generated-ui.ts +2 -0
  146. package/src/types/index.ts +5 -0
  147. package/dist/SettingsModal-BYR20I4c.js.map +0 -1
  148. package/dist/Skeleton-BAF3CKY7.js.map +0 -1
  149. package/dist/components-DIum5hkx.js.map +0 -1
  150. package/dist/composables-mFXsTA4g.js.map +0 -1
  151. package/dist/useControlSchema-DldpxNOP.js.map +0 -1
  152. package/dist/validation-uwoJGEb6.js.map +0 -1
@@ -1,21 +1,267 @@
1
1
  import { n as __exportAll, r as __toESM } from "./chunk-BoAXSpZd.js";
2
2
  import { i as useApi, l as tableDensityToSize, u as tryUseSettingsStore } from "./errors-BLuqMee5.js";
3
3
  import { f as BaseModal_default, h as BaseButton_default, m as useEventListener, p as useFocusTrap } from "./experiment-utils-CV2Wza3z.js";
4
- import { a as BaseSelect_default, i as BasePill_default, n as useRequestSyncState, o as normalizeOptionInput, r as EmptyState_default, s as BaseInput_default, t as Skeleton_default } from "./Skeleton-BAF3CKY7.js";
5
- import { A as useConcentrationUnits, Bt as MultiSelect_default, Gt as BaseToggle_default, I as useChemicalFormula, Jt as BaseTextarea_default, 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, 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, Z as normalizeJobPercent, _ 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-DldpxNOP.js";
6
- 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-BYR20I4c.js";
7
- import { $ as getInjectedFrontendRevision, C as useExpansionSet, E as getSampleGroupParentPath, H as useListReorder, J as usePluginWorkspace, N as useAutoGroup, P as parseCSV, Q as useAppExperiment, R as DEFAULT_COLORS, S as useExperimentData, T as getSampleGroupMajorPrefix, U as useReorderAnnouncer, W as useDoseCalculator, X as useMobileSupportGate, Y as DEFAULT_MOBILE_VIEWPORT_QUERY, Z as APP_EXPERIMENT_KEY, a as DEFAULT_PRESETS, b as useScheduleDrag, c as useReagentSeries, d as useBioTemplatePresetWorkspace, dt as useRovingFocus, et as useRuntimeAlignment, f as useBioTemplatePackWorkspace, i as useProtocolTemplates, it as useToast, k as readFileAsText, l as useGroupAssignment, lt as useSortedItems, n as pickerFormat, nt as usePresenceHeartbeat, o as DEFAULT_UNITS, q as usePluginJobCenter, r as pickerReason, rt as useTheme, st as useTextSearch, t as pickerExclusion, u as useRackEditor, ut as useMenuKeyboard, w as useSampleGroups, x as useExperimentSamples, z as useWellPlateEditor } from "./validation-uwoJGEb6.js";
4
+ import { a as BaseSelect_default, i as BasePill_default, n as useRequestSyncState, o as normalizeOptionInput, r as EmptyState_default, s as BaseInput_default, t as Skeleton_default } from "./Skeleton-jhF9wUkU.js";
5
+ import { A as useConcentrationUnits, Bt as MultiSelect_default, Gt as BaseToggle_default, I as useChemicalFormula, Jt as BaseTextarea_default, 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, 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, Z as normalizeJobPercent, _ 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-vLiRPUmj.js";
6
+ 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-DELMkUFR.js";
7
+ import { $ as getInjectedFrontendRevision, C as useExpansionSet, E as getSampleGroupParentPath, H as useListReorder, J as usePluginWorkspace, N as useAutoGroup, P as parseCSV, Q as useAppExperiment, R as DEFAULT_COLORS, S as useExperimentData, T as getSampleGroupMajorPrefix, U as useReorderAnnouncer, W as useDoseCalculator, X as useMobileSupportGate, Y as DEFAULT_MOBILE_VIEWPORT_QUERY, Z as APP_EXPERIMENT_KEY, a as DEFAULT_PRESETS, b as useScheduleDrag, c as useReagentSeries, d as useBioTemplatePresetWorkspace, dt as useRovingFocus, et as useRuntimeAlignment, f as useBioTemplatePackWorkspace, i as useProtocolTemplates, it as useToast, k as readFileAsText, l as useGroupAssignment, lt as useSortedItems, n as pickerFormat, nt as usePresenceHeartbeat, o as DEFAULT_UNITS, q as usePluginJobCenter, r as pickerReason, rt as useTheme, st as useTextSearch, t as pickerExclusion, u as useRackEditor, ut as useMenuKeyboard, w as useSampleGroups, x as useExperimentSamples, z as useWellPlateEditor } from "./validation-ChMyixAf.js";
8
8
  import { t as useDropdownState } from "./useDropdownState-C7hRiVQf.js";
9
- import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-z5L_dUIy.js";
9
+ import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-D37ajgS8.js";
10
10
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-DQ0MjwHZ.js";
11
- import { B as toBioTemplateComponentProps, Cn as SLOT_ORDER, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, Sn as SLOT_COLORS, V as toBioTemplateComponentPropsByComponent, _n as createWellGrid, dn as extractTemplateCollection, gn as createPlateRowLabels, hn as createPlateColumnLabels, mn as WELL_PLATE_SIZE_CONFIGS, pn as PLATE_CONFIGS, vn as getRectangleWellIds, xn as SAMPLE_COLOR_SCALE } from "./templates-CmGfmBRA.js";
11
+ import { B as toBioTemplateComponentProps, Cn as SLOT_ORDER, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, Sn as SLOT_COLORS, V as toBioTemplateComponentPropsByComponent, _n as createWellGrid, dn as extractTemplateCollection, gn as createPlateRowLabels, hn as createPlateColumnLabels, mn as WELL_PLATE_SIZE_CONFIGS, pn as PLATE_CONFIGS, vn as getRectangleWellIds, xn as SAMPLE_COLOR_SCALE } from "./templates-NuaNHohp.js";
12
12
  import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-CJdNlCZb.js";
13
- import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-DCXmwKNS.js";
13
+ import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-DHE9k8TP.js";
14
14
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, isRef, 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
  import { computePosition, flip, offset, shift } from "@floating-ui/dom";
16
16
  import { Ellipsis, RefreshCw } from "lucide-vue-next";
17
+ //#region src/components/SearchableSelect.vue?vue&type=script&setup=true&lang.ts
18
+ var _hoisted_1$89 = ["disabled", "aria-expanded"];
19
+ var _hoisted_2$77 = {
20
+ key: 0,
21
+ class: "mint-searchable-select__panel"
22
+ };
23
+ var _hoisted_3$70 = { class: "mint-searchable-select__search-wrap" };
24
+ var _hoisted_4$65 = [
25
+ "placeholder",
26
+ "aria-label",
27
+ "aria-expanded",
28
+ "aria-activedescendant"
29
+ ];
30
+ var _hoisted_5$62 = [
31
+ "id",
32
+ "aria-selected",
33
+ "aria-disabled",
34
+ "onMouseenter",
35
+ "onClick"
36
+ ];
37
+ var _hoisted_6$58 = { class: "mint-searchable-select__option-text" };
38
+ var _hoisted_7$53 = { class: "mint-searchable-select__option-label" };
39
+ var _hoisted_8$48 = {
40
+ key: 0,
41
+ class: "mint-searchable-select__option-description"
42
+ };
43
+ var _hoisted_9$43 = {
44
+ key: 0,
45
+ class: "mint-searchable-select__option-meta"
46
+ };
47
+ var _hoisted_10$38 = {
48
+ key: 1,
49
+ class: "mint-searchable-select__check",
50
+ viewBox: "0 0 20 20",
51
+ fill: "none",
52
+ stroke: "currentColor",
53
+ "aria-hidden": "true"
54
+ };
55
+ var _hoisted_11$36 = {
56
+ key: 0,
57
+ class: "mint-searchable-select__empty"
58
+ };
59
+ var _hoisted_12$32 = {
60
+ key: 0,
61
+ class: "mint-searchable-select__footer"
62
+ };
63
+ //#endregion
64
+ //#region src/components/SearchableSelect.vue
65
+ var SearchableSelect_default = /* @__PURE__ */ defineComponent({
66
+ __name: "SearchableSelect",
67
+ props: {
68
+ modelValue: {},
69
+ options: {},
70
+ placeholder: { default: "Select an option" },
71
+ searchPlaceholder: { default: "Search options…" },
72
+ noResultsText: { default: "No matching options" },
73
+ size: { default: "md" },
74
+ disabled: {
75
+ type: Boolean,
76
+ default: false
77
+ }
78
+ },
79
+ emits: ["update:modelValue"],
80
+ setup(__props, { emit: __emit }) {
81
+ /** Searchable single-select listbox with descriptions, disabled reasons, and custom slots. */
82
+ const props = __props;
83
+ const emit = __emit;
84
+ const listboxId = `mint-searchable-select-${useId().replace(/:/g, "")}`;
85
+ const root = ref(null);
86
+ const trigger = ref(null);
87
+ const search = ref(null);
88
+ const open = ref(false);
89
+ const query = ref("");
90
+ const activeIndex = ref(-1);
91
+ const normalizedOptions = computed(() => props.options.map(normalizeOptionInput));
92
+ const selectedOption = computed(() => normalizedOptions.value.find((option) => option.value === props.modelValue));
93
+ const visibleOptions = computed(() => {
94
+ const needle = query.value.trim().toLocaleLowerCase();
95
+ if (!needle) return normalizedOptions.value;
96
+ return normalizedOptions.value.filter((option) => [
97
+ option.label,
98
+ option.description,
99
+ option.meta,
100
+ option.disabledReason
101
+ ].some((value) => value?.toLocaleLowerCase().includes(needle)));
102
+ });
103
+ const activeDescendant = computed(() => activeIndex.value >= 0 ? `${listboxId}-option-${activeIndex.value}` : void 0);
104
+ function firstEnabledIndex(options = visibleOptions.value) {
105
+ return options.findIndex((option) => !option.disabled);
106
+ }
107
+ async function openPanel() {
108
+ if (props.disabled) return;
109
+ query.value = "";
110
+ open.value = true;
111
+ activeIndex.value = firstEnabledIndex(normalizedOptions.value);
112
+ await nextTick();
113
+ search.value?.focus();
114
+ }
115
+ async function closePanel(restoreFocus = false) {
116
+ open.value = false;
117
+ query.value = "";
118
+ activeIndex.value = -1;
119
+ if (restoreFocus) {
120
+ await nextTick();
121
+ trigger.value?.focus();
122
+ }
123
+ }
124
+ function moveActive(direction) {
125
+ const enabled = visibleOptions.value.map((option, index) => ({
126
+ option,
127
+ index
128
+ })).filter(({ option }) => !option.disabled);
129
+ if (enabled.length === 0) return;
130
+ const current = enabled.findIndex(({ index }) => index === activeIndex.value);
131
+ activeIndex.value = enabled[current < 0 ? direction === 1 ? 0 : enabled.length - 1 : (current + direction + enabled.length) % enabled.length].index;
132
+ nextTick(() => document.getElementById(activeDescendant.value ?? "")?.scrollIntoView({ block: "nearest" }));
133
+ }
134
+ function select(option) {
135
+ if (option.disabled) return;
136
+ emit("update:modelValue", option.value);
137
+ closePanel(true);
138
+ }
139
+ function handleSearchKeydown(event) {
140
+ if (event.key === "ArrowDown") moveActive(1);
141
+ else if (event.key === "ArrowUp") moveActive(-1);
142
+ else if (event.key === "Home") activeIndex.value = firstEnabledIndex();
143
+ else if (event.key === "End") {
144
+ for (let index = visibleOptions.value.length - 1; index >= 0; index--) if (!visibleOptions.value[index]?.disabled) {
145
+ activeIndex.value = index;
146
+ break;
147
+ }
148
+ } else if (event.key === "Enter") {
149
+ const option = visibleOptions.value[activeIndex.value];
150
+ if (option) select(option);
151
+ } else if (event.key === "Escape") closePanel(true);
152
+ else return;
153
+ event.preventDefault();
154
+ }
155
+ function handleTriggerKeydown(event) {
156
+ if (event.key !== "ArrowDown" && event.key !== "ArrowUp") return;
157
+ event.preventDefault();
158
+ openPanel().then(() => {
159
+ if (event.key === "ArrowUp") moveActive(-1);
160
+ });
161
+ }
162
+ watch(visibleOptions, (options) => {
163
+ activeIndex.value = firstEnabledIndex(options);
164
+ });
165
+ watch(() => props.disabled, (disabled) => {
166
+ if (disabled) closePanel();
167
+ });
168
+ useEventListener(() => document, "pointerdown", (event) => {
169
+ if (open.value && !root.value?.contains(event.target)) closePanel();
170
+ });
171
+ return (_ctx, _cache) => {
172
+ return openBlock(), createElementBlock("div", {
173
+ ref_key: "root",
174
+ ref: root,
175
+ class: normalizeClass(["mint-searchable-select", `mint-searchable-select--${__props.size}`]),
176
+ onFocusout: _cache[3] || (_cache[3] = ($event) => !root.value?.contains($event.relatedTarget) && closePanel())
177
+ }, [createElementVNode("button", {
178
+ ref_key: "trigger",
179
+ ref: trigger,
180
+ type: "button",
181
+ class: "mint-searchable-select__trigger",
182
+ disabled: __props.disabled,
183
+ "aria-expanded": open.value,
184
+ "aria-controls": listboxId,
185
+ "aria-haspopup": "listbox",
186
+ onClick: _cache[0] || (_cache[0] = ($event) => open.value ? closePanel() : openPanel()),
187
+ onKeydown: handleTriggerKeydown
188
+ }, [createElementVNode("span", { class: normalizeClass(["mint-searchable-select__value", { "mint-searchable-select__value--placeholder": !selectedOption.value }]) }, toDisplayString(selectedOption.value?.label ?? __props.placeholder), 3), _cache[4] || (_cache[4] = createElementVNode("svg", {
189
+ viewBox: "0 0 20 20",
190
+ fill: "none",
191
+ stroke: "currentColor",
192
+ "aria-hidden": "true"
193
+ }, [createElementVNode("path", {
194
+ "stroke-linecap": "round",
195
+ "stroke-linejoin": "round",
196
+ "stroke-width": "1.75",
197
+ d: "m6 8 4 4 4-4"
198
+ })], -1))], 40, _hoisted_1$89), open.value ? (openBlock(), createElementBlock("div", _hoisted_2$77, [
199
+ createElementVNode("div", _hoisted_3$70, [_cache[5] || (_cache[5] = createElementVNode("svg", {
200
+ viewBox: "0 0 20 20",
201
+ fill: "none",
202
+ stroke: "currentColor",
203
+ "aria-hidden": "true"
204
+ }, [createElementVNode("circle", {
205
+ cx: "8.5",
206
+ cy: "8.5",
207
+ r: "5.5"
208
+ }), createElementVNode("path", { d: "m13 13 4 4" })], -1)), withDirectives(createElementVNode("input", {
209
+ ref_key: "search",
210
+ ref: search,
211
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => query.value = $event),
212
+ role: "combobox",
213
+ type: "search",
214
+ class: "mint-searchable-select__search",
215
+ placeholder: __props.searchPlaceholder,
216
+ "aria-label": __props.searchPlaceholder,
217
+ "aria-expanded": open.value,
218
+ "aria-controls": listboxId,
219
+ "aria-activedescendant": activeDescendant.value,
220
+ "aria-autocomplete": "list",
221
+ onKeydown: handleSearchKeydown
222
+ }, null, 40, _hoisted_4$65), [[vModelText, query.value]])]),
223
+ createElementVNode("ul", {
224
+ id: listboxId,
225
+ class: "mint-searchable-select__list",
226
+ role: "listbox"
227
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleOptions.value, (option, index) => {
228
+ return openBlock(), createElementBlock("li", {
229
+ id: `${listboxId}-option-${index}`,
230
+ key: String(option.value),
231
+ role: "option",
232
+ class: normalizeClass(["mint-searchable-select__option", {
233
+ "mint-searchable-select__option--active": activeIndex.value === index,
234
+ "mint-searchable-select__option--selected": __props.modelValue === option.value,
235
+ "mint-searchable-select__option--disabled": option.disabled
236
+ }]),
237
+ "aria-selected": __props.modelValue === option.value,
238
+ "aria-disabled": option.disabled || void 0,
239
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"])),
240
+ onMouseenter: ($event) => !option.disabled && (activeIndex.value = index),
241
+ onClick: ($event) => select(option)
242
+ }, [renderSlot(_ctx.$slots, "option", {
243
+ option,
244
+ selected: __props.modelValue === option.value,
245
+ active: activeIndex.value === index
246
+ }, () => [
247
+ createElementVNode("span", _hoisted_6$58, [createElementVNode("span", _hoisted_7$53, toDisplayString(option.label), 1), (option.disabled ? option.disabledReason || option.description : option.description) ? (openBlock(), createElementBlock("span", _hoisted_8$48, toDisplayString(option.disabled ? option.disabledReason || option.description : option.description), 1)) : createCommentVNode("", true)]),
248
+ option.meta ? (openBlock(), createElementBlock("span", _hoisted_9$43, toDisplayString(option.meta), 1)) : createCommentVNode("", true),
249
+ __props.modelValue === option.value ? (openBlock(), createElementBlock("svg", _hoisted_10$38, [..._cache[6] || (_cache[6] = [createElementVNode("path", {
250
+ "stroke-linecap": "round",
251
+ "stroke-linejoin": "round",
252
+ "stroke-width": "2",
253
+ d: "m5 10 3 3 7-7"
254
+ }, null, -1)])])) : createCommentVNode("", true)
255
+ ])], 42, _hoisted_5$62);
256
+ }), 128)), visibleOptions.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_11$36, toDisplayString(__props.noResultsText), 1)) : createCommentVNode("", true)]),
257
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_12$32, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
258
+ ])) : createCommentVNode("", true)], 34);
259
+ };
260
+ }
261
+ });
262
+ //#endregion
17
263
  //#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
18
- var _hoisted_1$86 = { class: "mint-color-slider__row" };
264
+ var _hoisted_1$88 = { class: "mint-color-slider__row" };
19
265
  var _hoisted_2$76 = { class: "mint-color-slider__track" };
20
266
  var _hoisted_3$69 = [
21
267
  "value",
@@ -132,7 +378,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
132
378
  emit("update:modelValue", Number(target.value));
133
379
  }
134
380
  return (_ctx, _cache) => {
135
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$86, [createElementVNode("div", _hoisted_2$76, [createElementVNode("input", {
381
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$88, [createElementVNode("div", _hoisted_2$76, [createElementVNode("input", {
136
382
  type: "range",
137
383
  value: currentValue.value,
138
384
  min: __props.min,
@@ -168,7 +414,11 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
168
414
  });
169
415
  //#endregion
170
416
  //#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
171
- var _hoisted_1$85 = [
417
+ var _hoisted_1$87 = {
418
+ class: "mint-tabs mint-tabs--underline",
419
+ role: "tablist"
420
+ };
421
+ var _hoisted_2$75 = [
172
422
  "id",
173
423
  "aria-selected",
174
424
  "aria-disabled",
@@ -176,8 +426,8 @@ var _hoisted_1$85 = [
176
426
  "tabindex",
177
427
  "onClick"
178
428
  ];
179
- var _hoisted_2$75 = { class: "mint-tab__content" };
180
- var _hoisted_3$68 = {
429
+ var _hoisted_3$68 = { class: "mint-tab__content" };
430
+ var _hoisted_4$64 = {
181
431
  key: 0,
182
432
  class: "mint-tab__icon mint-tab__icon--svg",
183
433
  viewBox: "0 0 24 24",
@@ -188,13 +438,13 @@ var _hoisted_3$68 = {
188
438
  "stroke-linejoin": "round",
189
439
  "aria-hidden": "true"
190
440
  };
191
- var _hoisted_4$63 = ["d"];
192
- var _hoisted_5$60 = ["d"];
193
- var _hoisted_6$56 = {
441
+ var _hoisted_5$61 = ["d"];
442
+ var _hoisted_6$57 = ["d"];
443
+ var _hoisted_7$52 = {
194
444
  key: 1,
195
445
  class: "mint-tab__icon"
196
446
  };
197
- var _hoisted_7$50 = {
447
+ var _hoisted_8$47 = {
198
448
  key: 2,
199
449
  class: "mint-tab__badge"
200
450
  };
@@ -204,12 +454,11 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
204
454
  __name: "BaseTabs",
205
455
  props: {
206
456
  modelValue: {},
207
- tabs: {},
208
- variant: { default: "underline" }
457
+ tabs: {}
209
458
  },
210
459
  emits: ["update:modelValue"],
211
460
  setup(__props, { emit: __emit }) {
212
- /** Renders a tab bar with underline or pills variant, badges, icons, and disabled tab support. */
461
+ /** Renders an underline tab bar with mono count badges, icons, and disabled tab support. */
213
462
  const props = __props;
214
463
  const emit = __emit;
215
464
  const activeTab = computed(() => props.modelValue);
@@ -234,10 +483,7 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
234
483
  getElement: (id) => tabButtonRefs.get(id)
235
484
  });
236
485
  return (_ctx, _cache) => {
237
- return openBlock(), createElementBlock("div", {
238
- class: normalizeClass(["mint-tabs", `mint-tabs--${__props.variant}`]),
239
- role: "tablist"
240
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedTabs.value, (tab) => {
486
+ return openBlock(), createElementBlock("div", _hoisted_1$87, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedTabs.value, (tab) => {
241
487
  return openBlock(), createElementBlock("button", {
242
488
  id: `mint-tab-${tab.id}`,
243
489
  key: tab.id,
@@ -256,26 +502,26 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
256
502
  ]),
257
503
  onClick: ($event) => selectTab(tab.id),
258
504
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeydown) && unref(handleKeydown)(...args))
259
- }, [createElementVNode("span", _hoisted_2$75, [
260
- isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$68, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
505
+ }, [createElementVNode("span", _hoisted_3$68, [
506
+ isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_4$64, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
261
507
  return openBlock(), createElementBlock("path", {
262
508
  key: index,
263
509
  d
264
- }, null, 8, _hoisted_4$63);
510
+ }, null, 8, _hoisted_5$61);
265
511
  }), 128)) : (openBlock(), createElementBlock("path", {
266
512
  key: 1,
267
513
  d: tab.icon
268
- }, null, 8, _hoisted_5$60))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$56, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
514
+ }, null, 8, _hoisted_6$57))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_7$52, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
269
515
  createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
270
- tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$50, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
271
- ])], 42, _hoisted_1$85);
272
- }), 128))], 2);
516
+ tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_8$47, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
517
+ ])], 42, _hoisted_2$75);
518
+ }), 128))]);
273
519
  };
274
520
  }
275
521
  });
276
522
  //#endregion
277
523
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
278
- var _hoisted_1$84 = [
524
+ var _hoisted_1$86 = [
279
525
  "aria-checked",
280
526
  "tabindex",
281
527
  "disabled",
@@ -387,14 +633,14 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
387
633
  ]),
388
634
  onClick: ($event) => handleSelect(option),
389
635
  onKeydown: ($event) => handleKeydown($event, option)
390
- }, [createElementVNode("span", _hoisted_2$74, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$67, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$84);
636
+ }, [createElementVNode("span", _hoisted_2$74, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$67, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$86);
391
637
  }), 128))], 2);
392
638
  };
393
639
  }
394
640
  });
395
641
  //#endregion
396
642
  //#region src/components/DropdownButton.vue?vue&type=script&setup=true&lang.ts
397
- var _hoisted_1$83 = ["disabled", "aria-expanded"];
643
+ var _hoisted_1$85 = ["disabled", "aria-expanded"];
398
644
  var _hoisted_2$73 = {
399
645
  key: 0,
400
646
  class: "mint-dropdown-button__spinner",
@@ -403,20 +649,20 @@ var _hoisted_2$73 = {
403
649
  "aria-hidden": "true"
404
650
  };
405
651
  var _hoisted_3$66 = { class: "mint-dropdown-button__label" };
406
- var _hoisted_4$62 = ["aria-activedescendant"];
407
- var _hoisted_5$59 = [
652
+ var _hoisted_4$63 = ["aria-activedescendant"];
653
+ var _hoisted_5$60 = [
408
654
  "id",
409
655
  "aria-selected",
410
656
  "aria-disabled",
411
657
  "onClick",
412
658
  "onKeydown"
413
659
  ];
414
- var _hoisted_6$55 = { class: "mint-dropdown-button__option-label" };
415
- var _hoisted_7$49 = {
660
+ var _hoisted_6$56 = { class: "mint-dropdown-button__option-label" };
661
+ var _hoisted_7$51 = {
416
662
  key: 0,
417
663
  class: "mint-dropdown-button__option-description"
418
664
  };
419
- var _hoisted_8$44 = {
665
+ var _hoisted_8$46 = {
420
666
  key: 1,
421
667
  class: "mint-dropdown-button__option-check",
422
668
  viewBox: "0 0 24 24",
@@ -528,7 +774,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
528
774
  "stroke-linecap": "round",
529
775
  "stroke-linejoin": "round"
530
776
  }, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
531
- ], 42, _hoisted_1$83), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
777
+ ], 42, _hoisted_1$85), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
532
778
  default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("ul", {
533
779
  key: 0,
534
780
  ref_key: "panelRef",
@@ -552,11 +798,11 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
552
798
  onClick: ($event) => selectOption(option),
553
799
  onKeydown: [withKeys(withModifiers(($event) => selectOption(option), ["prevent"]), ["enter"]), withKeys(withModifiers(($event) => selectOption(option), ["prevent"]), ["space"])]
554
800
  }, [
555
- createElementVNode("span", _hoisted_6$55, toDisplayString(option.label), 1),
556
- option.description ? (openBlock(), createElementBlock("span", _hoisted_7$49, toDisplayString(option.description), 1)) : createCommentVNode("", true),
557
- option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$44, [..._cache[4] || (_cache[4] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : createCommentVNode("", true)
558
- ], 42, _hoisted_5$59);
559
- }), 128))], 40, _hoisted_4$62)) : createCommentVNode("", true)]),
801
+ createElementVNode("span", _hoisted_6$56, toDisplayString(option.label), 1),
802
+ option.description ? (openBlock(), createElementBlock("span", _hoisted_7$51, toDisplayString(option.description), 1)) : createCommentVNode("", true),
803
+ option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$46, [..._cache[4] || (_cache[4] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : createCommentVNode("", true)
804
+ ], 42, _hoisted_5$60);
805
+ }), 128))], 40, _hoisted_4$63)) : createCommentVNode("", true)]),
560
806
  _: 1
561
807
  })], 512);
562
808
  };
@@ -564,25 +810,25 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
564
810
  });
565
811
  //#endregion
566
812
  //#region src/components/Calendar.vue?vue&type=script&setup=true&lang.ts
567
- var _hoisted_1$82 = { class: "mint-calendar" };
813
+ var _hoisted_1$84 = { class: "mint-calendar" };
568
814
  var _hoisted_2$72 = {
569
815
  key: 0,
570
816
  class: "mint-calendar__header"
571
817
  };
572
818
  var _hoisted_3$65 = { class: "mint-calendar__title" };
573
- var _hoisted_4$61 = { class: "mint-calendar__weekdays" };
574
- var _hoisted_5$58 = { class: "mint-calendar__grid" };
575
- var _hoisted_6$54 = [
819
+ var _hoisted_4$62 = { class: "mint-calendar__weekdays" };
820
+ var _hoisted_5$59 = { class: "mint-calendar__grid" };
821
+ var _hoisted_6$55 = [
576
822
  "disabled",
577
823
  "onClick",
578
824
  "onMouseenter"
579
825
  ];
580
- var _hoisted_7$48 = { class: "mint-calendar__day-number" };
581
- var _hoisted_8$43 = {
826
+ var _hoisted_7$50 = { class: "mint-calendar__day-number" };
827
+ var _hoisted_8$45 = {
582
828
  key: 0,
583
829
  class: "mint-calendar__markers"
584
830
  };
585
- var _hoisted_9$41 = ["title"];
831
+ var _hoisted_9$42 = ["title"];
586
832
  //#endregion
587
833
  //#region src/components/Calendar.vue
588
834
  var Calendar_default = /* @__PURE__ */ defineComponent({
@@ -798,7 +1044,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
798
1044
  emit("navigate", "next", currentMonth.value, currentYear.value);
799
1045
  }
800
1046
  return (_ctx, _cache) => {
801
- return openBlock(), createElementBlock("div", _hoisted_1$82, [
1047
+ return openBlock(), createElementBlock("div", _hoisted_1$84, [
802
1048
  __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$72, [
803
1049
  createElementVNode("button", {
804
1050
  type: "button",
@@ -833,7 +1079,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
833
1079
  "stroke-linejoin": "round"
834
1080
  }, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])])
835
1081
  ])) : createCommentVNode("", true),
836
- createElementVNode("div", _hoisted_4$61, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekDayLabels.value, (label, i) => {
1082
+ createElementVNode("div", _hoisted_4$62, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekDayLabels.value, (label, i) => {
837
1083
  return openBlock(), createElementBlock("span", {
838
1084
  key: i,
839
1085
  class: "mint-calendar__weekday"
@@ -842,7 +1088,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
842
1088
  index: i
843
1089
  }, () => [createTextVNode(toDisplayString(label), 1)])]);
844
1090
  }), 128))]),
845
- createElementVNode("div", _hoisted_5$58, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day, i) => {
1091
+ createElementVNode("div", _hoisted_5$59, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day, i) => {
846
1092
  return openBlock(), createElementBlock("button", {
847
1093
  key: i,
848
1094
  type: "button",
@@ -857,14 +1103,14 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
857
1103
  }]),
858
1104
  onClick: ($event) => handleDayClick(day),
859
1105
  onMouseenter: ($event) => handleDayHover(day)
860
- }, [renderSlot(_ctx.$slots, "day-content", { day }, () => [createElementVNode("span", _hoisted_7$48, toDisplayString(day.dayOfMonth), 1), day.markers.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_8$43, [(openBlock(true), createElementBlock(Fragment, null, renderList(day.markers.slice(0, 3), (marker, mi) => {
1106
+ }, [renderSlot(_ctx.$slots, "day-content", { day }, () => [createElementVNode("span", _hoisted_7$50, toDisplayString(day.dayOfMonth), 1), day.markers.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_8$45, [(openBlock(true), createElementBlock(Fragment, null, renderList(day.markers.slice(0, 3), (marker, mi) => {
861
1107
  return openBlock(), createElementBlock("span", {
862
1108
  key: mi,
863
1109
  class: normalizeClass(["mint-calendar__marker", `mint-calendar__marker--${marker.type ?? "dot"}`]),
864
1110
  style: normalizeStyle(marker.color ? { "--marker-color": marker.color } : {}),
865
1111
  title: marker.label
866
- }, null, 14, _hoisted_9$41);
867
- }), 128))])) : createCommentVNode("", true)])], 42, _hoisted_6$54);
1112
+ }, null, 14, _hoisted_9$42);
1113
+ }), 128))])) : createCommentVNode("", true)])], 42, _hoisted_6$55);
868
1114
  }), 128))])
869
1115
  ]);
870
1116
  };
@@ -872,7 +1118,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
872
1118
  });
873
1119
  //#endregion
874
1120
  //#region src/components/LoadingSpinner.vue?vue&type=script&setup=true&lang.ts
875
- var _hoisted_1$81 = { class: "mint-spinner__label" };
1121
+ var _hoisted_1$83 = { class: "mint-spinner__label" };
876
1122
  //#endregion
877
1123
  //#region src/components/LoadingSpinner.vue
878
1124
  var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
@@ -907,13 +1153,13 @@ var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
907
1153
  style: { "opacity": "0.75" },
908
1154
  fill: "currentColor",
909
1155
  d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
910
- })], -1)), createElementVNode("span", _hoisted_1$81, toDisplayString(__props.label), 1)], 2);
1156
+ })], -1)), createElementVNode("span", _hoisted_1$83, toDisplayString(__props.label), 1)], 2);
911
1157
  };
912
1158
  }
913
1159
  });
914
1160
  //#endregion
915
1161
  //#region src/components/internal/DataStateInternal.vue?vue&type=script&setup=true&lang.ts
916
- var _hoisted_1$80 = ["data-state"];
1162
+ var _hoisted_1$82 = ["data-state"];
917
1163
  var _hoisted_2$71 = {
918
1164
  class: "mint-data-state__loading-text",
919
1165
  "aria-hidden": "true"
@@ -978,51 +1224,51 @@ var DataStateInternal_default = /* @__PURE__ */ defineComponent({
978
1224
  "size",
979
1225
  "variant",
980
1226
  "action-label"
981
- ]))], 10, _hoisted_1$80);
1227
+ ]))], 10, _hoisted_1$82);
982
1228
  };
983
1229
  }
984
1230
  });
985
1231
  //#endregion
986
1232
  //#region src/components/DataFrame.vue?vue&type=script&setup=true&lang.ts
987
- var _hoisted_1$79 = {
1233
+ var _hoisted_1$81 = {
988
1234
  key: 0,
989
1235
  class: "mint-dataframe__header"
990
1236
  };
991
1237
  var _hoisted_2$70 = { class: "mint-dataframe__search-wrapper" };
992
1238
  var _hoisted_3$64 = ["placeholder"];
993
- var _hoisted_4$60 = { class: "mint-dataframe__table" };
994
- var _hoisted_5$57 = {
1239
+ var _hoisted_4$61 = { class: "mint-dataframe__table" };
1240
+ var _hoisted_5$58 = {
995
1241
  key: 0,
996
1242
  class: "mint-dataframe__th mint-dataframe__th--checkbox"
997
1243
  };
998
- var _hoisted_6$53 = ["checked", "indeterminate"];
999
- var _hoisted_7$47 = ["aria-sort"];
1000
- var _hoisted_8$42 = { class: "mint-dataframe__th-content" };
1001
- var _hoisted_9$40 = [
1244
+ var _hoisted_6$54 = ["checked", "indeterminate"];
1245
+ var _hoisted_7$49 = ["aria-sort"];
1246
+ var _hoisted_8$44 = { class: "mint-dataframe__th-content" };
1247
+ var _hoisted_9$41 = [
1002
1248
  "aria-label",
1003
1249
  "aria-valuemin",
1004
1250
  "aria-valuenow",
1005
1251
  "onMousedown",
1006
1252
  "onKeydown"
1007
1253
  ];
1008
- var _hoisted_10$36 = [
1254
+ var _hoisted_10$37 = [
1009
1255
  "tabindex",
1010
1256
  "role",
1011
1257
  "onClick",
1012
1258
  "onKeydown"
1013
1259
  ];
1014
- var _hoisted_11$34 = {
1260
+ var _hoisted_11$35 = {
1015
1261
  key: 0,
1016
1262
  class: "mint-dataframe__td mint-dataframe__td--checkbox"
1017
1263
  };
1018
- var _hoisted_12$30 = ["checked", "onChange"];
1019
- var _hoisted_13$30 = ["onClick"];
1020
- var _hoisted_14$28 = [
1264
+ var _hoisted_12$31 = ["checked", "onChange"];
1265
+ var _hoisted_13$31 = ["onClick"];
1266
+ var _hoisted_14$29 = [
1021
1267
  "aria-label",
1022
1268
  "title",
1023
1269
  "onClick"
1024
1270
  ];
1025
- var _hoisted_15$28 = {
1271
+ var _hoisted_15$29 = {
1026
1272
  key: 0,
1027
1273
  class: "mint-dataframe__state"
1028
1274
  };
@@ -1034,15 +1280,15 @@ var _hoisted_17$23 = {
1034
1280
  key: 2,
1035
1281
  class: "mint-dataframe__loading"
1036
1282
  };
1037
- var _hoisted_18$20 = {
1283
+ var _hoisted_18$21 = {
1038
1284
  key: 1,
1039
1285
  class: "mint-dataframe__footer"
1040
1286
  };
1041
- var _hoisted_19$17 = { class: "mint-dataframe__page-info" };
1042
- var _hoisted_20$16 = { class: "mint-dataframe__page-controls" };
1043
- var _hoisted_21$15 = ["disabled"];
1044
- var _hoisted_22$14 = { class: "mint-dataframe__page-number" };
1045
- var _hoisted_23$13 = ["disabled"];
1287
+ var _hoisted_19$18 = { class: "mint-dataframe__page-info" };
1288
+ var _hoisted_20$17 = { class: "mint-dataframe__page-controls" };
1289
+ var _hoisted_21$16 = ["disabled"];
1290
+ var _hoisted_22$15 = { class: "mint-dataframe__page-number" };
1291
+ var _hoisted_23$14 = ["disabled"];
1046
1292
  /** Inbox glyph kept from the pre-1.2 hand-rolled empty state. */
1047
1293
  var EMPTY_ICON_PATH$2 = "M22 12L16 12L14 15L10 15L8 12L2 12M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z";
1048
1294
  var MIN_COL_WIDTH = 48;
@@ -1325,7 +1571,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1325
1571
  });
1326
1572
  return (_ctx, _cache) => {
1327
1573
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dataframe", { "mint-dataframe--bordered": __props.bordered }]) }, [
1328
- __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$79, [createElementVNode("div", _hoisted_2$70, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1574
+ __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$81, [createElementVNode("div", _hoisted_2$70, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1329
1575
  class: "mint-dataframe__search-icon",
1330
1576
  viewBox: "0 0 24 24",
1331
1577
  fill: "none",
@@ -1347,14 +1593,14 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1347
1593
  class: "mint-dataframe__table-wrapper",
1348
1594
  style: normalizeStyle(wrapperStyle.value)
1349
1595
  }, [
1350
- createElementVNode("table", _hoisted_4$60, [createElementVNode("thead", { class: normalizeClass(["mint-dataframe__thead", { "mint-dataframe__thead--sticky": __props.stickyHeader }]) }, [createElementVNode("tr", null, [
1351
- __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_5$57, [createElementVNode("input", {
1596
+ createElementVNode("table", _hoisted_4$61, [createElementVNode("thead", { class: normalizeClass(["mint-dataframe__thead", { "mint-dataframe__thead--sticky": __props.stickyHeader }]) }, [createElementVNode("tr", null, [
1597
+ __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_5$58, [createElementVNode("input", {
1352
1598
  type: "checkbox",
1353
1599
  checked: allSelected.value,
1354
1600
  indeterminate: selectIndeterminate.value,
1355
1601
  class: "mint-dataframe__checkbox",
1356
1602
  onChange: toggleSelectAll
1357
- }, null, 40, _hoisted_6$53)])) : createCommentVNode("", true),
1603
+ }, null, 40, _hoisted_6$54)])) : createCommentVNode("", true),
1358
1604
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
1359
1605
  return openBlock(), createElementBlock("th", {
1360
1606
  key: col.key,
@@ -1376,7 +1622,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1376
1622
  onClick: ($event) => isColumnSortable(col) ? handleSort(col) : void 0,
1377
1623
  onKeydown: ($event) => isColumnSortable(col) ? handleSortKeydown($event, col) : void 0
1378
1624
  }, {
1379
- default: withCtx(() => [renderSlot(_ctx.$slots, `header-${col.key}`, { column: col }, () => [createElementVNode("div", _hoisted_8$42, [createElementVNode("span", null, toDisplayString(col.label), 1), isColumnSortable(col) ? (openBlock(), createElementBlock("svg", {
1625
+ default: withCtx(() => [renderSlot(_ctx.$slots, `header-${col.key}`, { column: col }, () => [createElementVNode("div", _hoisted_8$44, [createElementVNode("span", null, toDisplayString(col.label), 1), isColumnSortable(col) ? (openBlock(), createElementBlock("svg", {
1380
1626
  key: 0,
1381
1627
  class: normalizeClass(["mint-dataframe__sort-icon", {
1382
1628
  "mint-dataframe__sort-icon--asc": activeSort.value?.key === col.key && activeSort.value?.direction === "asc",
@@ -1411,7 +1657,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1411
1657
  onMousedown: ($event) => startResize(col, $event),
1412
1658
  onKeydown: ($event) => handleResizeKeydown($event, col),
1413
1659
  onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
1414
- }, null, 40, _hoisted_9$40)) : createCommentVNode("", true)], 14, _hoisted_7$47);
1660
+ }, null, 40, _hoisted_9$41)) : createCommentVNode("", true)], 14, _hoisted_7$49);
1415
1661
  }), 128)),
1416
1662
  __props.deletable ? (openBlock(), createElementBlock("th", {
1417
1663
  key: 1,
@@ -1435,13 +1681,13 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1435
1681
  onClick: ($event) => handleRowClick(row, rowIndex),
1436
1682
  onKeydown: ($event) => handleRowKeydown($event, row, rowIndex)
1437
1683
  }, [
1438
- __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_11$34, [createElementVNode("input", {
1684
+ __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_11$35, [createElementVNode("input", {
1439
1685
  type: "checkbox",
1440
1686
  checked: unref(rowSelection).isSelected(getRowKey(row, rowIndex)),
1441
1687
  class: "mint-dataframe__checkbox",
1442
1688
  onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
1443
1689
  onChange: ($event) => toggleRowSelect(getRowKey(row, rowIndex))
1444
- }, null, 40, _hoisted_12$30)])) : createCommentVNode("", true),
1690
+ }, null, 40, _hoisted_12$31)])) : createCommentVNode("", true),
1445
1691
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
1446
1692
  return openBlock(), createElementBlock("td", {
1447
1693
  key: col.key,
@@ -1457,7 +1703,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1457
1703
  row,
1458
1704
  column: col,
1459
1705
  index: rowIndex
1460
- }, () => [createTextVNode(toDisplayString(formatCell(col, row, rowIndex)), 1)])], 10, _hoisted_13$30);
1706
+ }, () => [createTextVNode(toDisplayString(formatCell(col, row, rowIndex)), 1)])], 10, _hoisted_13$31);
1461
1707
  }), 128)),
1462
1708
  __props.deletable ? (openBlock(), createElementBlock("td", {
1463
1709
  key: 1,
@@ -1472,10 +1718,10 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1472
1718
  "aria-label": __props.deleteLabel,
1473
1719
  title: __props.deleteLabel,
1474
1720
  onClick: withModifiers(($event) => handleDeleteRow(row, rowIndex), ["stop"])
1475
- }, [..._cache[7] || (_cache[7] = [createStaticVNode("<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 6h18\"></path><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\"></path><path d=\"M10 11v6\"></path><path d=\"M14 11v6\"></path></svg>", 1)])], 8, _hoisted_14$28)], 2)) : createCommentVNode("", true)
1476
- ], 42, _hoisted_10$36);
1721
+ }, [..._cache[7] || (_cache[7] = [createStaticVNode("<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 6h18\"></path><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\"></path><path d=\"M10 11v6\"></path><path d=\"M14 11v6\"></path></svg>", 1)])], 8, _hoisted_14$29)], 2)) : createCommentVNode("", true)
1722
+ ], 42, _hoisted_10$37);
1477
1723
  }), 128))])]),
1478
- __props.error ? (openBlock(), createElementBlock("div", _hoisted_15$28, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
1724
+ __props.error ? (openBlock(), createElementBlock("div", _hoisted_15$29, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
1479
1725
  state: "error",
1480
1726
  title: __props.error
1481
1727
  }, null, 8, ["title"])])])) : paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_16$25, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
@@ -1485,7 +1731,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1485
1731
  }, null, 8, ["title"])])])) : createCommentVNode("", true),
1486
1732
  __props.loading ? (openBlock(), createElementBlock("div", _hoisted_17$23, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(LoadingSpinner_default, { size: "lg" })])])) : createCommentVNode("", true)
1487
1733
  ], 4),
1488
- __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_18$20, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_19$17, toDisplayString((__props.pagination.page - 1) * __props.pagination.pageSize + 1) + "–" + toDisplayString(Math.min(__props.pagination.page * __props.pagination.pageSize, unref(sortedData).length)) + " of " + toDisplayString(unref(sortedData).length), 1), createElementVNode("div", _hoisted_20$16, [
1734
+ __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_18$21, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_19$18, toDisplayString((__props.pagination.page - 1) * __props.pagination.pageSize + 1) + "–" + toDisplayString(Math.min(__props.pagination.page * __props.pagination.pageSize, unref(sortedData).length)) + " of " + toDisplayString(unref(sortedData).length), 1), createElementVNode("div", _hoisted_20$17, [
1489
1735
  createElementVNode("button", {
1490
1736
  type: "button",
1491
1737
  class: "mint-dataframe__page-btn",
@@ -1498,8 +1744,8 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1498
1744
  "stroke-width": "2",
1499
1745
  "stroke-linecap": "round",
1500
1746
  "stroke-linejoin": "round"
1501
- }, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_21$15),
1502
- createElementVNode("span", _hoisted_22$14, toDisplayString(__props.pagination.page) + " / " + toDisplayString(totalPages.value), 1),
1747
+ }, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_21$16),
1748
+ createElementVNode("span", _hoisted_22$15, toDisplayString(__props.pagination.page) + " / " + toDisplayString(totalPages.value), 1),
1503
1749
  createElementVNode("button", {
1504
1750
  type: "button",
1505
1751
  class: "mint-dataframe__page-btn",
@@ -1512,7 +1758,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1512
1758
  "stroke-width": "2",
1513
1759
  "stroke-linecap": "round",
1514
1760
  "stroke-linejoin": "round"
1515
- }, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])], 8, _hoisted_23$13)
1761
+ }, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])], 8, _hoisted_23$14)
1516
1762
  ])])])) : createCommentVNode("", true)
1517
1763
  ], 2);
1518
1764
  };
@@ -1520,57 +1766,111 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1520
1766
  });
1521
1767
  //#endregion
1522
1768
  //#region src/components/AppToastContainer.vue?vue&type=script&setup=true&lang.ts
1523
- var _hoisted_1$78 = { class: "mint-toast__container" };
1524
- var _hoisted_2$69 = ["onClick"];
1525
- var _hoisted_3$63 = { class: "mint-toast__message" };
1769
+ var _hoisted_1$80 = { class: "mint-toast__container" };
1770
+ var _hoisted_2$69 = ["role", "onClick"];
1771
+ var _hoisted_3$63 = {
1772
+ key: 0,
1773
+ class: "mint-toast__icon",
1774
+ viewBox: "0 0 24 24",
1775
+ fill: "none",
1776
+ stroke: "currentColor",
1777
+ "stroke-width": "2",
1778
+ "stroke-linecap": "round",
1779
+ "stroke-linejoin": "round",
1780
+ "aria-hidden": "true"
1781
+ };
1782
+ var _hoisted_4$60 = {
1783
+ key: 1,
1784
+ class: "mint-toast__icon",
1785
+ viewBox: "0 0 24 24",
1786
+ fill: "none",
1787
+ stroke: "currentColor",
1788
+ "stroke-width": "2",
1789
+ "stroke-linecap": "round",
1790
+ "stroke-linejoin": "round",
1791
+ "aria-hidden": "true"
1792
+ };
1793
+ var _hoisted_5$57 = {
1794
+ key: 2,
1795
+ class: "mint-toast__icon",
1796
+ viewBox: "0 0 24 24",
1797
+ fill: "none",
1798
+ stroke: "currentColor",
1799
+ "stroke-width": "2",
1800
+ "stroke-linecap": "round",
1801
+ "stroke-linejoin": "round",
1802
+ "aria-hidden": "true"
1803
+ };
1804
+ var _hoisted_6$53 = {
1805
+ key: 3,
1806
+ class: "mint-toast__icon",
1807
+ viewBox: "0 0 24 24",
1808
+ fill: "none",
1809
+ stroke: "currentColor",
1810
+ "stroke-width": "2",
1811
+ "stroke-linecap": "round",
1812
+ "stroke-linejoin": "round",
1813
+ "aria-hidden": "true"
1814
+ };
1815
+ var _hoisted_7$48 = { class: "mint-toast__body" };
1816
+ var _hoisted_8$43 = { class: "mint-toast__title" };
1817
+ var _hoisted_9$40 = { class: "mint-toast__message" };
1818
+ var _hoisted_10$36 = {
1819
+ key: 0,
1820
+ class: "mint-toast__count"
1821
+ };
1822
+ var _hoisted_11$34 = {
1823
+ key: 0,
1824
+ class: "mint-toast__detail"
1825
+ };
1826
+ var _hoisted_12$30 = {
1827
+ key: 1,
1828
+ class: "mint-toast__actions"
1829
+ };
1830
+ var _hoisted_13$30 = ["onClick"];
1831
+ var _hoisted_14$28 = ["onClick"];
1832
+ var _hoisted_15$28 = {
1833
+ key: 6,
1834
+ class: "mint-toast__progress mint-toast__progress--indeterminate"
1835
+ };
1526
1836
  //#endregion
1527
1837
  //#region src/components/AppToastContainer.vue
1528
1838
  var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1529
1839
  __name: "AppToastContainer",
1530
1840
  setup(__props) {
1531
- /** Preferred toast container driven by useToast, with auto-dismiss progress bar and click-to-close on each notification. */
1841
+ /** Preferred toast container driven by useToast: title/detail, up to two actions, TTL or indeterminate bar, click-to-close. */
1532
1842
  const { toasts, dismiss } = useToast();
1533
- const accentColors = {
1534
- success: "var(--mint-success)",
1535
- error: "var(--mint-error)",
1536
- warning: "var(--mint-warning)",
1537
- info: "var(--mint-info)"
1538
- };
1843
+ function title(toast) {
1844
+ return toast.title ?? toast.message;
1845
+ }
1846
+ function actions(toast) {
1847
+ return (toast.actions ?? []).slice(0, 2);
1848
+ }
1849
+ function progress(toast) {
1850
+ return toast.progress ?? "ttl";
1851
+ }
1852
+ function runAction(toast, action) {
1853
+ action.onClick();
1854
+ dismiss(toast.id);
1855
+ }
1539
1856
  return (_ctx, _cache) => {
1540
- return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$78, [createVNode(TransitionGroup, { name: "toast" }, {
1857
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$80, [createVNode(TransitionGroup, { name: "toast" }, {
1541
1858
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(toasts), (toast) => {
1542
1859
  return openBlock(), createElementBlock("div", {
1543
1860
  key: toast.id,
1544
- class: normalizeClass(["mint-toast__item", `mint-toast__item--${toast.type}`]),
1545
- style: normalizeStyle({ borderLeftColor: accentColors[toast.type] }),
1546
- role: "alert",
1861
+ class: normalizeClass([
1862
+ "mint-toast__item",
1863
+ `mint-toast__item--${toast.type}`,
1864
+ (toast.count ?? 1) > 1 ? "mint-toast__item--stacked" : ""
1865
+ ]),
1866
+ role: toast.type === "error" || toast.type === "warning" ? "alert" : "status",
1547
1867
  onClick: ($event) => unref(dismiss)(toast.id)
1548
1868
  }, [
1549
- toast.type === "success" ? (openBlock(), createElementBlock("svg", {
1550
- key: 0,
1551
- class: "mint-toast__icon",
1552
- viewBox: "0 0 24 24",
1553
- fill: "none",
1554
- stroke: "currentColor",
1555
- "stroke-width": "2",
1556
- "stroke-linecap": "round",
1557
- "stroke-linejoin": "round",
1558
- style: normalizeStyle({ color: accentColors[toast.type] })
1559
- }, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
1869
+ toast.type === "success" ? (openBlock(), createElementBlock("svg", _hoisted_3$63, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
1560
1870
  cx: "12",
1561
1871
  cy: "12",
1562
1872
  r: "10"
1563
- }, null, -1), createElementVNode("path", { d: "m9 12 2 2 4-4" }, null, -1)])], 4)) : toast.type === "error" ? (openBlock(), createElementBlock("svg", {
1564
- key: 1,
1565
- class: "mint-toast__icon",
1566
- viewBox: "0 0 24 24",
1567
- fill: "none",
1568
- stroke: "currentColor",
1569
- "stroke-width": "2",
1570
- "stroke-linecap": "round",
1571
- "stroke-linejoin": "round",
1572
- style: normalizeStyle({ color: accentColors[toast.type] })
1573
- }, [..._cache[1] || (_cache[1] = [
1873
+ }, null, -1), createElementVNode("path", { d: "m9 12 2 2 4-4" }, null, -1)])])) : toast.type === "error" ? (openBlock(), createElementBlock("svg", _hoisted_4$60, [..._cache[1] || (_cache[1] = [
1574
1874
  createElementVNode("circle", {
1575
1875
  cx: "12",
1576
1876
  cy: "12",
@@ -1578,31 +1878,11 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1578
1878
  }, null, -1),
1579
1879
  createElementVNode("path", { d: "m15 9-6 6" }, null, -1),
1580
1880
  createElementVNode("path", { d: "m9 9 6 6" }, null, -1)
1581
- ])], 4)) : toast.type === "warning" ? (openBlock(), createElementBlock("svg", {
1582
- key: 2,
1583
- class: "mint-toast__icon",
1584
- viewBox: "0 0 24 24",
1585
- fill: "none",
1586
- stroke: "currentColor",
1587
- "stroke-width": "2",
1588
- "stroke-linecap": "round",
1589
- "stroke-linejoin": "round",
1590
- style: normalizeStyle({ color: accentColors[toast.type] })
1591
- }, [..._cache[2] || (_cache[2] = [
1881
+ ])])) : toast.type === "warning" ? (openBlock(), createElementBlock("svg", _hoisted_5$57, [..._cache[2] || (_cache[2] = [
1592
1882
  createElementVNode("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }, null, -1),
1593
1883
  createElementVNode("path", { d: "M12 9v4" }, null, -1),
1594
1884
  createElementVNode("path", { d: "M12 17h.01" }, null, -1)
1595
- ])], 4)) : (openBlock(), createElementBlock("svg", {
1596
- key: 3,
1597
- class: "mint-toast__icon",
1598
- viewBox: "0 0 24 24",
1599
- fill: "none",
1600
- stroke: "currentColor",
1601
- "stroke-width": "2",
1602
- "stroke-linecap": "round",
1603
- "stroke-linejoin": "round",
1604
- style: normalizeStyle({ color: accentColors[toast.type] })
1605
- }, [..._cache[3] || (_cache[3] = [
1885
+ ])])) : (openBlock(), createElementBlock("svg", _hoisted_6$53, [..._cache[3] || (_cache[3] = [
1606
1886
  createElementVNode("circle", {
1607
1887
  cx: "12",
1608
1888
  cy: "12",
@@ -1610,16 +1890,39 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1610
1890
  }, null, -1),
1611
1891
  createElementVNode("path", { d: "M12 16v-4" }, null, -1),
1612
1892
  createElementVNode("path", { d: "M12 8h.01" }, null, -1)
1613
- ])], 4)),
1614
- createElementVNode("span", _hoisted_3$63, toDisplayString(toast.message), 1),
1615
- createElementVNode("span", {
1893
+ ])])),
1894
+ createElementVNode("div", _hoisted_7$48, [
1895
+ createElementVNode("div", _hoisted_8$43, [createElementVNode("span", _hoisted_9$40, toDisplayString(title(toast)), 1), (toast.count ?? 1) > 1 ? (openBlock(), createElementBlock("span", _hoisted_10$36, "×" + toDisplayString(toast.count), 1)) : createCommentVNode("", true)]),
1896
+ toast.detail ? (openBlock(), createElementBlock("div", _hoisted_11$34, toDisplayString(toast.detail), 1)) : createCommentVNode("", true),
1897
+ actions(toast).length ? (openBlock(), createElementBlock("div", _hoisted_12$30, [(openBlock(true), createElementBlock(Fragment, null, renderList(actions(toast), (action) => {
1898
+ return openBlock(), createElementBlock("button", {
1899
+ key: action.label,
1900
+ type: "button",
1901
+ class: normalizeClass(["mint-toast__action", action.primary ? "mint-toast__action--primary" : ""]),
1902
+ onClick: withModifiers(($event) => runAction(toast, action), ["stop"])
1903
+ }, toDisplayString(action.label), 11, _hoisted_13$30);
1904
+ }), 128))])) : createCommentVNode("", true)
1905
+ ]),
1906
+ toast.dismissible !== false ? (openBlock(), createElementBlock("button", {
1907
+ key: 4,
1908
+ type: "button",
1909
+ class: "mint-toast__close",
1910
+ "aria-label": "Dismiss",
1911
+ onClick: withModifiers(($event) => unref(dismiss)(toast.id), ["stop"])
1912
+ }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
1913
+ viewBox: "0 0 24 24",
1914
+ fill: "none",
1915
+ stroke: "currentColor",
1916
+ "stroke-width": "2.2",
1917
+ "stroke-linecap": "round",
1918
+ "aria-hidden": "true"
1919
+ }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])], 8, _hoisted_14$28)) : createCommentVNode("", true),
1920
+ progress(toast) === "ttl" ? (openBlock(), createElementBlock("span", {
1921
+ key: 5,
1616
1922
  class: "mint-toast__progress",
1617
- style: normalizeStyle({
1618
- backgroundColor: accentColors[toast.type],
1619
- animationDuration: `${toast.duration ?? 3500}ms`
1620
- })
1621
- }, null, 4)
1622
- ], 14, _hoisted_2$69);
1923
+ style: normalizeStyle({ animationDuration: `${toast.duration ?? 3500}ms` })
1924
+ }, null, 4)) : progress(toast) === "indeterminate" ? (openBlock(), createElementBlock("span", _hoisted_15$28)) : createCommentVNode("", true)
1925
+ ], 10, _hoisted_2$69);
1623
1926
  }), 128))]),
1624
1927
  _: 1
1625
1928
  })])]);
@@ -1628,7 +1931,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1628
1931
  });
1629
1932
  //#endregion
1630
1933
  //#region src/components/RuntimeUpdateNotice.vue?vue&type=script&setup=true&lang.ts
1631
- var _hoisted_1$77 = {
1934
+ var _hoisted_1$79 = {
1632
1935
  key: 0,
1633
1936
  class: "mint-runtime-update",
1634
1937
  role: "status"
@@ -1642,7 +1945,7 @@ var RuntimeUpdateNotice_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
1642
1945
  setup(__props, { emit: __emit }) {
1643
1946
  const emit = __emit;
1644
1947
  return (_ctx, _cache) => {
1645
- return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$77, [
1948
+ return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$79, [
1646
1949
  createVNode(unref(RefreshCw), {
1647
1950
  size: 16,
1648
1951
  "aria-hidden": "true"
@@ -1658,7 +1961,7 @@ var RuntimeUpdateNotice_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
1658
1961
  }), [["__scopeId", "data-v-9ca77e18"]]);
1659
1962
  //#endregion
1660
1963
  //#region src/components/IconButton.vue?vue&type=script&setup=true&lang.ts
1661
- var _hoisted_1$76 = [
1964
+ var _hoisted_1$78 = [
1662
1965
  "disabled",
1663
1966
  "aria-label",
1664
1967
  "title"
@@ -1720,13 +2023,13 @@ var IconButton_default = /* @__PURE__ */ defineComponent({
1720
2023
  }, null, -1)])], 2)) : (openBlock(), createElementBlock("span", {
1721
2024
  key: 1,
1722
2025
  class: normalizeClass(`mint-icon-button__icon--${__props.size}`)
1723
- }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$76);
2026
+ }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$78);
1724
2027
  };
1725
2028
  }
1726
2029
  });
1727
2030
  //#endregion
1728
2031
  //#region src/components/ActionMenu.vue?vue&type=script&setup=true&lang.ts
1729
- var _hoisted_1$75 = [
2032
+ var _hoisted_1$77 = [
1730
2033
  "href",
1731
2034
  "target",
1732
2035
  "rel",
@@ -1862,7 +2165,7 @@ var ActionMenu_default = /* @__PURE__ */ defineComponent({
1862
2165
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
1863
2166
  role: "menuitem",
1864
2167
  onClick: ($event) => handleSelect(item)
1865
- }, toDisplayString(item.label), 11, _hoisted_1$75)) : (openBlock(), createElementBlock("button", {
2168
+ }, toDisplayString(item.label), 11, _hoisted_1$77)) : (openBlock(), createElementBlock("button", {
1866
2169
  key: 1,
1867
2170
  type: "button",
1868
2171
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
@@ -1876,7 +2179,7 @@ var ActionMenu_default = /* @__PURE__ */ defineComponent({
1876
2179
  });
1877
2180
  //#endregion
1878
2181
  //#region src/components/ThemeToggle.vue?vue&type=script&setup=true&lang.ts
1879
- var _hoisted_1$74 = {
2182
+ var _hoisted_1$76 = {
1880
2183
  key: 0,
1881
2184
  class: "mint-theme-toggle__icon",
1882
2185
  viewBox: "0 0 24 24",
@@ -1912,7 +2215,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1912
2215
  label: unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
1913
2216
  onClick: unref(toggleTheme)
1914
2217
  }, {
1915
- default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$74, [..._cache[0] || (_cache[0] = [
2218
+ default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$76, [..._cache[0] || (_cache[0] = [
1916
2219
  createElementVNode("circle", {
1917
2220
  cx: "12",
1918
2221
  cy: "12",
@@ -1938,14 +2241,14 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1938
2241
  });
1939
2242
  //#endregion
1940
2243
  //#region src/components/CollapsibleCard.vue?vue&type=script&setup=true&lang.ts
1941
- var _hoisted_1$73 = { class: "mint-collapsible-card__header-shell" };
2244
+ var _hoisted_1$75 = { class: "mint-collapsible-card__header-shell" };
1942
2245
  var _hoisted_2$66 = ["disabled", "aria-expanded"];
1943
2246
  var _hoisted_3$62 = { class: "mint-collapsible-card__title-section" };
1944
2247
  var _hoisted_4$59 = ["d"];
1945
2248
  var _hoisted_5$56 = ["d"];
1946
2249
  var _hoisted_6$52 = { class: "mint-collapsible-card__titles" };
1947
- var _hoisted_7$46 = { class: "mint-collapsible-card__title" };
1948
- var _hoisted_8$41 = {
2250
+ var _hoisted_7$47 = { class: "mint-collapsible-card__title" };
2251
+ var _hoisted_8$42 = {
1949
2252
  key: 0,
1950
2253
  class: "mint-collapsible-card__subtitle"
1951
2254
  };
@@ -1980,7 +2283,7 @@ var _hoisted_16$24 = [
1980
2283
  "aria-expanded"
1981
2284
  ];
1982
2285
  var _hoisted_17$22 = { class: "mint-collapsible-card__body" };
1983
- var _hoisted_18$19 = { class: "mint-collapsible-card__content" };
2286
+ var _hoisted_18$20 = { class: "mint-collapsible-card__content" };
1984
2287
  //#endregion
1985
2288
  //#region src/components/CollapsibleCard.vue
1986
2289
  var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
@@ -2060,7 +2363,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2060
2363
  emit("action", action.id);
2061
2364
  }
2062
2365
  return (_ctx, _cache) => {
2063
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$73, [createElementVNode("button", {
2366
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$75, [createElementVNode("button", {
2064
2367
  type: "button",
2065
2368
  class: normalizeClass(headerClasses.value),
2066
2369
  disabled: __props.disabled,
@@ -2092,7 +2395,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2092
2395
  key: 1,
2093
2396
  class: "mint-collapsible-card__icon-text",
2094
2397
  style: normalizeStyle(iconColorStyle.value)
2095
- }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$52, [createElementVNode("h3", _hoisted_7$46, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$41, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$66), createElementVNode("div", _hoisted_9$39, [
2398
+ }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$52, [createElementVNode("h3", _hoisted_7$47, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$42, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$66), createElementVNode("div", _hoisted_9$39, [
2096
2399
  __props.badge !== void 0 ? (openBlock(), createElementBlock("span", {
2097
2400
  key: 0,
2098
2401
  class: normalizeClass(badgeClasses.value)
@@ -2147,7 +2450,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2147
2450
  "aria-hidden": "true"
2148
2451
  }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$24)
2149
2452
  ])]), createVNode(Transition, { name: "collapse" }, {
2150
- default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$22, [createElementVNode("div", _hoisted_18$19, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2453
+ default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$22, [createElementVNode("div", _hoisted_18$20, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2151
2454
  _: 3
2152
2455
  })], 2);
2153
2456
  };
@@ -2285,7 +2588,7 @@ function isFiniteNumber(value, min, max) {
2285
2588
  }
2286
2589
  //#endregion
2287
2590
  //#region src/components/internal/ActionItemInternal.vue?vue&type=script&setup=true&lang.ts
2288
- var _hoisted_1$72 = [
2591
+ var _hoisted_1$74 = [
2289
2592
  "href",
2290
2593
  "aria-disabled",
2291
2594
  "tabindex"
@@ -2342,7 +2645,7 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2342
2645
  "aria-disabled": __props.disabled || void 0,
2343
2646
  tabindex: __props.disabled ? -1 : void 0,
2344
2647
  onClick: handleClick
2345
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$72)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2648
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$74)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2346
2649
  key: 1,
2347
2650
  to: __props.to,
2348
2651
  custom: ""
@@ -2364,7 +2667,7 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2364
2667
  });
2365
2668
  //#endregion
2366
2669
  //#region src/components/PluginIcon.vue?vue&type=script&setup=true&lang.ts
2367
- var _hoisted_1$71 = ["viewBox"];
2670
+ var _hoisted_1$73 = ["viewBox"];
2368
2671
  var _hoisted_2$64 = { key: 0 };
2369
2672
  var _hoisted_3$60 = [
2370
2673
  "id",
@@ -2393,7 +2696,7 @@ var _hoisted_6$51 = [
2393
2696
  "stroke-width",
2394
2697
  "opacity"
2395
2698
  ];
2396
- var _hoisted_7$45 = {
2699
+ var _hoisted_7$46 = {
2397
2700
  key: 1,
2398
2701
  class: "mint-plugin-icon__svg",
2399
2702
  viewBox: "0 0 24 24",
@@ -2404,7 +2707,7 @@ var _hoisted_7$45 = {
2404
2707
  "stroke-linejoin": "round",
2405
2708
  "aria-hidden": "true"
2406
2709
  };
2407
- var _hoisted_8$40 = ["d"];
2710
+ var _hoisted_8$41 = ["d"];
2408
2711
  var _hoisted_9$38 = ["src"];
2409
2712
  //#endregion
2410
2713
  //#region src/components/PluginIcon.vue
@@ -2514,7 +2817,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2514
2817
  "stroke-linejoin": "round"
2515
2818
  }, null, 8, _hoisted_6$51);
2516
2819
  }), 128))
2517
- ], 8, _hoisted_1$71)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$45, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$40)])) : (openBlock(), createElementBlock("img", {
2820
+ ], 8, _hoisted_1$73)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$46, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$41)])) : (openBlock(), createElementBlock("img", {
2518
2821
  key: 2,
2519
2822
  class: "mint-plugin-icon__img",
2520
2823
  src: iconValue.value,
@@ -2527,7 +2830,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2527
2830
  });
2528
2831
  //#endregion
2529
2832
  //#region src/components/internal/AppTopBarPageSelectorInternal.vue?vue&type=script&setup=true&lang.ts
2530
- var _hoisted_1$70 = ["aria-expanded"];
2833
+ var _hoisted_1$72 = ["aria-expanded"];
2531
2834
  var _hoisted_2$63 = {
2532
2835
  key: 1,
2533
2836
  class: "mint-page-selector__icon-fallback"
@@ -2546,7 +2849,7 @@ var _hoisted_6$50 = {
2546
2849
  key: 1,
2547
2850
  class: "mint-page-selector__icon-fallback"
2548
2851
  };
2549
- var _hoisted_7$44 = { class: "mint-page-selector__item-label" };
2852
+ var _hoisted_7$45 = { class: "mint-page-selector__item-label" };
2550
2853
  //#endregion
2551
2854
  //#region src/components/internal/AppTopBarPageSelectorInternal.vue
2552
2855
  var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
@@ -2609,7 +2912,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2609
2912
  "stroke-linecap": "round",
2610
2913
  "stroke-linejoin": "round"
2611
2914
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
2612
- ], 10, _hoisted_1$70), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$54, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2915
+ ], 10, _hoisted_1$72), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$54, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2613
2916
  return openBlock(), createBlock(ActionItemInternal_default, {
2614
2917
  key: page.id,
2615
2918
  href: page.href,
@@ -2629,7 +2932,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2629
2932
  icon: page.icon,
2630
2933
  size: "sm",
2631
2934
  variant: "solid"
2632
- }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_6$50, toDisplayString(page.label.charAt(0)), 1))])], 2), createElementVNode("span", _hoisted_7$44, toDisplayString(page.label), 1)]),
2935
+ }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_6$50, toDisplayString(page.label.charAt(0)), 1))])], 2), createElementVNode("span", _hoisted_7$45, toDisplayString(page.label), 1)]),
2633
2936
  _: 2
2634
2937
  }, 1032, [
2635
2938
  "href",
@@ -2644,7 +2947,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2644
2947
  });
2645
2948
  //#endregion
2646
2949
  //#region src/components/internal/AppTopBarPillNavInternal.vue?vue&type=script&setup=true&lang.ts
2647
- var _hoisted_1$69 = {
2950
+ var _hoisted_1$71 = {
2648
2951
  class: "mint-pill-nav",
2649
2952
  "aria-label": "Primary"
2650
2953
  };
@@ -2677,8 +2980,8 @@ var _hoisted_6$49 = {
2677
2980
  "stroke-linejoin": "round",
2678
2981
  "aria-hidden": "true"
2679
2982
  };
2680
- var _hoisted_7$43 = ["d"];
2681
- var _hoisted_8$39 = ["d"];
2983
+ var _hoisted_7$44 = ["d"];
2984
+ var _hoisted_8$40 = ["d"];
2682
2985
  var _hoisted_9$37 = {
2683
2986
  key: 2,
2684
2987
  class: "mint-pill-nav__dropdown",
@@ -2744,7 +3047,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2744
3047
  }
2745
3048
  useEventListener(() => document, "click", handleClickOutside);
2746
3049
  return (_ctx, _cache) => {
2747
- return openBlock(), createElementBlock("nav", _hoisted_1$69, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
3050
+ return openBlock(), createElementBlock("nav", _hoisted_1$71, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
2748
3051
  return openBlock(), createElementBlock("div", {
2749
3052
  key: item.id,
2750
3053
  ref_for: true,
@@ -2799,11 +3102,11 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2799
3102
  return openBlock(), createElementBlock("path", {
2800
3103
  key: index,
2801
3104
  d
2802
- }, null, 8, _hoisted_7$43);
3105
+ }, null, 8, _hoisted_7$44);
2803
3106
  }), 128)) : (openBlock(), createElementBlock("path", {
2804
3107
  key: 1,
2805
3108
  d: item.icon
2806
- }, null, 8, _hoisted_8$39))])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(item.label), 1)]),
3109
+ }, null, 8, _hoisted_8$40))])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(item.label), 1)]),
2807
3110
  _: 2
2808
3111
  }, 1032, [
2809
3112
  "href",
@@ -2841,7 +3144,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2841
3144
  });
2842
3145
  //#endregion
2843
3146
  //#region src/components/AppAvatarMenu.vue?vue&type=script&setup=true&lang.ts
2844
- var _hoisted_1$68 = ["aria-expanded", "title"];
3147
+ var _hoisted_1$70 = ["aria-expanded", "title"];
2845
3148
  var _hoisted_2$61 = { class: "mint-avatar-menu__avatar" };
2846
3149
  var _hoisted_3$57 = {
2847
3150
  key: 0,
@@ -2859,12 +3162,12 @@ var _hoisted_6$48 = {
2859
3162
  key: 1,
2860
3163
  class: "mint-avatar-menu__user-email"
2861
3164
  };
2862
- var _hoisted_7$42 = {
3165
+ var _hoisted_7$43 = {
2863
3166
  key: 0,
2864
3167
  class: "mint-avatar-menu__divider",
2865
3168
  role: "separator"
2866
3169
  };
2867
- var _hoisted_8$38 = {
3170
+ var _hoisted_8$39 = {
2868
3171
  key: 0,
2869
3172
  class: "mint-avatar-menu__item-icon"
2870
3173
  };
@@ -2953,7 +3256,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2953
3256
  title: __props.userName ? `${__props.userName} · Account menu` : "Account menu",
2954
3257
  onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"])),
2955
3258
  onKeydown: _cache[1] || (_cache[1] = (...args) => unref(handleTriggerKeydown) && unref(handleTriggerKeydown)(...args))
2956
- }, [createElementVNode("span", _hoisted_2$61, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$57, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 42, _hoisted_1$68), unref(isOpen) ? (openBlock(), createElementBlock("div", {
3259
+ }, [createElementVNode("span", _hoisted_2$61, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$57, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 42, _hoisted_1$70), unref(isOpen) ? (openBlock(), createElementBlock("div", {
2957
3260
  key: 0,
2958
3261
  ref_key: "panelRef",
2959
3262
  ref: panelRef,
@@ -2963,7 +3266,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2963
3266
  }, [
2964
3267
  __props.userName || __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_4$55, [__props.userName ? (openBlock(), createElementBlock("div", _hoisted_5$52, toDisplayString(__props.userName), 1)) : createCommentVNode("", true), __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_6$48, toDisplayString(__props.userEmail), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
2965
3268
  renderSlot(_ctx.$slots, "items", { close: closeSilently }, () => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
2966
- return openBlock(), createElementBlock(Fragment, { key: item.id }, [item.divider ? (openBlock(), createElementBlock("div", _hoisted_7$42)) : (openBlock(), createBlock(ActionItemInternal_default, {
3269
+ return openBlock(), createElementBlock(Fragment, { key: item.id }, [item.divider ? (openBlock(), createElementBlock("div", _hoisted_7$43)) : (openBlock(), createBlock(ActionItemInternal_default, {
2967
3270
  key: 1,
2968
3271
  href: item.href,
2969
3272
  to: item.to,
@@ -2972,7 +3275,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2972
3275
  onClick: ($event) => handleSelect(item)
2973
3276
  }, {
2974
3277
  default: withCtx(() => [
2975
- item.icon ? (openBlock(), createElementBlock("span", _hoisted_8$38, [renderSlot(_ctx.$slots, "item-icon", { item })])) : createCommentVNode("", true),
3278
+ item.icon ? (openBlock(), createElementBlock("span", _hoisted_8$39, [renderSlot(_ctx.$slots, "item-icon", { item })])) : createCommentVNode("", true),
2976
3279
  createElementVNode("span", _hoisted_9$36, toDisplayString(item.label), 1),
2977
3280
  item.rightLabel ? (openBlock(), createElementBlock("span", _hoisted_10$33, toDisplayString(item.rightLabel), 1)) : createCommentVNode("", true)
2978
3281
  ]),
@@ -2999,7 +3302,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2999
3302
  });
3000
3303
  //#endregion
3001
3304
  //#region src/components/AppPluginSwitcher.vue?vue&type=script&setup=true&lang.ts
3002
- var _hoisted_1$67 = ["aria-expanded"];
3305
+ var _hoisted_1$69 = ["aria-expanded"];
3003
3306
  var _hoisted_2$60 = { class: "mint-plugin-switcher__label" };
3004
3307
  var _hoisted_3$56 = {
3005
3308
  key: 0,
@@ -3015,11 +3318,11 @@ var _hoisted_5$51 = {
3015
3318
  role: "menu"
3016
3319
  };
3017
3320
  var _hoisted_6$47 = { class: "mint-plugin-switcher__item-label" };
3018
- var _hoisted_7$41 = {
3321
+ var _hoisted_7$42 = {
3019
3322
  key: 0,
3020
3323
  class: "mint-plugin-switcher__item-version"
3021
3324
  };
3022
- var _hoisted_8$37 = {
3325
+ var _hoisted_8$38 = {
3023
3326
  key: 1,
3024
3327
  class: "mint-plugin-switcher__item-check",
3025
3328
  viewBox: "0 0 24 24",
@@ -3092,7 +3395,7 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
3092
3395
  "stroke-linecap": "round",
3093
3396
  "stroke-linejoin": "round"
3094
3397
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
3095
- ], 10, _hoisted_1$67), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$51, [
3398
+ ], 10, _hoisted_1$69), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$51, [
3096
3399
  _cache[4] || (_cache[4] = createElementVNode("div", { class: "mint-plugin-switcher__menu-title" }, "Switch plugin", -1)),
3097
3400
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.plugins, (plugin) => {
3098
3401
  return openBlock(), createBlock(ActionItemInternal_default, {
@@ -3109,8 +3412,8 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
3109
3412
  style: normalizeStyle({ background: plugin.color ?? "var(--color-primary)" })
3110
3413
  }, toDisplayString(initialsOf(plugin)), 5),
3111
3414
  createElementVNode("span", _hoisted_6$47, toDisplayString(plugin.label), 1),
3112
- plugin.version ? (openBlock(), createElementBlock("span", _hoisted_7$41, "v" + toDisplayString(plugin.version), 1)) : createCommentVNode("", true),
3113
- plugin.id === __props.current.id ? (openBlock(), createElementBlock("svg", _hoisted_8$37, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "M5 13l4 4L19 7" }, null, -1)])])) : createCommentVNode("", true)
3415
+ plugin.version ? (openBlock(), createElementBlock("span", _hoisted_7$42, "v" + toDisplayString(plugin.version), 1)) : createCommentVNode("", true),
3416
+ plugin.id === __props.current.id ? (openBlock(), createElementBlock("svg", _hoisted_8$38, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "M5 13l4 4L19 7" }, null, -1)])])) : createCommentVNode("", true)
3114
3417
  ]),
3115
3418
  _: 2
3116
3419
  }, 1032, [
@@ -3189,7 +3492,7 @@ function currentItemIdFromLocation(pages, pathname, routePrefix) {
3189
3492
  }
3190
3493
  //#endregion
3191
3494
  //#region src/components/AppTopBar.vue?vue&type=script&setup=true&lang.ts
3192
- var _hoisted_1$66 = { class: "mint-topbar__container" };
3495
+ var _hoisted_1$68 = { class: "mint-topbar__container" };
3193
3496
  var _hoisted_2$59 = { class: "mint-topbar__brand" };
3194
3497
  var _hoisted_3$55 = ["href"];
3195
3498
  var _hoisted_4$53 = {
@@ -3204,11 +3507,11 @@ var _hoisted_6$46 = {
3204
3507
  key: 0,
3205
3508
  class: "mint-topbar__identity"
3206
3509
  };
3207
- var _hoisted_7$40 = {
3510
+ var _hoisted_7$41 = {
3208
3511
  key: 0,
3209
3512
  class: "mint-topbar__logo"
3210
3513
  };
3211
- var _hoisted_8$36 = {
3514
+ var _hoisted_8$37 = {
3212
3515
  key: 0,
3213
3516
  class: "mint-topbar__identity"
3214
3517
  };
@@ -3239,7 +3542,7 @@ var _hoisted_17$21 = {
3239
3542
  key: 2,
3240
3543
  class: "mint-topbar__standalone-badge"
3241
3544
  };
3242
- var _hoisted_18$18 = {
3545
+ var _hoisted_18$19 = {
3243
3546
  key: 0,
3244
3547
  class: "mint-topbar__icon-btn-dot",
3245
3548
  "aria-hidden": "true"
@@ -3309,9 +3612,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3309
3612
  setup(__props, { emit: __emit }) {
3310
3613
  /** Full application top bar with brand logo, page selector or plugin switcher, centered pill nav, experiment popover, and avatar menu. */
3311
3614
  const props = __props;
3312
- const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-BYR20I4c.js").then((n) => n.n));
3615
+ const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-DELMkUFR.js").then((n) => n.n));
3313
3616
  const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-CJdNlCZb.js").then((n) => n.n));
3314
- const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-DCXmwKNS.js").then((n) => n.n));
3617
+ const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-DHE9k8TP.js").then((n) => n.n));
3315
3618
  const emit = __emit;
3316
3619
  const settingsOpen = ref(false);
3317
3620
  const { isIntegrated, plugin } = usePlatformContext();
@@ -3347,7 +3650,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3347
3650
  return (_ctx, _cache) => {
3348
3651
  const _component_router_link = resolveComponent("router-link");
3349
3652
  return openBlock(), createElementBlock(Fragment, null, [
3350
- createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$66, [
3653
+ createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$68, [
3351
3654
  createElementVNode("div", _hoisted_2$59, [__props.homePath && (__props.homePath.startsWith("http") || __props.homePath.startsWith("/")) ? (openBlock(), createElementBlock("a", {
3352
3655
  key: 0,
3353
3656
  href: __props.homePath,
@@ -3385,9 +3688,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3385
3688
  tone: pluginIcon.value.color,
3386
3689
  size: "topbar",
3387
3690
  variant: "solid"
3388
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_7$40, [..._cache[17] || (_cache[17] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])])) : createCommentVNode("", true)]),
3691
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_7$41, [..._cache[17] || (_cache[17] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])])) : createCommentVNode("", true)]),
3389
3692
  _: 3
3390
- }, 8, ["to"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(isIntegrated) || _ctx.$slots.icon || _ctx.$slots.logo || pluginIcon.value || __props.showLogo ? (openBlock(), createElementBlock("span", _hoisted_8$36, [unref(isIntegrated) ? (openBlock(), createBlock(PluginIcon_default, {
3693
+ }, 8, ["to"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(isIntegrated) || _ctx.$slots.icon || _ctx.$slots.logo || pluginIcon.value || __props.showLogo ? (openBlock(), createElementBlock("span", _hoisted_8$37, [unref(isIntegrated) ? (openBlock(), createBlock(PluginIcon_default, {
3391
3694
  key: 0,
3392
3695
  class: "mint-topbar__plugin-icon",
3393
3696
  icon: unref(plugin)?.icon,
@@ -3461,7 +3764,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3461
3764
  "stroke-width": "2",
3462
3765
  "stroke-linecap": "round",
3463
3766
  "stroke-linejoin": "round"
3464
- }, [createElementVNode("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }), createElementVNode("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })], -1)), __props.hasNotificationDot ? (openBlock(), createElementBlock("span", _hoisted_18$18)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3767
+ }, [createElementVNode("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }), createElementVNode("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })], -1)), __props.hasNotificationDot ? (openBlock(), createElementBlock("span", _hoisted_18$19)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3465
3768
  __props.showThemeToggle ? (openBlock(), createBlock(ThemeToggle_default, {
3466
3769
  key: 4,
3467
3770
  size: "sm"
@@ -3578,7 +3881,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3578
3881
  });
3579
3882
  //#endregion
3580
3883
  //#region src/components/StepWizard.vue?vue&type=script&setup=true&lang.ts
3581
- var _hoisted_1$65 = {
3884
+ var _hoisted_1$67 = {
3582
3885
  key: 0,
3583
3886
  class: "mint-wizard__progress"
3584
3887
  };
@@ -3597,8 +3900,8 @@ var _hoisted_5$49 = {
3597
3900
  "stroke-linejoin": "round"
3598
3901
  };
3599
3902
  var _hoisted_6$45 = { class: "mint-wizard__step-label" };
3600
- var _hoisted_7$39 = { class: "mint-wizard__body" };
3601
- var _hoisted_8$35 = { class: "mint-wizard__navigation" };
3903
+ var _hoisted_7$40 = { class: "mint-wizard__body" };
3904
+ var _hoisted_8$36 = { class: "mint-wizard__navigation" };
3602
3905
  var _hoisted_9$33 = ["disabled"];
3603
3906
  var _hoisted_10$31 = ["disabled"];
3604
3907
  var _hoisted_11$29 = ["disabled"];
@@ -3694,7 +3997,7 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3694
3997
  tabindex: "0",
3695
3998
  onKeydown: handleKeydown
3696
3999
  }, [
3697
- props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$65, [renderSlot(_ctx.$slots, "progress", {
4000
+ props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$67, [renderSlot(_ctx.$slots, "progress", {
3698
4001
  steps: props.steps,
3699
4002
  current: props.modelValue,
3700
4003
  states: stepStates.value
@@ -3707,7 +4010,7 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3707
4010
  onClick: ($event) => goToStep(index)
3708
4011
  }, [createElementVNode("div", _hoisted_4$52, [stepStates.value[index] === "completed" ? (openBlock(), createElementBlock("svg", _hoisted_5$49, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : props.showStepNumbers ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(index + 1), 1)], 64)) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_6$45, toDisplayString(step.label), 1)], 10, _hoisted_3$54)], 64);
3709
4012
  }), 128))])])])) : createCommentVNode("", true),
3710
- createElementVNode("div", _hoisted_7$39, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
4013
+ createElementVNode("div", _hoisted_7$40, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3711
4014
  return withDirectives((openBlock(), createElementBlock("div", {
3712
4015
  key: step.id,
3713
4016
  class: "mint-wizard__step-content"
@@ -3716,7 +4019,7 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3716
4019
  index
3717
4020
  })])), [[vShow, index === props.modelValue]]);
3718
4021
  }), 128))]),
3719
- createElementVNode("div", _hoisted_8$35, [renderSlot(_ctx.$slots, "navigation", {
4022
+ createElementVNode("div", _hoisted_8$36, [renderSlot(_ctx.$slots, "navigation", {
3720
4023
  goBack,
3721
4024
  goNext,
3722
4025
  finish,
@@ -3757,7 +4060,7 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3757
4060
  });
3758
4061
  //#endregion
3759
4062
  //#region src/components/internal/FormSectionRenderer.vue?vue&type=script&setup=true&lang.ts
3760
- var _hoisted_1$64 = {
4063
+ var _hoisted_1$66 = {
3761
4064
  key: 0,
3762
4065
  class: "mint-form-section"
3763
4066
  };
@@ -3790,7 +4093,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3790
4093
  const visibleFields = computed(() => props.section.fields.filter((f) => props.builder.isFieldVisible(f.name)));
3791
4094
  const gridStyle = computed(() => ({ gridTemplateColumns: `repeat(${props.section.columns ?? 1}, 1fr)` }));
3792
4095
  return (_ctx, _cache) => {
3793
- return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$64, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
4096
+ return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$66, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
3794
4097
  section: __props.section,
3795
4098
  form: __props.builder.form
3796
4099
  }, () => [__props.section.collapsible ? (openBlock(), createBlock(CollapsibleCard_default, {
@@ -3851,7 +4154,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3851
4154
  });
3852
4155
  //#endregion
3853
4156
  //#region src/components/FormActions.vue?vue&type=script&setup=true&lang.ts
3854
- var _hoisted_1$63 = { class: "mint-form-actions" };
4157
+ var _hoisted_1$65 = { class: "mint-form-actions" };
3855
4158
  //#endregion
3856
4159
  //#region src/components/FormActions.vue
3857
4160
  var FormActions_default = /* @__PURE__ */ defineComponent({
@@ -3908,7 +4211,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3908
4211
  */
3909
4212
  const emit = __emit;
3910
4213
  return (_ctx, _cache) => {
3911
- return openBlock(), createElementBlock("div", _hoisted_1$63, [
4214
+ return openBlock(), createElementBlock("div", _hoisted_1$65, [
3912
4215
  __props.showCancel ? (openBlock(), createBlock(BaseButton_default, {
3913
4216
  key: 0,
3914
4217
  variant: "ghost",
@@ -3953,7 +4256,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3953
4256
  });
3954
4257
  //#endregion
3955
4258
  //#region src/components/FormBuilder.vue?vue&type=script&setup=true&lang.ts
3956
- var _hoisted_1$62 = { class: "mint-form-builder__step" };
4259
+ var _hoisted_1$64 = { class: "mint-form-builder__step" };
3957
4260
  //#endregion
3958
4261
  //#region src/components/FormBuilder.vue
3959
4262
  var FormBuilder_default = /* @__PURE__ */ defineComponent({
@@ -4102,7 +4405,7 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
4102
4405
  }, createSlots({ _: 2 }, [renderList(resolvedSchema.value.steps, (step) => {
4103
4406
  return {
4104
4407
  name: `step-${step.id}`,
4105
- fn: withCtx(() => [createElementVNode("div", _hoisted_1$62, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
4408
+ fn: withCtx(() => [createElementVNode("div", _hoisted_1$64, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
4106
4409
  return openBlock(), createElementBlock(Fragment, { key: section.id }, [unref(builder).isSectionVisible(section.id) ? (openBlock(), createBlock(FormSectionRenderer_default, {
4107
4410
  key: 0,
4108
4411
  section,
@@ -4189,7 +4492,7 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
4189
4492
  });
4190
4493
  //#endregion
4191
4494
  //#region src/components/AppSidebar.vue?vue&type=script&setup=true&lang.ts
4192
- var _hoisted_1$61 = {
4495
+ var _hoisted_1$63 = {
4193
4496
  key: 0,
4194
4497
  class: "mint-sidebar__header"
4195
4498
  };
@@ -4210,18 +4513,75 @@ var _hoisted_6$44 = {
4210
4513
  key: 0,
4211
4514
  class: "mint-sidebar__badge"
4212
4515
  };
4213
- var _hoisted_7$38 = ["aria-label", "aria-expanded"];
4214
- var _hoisted_8$34 = ["id"];
4215
- var _hoisted_9$32 = {
4516
+ var _hoisted_7$39 = ["aria-label", "aria-expanded"];
4517
+ var _hoisted_8$35 = ["id"];
4518
+ var _hoisted_9$32 = { class: "mint-sidebar__group-head" };
4519
+ var _hoisted_10$30 = ["aria-expanded", "onClick"];
4520
+ var _hoisted_11$28 = {
4521
+ key: 0,
4522
+ class: "mint-sidebar__group-svg",
4523
+ viewBox: "0 0 24 24",
4524
+ fill: "none",
4525
+ stroke: "currentColor",
4526
+ "stroke-width": "2",
4527
+ "stroke-linecap": "round",
4528
+ "stroke-linejoin": "round",
4529
+ "aria-hidden": "true"
4530
+ };
4531
+ var _hoisted_12$27 = ["d"];
4532
+ var _hoisted_13$27 = ["d"];
4533
+ var _hoisted_14$25 = {
4534
+ key: 1,
4535
+ class: "mint-sidebar__group-text-icon"
4536
+ };
4537
+ var _hoisted_15$25 = { class: "mint-sidebar__group-copy" };
4538
+ var _hoisted_16$22 = { class: "mint-sidebar__group-label" };
4539
+ var _hoisted_17$20 = {
4540
+ key: 0,
4541
+ class: "mint-sidebar__group-subtitle"
4542
+ };
4543
+ var _hoisted_18$18 = { class: "mint-sidebar__group-tail" };
4544
+ var _hoisted_19$17 = [
4545
+ "disabled",
4546
+ "aria-label",
4547
+ "title",
4548
+ "onClick"
4549
+ ];
4550
+ var _hoisted_20$16 = {
4551
+ key: 0,
4552
+ class: "mint-sidebar__group-action-icon",
4553
+ viewBox: "0 0 24 24",
4554
+ fill: "none",
4555
+ stroke: "currentColor",
4556
+ "stroke-width": "2",
4557
+ "stroke-linecap": "round",
4558
+ "stroke-linejoin": "round",
4559
+ "aria-hidden": "true"
4560
+ };
4561
+ var _hoisted_21$15 = ["d"];
4562
+ var _hoisted_22$14 = ["d"];
4563
+ var _hoisted_23$13 = { key: 1 };
4564
+ var _hoisted_24$13 = [
4565
+ "aria-checked",
4566
+ "aria-label",
4567
+ "onClick"
4568
+ ];
4569
+ var _hoisted_25$11 = [
4570
+ "aria-label",
4571
+ "aria-expanded",
4572
+ "onClick"
4573
+ ];
4574
+ var _hoisted_26$10 = { class: "mint-sidebar__group-body" };
4575
+ var _hoisted_27$10 = {
4216
4576
  key: 2,
4217
4577
  class: "mint-sidebar__collapsed"
4218
4578
  };
4219
- var _hoisted_10$30 = {
4579
+ var _hoisted_28$9 = {
4220
4580
  key: 3,
4221
4581
  class: "mint-sidebar__collapsed mint-sidebar__collapsed--default"
4222
4582
  };
4223
- var _hoisted_11$28 = ["aria-label", "title"];
4224
- var _hoisted_12$27 = {
4583
+ var _hoisted_29$7 = ["aria-label", "title"];
4584
+ var _hoisted_30$6 = {
4225
4585
  key: 0,
4226
4586
  class: "mint-sidebar__rail-svg",
4227
4587
  viewBox: "0 0 24 24",
@@ -4232,17 +4592,17 @@ var _hoisted_12$27 = {
4232
4592
  "stroke-linejoin": "round",
4233
4593
  "aria-hidden": "true"
4234
4594
  };
4235
- var _hoisted_13$27 = ["d"];
4236
- var _hoisted_14$25 = ["d"];
4237
- var _hoisted_15$25 = {
4595
+ var _hoisted_31$6 = ["d"];
4596
+ var _hoisted_32$6 = ["d"];
4597
+ var _hoisted_33$6 = {
4238
4598
  key: 1,
4239
4599
  class: "mint-sidebar__rail-text-icon"
4240
4600
  };
4241
- var _hoisted_16$22 = {
4601
+ var _hoisted_34$6 = {
4242
4602
  key: 4,
4243
4603
  class: "mint-sidebar__footer"
4244
4604
  };
4245
- var _hoisted_17$20 = {
4605
+ var _hoisted_35$5 = {
4246
4606
  key: 5,
4247
4607
  class: "mint-sidebar__footer mint-sidebar__footer--collapsed"
4248
4608
  };
@@ -4254,18 +4614,18 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4254
4614
  title: { default: void 0 },
4255
4615
  subtitle: { default: void 0 },
4256
4616
  badge: { default: void 0 },
4257
- variant: { default: "default" },
4258
4617
  panels: { default: () => ({}) },
4259
4618
  activeView: { default: "" },
4260
4619
  floating: {
4261
4620
  type: Boolean,
4262
- default: void 0
4621
+ default: true
4263
4622
  },
4623
+ density: { default: void 0 },
4264
4624
  dense: {
4265
4625
  type: Boolean,
4266
- default: false
4626
+ default: void 0
4267
4627
  },
4268
- width: { default: void 0 },
4628
+ width: { default: "280px" },
4269
4629
  side: { default: "left" },
4270
4630
  toggleState: { default: () => ({}) },
4271
4631
  forms: { default: () => ({}) },
@@ -4302,7 +4662,7 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4302
4662
  formSize: { default: "sm" },
4303
4663
  collapsible: {
4304
4664
  type: Boolean,
4305
- default: void 0
4665
+ default: false
4306
4666
  },
4307
4667
  collapsed: {
4308
4668
  type: Boolean,
@@ -4330,8 +4690,9 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4330
4690
  * AppSidebar - Context-sensitive toolkit panel
4331
4691
  *
4332
4692
  * Shows tool sections relevant to the active view. Sections are defined via
4333
- * the `panels` config and rendered as CollapsibleCards. Controls can be
4334
- * provided through named slots or auto-rendered from FormBuilder schemas.
4693
+ * the `panels` config and rendered as flat groups (header row + hairline,
4694
+ * no nested card). Controls can be provided through named slots or
4695
+ * auto-rendered from FormBuilder schemas.
4335
4696
  *
4336
4697
  * When activeView is omitted, the first non-empty panel view is selected.
4337
4698
  * When no view has matching panels, the sidebar hides entirely.
@@ -4352,10 +4713,14 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4352
4713
  emit("update:collapsed", value);
4353
4714
  }
4354
4715
  });
4355
- const isAnalysisVariant = computed(() => props.variant === "analysis");
4356
- const resolvedFloating = computed(() => props.floating ?? !isAnalysisVariant.value);
4357
- const resolvedWidth = computed(() => props.width ?? (isAnalysisVariant.value ? "20rem" : "280px"));
4358
- const resolvedCollapsible = computed(() => props.collapsible ?? isAnalysisVariant.value);
4716
+ const resolvedDensity = computed(() => props.density ?? (props.dense === false ? "comfortable" : "compact"));
4717
+ const openState = ref({});
4718
+ function isSectionOpen(section) {
4719
+ return openState.value[section.id] ?? section.defaultOpen !== false;
4720
+ }
4721
+ function toggleSection(section) {
4722
+ openState.value[section.id] = !isSectionOpen(section);
4723
+ }
4359
4724
  const resolvedModel = computed(() => {
4360
4725
  return resolveControlModel(props.model);
4361
4726
  });
@@ -4398,14 +4763,13 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4398
4763
  const sidebarClasses = computed(() => [
4399
4764
  "mint-sidebar",
4400
4765
  `mint-sidebar--${props.side}`,
4401
- `mint-sidebar--${props.variant}`,
4402
- resolvedFloating.value ? "mint-sidebar--floating" : "mint-sidebar--static",
4403
- props.dense ? "mint-sidebar--dense" : "",
4404
- resolvedCollapsible.value ? "mint-sidebar--collapsible" : "",
4766
+ props.floating ? "mint-sidebar--floating" : "mint-sidebar--static",
4767
+ resolvedDensity.value === "comfortable" ? "mint-sidebar--comfortable" : "",
4768
+ props.collapsible ? "mint-sidebar--collapsible" : "",
4405
4769
  collapsedModel.value ? "mint-sidebar--collapsed" : "",
4406
4770
  !isVisible.value ? "mint-sidebar--hidden" : ""
4407
4771
  ]);
4408
- const sidebarStyle = computed(() => ({ width: collapsedModel.value ? props.collapsedWidth : resolvedWidth.value }));
4772
+ const sidebarStyle = computed(() => ({ width: collapsedModel.value ? props.collapsedWidth : props.width }));
4409
4773
  function handleFormUpdate(values) {
4410
4774
  const nextValues = {
4411
4775
  ...resolvedValues.value,
@@ -4445,6 +4809,12 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4445
4809
  function badgeToneClass(section) {
4446
4810
  return `mint-sidebar__rail-badge--${section.badgeTone ?? "cta"}`;
4447
4811
  }
4812
+ function tagToneClass(section) {
4813
+ return `mint-sidebar__tag--${section.badgeTone ?? "cta"}`;
4814
+ }
4815
+ function actionClasses(action) {
4816
+ return ["mint-sidebar__group-action", action.tone ? `mint-sidebar__group-action--${action.tone}` : ""];
4817
+ }
4448
4818
  function mergeSidebarPanels(generated, explicit) {
4449
4819
  const merged = {};
4450
4820
  const viewIds = new Set([...Object.keys(generated), ...Object.keys(explicit)]);
@@ -4465,10 +4835,10 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4465
4835
  class: normalizeClass(sidebarClasses.value),
4466
4836
  style: normalizeStyle(sidebarStyle.value)
4467
4837
  }, [
4468
- _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || resolvedCollapsible.value ? (openBlock(), createElementBlock("div", _hoisted_1$61, [renderSlot(_ctx.$slots, "header", {
4838
+ _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || __props.collapsible ? (openBlock(), createElementBlock("div", _hoisted_1$63, [renderSlot(_ctx.$slots, "header", {
4469
4839
  collapsed: collapsedModel.value,
4470
4840
  toggleCollapsed
4471
- }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$56, [createElementVNode("div", _hoisted_3$52, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$50, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$47, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$44, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), resolvedCollapsible.value ? (openBlock(), createElementBlock("button", {
4841
+ }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$56, [createElementVNode("div", _hoisted_3$52, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$50, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$47, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$44, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), __props.collapsible ? (openBlock(), createElementBlock("button", {
4472
4842
  key: 1,
4473
4843
  type: "button",
4474
4844
  class: "mint-sidebar__collapse-button",
@@ -4484,30 +4854,84 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4484
4854
  "stroke-linecap": "round",
4485
4855
  "stroke-linejoin": "round",
4486
4856
  "aria-hidden": "true"
4487
- }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M11 19l-7-7 7-7m8 14l-7-7 7-7" }, null, -1)])], 2))], 8, _hoisted_7$38)) : createCommentVNode("", true)])])) : createCommentVNode("", true),
4857
+ }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M11 19l-7-7 7-7m8 14l-7-7 7-7" }, null, -1)])], 2))], 8, _hoisted_7$39)) : createCommentVNode("", true)])])) : createCommentVNode("", true),
4488
4858
  !collapsedModel.value ? (openBlock(), createElementBlock("div", {
4489
4859
  key: 1,
4490
4860
  id: __props.contentId,
4491
4861
  class: "mint-sidebar__sections"
4492
4862
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeSections.value, (section) => {
4493
- return openBlock(), createBlock(CollapsibleCard_default, {
4863
+ return openBlock(), createElementBlock("div", {
4494
4864
  key: section.id,
4495
- title: section.label,
4496
- subtitle: section.subtitle,
4497
- icon: section.icon,
4498
- "icon-color": section.iconColor,
4499
- "icon-bg": section.iconBg,
4500
- badge: section.badge,
4501
- "badge-tone": section.badgeTone,
4502
- actions: section.actions,
4503
- dense: __props.dense,
4504
- "default-open": section.defaultOpen !== false,
4505
- "show-toggle": section.showToggle,
4506
- "toggle-value": __props.toggleState[section.id] ?? false,
4507
- onAction: ($event) => handleSectionAction(section.id, $event),
4508
- "onUpdate:toggleValue": ($event) => emit("update:toggle", section.id, $event)
4509
- }, {
4510
- default: withCtx(() => [renderSlot(_ctx.$slots, `section-${section.id}`, {}, () => [resolvedForms.value[section.id] ? (openBlock(), createBlock(FormBuilder_default, {
4865
+ class: normalizeClass(["mint-sidebar__group", isSectionOpen(section) ? "mint-sidebar__group--open" : "mint-sidebar__group--closed"])
4866
+ }, [createElementVNode("div", _hoisted_9$32, [createElementVNode("button", {
4867
+ type: "button",
4868
+ class: "mint-sidebar__group-toggle",
4869
+ "aria-expanded": isSectionOpen(section),
4870
+ onClick: ($event) => toggleSection(section)
4871
+ }, [section.icon ? (openBlock(), createElementBlock("span", {
4872
+ key: 0,
4873
+ class: "mint-sidebar__group-icon",
4874
+ style: normalizeStyle(railIconStyle(section))
4875
+ }, [isSvgIcon(section.icon) ? (openBlock(), createElementBlock("svg", _hoisted_11$28, [Array.isArray(section.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(section.icon, (d, i) => {
4876
+ return openBlock(), createElementBlock("path", {
4877
+ key: i,
4878
+ d
4879
+ }, null, 8, _hoisted_12$27);
4880
+ }), 128)) : (openBlock(), createElementBlock("path", {
4881
+ key: 1,
4882
+ d: section.icon
4883
+ }, null, 8, _hoisted_13$27))])) : (openBlock(), createElementBlock("span", _hoisted_14$25, toDisplayString(section.icon), 1))], 4)) : createCommentVNode("", true), createElementVNode("span", _hoisted_15$25, [createElementVNode("span", _hoisted_16$22, toDisplayString(section.label), 1), section.subtitle ? (openBlock(), createElementBlock("span", _hoisted_17$20, toDisplayString(section.subtitle), 1)) : createCommentVNode("", true)])], 8, _hoisted_10$30), createElementVNode("div", _hoisted_18$18, [
4884
+ section.badge !== void 0 ? (openBlock(), createElementBlock("span", {
4885
+ key: 0,
4886
+ class: normalizeClass(["mint-sidebar__tag", tagToneClass(section)])
4887
+ }, toDisplayString(section.badge), 3)) : createCommentVNode("", true),
4888
+ (openBlock(true), createElementBlock(Fragment, null, renderList(section.actions ?? [], (action) => {
4889
+ return openBlock(), createElementBlock("button", {
4890
+ key: action.id,
4891
+ type: "button",
4892
+ class: normalizeClass(actionClasses(action)),
4893
+ style: normalizeStyle(action.iconColor ? { color: action.iconColor } : void 0),
4894
+ disabled: action.disabled,
4895
+ "aria-label": action.label,
4896
+ title: action.label,
4897
+ onClick: ($event) => handleSectionAction(section.id, action.id)
4898
+ }, [action.icon && isSvgIcon(action.icon) ? (openBlock(), createElementBlock("svg", _hoisted_20$16, [Array.isArray(action.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(action.icon, (d, i) => {
4899
+ return openBlock(), createElementBlock("path", {
4900
+ key: i,
4901
+ d
4902
+ }, null, 8, _hoisted_21$15);
4903
+ }), 128)) : (openBlock(), createElementBlock("path", {
4904
+ key: 1,
4905
+ d: action.icon
4906
+ }, null, 8, _hoisted_22$14))])) : action.icon ? (openBlock(), createElementBlock("span", _hoisted_23$13, toDisplayString(action.icon), 1)) : createCommentVNode("", true)], 14, _hoisted_19$17);
4907
+ }), 128)),
4908
+ section.showToggle ? (openBlock(), createElementBlock("button", {
4909
+ key: 1,
4910
+ type: "button",
4911
+ role: "switch",
4912
+ "aria-checked": __props.toggleState[section.id] ?? false,
4913
+ "aria-label": `Enable ${section.label}`,
4914
+ class: normalizeClass(["mint-sidebar__switch", __props.toggleState[section.id] ?? false ? "mint-sidebar__switch--on" : ""]),
4915
+ onClick: ($event) => emit("update:toggle", section.id, !(__props.toggleState[section.id] ?? false))
4916
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("span", { class: "mint-sidebar__switch-knob" }, null, -1)])], 10, _hoisted_24$13)) : createCommentVNode("", true),
4917
+ createElementVNode("button", {
4918
+ type: "button",
4919
+ class: "mint-sidebar__chevron-button",
4920
+ "aria-label": isSectionOpen(section) ? "Collapse section" : "Expand section",
4921
+ "aria-expanded": isSectionOpen(section),
4922
+ onClick: ($event) => toggleSection(section)
4923
+ }, [(openBlock(), createElementBlock("svg", {
4924
+ class: normalizeClass(["mint-sidebar__chevron", isSectionOpen(section) ? "mint-sidebar__chevron--open" : ""]),
4925
+ viewBox: "0 0 24 24",
4926
+ fill: "none",
4927
+ stroke: "currentColor",
4928
+ "stroke-width": "2",
4929
+ "stroke-linecap": "round",
4930
+ "stroke-linejoin": "round",
4931
+ "aria-hidden": "true"
4932
+ }, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_25$11)
4933
+ ])]), createVNode(Transition, { name: "collapse" }, {
4934
+ default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_26$10, [renderSlot(_ctx.$slots, `section-${section.id}`, {}, () => [resolvedForms.value[section.id] ? (openBlock(), createBlock(FormBuilder_default, {
4511
4935
  key: 0,
4512
4936
  "model-value": resolvedValues.value,
4513
4937
  schema: resolvedForms.value[section.id],
@@ -4531,32 +4955,17 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4531
4955
  "show-actions",
4532
4956
  "onSubmit",
4533
4957
  "onCancel"
4534
- ])) : createCommentVNode("", true)])]),
4958
+ ])) : createCommentVNode("", true)])], 512), [[vShow, isSectionOpen(section)]])]),
4535
4959
  _: 2
4536
- }, 1032, [
4537
- "title",
4538
- "subtitle",
4539
- "icon",
4540
- "icon-color",
4541
- "icon-bg",
4542
- "badge",
4543
- "badge-tone",
4544
- "actions",
4545
- "dense",
4546
- "default-open",
4547
- "show-toggle",
4548
- "toggle-value",
4549
- "onAction",
4550
- "onUpdate:toggleValue"
4551
- ]);
4960
+ }, 1024)], 2);
4552
4961
  }), 128)), renderSlot(_ctx.$slots, "default", {
4553
4962
  sections: activeSections.value,
4554
4963
  activeView: resolvedActiveView.value,
4555
4964
  values: resolvedValues.value
4556
- })], 8, _hoisted_8$34)) : _ctx.$slots.collapsed ? (openBlock(), createElementBlock("div", _hoisted_9$32, [renderSlot(_ctx.$slots, "collapsed", {
4965
+ })], 8, _hoisted_8$35)) : _ctx.$slots.collapsed ? (openBlock(), createElementBlock("div", _hoisted_27$10, [renderSlot(_ctx.$slots, "collapsed", {
4557
4966
  sections: activeSections.value,
4558
4967
  expand: expandCollapsed
4559
- })])) : (openBlock(), createElementBlock("div", _hoisted_10$30, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeSections.value, (section) => {
4968
+ })])) : (openBlock(), createElementBlock("div", _hoisted_28$9, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeSections.value, (section) => {
4560
4969
  return openBlock(), createElementBlock("button", {
4561
4970
  key: section.id,
4562
4971
  type: "button",
@@ -4567,27 +4976,27 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4567
4976
  }, [createElementVNode("span", {
4568
4977
  class: "mint-sidebar__rail-icon",
4569
4978
  style: normalizeStyle(railIconStyle(section))
4570
- }, [section.icon && isSvgIcon(section.icon) ? (openBlock(), createElementBlock("svg", _hoisted_12$27, [Array.isArray(section.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(section.icon, (d, i) => {
4979
+ }, [section.icon && isSvgIcon(section.icon) ? (openBlock(), createElementBlock("svg", _hoisted_30$6, [Array.isArray(section.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(section.icon, (d, i) => {
4571
4980
  return openBlock(), createElementBlock("path", {
4572
4981
  key: i,
4573
4982
  d
4574
- }, null, 8, _hoisted_13$27);
4983
+ }, null, 8, _hoisted_31$6);
4575
4984
  }), 128)) : (openBlock(), createElementBlock("path", {
4576
4985
  key: 1,
4577
4986
  d: section.icon
4578
- }, null, 8, _hoisted_14$25))])) : (openBlock(), createElementBlock("span", _hoisted_15$25, toDisplayString(section.icon || sectionInitial(section)), 1))], 4), section.badge !== void 0 ? (openBlock(), createElementBlock("span", {
4987
+ }, null, 8, _hoisted_32$6))])) : (openBlock(), createElementBlock("span", _hoisted_33$6, toDisplayString(section.icon || sectionInitial(section)), 1))], 4), section.badge !== void 0 ? (openBlock(), createElementBlock("span", {
4579
4988
  key: 0,
4580
4989
  class: normalizeClass(["mint-sidebar__rail-badge", badgeToneClass(section)])
4581
- }, toDisplayString(section.badge), 3)) : createCommentVNode("", true)], 8, _hoisted_11$28);
4990
+ }, toDisplayString(section.badge), 3)) : createCommentVNode("", true)], 8, _hoisted_29$7);
4582
4991
  }), 128))])),
4583
- !collapsedModel.value && _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_16$22, [renderSlot(_ctx.$slots, "footer")])) : collapsedModel.value && _ctx.$slots["collapsed-footer"] ? (openBlock(), createElementBlock("div", _hoisted_17$20, [renderSlot(_ctx.$slots, "collapsed-footer")])) : createCommentVNode("", true)
4992
+ !collapsedModel.value && _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_34$6, [renderSlot(_ctx.$slots, "footer")])) : collapsedModel.value && _ctx.$slots["collapsed-footer"] ? (openBlock(), createElementBlock("div", _hoisted_35$5, [renderSlot(_ctx.$slots, "collapsed-footer")])) : createCommentVNode("", true)
4584
4993
  ], 6);
4585
4994
  };
4586
4995
  }
4587
4996
  });
4588
4997
  //#endregion
4589
4998
  //#region src/components/AppLayout.vue?vue&type=script&setup=true&lang.ts
4590
- var _hoisted_1$60 = {
4999
+ var _hoisted_1$62 = {
4591
5000
  key: 0,
4592
5001
  class: "mint-layout__topbar"
4593
5002
  };
@@ -4693,7 +5102,7 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4693
5102
  sidebarOpenModel.value = false;
4694
5103
  }
4695
5104
  return (_ctx, _cache) => {
4696
- return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$60, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$55, [
5105
+ return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$62, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$55, [
4697
5106
  __props.responsiveSidebar && _ctx.$slots.sidebar ? (openBlock(), createElementBlock("button", {
4698
5107
  key: 0,
4699
5108
  type: "button",
@@ -4719,7 +5128,7 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4719
5128
  });
4720
5129
  //#endregion
4721
5130
  //#region src/components/MobileSupportGate.vue?vue&type=script&setup=true&lang.ts
4722
- var _hoisted_1$59 = { class: "mint-mobile-support-gate__panel" };
5131
+ var _hoisted_1$61 = { class: "mint-mobile-support-gate__panel" };
4723
5132
  var _hoisted_2$54 = { class: "mint-mobile-support-gate__copy" };
4724
5133
  var _hoisted_3$50 = { class: "mint-mobile-support-gate__eyebrow" };
4725
5134
  var _hoisted_4$48 = { class: "mint-mobile-support-gate__message" };
@@ -4757,7 +5166,7 @@ var MobileSupportGate_default = /* @__PURE__ */ defineComponent({
4757
5166
  }, [renderSlot(_ctx.$slots, "unsupported", {
4758
5167
  isMobileViewport: unref(isMobileViewport),
4759
5168
  isSupported: unref(isSupported)
4760
- }, () => [createElementVNode("section", _hoisted_1$59, [
5169
+ }, () => [createElementVNode("section", _hoisted_1$61, [
4761
5170
  _cache[1] || (_cache[1] = createStaticVNode("<div class=\"mint-mobile-support-gate__mark\" aria-hidden=\"true\"><svg class=\"mint-mobile-support-gate__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\"></rect><path d=\"M8 20h8\"></path><path d=\"M12 16v4\"></path></svg></div>", 1)),
4762
5171
  createElementVNode("div", _hoisted_2$54, [
4763
5172
  createElementVNode("p", _hoisted_3$50, toDisplayString(__props.appName), 1),
@@ -4945,11 +5354,10 @@ var WorkspaceSidebarInternal_default = /* @__PURE__ */ defineComponent({
4945
5354
  title: __props.sidebar.title,
4946
5355
  subtitle: __props.sidebar.subtitle,
4947
5356
  badge: __props.sidebar.badge,
4948
- variant: __props.sidebar.variant,
4949
5357
  panels: __props.sidebar.panels,
4950
5358
  "active-view": __props.sidebar.activeView,
4951
5359
  floating: __props.sidebar.floating,
4952
- dense: __props.sidebar.dense,
5360
+ density: __props.sidebar.dense ? "compact" : "comfortable",
4953
5361
  width: __props.sidebar.width,
4954
5362
  side: __props.sidebar.side,
4955
5363
  forms: __props.sidebar.forms,
@@ -4986,11 +5394,10 @@ var WorkspaceSidebarInternal_default = /* @__PURE__ */ defineComponent({
4986
5394
  "title",
4987
5395
  "subtitle",
4988
5396
  "badge",
4989
- "variant",
4990
5397
  "panels",
4991
5398
  "active-view",
4992
5399
  "floating",
4993
- "dense",
5400
+ "density",
4994
5401
  "width",
4995
5402
  "side",
4996
5403
  "forms",
@@ -5285,60 +5692,89 @@ function generatedJobFormSchema(definition) {
5285
5692
  };
5286
5693
  }
5287
5694
  function generatedJobDefaults(definition) {
5288
- return Object.fromEntries(Object.entries(definition.input_schema.properties ?? {}).filter(([, schema]) => hasOwnDefault(schema)).map(([name, schema]) => [name, structuredClone(schema.default)]));
5695
+ return Object.fromEntries(Object.entries(definition.input_schema.properties ?? {}).map(([name, schema]) => [name, resolveGeneratedField(definition.input_schema, schema)]).filter(([, field]) => field.hasDefault).map(([name, field]) => [name, structuredClone(field.defaultValue)]));
5289
5696
  }
5290
5697
  function normalizeGeneratedJobInput(definition, values) {
5291
5698
  const normalized = {};
5292
5699
  for (const [name, value] of Object.entries(values)) {
5293
- if (!definition.input_schema.properties?.[name]) continue;
5294
- normalized[name] = value;
5700
+ const field = definition.input_schema.properties?.[name];
5701
+ if (!field) continue;
5702
+ const { schema, reference } = resolveGeneratedField(definition.input_schema, field);
5703
+ if (reference !== "path" && Array.isArray(value) && ["integer", "number"].includes(String(schema.items?.type))) normalized[name] = value.map((item) => {
5704
+ const numeric = typeof item === "string" && item.trim() !== "" ? Number(item) : item;
5705
+ return typeof numeric === "number" && Number.isFinite(numeric) ? numeric : item;
5706
+ });
5707
+ else if (reference !== "path" && Array.isArray(value) && schema.items?.type === "boolean") normalized[name] = value.map((item) => item === "true" ? true : item === "false" ? false : item);
5708
+ else normalized[name] = value === void 0 && allowsNull(schema) ? null : value;
5295
5709
  }
5296
5710
  return normalized;
5297
5711
  }
5298
5712
  function toFormField(name, resolved, required) {
5299
5713
  const { schema, reference } = resolved;
5300
5714
  const validation = {};
5301
- if (required) validation.required = true;
5715
+ const allowsEmpty = schema.type === "array" || schema.type === "string" && reference !== "path" && !(schema.minLength && schema.minLength > 0) && (!schema.enum || schema.enum.includes(""));
5716
+ if (required && !allowsNull(schema) && !allowsEmpty) validation.required = true;
5302
5717
  if (schema.minimum !== void 0) validation.min = schema.minimum;
5303
5718
  if (schema.maximum !== void 0) validation.max = schema.maximum;
5304
5719
  if (schema.minLength !== void 0) validation.minLength = schema.minLength;
5305
5720
  if (schema.maxLength !== void 0) validation.maxLength = schema.maxLength;
5306
5721
  const props = {};
5307
5722
  if (schema.enum) props.options = [...schema.enum];
5723
+ if (schema.type === "integer") {
5724
+ if (schema.exclusiveMinimum !== void 0) validation.min = Math.max(Number(validation.min ?? -Infinity), Math.floor(schema.exclusiveMinimum) + 1);
5725
+ if (schema.exclusiveMaximum !== void 0) validation.max = Math.min(Number(validation.max ?? Infinity), Math.ceil(schema.exclusiveMaximum) - 1);
5726
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min));
5727
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max));
5728
+ if (schema.multipleOf && Number.isInteger(schema.multipleOf)) {
5729
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min) / schema.multipleOf) * schema.multipleOf;
5730
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max) / schema.multipleOf) * schema.multipleOf;
5731
+ }
5732
+ props.step = 1;
5733
+ }
5734
+ if (schema.type === "integer" || schema.type === "number") {
5735
+ if (validation.min !== void 0) props.min = validation.min;
5736
+ if (validation.max !== void 0) props.max = validation.max;
5737
+ if (schema.multipleOf !== void 0) props.step = schema.multipleOf;
5738
+ }
5739
+ if (schema.type === "array" && reference !== "path") if (schema.items?.enum) props.options = [...schema.items.enum];
5740
+ else props.allowDuplicates = true;
5308
5741
  if (reference === "path" && schema.type === "array") props.multiple = true;
5309
5742
  return {
5310
5743
  name,
5311
5744
  label: schema.title || humanize(name),
5312
5745
  type: fieldType(schema, reference),
5313
5746
  defaultValue: resolved.hasDefault ? structuredClone(resolved.defaultValue) : void 0,
5747
+ disabled: Object.prototype.hasOwnProperty.call(schema, "const") || void 0,
5314
5748
  hint: schema.description,
5315
5749
  validation,
5316
- props
5750
+ props,
5751
+ itemType: schema.items?.type === "number" || schema.items?.type === "integer" ? "number" : void 0
5317
5752
  };
5318
5753
  }
5319
5754
  function resolveGeneratedField(root, field) {
5320
- const hasDefault = hasOwnDefault(field);
5321
5755
  const candidate = field.anyOf?.find((item) => item.type !== "null") ?? field.allOf?.[0] ?? field;
5756
+ let schema = {
5757
+ ...candidate,
5758
+ ...field
5759
+ };
5322
5760
  if (candidate.$ref) {
5323
5761
  const referenceParts = candidate.$ref.split("/");
5324
5762
  const key = referenceParts[referenceParts.length - 1];
5325
- const schema = key ? root.$defs?.[key] : void 0;
5326
- if (!schema) throw new Error(`Generated field reference is missing: ${candidate.$ref}`);
5327
- return {
5328
- schema: {
5329
- ...schema,
5330
- title: field.title ?? schema.title
5331
- },
5332
- reference: field["x-mint-component"] ?? schema["x-mint-component"],
5333
- hasDefault,
5334
- defaultValue: field.default
5763
+ const referenced = key ? root.$defs?.[key] : void 0;
5764
+ if (!referenced) throw new Error(`Generated field reference is missing: ${candidate.$ref}`);
5765
+ schema = {
5766
+ ...referenced,
5767
+ ...candidate,
5768
+ ...field
5335
5769
  };
5336
5770
  }
5771
+ if (schema.items) schema.items = resolveGeneratedField(root, schema.items).schema;
5772
+ const constant = Object.prototype.hasOwnProperty.call(schema, "const");
5337
5773
  return {
5338
- schema: candidate,
5339
- reference: field["x-mint-component"] ?? candidate["x-mint-component"],
5340
- hasDefault,
5341
- defaultValue: field.default
5774
+ schema,
5775
+ reference: schema["x-mint-component"],
5776
+ hasDefault: constant || hasOwnDefault(field) || allowsNull(schema),
5777
+ defaultValue: constant ? schema.const : hasOwnDefault(field) ? field.default : null
5342
5778
  };
5343
5779
  }
5344
5780
  function fieldType(schema, reference) {
@@ -5347,47 +5783,53 @@ function fieldType(schema, reference) {
5347
5783
  const type = Array.isArray(schema.type) ? schema.type.find((value) => value !== "null") : schema.type;
5348
5784
  if (type === "boolean") return "toggle";
5349
5785
  if (type === "number" || type === "integer") return "number";
5350
- if (type === "array") return "tags";
5786
+ if (type === "array") return schema.items?.enum ? "multiselect" : "tags";
5351
5787
  return "text";
5352
5788
  }
5353
5789
  function hasOwnDefault(schema) {
5354
5790
  return Object.prototype.hasOwnProperty.call(schema, "default");
5355
5791
  }
5792
+ function allowsNull(schema) {
5793
+ return schema.type === "null" || Array.isArray(schema.type) && schema.type.includes("null") || !!schema.anyOf?.some((item) => item.type === "null");
5794
+ }
5356
5795
  function humanize(value) {
5357
5796
  return value.replace(/[_-]+/g, " ").replace(/^\w/, (character) => character.toUpperCase());
5358
5797
  }
5359
5798
  //#endregion
5360
5799
  //#region src/components/ChartContainer.vue?vue&type=script&setup=true&lang.ts
5361
- var _hoisted_1$58 = { class: "mint-chart" };
5362
- var _hoisted_2$53 = {
5800
+ var _hoisted_1$60 = {
5363
5801
  key: 0,
5364
5802
  class: "mint-chart__header"
5365
5803
  };
5366
- var _hoisted_3$49 = {
5804
+ var _hoisted_2$53 = {
5367
5805
  key: 0,
5368
5806
  class: "mint-chart__header-text"
5369
5807
  };
5370
- var _hoisted_4$47 = {
5808
+ var _hoisted_3$49 = {
5371
5809
  key: 0,
5372
5810
  class: "mint-chart__title"
5373
5811
  };
5374
- var _hoisted_5$44 = {
5812
+ var _hoisted_4$47 = {
5375
5813
  key: 1,
5376
5814
  class: "mint-chart__description"
5377
5815
  };
5378
- var _hoisted_6$42 = {
5379
- key: 1,
5816
+ var _hoisted_5$44 = {
5817
+ key: 0,
5380
5818
  class: "mint-chart__toolbar"
5381
5819
  };
5382
- var _hoisted_7$37 = { class: "mint-chart__body" };
5383
- var _hoisted_8$33 = {
5820
+ var _hoisted_6$42 = { class: "mint-chart__body" };
5821
+ var _hoisted_7$38 = {
5384
5822
  key: 0,
5385
5823
  class: "mint-chart__loading-overlay"
5386
5824
  };
5387
- var _hoisted_9$31 = {
5825
+ var _hoisted_8$34 = {
5388
5826
  key: 1,
5389
5827
  class: "mint-chart__legend"
5390
5828
  };
5829
+ var _hoisted_9$31 = {
5830
+ key: 2,
5831
+ class: "mint-chart__footer"
5832
+ };
5391
5833
  //#endregion
5392
5834
  //#region src/components/ChartContainer.vue
5393
5835
  var ChartContainer_default = /* @__PURE__ */ defineComponent({
@@ -5403,26 +5845,29 @@ var ChartContainer_default = /* @__PURE__ */ defineComponent({
5403
5845
  type: Boolean,
5404
5846
  default: false
5405
5847
  },
5406
- emptyMessage: { default: "No data available" }
5848
+ emptyMessage: { default: "No data available" },
5849
+ variant: { default: "card" }
5407
5850
  },
5408
5851
  setup(__props) {
5409
5852
  /** Wraps a chart with header, toolbar slot, loading overlay, empty state, and legend slot. */
5410
5853
  return (_ctx, _cache) => {
5411
- return openBlock(), createElementBlock("div", _hoisted_1$58, [
5412
- __props.title || __props.description || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2$53, [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_3$49, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$47, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$44, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_6$42, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5413
- createElementVNode("div", _hoisted_7$37, [__props.loading ? (openBlock(), createElementBlock("div", _hoisted_8$33, [createVNode(LoadingSpinner_default, { size: "lg" })])) : __props.empty ? renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createVNode(EmptyState_default, {
5854
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-chart", `mint-chart--${__props.variant}`]) }, [
5855
+ __props.title || __props.description || _ctx.$slots.header || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_1$60, [renderSlot(_ctx.$slots, "header", {}, () => [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_2$53, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_3$49, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$47, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true)]), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_5$44, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5856
+ renderSlot(_ctx.$slots, "subhead"),
5857
+ createElementVNode("div", _hoisted_6$42, [__props.loading ? (openBlock(), createElementBlock("div", _hoisted_7$38, [createVNode(LoadingSpinner_default, { size: "lg" })])) : __props.empty ? renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createVNode(EmptyState_default, {
5414
5858
  title: __props.emptyMessage,
5415
5859
  size: "sm",
5416
5860
  "icon-path": "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z"
5417
5861
  }, null, 8, ["title"])]) : renderSlot(_ctx.$slots, "default", { key: 2 })]),
5418
- _ctx.$slots.legend ? (openBlock(), createElementBlock("div", _hoisted_9$31, [renderSlot(_ctx.$slots, "legend")])) : createCommentVNode("", true)
5419
- ]);
5862
+ _ctx.$slots.legend ? (openBlock(), createElementBlock("div", _hoisted_8$34, [renderSlot(_ctx.$slots, "legend")])) : createCommentVNode("", true),
5863
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_9$31, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
5864
+ ], 2);
5420
5865
  };
5421
5866
  }
5422
5867
  });
5423
5868
  //#endregion
5424
5869
  //#region src/components/PlotlyChart.vue?vue&type=script&setup=true&lang.ts
5425
- var _hoisted_1$57 = ["aria-label"];
5870
+ var _hoisted_1$59 = ["aria-label"];
5426
5871
  //#endregion
5427
5872
  //#region src/components/PlotlyChart.vue
5428
5873
  var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -5442,9 +5887,21 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5442
5887
  default: false
5443
5888
  },
5444
5889
  emptyMessage: { default: "No data available" },
5445
- ariaLabel: { default: "Interactive Plotly chart" }
5890
+ ariaLabel: { default: "Interactive Plotly chart" },
5891
+ plotly: {},
5892
+ active: {
5893
+ type: Boolean,
5894
+ default: true
5895
+ },
5896
+ height: {},
5897
+ clickEvents: {
5898
+ type: Boolean,
5899
+ default: false
5900
+ },
5901
+ variant: { default: "card" }
5446
5902
  },
5447
- setup(__props) {
5903
+ emits: ["plotly-click"],
5904
+ setup(__props, { emit: __emit }) {
5448
5905
  /**
5449
5906
  * Render native Plotly data with MINT loading, empty, theme, and error states.
5450
5907
  *
@@ -5462,9 +5919,10 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5462
5919
  * ```
5463
5920
  */
5464
5921
  const props = __props;
5922
+ const emit = __emit;
5465
5923
  const chartElement = ref(null);
5466
5924
  const failed = ref(false);
5467
- let plotly = null;
5925
+ let plotly = props.plotly ?? null;
5468
5926
  let resizeObserver = null;
5469
5927
  let themeObserver = null;
5470
5928
  let renderedElement = null;
@@ -5472,9 +5930,15 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5472
5930
  let disposed = false;
5473
5931
  let revision = 0;
5474
5932
  async function loadPlotly() {
5933
+ if (props.plotly) return props.plotly;
5475
5934
  const module = await import("./plotly.min-c2Sez60c.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
5476
5935
  return "default" in module ? module.default : module;
5477
5936
  }
5937
+ function bindEvents(element) {
5938
+ const host = element;
5939
+ host.removeAllListeners?.("plotly_click");
5940
+ if (props.clickEvents) host.on?.("plotly_click", (event) => emit("plotly-click", event));
5941
+ }
5478
5942
  function cssValue(name, fallback) {
5479
5943
  return getComputedStyle(chartElement.value ?? document.documentElement).getPropertyValue(name).trim() || getComputedStyle(document.documentElement).getPropertyValue(name).trim() || fallback;
5480
5944
  }
@@ -5518,17 +5982,17 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5518
5982
  }
5519
5983
  async function renderChart() {
5520
5984
  revision++;
5521
- if (rendering || disposed || props.loading || props.empty) return;
5985
+ if (rendering || disposed || !props.active || props.loading || props.empty) return;
5522
5986
  rendering = true;
5523
5987
  try {
5524
- while (!disposed && !props.loading && !props.empty) {
5988
+ while (!disposed && props.active && !props.loading && !props.empty) {
5525
5989
  const currentRevision = revision;
5526
5990
  failed.value = false;
5527
5991
  await nextTick();
5528
- if (disposed || props.loading || props.empty) break;
5992
+ if (disposed || !props.active || props.loading || props.empty) break;
5529
5993
  try {
5530
5994
  plotly ??= await loadPlotly();
5531
- if (disposed || props.loading || props.empty) break;
5995
+ if (disposed || !props.active || props.loading || props.empty) break;
5532
5996
  if (currentRevision !== revision) continue;
5533
5997
  const element = chartElement.value;
5534
5998
  if (!element) break;
@@ -5539,7 +6003,10 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5539
6003
  ...props.config
5540
6004
  });
5541
6005
  if (disposed || props.loading || props.empty || element !== chartElement.value) purgeChart();
5542
- else resizeObserver?.observe(element);
6006
+ else if (props.active) {
6007
+ bindEvents(element);
6008
+ resizeObserver?.observe(element);
6009
+ }
5543
6010
  } catch {
5544
6011
  purgeChart();
5545
6012
  if (!disposed && currentRevision === revision) failed.value = true;
@@ -5553,7 +6020,7 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5553
6020
  }
5554
6021
  onMounted(() => {
5555
6022
  if (typeof ResizeObserver !== "undefined") resizeObserver = new ResizeObserver(() => {
5556
- if (rendering || !plotly || !renderedElement) return;
6023
+ if (rendering || !props.active || !plotly || !renderedElement) return;
5557
6024
  Promise.resolve(plotly.Plots.resize(renderedElement)).catch(() => {});
5558
6025
  });
5559
6026
  if (typeof MutationObserver !== "undefined") {
@@ -5570,14 +6037,26 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5570
6037
  () => props.layout,
5571
6038
  () => props.config,
5572
6039
  () => props.loading,
5573
- () => props.empty
6040
+ () => props.empty,
6041
+ () => props.active
5574
6042
  ], () => {
5575
- if (props.loading || props.empty) {
6043
+ if (props.loading || props.empty || !props.active) {
5576
6044
  resizeObserver?.disconnect();
5577
- if (!rendering) purgeChart();
6045
+ if ((props.loading || props.empty) && !rendering) purgeChart();
5578
6046
  }
5579
6047
  renderChart();
5580
6048
  });
6049
+ watch(() => props.clickEvents, () => {
6050
+ if (renderedElement) bindEvents(renderedElement);
6051
+ });
6052
+ const chartStyle = computed(() => {
6053
+ if (props.height === void 0) return void 0;
6054
+ const height = typeof props.height === "number" ? `${props.height}px` : props.height;
6055
+ return {
6056
+ height,
6057
+ minHeight: height
6058
+ };
6059
+ });
5581
6060
  onBeforeUnmount(() => {
5582
6061
  disposed = true;
5583
6062
  resizeObserver?.disconnect();
@@ -5590,45 +6069,63 @@ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
5590
6069
  description: __props.description,
5591
6070
  loading: __props.loading,
5592
6071
  empty: __props.empty,
5593
- "empty-message": __props.emptyMessage
6072
+ "empty-message": __props.emptyMessage,
6073
+ variant: __props.variant
5594
6074
  }, createSlots({
5595
6075
  default: withCtx(() => [failed.value ? renderSlot(_ctx.$slots, "error", { key: 0 }, () => [_cache[0] || (_cache[0] = createElementVNode("div", { class: "mint-plotly-chart__error" }, [createElementVNode("p", { role: "alert" }, "Unable to display this chart.")], -1))], true) : createCommentVNode("", true), withDirectives(createElementVNode("div", {
5596
6076
  ref_key: "chartElement",
5597
6077
  ref: chartElement,
5598
6078
  class: "mint-plotly-chart__plot",
5599
6079
  role: "group",
5600
- "aria-label": __props.ariaLabel
5601
- }, null, 8, _hoisted_1$57), [[vShow, !failed.value]])]),
6080
+ "aria-label": __props.ariaLabel,
6081
+ style: normalizeStyle(chartStyle.value)
6082
+ }, null, 12, _hoisted_1$59), [[vShow, !failed.value]])]),
5602
6083
  _: 2
5603
6084
  }, [
6085
+ _ctx.$slots.header ? {
6086
+ name: "header",
6087
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "header", {}, void 0, true)]),
6088
+ key: "0"
6089
+ } : void 0,
5604
6090
  _ctx.$slots.toolbar ? {
5605
6091
  name: "toolbar",
5606
6092
  fn: withCtx(() => [renderSlot(_ctx.$slots, "toolbar", {}, void 0, true)]),
5607
- key: "0"
6093
+ key: "1"
6094
+ } : void 0,
6095
+ _ctx.$slots.subhead ? {
6096
+ name: "subhead",
6097
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "subhead", {}, void 0, true)]),
6098
+ key: "2"
5608
6099
  } : void 0,
5609
6100
  _ctx.$slots.empty ? {
5610
6101
  name: "empty",
5611
6102
  fn: withCtx(() => [renderSlot(_ctx.$slots, "empty", {}, void 0, true)]),
5612
- key: "1"
6103
+ key: "3"
5613
6104
  } : void 0,
5614
6105
  _ctx.$slots.legend ? {
5615
6106
  name: "legend",
5616
6107
  fn: withCtx(() => [renderSlot(_ctx.$slots, "legend", {}, void 0, true)]),
5617
- key: "2"
6108
+ key: "4"
6109
+ } : void 0,
6110
+ _ctx.$slots.footer ? {
6111
+ name: "footer",
6112
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "footer", {}, void 0, true)]),
6113
+ key: "5"
5618
6114
  } : void 0
5619
6115
  ]), 1032, [
5620
6116
  "title",
5621
6117
  "description",
5622
6118
  "loading",
5623
6119
  "empty",
5624
- "empty-message"
6120
+ "empty-message",
6121
+ "variant"
5625
6122
  ]);
5626
6123
  };
5627
6124
  }
5628
- }), [["__scopeId", "data-v-ee2f733a"]]);
6125
+ }), [["__scopeId", "data-v-7b24d547"]]);
5629
6126
  //#endregion
5630
6127
  //#region src/components/GeneratedPlotlyResult.vue?vue&type=script&setup=true&lang.ts
5631
- var _hoisted_1$56 = ["src"];
6128
+ var _hoisted_1$58 = ["src"];
5632
6129
  //#endregion
5633
6130
  //#region src/components/GeneratedPlotlyResult.vue
5634
6131
  var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -5657,7 +6154,7 @@ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_de
5657
6154
  class: "mint-generated-result__image",
5658
6155
  src: `data:${__props.fallback.media_type};base64,${__props.fallback.data}`,
5659
6156
  alt: "Static Plotly chart fallback"
5660
- }, null, 8, _hoisted_1$56)]),
6157
+ }, null, 8, _hoisted_1$58)]),
5661
6158
  key: "0"
5662
6159
  } : void 0]), 1032, [
5663
6160
  "data",
@@ -5669,7 +6166,7 @@ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_de
5669
6166
  }), [["__scopeId", "data-v-4a6d15d5"]]);
5670
6167
  //#endregion
5671
6168
  //#region src/components/GeneratedResultRenderer.vue?vue&type=script&setup=true&lang.ts
5672
- var _hoisted_1$55 = {
6169
+ var _hoisted_1$57 = {
5673
6170
  class: "mint-generated-result",
5674
6171
  "aria-live": "polite"
5675
6172
  };
@@ -5716,7 +6213,7 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5716
6213
  return value.replace(/[_-]+/g, " ").replace(/^\w/, (character) => character.toUpperCase());
5717
6214
  }
5718
6215
  return (_ctx, _cache) => {
5719
- return openBlock(), createElementBlock("article", _hoisted_1$55, [__props.result.kind === "text" ? (openBlock(), createElementBlock("p", _hoisted_2$52, toDisplayString(__props.result.text), 1)) : __props.result.kind === "json" ? (openBlock(), createElementBlock("pre", _hoisted_3$48, toDisplayString(formattedJson.value), 1)) : __props.result.kind === "table" ? (openBlock(), createBlock(DataFrame_default, {
6216
+ return openBlock(), createElementBlock("article", _hoisted_1$57, [__props.result.kind === "text" ? (openBlock(), createElementBlock("p", _hoisted_2$52, toDisplayString(__props.result.text), 1)) : __props.result.kind === "json" ? (openBlock(), createElementBlock("pre", _hoisted_3$48, toDisplayString(formattedJson.value), 1)) : __props.result.kind === "table" ? (openBlock(), createBlock(DataFrame_default, {
5720
6217
  key: 2,
5721
6218
  data: __props.result.rows,
5722
6219
  columns: tableColumns.value,
@@ -5749,7 +6246,7 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5749
6246
  }), [["__scopeId", "data-v-7500041f"]]);
5750
6247
  //#endregion
5751
6248
  //#region src/components/JobsStatusTray.vue?vue&type=script&setup=true&lang.ts
5752
- var _hoisted_1$54 = { class: "mint-jobs-tray" };
6249
+ var _hoisted_1$56 = { class: "mint-jobs-tray" };
5753
6250
  var _hoisted_2$51 = ["aria-expanded"];
5754
6251
  var _hoisted_3$47 = { class: "mint-jobs-tray__trigger-label" };
5755
6252
  var _hoisted_4$45 = {
@@ -5759,8 +6256,8 @@ var _hoisted_4$45 = {
5759
6256
  };
5760
6257
  var _hoisted_5$42 = { class: "mint-jobs-tray__header" };
5761
6258
  var _hoisted_6$41 = { class: "mint-jobs-tray__subtitle" };
5762
- var _hoisted_7$36 = { class: "mint-jobs-tray__header-actions" };
5763
- var _hoisted_8$32 = ["disabled"];
6259
+ var _hoisted_7$37 = { class: "mint-jobs-tray__header-actions" };
6260
+ var _hoisted_8$33 = ["disabled"];
5764
6261
  var _hoisted_9$30 = {
5765
6262
  class: "mint-jobs-tray__tabs",
5766
6263
  role: "tablist",
@@ -5918,7 +6415,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5918
6415
  return openBlock(), createBlock(Teleport, {
5919
6416
  to: teleportTarget.value,
5920
6417
  disabled: __props.teleportTo === false
5921
- }, [createElementVNode("div", _hoisted_1$54, [
6418
+ }, [createElementVNode("div", _hoisted_1$56, [
5922
6419
  createElementVNode("button", {
5923
6420
  ref_key: "triggerRef",
5924
6421
  ref: triggerRef,
@@ -5964,7 +6461,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5964
6461
  createElementVNode("header", _hoisted_5$42, [createElementVNode("div", null, [createElementVNode("h2", {
5965
6462
  id: titleId,
5966
6463
  class: "mint-jobs-tray__title"
5967
- }, toDisplayString(__props.title), 1), createElementVNode("p", _hoisted_6$41, toDisplayString(unref(tray).jobs.value.length) + " total", 1)]), createElementVNode("div", _hoisted_7$36, [unref(tray).canRefresh.value ? (openBlock(), createElementBlock("button", {
6464
+ }, toDisplayString(__props.title), 1), createElementVNode("p", _hoisted_6$41, toDisplayString(unref(tray).jobs.value.length) + " total", 1)]), createElementVNode("div", _hoisted_7$37, [unref(tray).canRefresh.value ? (openBlock(), createElementBlock("button", {
5968
6465
  key: 0,
5969
6466
  type: "button",
5970
6467
  class: "mint-jobs-tray__icon-button",
@@ -5976,7 +6473,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5976
6473
  fill: "none",
5977
6474
  stroke: "currentColor",
5978
6475
  "aria-hidden": "true"
5979
- }, [createElementVNode("path", { d: "M20 6v5h-5M4 18v-5h5" }), createElementVNode("path", { d: "M18.4 9A7 7 0 0 0 6.1 6.1L4 8m2 7a7 7 0 0 0 11.9 2.9L20 16" })], -1)])], 8, _hoisted_8$32)) : createCommentVNode("", true), createElementVNode("button", {
6476
+ }, [createElementVNode("path", { d: "M20 6v5h-5M4 18v-5h5" }), createElementVNode("path", { d: "M18.4 9A7 7 0 0 0 6.1 6.1L4 8m2 7a7 7 0 0 0 11.9 2.9L20 16" })], -1)])], 8, _hoisted_8$33)) : createCommentVNode("", true), createElementVNode("button", {
5980
6477
  type: "button",
5981
6478
  class: "mint-jobs-tray__icon-button",
5982
6479
  "aria-label": "Close jobs",
@@ -6086,7 +6583,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
6086
6583
  });
6087
6584
  //#endregion
6088
6585
  //#region src/components/GeneratedPluginView.vue?vue&type=script&setup=true&lang.ts
6089
- var _hoisted_1$53 = { class: "mint-generated-workspace" };
6586
+ var _hoisted_1$55 = { class: "mint-generated-workspace" };
6090
6587
  var _hoisted_2$50 = {
6091
6588
  key: 0,
6092
6589
  class: "mint-generated-workspace__loading"
@@ -6199,7 +6696,7 @@ var GeneratedPluginView_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
6199
6696
  "onUpdate:values": updateValues,
6200
6697
  onFormSubmit: submitJob
6201
6698
  }, {
6202
- default: withCtx(() => [createElementVNode("main", _hoisted_1$53, [unref(generated).isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2$50, [createVNode(LoadingSpinner_default, { size: "lg" }), _cache[1] || (_cache[1] = createElementVNode("span", null, "Loading analysis workspace", -1))])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
6699
+ default: withCtx(() => [createElementVNode("main", _hoisted_1$55, [unref(generated).isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2$50, [createVNode(LoadingSpinner_default, { size: "lg" }), _cache[1] || (_cache[1] = createElementVNode("span", null, "Loading analysis workspace", -1))])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
6203
6700
  unref(generated).error.value ? (openBlock(), createBlock(AlertBox_default, {
6204
6701
  key: 0,
6205
6702
  type: "error",
@@ -6242,7 +6739,7 @@ var GeneratedPluginView_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
6242
6739
  }), [["__scopeId", "data-v-e6faabe4"]]);
6243
6740
  //#endregion
6244
6741
  //#region src/components/DoseCalculatorVolumeField.vue?vue&type=script&setup=true&lang.ts
6245
- var _hoisted_1$52 = { class: "mint-dose-calculator__field" };
6742
+ var _hoisted_1$54 = { class: "mint-dose-calculator__field" };
6246
6743
  var _hoisted_2$49 = { class: "mint-dose-calculator__field-label" };
6247
6744
  var _hoisted_3$45 = { class: "mint-dose-calculator__field-row" };
6248
6745
  var _hoisted_4$43 = ["value", "disabled"];
@@ -6283,7 +6780,7 @@ var DoseCalculatorVolumeField_default = /* @__PURE__ */ defineComponent({
6283
6780
  });
6284
6781
  }
6285
6782
  return (_ctx, _cache) => {
6286
- return openBlock(), createElementBlock("div", _hoisted_1$52, [createElementVNode("label", _hoisted_2$49, toDisplayString(__props.label), 1), createElementVNode("div", _hoisted_3$45, [createElementVNode("input", {
6783
+ return openBlock(), createElementBlock("div", _hoisted_1$54, [createElementVNode("label", _hoisted_2$49, toDisplayString(__props.label), 1), createElementVNode("div", _hoisted_3$45, [createElementVNode("input", {
6287
6784
  type: "number",
6288
6785
  value: __props.modelValue.value,
6289
6786
  disabled: __props.disabled,
@@ -6307,7 +6804,7 @@ var DoseCalculatorVolumeField_default = /* @__PURE__ */ defineComponent({
6307
6804
  });
6308
6805
  //#endregion
6309
6806
  //#region src/components/DoseCalculator.vue?vue&type=script&setup=true&lang.ts
6310
- var _hoisted_1$51 = {
6807
+ var _hoisted_1$53 = {
6311
6808
  key: 0,
6312
6809
  class: "mint-dose-calculator__tabs",
6313
6810
  role: "tablist"
@@ -6321,8 +6818,8 @@ var _hoisted_5$39 = {
6321
6818
  role: "tabpanel"
6322
6819
  };
6323
6820
  var _hoisted_6$38 = { class: "mint-dose-calculator__field" };
6324
- var _hoisted_7$35 = { class: "mint-dose-calculator__field" };
6325
- var _hoisted_8$31 = {
6821
+ var _hoisted_7$36 = { class: "mint-dose-calculator__field" };
6822
+ var _hoisted_8$32 = {
6326
6823
  key: 0,
6327
6824
  class: "mint-dose-calculator__result"
6328
6825
  };
@@ -6500,7 +6997,7 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6500
6997
  });
6501
6998
  return (_ctx, _cache) => {
6502
6999
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dose-calculator", __props.disabled ? "mint-dose-calculator--disabled" : ""]) }, [
6503
- showTabs.value ? (openBlock(), createElementBlock("div", _hoisted_1$51, [
7000
+ showTabs.value ? (openBlock(), createElementBlock("div", _hoisted_1$53, [
6504
7001
  createElementVNode("button", {
6505
7002
  type: "button",
6506
7003
  class: normalizeClass(["mint-dose-calculator__tab", activeMode.value === "dilution" ? "mint-dose-calculator__tab--active" : ""]),
@@ -6531,7 +7028,7 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6531
7028
  "show-conversion": false,
6532
7029
  size: "md"
6533
7030
  }, null, 8, ["modelValue", "disabled"])]),
6534
- createElementVNode("div", _hoisted_7$35, [_cache[11] || (_cache[11] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Final Concentration", -1)), createVNode(ConcentrationInput_default, {
7031
+ createElementVNode("div", _hoisted_7$36, [_cache[11] || (_cache[11] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Final Concentration", -1)), createVNode(ConcentrationInput_default, {
6535
7032
  modelValue: finalConcentration.value,
6536
7033
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => finalConcentration.value = $event),
6537
7034
  disabled: __props.disabled,
@@ -6550,7 +7047,7 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6550
7047
  "disabled"
6551
7048
  ]),
6552
7049
  _cache[16] || (_cache[16] = createElementVNode("div", { class: "mint-dose-calculator__divider" }, null, -1)),
6553
- dilutionResult.value?.valid ? (openBlock(), createElementBlock("div", _hoisted_8$31, [
7050
+ dilutionResult.value?.valid ? (openBlock(), createElementBlock("div", _hoisted_8$32, [
6554
7051
  _cache[15] || (_cache[15] = createElementVNode("div", { class: "mint-dose-calculator__result-title" }, "Result", -1)),
6555
7052
  createElementVNode("div", _hoisted_9$29, [_cache[12] || (_cache[12] = createElementVNode("span", { class: "mint-dose-calculator__result-label" }, "Stock volume", -1)), createElementVNode("span", _hoisted_10$28, toDisplayString(unref(formatVolume)(dilutionResult.value.stockVolume)), 1)]),
6556
7053
  createElementVNode("div", _hoisted_11$26, [_cache[13] || (_cache[13] = createElementVNode("span", { class: "mint-dose-calculator__result-label" }, "Diluent volume", -1)), createElementVNode("span", _hoisted_12$25, toDisplayString(unref(formatVolume)(dilutionResult.value.diluentVolume)), 1)]),
@@ -6661,7 +7158,7 @@ function formatProtocolDuration(minutes) {
6661
7158
  }
6662
7159
  //#endregion
6663
7160
  //#region src/components/ExperimentTimeline.vue?vue&type=script&setup=true&lang.ts
6664
- var _hoisted_1$50 = ["aria-label"];
7161
+ var _hoisted_1$52 = ["aria-label"];
6665
7162
  var _hoisted_2$47 = [
6666
7163
  "draggable",
6667
7164
  "tabindex",
@@ -6682,8 +7179,8 @@ var _hoisted_5$38 = {
6682
7179
  viewBox: "0 0 24 24"
6683
7180
  };
6684
7181
  var _hoisted_6$37 = ["d"];
6685
- var _hoisted_7$34 = { class: "mint-timeline__content" };
6686
- var _hoisted_8$30 = { class: "mint-timeline__title-row" };
7182
+ var _hoisted_7$35 = { class: "mint-timeline__content" };
7183
+ var _hoisted_8$31 = { class: "mint-timeline__title-row" };
6687
7184
  var _hoisted_9$28 = ["aria-label", "onClick"];
6688
7185
  var _hoisted_10$27 = ["aria-expanded"];
6689
7186
  var _hoisted_11$25 = {
@@ -6904,7 +7401,7 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6904
7401
  "stroke-width": "2",
6905
7402
  d: unref(PROTOCOL_STEP_TYPE_ICONS)[step.type]
6906
7403
  }, null, 8, _hoisted_6$37)]))], 6),
6907
- createElementVNode("div", _hoisted_7$34, [createElementVNode("div", _hoisted_8$30, [createElementVNode("span", { class: normalizeClass(["mint-timeline__title", `mint-timeline__title--${__props.size}`]) }, toDisplayString(step.name), 3), __props.showDuration && step.duration ? (openBlock(), createElementBlock("span", {
7404
+ createElementVNode("div", _hoisted_7$35, [createElementVNode("div", _hoisted_8$31, [createElementVNode("span", { class: normalizeClass(["mint-timeline__title", `mint-timeline__title--${__props.size}`]) }, toDisplayString(step.name), 3), __props.showDuration && step.duration ? (openBlock(), createElementBlock("span", {
6908
7405
  key: 0,
6909
7406
  class: normalizeClass(["mint-timeline__duration", __props.size === "sm" ? "mint-timeline__duration--sm" : ""])
6910
7407
  }, toDisplayString(unref(formatProtocolDuration)(step.duration)), 3)) : createCommentVNode("", true)]), createElementVNode("div", { class: normalizeClass(["mint-timeline__type", `mint-timeline__type--${__props.size}`]) }, toDisplayString(step.type.replace("_", " ")), 3)]),
@@ -7025,20 +7522,20 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
7025
7522
  "aria-live": "polite",
7026
7523
  style: normalizeStyle(unref(announcerStyle))
7027
7524
  }, toDisplayString(unref(reorderAnnouncement)), 5)
7028
- ], 10, _hoisted_1$50);
7525
+ ], 10, _hoisted_1$52);
7029
7526
  };
7030
7527
  }
7031
7528
  });
7032
7529
  //#endregion
7033
7530
  //#region src/components/internal/WellEditPopupInternal.vue?vue&type=script&setup=true&lang.ts
7034
- var _hoisted_1$49 = { class: "mint-well-edit-popup__header" };
7531
+ var _hoisted_1$51 = { class: "mint-well-edit-popup__header" };
7035
7532
  var _hoisted_2$46 = { class: "mint-well-edit-popup__header-left" };
7036
7533
  var _hoisted_3$42 = { class: "mint-well-edit-popup__well-id" };
7037
7534
  var _hoisted_4$40 = { class: "mint-well-edit-popup__body" };
7038
7535
  var _hoisted_5$37 = { key: 0 };
7039
7536
  var _hoisted_6$36 = { class: "mint-well-edit-popup__row" };
7040
- var _hoisted_7$33 = { key: 0 };
7041
- var _hoisted_8$29 = { class: "mint-well-edit-popup__type-grid" };
7537
+ var _hoisted_7$34 = { key: 0 };
7538
+ var _hoisted_8$30 = { class: "mint-well-edit-popup__type-grid" };
7042
7539
  var _hoisted_9$27 = ["title", "onClick"];
7043
7540
  var _hoisted_10$26 = { key: 1 };
7044
7541
  var _hoisted_11$24 = {
@@ -7168,7 +7665,7 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
7168
7665
  tabindex: "-1",
7169
7666
  onClick: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop"]))
7170
7667
  }, [
7171
- createElementVNode("div", _hoisted_1$49, [createElementVNode("div", _hoisted_2$46, [createElementVNode("span", _hoisted_3$42, toDisplayString(__props.wellId), 1), _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-well-edit-popup__title" }, "Edit Well", -1))]), createElementVNode("button", {
7668
+ createElementVNode("div", _hoisted_1$51, [createElementVNode("div", _hoisted_2$46, [createElementVNode("span", _hoisted_3$42, toDisplayString(__props.wellId), 1), _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-well-edit-popup__title" }, "Edit Well", -1))]), createElementVNode("button", {
7172
7669
  class: "mint-well-edit-popup__close",
7173
7670
  onClick: close
7174
7671
  }, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
@@ -7190,7 +7687,7 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
7190
7687
  onKeydown: withKeys(save, ["enter"]),
7191
7688
  autofocus: ""
7192
7689
  }, null, 544), [[vModelText, formData.value.label]])])) : createCommentVNode("", true),
7193
- createElementVNode("div", _hoisted_6$36, [hasField("sampleType") ? (openBlock(), createElementBlock("div", _hoisted_7$33, [_cache[9] || (_cache[9] = createElementVNode("label", { class: "mint-well-edit-popup__label" }, "Type", -1)), createElementVNode("div", _hoisted_8$29, [(openBlock(), createElementBlock(Fragment, null, renderList(sampleTypeButtons, (btn) => {
7690
+ createElementVNode("div", _hoisted_6$36, [hasField("sampleType") ? (openBlock(), createElementBlock("div", _hoisted_7$34, [_cache[9] || (_cache[9] = createElementVNode("label", { class: "mint-well-edit-popup__label" }, "Type", -1)), createElementVNode("div", _hoisted_8$30, [(openBlock(), createElementBlock(Fragment, null, renderList(sampleTypeButtons, (btn) => {
7194
7691
  return createElementVNode("button", {
7195
7692
  key: btn.type,
7196
7693
  title: btn.tooltip,
@@ -7789,7 +8286,7 @@ var DEFAULT_WELL_LEGEND_ITEMS = [
7789
8286
  ];
7790
8287
  //#endregion
7791
8288
  //#region src/components/WellPlate.vue?vue&type=script&setup=true&lang.ts
7792
- var _hoisted_1$48 = {
8289
+ var _hoisted_1$50 = {
7793
8290
  key: 0,
7794
8291
  class: "mint-well-plate__state"
7795
8292
  };
@@ -7807,8 +8304,8 @@ var _hoisted_4$39 = {
7807
8304
  };
7808
8305
  var _hoisted_5$36 = { class: "mint-well-plate__content" };
7809
8306
  var _hoisted_6$35 = ["aria-label"];
7810
- var _hoisted_7$32 = { key: 0 };
7811
- var _hoisted_8$28 = ["colspan"];
8307
+ var _hoisted_7$33 = { key: 0 };
8308
+ var _hoisted_8$29 = ["colspan"];
7812
8309
  var _hoisted_9$26 = ["colspan"];
7813
8310
  var _hoisted_10$25 = { key: 1 };
7814
8311
  var _hoisted_11$23 = ["rowspan"];
@@ -7928,7 +8425,9 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7928
8425
  },
7929
8426
  loading: { type: Boolean },
7930
8427
  error: {},
7931
- emptyMessage: {}
8428
+ emptyMessage: {},
8429
+ wellClass: {},
8430
+ wellStyle: {}
7932
8431
  },
7933
8432
  emits: [
7934
8433
  "update:modelValue",
@@ -7984,7 +8483,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7984
8483
  emitSampleDrop: (wellId, data, event) => emit("sample-drop", wellId, data, event)
7985
8484
  });
7986
8485
  function getWellClasses(well) {
7987
- return wellClasses(well, {
8486
+ const base = wellClasses(well, {
7988
8487
  wellShape: props.wellShape,
7989
8488
  selectionMode: props.selectionMode,
7990
8489
  selected: isSelected(well.id),
@@ -7995,12 +8494,17 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7995
8494
  dragSource: dragSourceWell.value === well.id,
7996
8495
  dragTarget: dragTargetWell.value === well.id
7997
8496
  });
8497
+ const custom = props.wellClass?.(well);
8498
+ return custom ? [base, custom] : [base];
7998
8499
  }
7999
8500
  function getWellStyle(well) {
8000
- return wellStyle(well, {
8001
- heatmap: props.heatmap,
8002
- sampleColors: props.sampleColors
8003
- });
8501
+ return {
8502
+ ...wellStyle(well, {
8503
+ heatmap: props.heatmap,
8504
+ sampleColors: props.sampleColors
8505
+ }),
8506
+ ...props.wellStyle?.(well)
8507
+ };
8004
8508
  }
8005
8509
  function getSampleTypeIndicator(well) {
8006
8510
  return sampleTypeIndicator(well, props.showSampleTypeIndicator);
@@ -8034,7 +8538,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8034
8538
  class: normalizeClass(["mint-well-plate", isFillMode.value ? "mint-well-plate--fill" : "mint-well-plate--inline"]),
8035
8539
  style: normalizeStyle(containerStyle.value)
8036
8540
  }, [
8037
- __props.error ? (openBlock(), createElementBlock("div", _hoisted_1$48, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
8541
+ __props.error ? (openBlock(), createElementBlock("div", _hoisted_1$50, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
8038
8542
  state: "error",
8039
8543
  title: __props.error
8040
8544
  }, null, 8, ["title"])])])) : __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2$45, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(DataStateInternal_default, {
@@ -8052,7 +8556,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8052
8556
  "aria-label": `${props.format}-well plate`,
8053
8557
  style: normalizeStyle(tableStyle.value)
8054
8558
  }, [
8055
- hasColumnConditions.value ? (openBlock(), createElementBlock("thead", _hoisted_7$32, [createElementVNode("tr", null, [
8559
+ hasColumnConditions.value ? (openBlock(), createElementBlock("thead", _hoisted_7$33, [createElementVNode("tr", null, [
8056
8560
  createElementVNode("th", { style: normalizeStyle({ width: sizeConfig.value.headerWidth }) }, null, 4),
8057
8561
  hasRowConditions.value ? (openBlock(), createElementBlock("th", {
8058
8562
  key: 0,
@@ -8068,7 +8572,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8068
8572
  fontSize: sizeConfig.value.fontSize,
8069
8573
  color: span.condition.color
8070
8574
  })
8071
- }, [createTextVNode(toDisplayString(span.condition.label), 1), span.condition.unit ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" (" + toDisplayString(span.condition.unit) + ")", 1)], 64)) : createCommentVNode("", true)], 12, _hoisted_8$28)) : (openBlock(), createElementBlock("th", {
8575
+ }, [createTextVNode(toDisplayString(span.condition.label), 1), span.condition.unit ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" (" + toDisplayString(span.condition.unit) + ")", 1)], 64)) : createCommentVNode("", true)], 12, _hoisted_8$29)) : (openBlock(), createElementBlock("th", {
8072
8576
  key: 1,
8073
8577
  colspan: span.colspan
8074
8578
  }, null, 8, _hoisted_9$26))], 64);
@@ -8249,7 +8753,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8249
8753
  });
8250
8754
  //#endregion
8251
8755
  //#region src/components/SampleLegend.vue?vue&type=script&setup=true&lang.ts
8252
- var _hoisted_1$47 = ["aria-pressed", "onClick"];
8756
+ var _hoisted_1$49 = ["aria-pressed", "onClick"];
8253
8757
  var _hoisted_2$44 = ["aria-label", "onClick"];
8254
8758
  //#endregion
8255
8759
  //#region src/components/SampleLegend.vue
@@ -8341,7 +8845,7 @@ var SampleLegend_default = /* @__PURE__ */ defineComponent({
8341
8845
  "stroke-width": "2",
8342
8846
  d: "M6 18L18 6M6 6l12 12"
8343
8847
  })], -1)])], 8, _hoisted_2$44)) : createCommentVNode("", true)
8344
- ], 10, _hoisted_1$47);
8848
+ ], 10, _hoisted_1$49);
8345
8849
  }), 128)), __props.editable ? (openBlock(), createElementBlock("button", {
8346
8850
  key: 0,
8347
8851
  type: "button",
@@ -8364,7 +8868,7 @@ var SampleLegend_default = /* @__PURE__ */ defineComponent({
8364
8868
  });
8365
8869
  //#endregion
8366
8870
  //#region src/components/internal/PlateMapEditorToolbarInternal.vue?vue&type=script&setup=true&lang.ts
8367
- var _hoisted_1$46 = { class: "mint-plate-editor__toolbar" };
8871
+ var _hoisted_1$48 = { class: "mint-plate-editor__toolbar" };
8368
8872
  var _hoisted_2$43 = { class: "mint-plate-editor__tabs" };
8369
8873
  var _hoisted_3$40 = ["onClick"];
8370
8874
  var _hoisted_4$38 = { class: "mint-plate-editor__tab-name" };
@@ -8373,8 +8877,8 @@ var _hoisted_5$35 = {
8373
8877
  class: "mint-plate-editor__tab-count"
8374
8878
  };
8375
8879
  var _hoisted_6$34 = ["aria-label", "onClick"];
8376
- var _hoisted_7$31 = { class: "mint-plate-editor__actions" };
8377
- var _hoisted_8$27 = ["disabled"];
8880
+ var _hoisted_7$32 = { class: "mint-plate-editor__actions" };
8881
+ var _hoisted_8$28 = ["disabled"];
8378
8882
  var _hoisted_9$25 = ["disabled"];
8379
8883
  //#endregion
8380
8884
  //#region src/components/internal/PlateMapEditorToolbarInternal.vue
@@ -8403,7 +8907,7 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8403
8907
  const props = __props;
8404
8908
  const emit = __emit;
8405
8909
  return (_ctx, _cache) => {
8406
- return openBlock(), createElementBlock("div", _hoisted_1$46, [
8910
+ return openBlock(), createElementBlock("div", _hoisted_1$48, [
8407
8911
  createElementVNode("div", _hoisted_2$43, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.plates, (plate, index) => {
8408
8912
  return openBlock(), createElementBlock("button", {
8409
8913
  key: plate.id,
@@ -8447,7 +8951,7 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8447
8951
  "stroke-linejoin": "round"
8448
8952
  }, [createElementVNode("path", { d: "M5 12h14" }), createElementVNode("path", { d: "M12 5v14" })], -1), createElementVNode("span", null, "Add", -1)])])) : createCommentVNode("", true)]),
8449
8953
  _cache[12] || (_cache[12] = createElementVNode("div", { class: "mint-plate-editor__spacer" }, null, -1)),
8450
- createElementVNode("div", _hoisted_7$31, [
8954
+ createElementVNode("div", _hoisted_7$32, [
8451
8955
  createElementVNode("button", {
8452
8956
  type: "button",
8453
8957
  disabled: !__props.canUndo,
@@ -8461,7 +8965,7 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8461
8965
  "stroke-width": "2",
8462
8966
  "stroke-linecap": "round",
8463
8967
  "stroke-linejoin": "round"
8464
- }, [createElementVNode("path", { d: "M9 14 4 9l5-5" }), createElementVNode("path", { d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11" })], -1)])], 8, _hoisted_8$27),
8968
+ }, [createElementVNode("path", { d: "M9 14 4 9l5-5" }), createElementVNode("path", { d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11" })], -1)])], 8, _hoisted_8$28),
8465
8969
  createElementVNode("button", {
8466
8970
  type: "button",
8467
8971
  disabled: !__props.canRedo,
@@ -8518,7 +9022,7 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8518
9022
  });
8519
9023
  //#endregion
8520
9024
  //#region src/components/PlateMapEditor.vue?vue&type=script&setup=true&lang.ts
8521
- var _hoisted_1$45 = { class: "mint-plate-editor__main" };
9025
+ var _hoisted_1$47 = { class: "mint-plate-editor__main" };
8522
9026
  var _hoisted_2$42 = {
8523
9027
  key: 2,
8524
9028
  class: "mint-plate-editor__selection-bar"
@@ -8533,8 +9037,8 @@ var _hoisted_6$33 = {
8533
9037
  key: 0,
8534
9038
  class: "mint-plate-editor__add-sample"
8535
9039
  };
8536
- var _hoisted_7$30 = { class: "mint-plate-editor__add-sample-form" };
8537
- var _hoisted_8$26 = ["disabled"];
9040
+ var _hoisted_7$31 = { class: "mint-plate-editor__add-sample-form" };
9041
+ var _hoisted_8$27 = ["disabled"];
8538
9042
  var _hoisted_9$24 = { class: "mint-plate-editor__modal" };
8539
9043
  var _hoisted_10$24 = { class: "mint-plate-editor__modal-field" };
8540
9044
  var _hoisted_11$22 = { class: "mint-plate-editor__modal-field" };
@@ -8710,7 +9214,7 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8710
9214
  useEventListener(() => document, "keydown", handleKeyDown);
8711
9215
  return (_ctx, _cache) => {
8712
9216
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-plate-editor", { "mint-plate-editor--with-sidebar": __props.showSidebar }]) }, [
8713
- createElementVNode("div", _hoisted_1$45, [
9217
+ createElementVNode("div", _hoisted_1$47, [
8714
9218
  __props.showToolbar ? (openBlock(), createBlock(PlateMapEditorToolbarInternal_default, {
8715
9219
  key: 0,
8716
9220
  plates: unref(editor).plates.value,
@@ -8786,7 +9290,7 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8786
9290
  "editable",
8787
9291
  "size"
8788
9292
  ]),
8789
- __props.allowAddSamples ? (openBlock(), createElementBlock("div", _hoisted_6$33, [createElementVNode("div", _hoisted_7$30, [withDirectives(createElementVNode("input", {
9293
+ __props.allowAddSamples ? (openBlock(), createElementBlock("div", _hoisted_6$33, [createElementVNode("div", _hoisted_7$31, [withDirectives(createElementVNode("input", {
8790
9294
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => newSampleName.value = $event),
8791
9295
  type: "text",
8792
9296
  placeholder: "New sample...",
@@ -8797,7 +9301,7 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8797
9301
  disabled: !newSampleName.value.trim(),
8798
9302
  class: "mint-plate-editor__add-sample-btn",
8799
9303
  onClick: handleAddSample
8800
- }, " Add ", 8, _hoisted_8$26)])])) : createCommentVNode("", true),
9304
+ }, " Add ", 8, _hoisted_8$27)])])) : createCommentVNode("", true),
8801
9305
  _cache[12] || (_cache[12] = createStaticVNode("<div class=\"mint-plate-editor__shortcuts\"><h4 class=\"mint-plate-editor__shortcuts-title\">Shortcuts</h4><div class=\"mint-plate-editor__shortcuts-list\"><div><kbd class=\"mint-plate-editor__shortcut-key\">1-9</kbd> Quick assign</div><div><kbd class=\"mint-plate-editor__shortcut-key\">Del</kbd> Clear wells</div><div><kbd class=\"mint-plate-editor__shortcut-key\">Ctrl+Z</kbd> Undo</div><div><kbd class=\"mint-plate-editor__shortcut-key\">Ctrl+A</kbd> Select all</div></div></div>", 1))
8802
9306
  ])])) : createCommentVNode("", true),
8803
9307
  (openBlock(), createBlock(Teleport, { to: "body" }, [showImportModal.value ? (openBlock(), createElementBlock("div", {
@@ -8895,7 +9399,7 @@ function getReagentRowClasses(reagent, options) {
8895
9399
  }
8896
9400
  //#endregion
8897
9401
  //#region src/components/ReagentList.vue?vue&type=script&setup=true&lang.ts
8898
- var _hoisted_1$44 = { class: "mint-reagent-list" };
9402
+ var _hoisted_1$46 = { class: "mint-reagent-list" };
8899
9403
  var _hoisted_2$41 = { class: "mint-reagent-list__header" };
8900
9404
  var _hoisted_3$38 = {
8901
9405
  key: 0,
@@ -8910,14 +9414,14 @@ var _hoisted_5$33 = {
8910
9414
  style: { "width": "24px" }
8911
9415
  };
8912
9416
  var _hoisted_6$32 = ["aria-sort"];
8913
- var _hoisted_7$29 = {
9417
+ var _hoisted_7$30 = {
8914
9418
  key: 0,
8915
9419
  "stroke-linecap": "round",
8916
9420
  "stroke-linejoin": "round",
8917
9421
  "stroke-width": "2",
8918
9422
  d: "M19 9l-7 7-7-7"
8919
9423
  };
8920
- var _hoisted_8$25 = {
9424
+ var _hoisted_8$26 = {
8921
9425
  key: 1,
8922
9426
  "stroke-linecap": "round",
8923
9427
  "stroke-linejoin": "round",
@@ -9149,7 +9653,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9149
9653
  emit("add");
9150
9654
  }
9151
9655
  return (_ctx, _cache) => {
9152
- return openBlock(), createElementBlock("div", _hoisted_1$44, [
9656
+ return openBlock(), createElementBlock("div", _hoisted_1$46, [
9153
9657
  createElementVNode("div", _hoisted_2$41, [__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_3$38, [_cache[3] || (_cache[3] = createElementVNode("svg", {
9154
9658
  class: "mint-reagent-list__search-icon",
9155
9659
  fill: "none",
@@ -9199,7 +9703,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9199
9703
  fill: "none",
9200
9704
  stroke: "currentColor",
9201
9705
  viewBox: "0 0 24 24"
9202
- }, [sortColumn.value === col && sortDirection.value === "desc" ? (openBlock(), createElementBlock("path", _hoisted_7$29)) : (openBlock(), createElementBlock("path", _hoisted_8$25))], 2)) : createCommentVNode("", true)]),
9706
+ }, [sortColumn.value === col && sortDirection.value === "desc" ? (openBlock(), createElementBlock("path", _hoisted_7$30)) : (openBlock(), createElementBlock("path", _hoisted_8$26))], 2)) : createCommentVNode("", true)]),
9203
9707
  _: 2
9204
9708
  }, 1064, [
9205
9709
  "type",
@@ -9390,7 +9894,7 @@ function fieldRecipeSummary(input) {
9390
9894
  }
9391
9895
  //#endregion
9392
9896
  //#region src/components/SmartGroupFieldRecipe.vue?vue&type=script&setup=true&lang.ts
9393
- var _hoisted_1$43 = { class: "sg-modal fr" };
9897
+ var _hoisted_1$45 = { class: "sg-modal fr" };
9394
9898
  var _hoisted_2$40 = { class: "sg-head" };
9395
9899
  var _hoisted_3$37 = { class: "sg-head__sub" };
9396
9900
  var _hoisted_4$35 = ["aria-expanded"];
@@ -9404,12 +9908,12 @@ var _hoisted_6$31 = [
9404
9908
  "aria-disabled",
9405
9909
  "title"
9406
9910
  ];
9407
- var _hoisted_7$28 = [
9911
+ var _hoisted_7$29 = [
9408
9912
  "disabled",
9409
9913
  "aria-disabled",
9410
9914
  "title"
9411
9915
  ];
9412
- var _hoisted_8$24 = {
9916
+ var _hoisted_8$25 = {
9413
9917
  class: "sg-mode",
9414
9918
  role: "tablist",
9415
9919
  "aria-label": "Grouping mode"
@@ -9724,7 +10228,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9724
10228
  });
9725
10229
  }
9726
10230
  return (_ctx, _cache) => {
9727
- return openBlock(), createElementBlock("div", _hoisted_1$43, [
10231
+ return openBlock(), createElementBlock("div", _hoisted_1$45, [
9728
10232
  createElementVNode("div", _hoisted_2$40, [
9729
10233
  createVNode(Icon, {
9730
10234
  d: ICON.bolt,
@@ -9790,7 +10294,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9790
10294
  }, [createVNode(Icon, {
9791
10295
  d: ICON.download,
9792
10296
  size: 14
9793
- }, null, 8, ["d"]), _cache[9] || (_cache[9] = createTextVNode(" Download pre-filled ", -1))], 8, _hoisted_7$28)
10297
+ }, null, 8, ["d"]), _cache[9] || (_cache[9] = createTextVNode(" Download pre-filled ", -1))], 8, _hoisted_7$29)
9794
10298
  ])) : createCommentVNode("", true),
9795
10299
  createElementVNode("input", {
9796
10300
  ref_key: "fileInput",
@@ -9801,7 +10305,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9801
10305
  onChange: onFileChange
9802
10306
  }, null, 544)
9803
10307
  ], 512),
9804
- createElementVNode("div", _hoisted_8$24, [_cache[10] || (_cache[10] = createElementVNode("button", {
10308
+ createElementVNode("div", _hoisted_8$25, [_cache[10] || (_cache[10] = createElementVNode("button", {
9805
10309
  type: "button",
9806
10310
  class: "sg-mode__btn sg-mode__btn--on",
9807
10311
  role: "tab",
@@ -10030,7 +10534,7 @@ function assignSamples(samples, selected, assignment) {
10030
10534
  }
10031
10535
  //#endregion
10032
10536
  //#region src/components/SmartGroupManual.vue?vue&type=script&setup=true&lang.ts
10033
- var _hoisted_1$42 = { class: "sg-modal mg2" };
10537
+ var _hoisted_1$44 = { class: "sg-modal mg2" };
10034
10538
  var _hoisted_2$39 = { class: "sg-head" };
10035
10539
  var _hoisted_3$36 = {
10036
10540
  class: "sg-mode",
@@ -10040,8 +10544,8 @@ var _hoisted_3$36 = {
10040
10544
  var _hoisted_4$34 = { class: "mg2-body" };
10041
10545
  var _hoisted_5$31 = { class: "mg2-find" };
10042
10546
  var _hoisted_6$30 = { class: "mg2-search" };
10043
- var _hoisted_7$27 = { class: "mg2-chips" };
10044
- var _hoisted_8$23 = ["onClick"];
10547
+ var _hoisted_7$28 = { class: "mg2-chips" };
10548
+ var _hoisted_8$24 = ["onClick"];
10045
10549
  var _hoisted_9$21 = { class: "mg2-chip__n" };
10046
10550
  var _hoisted_10$21 = { class: "mg2-selbar" };
10047
10551
  var _hoisted_11$19 = { class: "mg2-check" };
@@ -10300,7 +10804,7 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10300
10804
  emit("done", { samples: samples.value });
10301
10805
  }
10302
10806
  return (_ctx, _cache) => {
10303
- return openBlock(), createElementBlock("div", _hoisted_1$42, [
10807
+ return openBlock(), createElementBlock("div", _hoisted_1$44, [
10304
10808
  createElementVNode("div", _hoisted_2$39, [
10305
10809
  createVNode(Icon, {
10306
10810
  d: ICON.layers,
@@ -10350,12 +10854,12 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10350
10854
  size: 13
10351
10855
  }, null, 8, ["d"])])) : createCommentVNode("", true)
10352
10856
  ]),
10353
- createElementVNode("div", _hoisted_7$27, [(openBlock(true), createElementBlock(Fragment, null, renderList(chips.value, (chip) => {
10857
+ createElementVNode("div", _hoisted_7$28, [(openBlock(true), createElementBlock(Fragment, null, renderList(chips.value, (chip) => {
10354
10858
  return openBlock(), createElementBlock("button", {
10355
10859
  key: chip.k,
10356
10860
  class: normalizeClass(["mg2-chip", { "mg2-chip--on": filter.value === chip.k }]),
10357
10861
  onClick: ($event) => filter.value = chip.k
10358
- }, [createTextVNode(toDisplayString(chip.label), 1), createElementVNode("span", _hoisted_9$21, toDisplayString(chip.n), 1)], 10, _hoisted_8$23);
10862
+ }, [createTextVNode(toDisplayString(chip.label), 1), createElementVNode("span", _hoisted_9$21, toDisplayString(chip.n), 1)], 10, _hoisted_8$24);
10359
10863
  }), 128))]),
10360
10864
  createElementVNode("div", _hoisted_10$21, [createElementVNode("label", _hoisted_11$19, [createElementVNode("input", {
10361
10865
  type: "checkbox",
@@ -10939,7 +11443,7 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10939
11443
  });
10940
11444
  //#endregion
10941
11445
  //#region src/components/SampleSelectorSampleRow.vue?vue&type=script&setup=true&lang.ts
10942
- var _hoisted_1$41 = ["title", "aria-label"];
11446
+ var _hoisted_1$43 = ["title", "aria-label"];
10943
11447
  var _hoisted_2$38 = ["checked", "aria-label"];
10944
11448
  var _hoisted_3$35 = { class: "mint-sample-selector__sample-name" };
10945
11449
  //#endregion
@@ -11012,7 +11516,7 @@ var SampleSelectorSampleRow_default = /* @__PURE__ */ defineComponent({
11012
11516
  "stroke-width": "2",
11013
11517
  d: "M20 12H4"
11014
11518
  })], -1)])])) : createCommentVNode("", true)
11015
- ], 10, _hoisted_1$41);
11519
+ ], 10, _hoisted_1$43);
11016
11520
  };
11017
11521
  }
11018
11522
  });
@@ -11029,7 +11533,7 @@ function collectNodeKeys(nodes) {
11029
11533
  }
11030
11534
  //#endregion
11031
11535
  //#region src/components/SampleSelectorGroupNode.vue?vue&type=script&setup=true&lang.ts
11032
- var _hoisted_1$40 = [
11536
+ var _hoisted_1$42 = [
11033
11537
  "draggable",
11034
11538
  "aria-expanded",
11035
11539
  "aria-label"
@@ -11191,7 +11695,7 @@ var SampleSelectorGroupNode_default = /* @__PURE__ */ defineComponent({
11191
11695
  "stroke-width": "2",
11192
11696
  d: "M6 18L18 6M6 6l12 12"
11193
11697
  })], -1)])], 8, _hoisted_5$30)
11194
- ], 42, _hoisted_1$40), createVNode(Transition, { name: "mint-collapse" }, {
11698
+ ], 42, _hoisted_1$42), createVNode(Transition, { name: "mint-collapse" }, {
11195
11699
  default: withCtx(() => [expanded.value && !isLeaf.value ? (openBlock(), createElementBlock("div", {
11196
11700
  key: 0,
11197
11701
  class: "mint-sample-selector__sub-groups",
@@ -11502,7 +12006,7 @@ function useSampleSelectorSelection(options) {
11502
12006
  }
11503
12007
  //#endregion
11504
12008
  //#region src/components/SampleSelector.vue?vue&type=script&setup=true&lang.ts
11505
- var _hoisted_1$39 = { class: "mint-sample-selector" };
12009
+ var _hoisted_1$41 = { class: "mint-sample-selector" };
11506
12010
  var _hoisted_2$36 = {
11507
12011
  key: 0,
11508
12012
  class: "mint-sample-selector__state"
@@ -11520,8 +12024,8 @@ var _hoisted_5$29 = {
11520
12024
  class: "mint-sample-selector__select-all"
11521
12025
  };
11522
12026
  var _hoisted_6$29 = ["checked"];
11523
- var _hoisted_7$26 = { class: "mint-sample-selector__select-all-count" };
11524
- var _hoisted_8$22 = {
12027
+ var _hoisted_7$27 = { class: "mint-sample-selector__select-all-count" };
12028
+ var _hoisted_8$23 = {
11525
12029
  key: 4,
11526
12030
  class: "mint-sample-selector__actions"
11527
12031
  };
@@ -11748,7 +12252,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11748
12252
  const isPlaceholderState = computed(() => props.loading || Boolean(props.error) || resolvedSamples.value.length === 0);
11749
12253
  __expose({ handleSmartGroupApply });
11750
12254
  return (_ctx, _cache) => {
11751
- return openBlock(), createElementBlock("div", _hoisted_1$39, [
12255
+ return openBlock(), createElementBlock("div", _hoisted_1$41, [
11752
12256
  __props.error ? (openBlock(), createElementBlock("div", _hoisted_2$36, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
11753
12257
  state: "error",
11754
12258
  size: "sm",
@@ -11770,9 +12274,9 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11770
12274
  class: "mint-sample-selector__checkbox"
11771
12275
  }, null, 40, _hoisted_6$29),
11772
12276
  _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-sample-selector__select-all-label" }, "Select All", -1)),
11773
- createElementVNode("span", _hoisted_7$26, toDisplayString(resolvedSamples.value.length) + " samples", 1)
12277
+ createElementVNode("span", _hoisted_7$27, toDisplayString(resolvedSamples.value.length) + " samples", 1)
11774
12278
  ])) : createCommentVNode("", true),
11775
- !isPlaceholderState.value && __props.enableGrouping ? (openBlock(), createElementBlock("div", _hoisted_8$22, [createElementVNode("div", _hoisted_9$20, [createVNode(BaseButton_default, {
12279
+ !isPlaceholderState.value && __props.enableGrouping ? (openBlock(), createElementBlock("div", _hoisted_8$23, [createElementVNode("div", _hoisted_9$20, [createVNode(BaseButton_default, {
11776
12280
  variant: __props.enableSmartGroup && groupingEnabled.value ? "primary" : "secondary",
11777
12281
  size: "sm",
11778
12282
  disabled: resolvedSamples.value.length === 0,
@@ -12169,7 +12673,7 @@ function formatEventTime(event) {
12169
12673
  }
12170
12674
  //#endregion
12171
12675
  //#region src/components/ScheduleCalendar.vue?vue&type=script&setup=true&lang.ts
12172
- var _hoisted_1$38 = {
12676
+ var _hoisted_1$40 = {
12173
12677
  key: 0,
12174
12678
  class: "mint-schedule__header"
12175
12679
  };
@@ -12187,11 +12691,11 @@ var _hoisted_6$28 = {
12187
12691
  key: 1,
12188
12692
  class: "mint-schedule__state"
12189
12693
  };
12190
- var _hoisted_7$25 = {
12694
+ var _hoisted_7$26 = {
12191
12695
  key: 2,
12192
12696
  class: "mint-schedule__state"
12193
12697
  };
12194
- var _hoisted_8$21 = {
12698
+ var _hoisted_8$22 = {
12195
12699
  key: 3,
12196
12700
  class: "mint-schedule__state"
12197
12701
  };
@@ -12445,7 +12949,7 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
12445
12949
  class: "mint-schedule",
12446
12950
  style: normalizeStyle({ "--slot-height": `${unref(SLOT_HEIGHT)}px` })
12447
12951
  }, [
12448
- __props.showNavigation || __props.showViewToggle ? (openBlock(), createElementBlock("div", _hoisted_1$38, [
12952
+ __props.showNavigation || __props.showViewToggle ? (openBlock(), createElementBlock("div", _hoisted_1$40, [
12449
12953
  __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$35, [
12450
12954
  createElementVNode("button", {
12451
12955
  type: "button",
@@ -12496,10 +13000,10 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
12496
13000
  __props.error ? (openBlock(), createElementBlock("div", _hoisted_6$28, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
12497
13001
  state: "error",
12498
13002
  title: __props.error
12499
- }, null, 8, ["title"])])])) : __props.loading ? (openBlock(), createElementBlock("div", _hoisted_7$25, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(DataStateInternal_default, {
13003
+ }, null, 8, ["title"])])])) : __props.loading ? (openBlock(), createElementBlock("div", _hoisted_7$26, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(DataStateInternal_default, {
12500
13004
  state: "loading",
12501
13005
  "loading-label": "Loading schedule"
12502
- })])])) : showEmptyState.value ? (openBlock(), createElementBlock("div", _hoisted_8$21, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
13006
+ })])])) : showEmptyState.value ? (openBlock(), createElementBlock("div", _hoisted_8$22, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
12503
13007
  state: "empty",
12504
13008
  title: __props.emptyMessage
12505
13009
  }, null, 8, ["title"])])])) : currentView.value === "day" || currentView.value === "week" ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [currentView.value === "week" ? (openBlock(), createElementBlock("div", _hoisted_9$19, [_cache[5] || (_cache[5] = createElementVNode("div", { class: "mint-schedule__day-header-gutter" }, null, -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(visibleDays), (day, i) => {
@@ -12620,7 +13124,7 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
12620
13124
  });
12621
13125
  //#endregion
12622
13126
  //#region src/components/ComponentBindingRenderer.vue?vue&type=script&setup=true&lang.ts
12623
- var _hoisted_1$37 = [
13127
+ var _hoisted_1$39 = [
12624
13128
  "data-component-binding-id",
12625
13129
  "data-template-id",
12626
13130
  "data-template-component"
@@ -12639,8 +13143,8 @@ var _hoisted_6$27 = {
12639
13143
  key: 0,
12640
13144
  class: "mint-component-binding-renderer__description"
12641
13145
  };
12642
- var _hoisted_7$24 = { class: "mint-component-binding-renderer__body" };
12643
- var _hoisted_8$20 = {
13146
+ var _hoisted_7$25 = { class: "mint-component-binding-renderer__body" };
13147
+ var _hoisted_8$21 = {
12644
13148
  key: 0,
12645
13149
  class: "mint-component-binding-renderer__empty"
12646
13150
  };
@@ -12769,8 +13273,8 @@ var ComponentBindingRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper
12769
13273
  "data-component-binding-id": renderableBinding.id,
12770
13274
  "data-template-id": renderableBinding.template_id,
12771
13275
  "data-template-component": renderableBinding.component
12772
- }, [__props.showHeaders ? (openBlock(), createElementBlock("header", _hoisted_2$34, [createElementVNode("div", _hoisted_3$31, [createElementVNode("p", _hoisted_4$30, toDisplayString(renderableBinding.component), 1), renderableBinding.template_id || renderableBinding.id ? (openBlock(), createElementBlock("p", _hoisted_5$27, toDisplayString(renderableBinding.template_id ?? renderableBinding.id), 1)) : createCommentVNode("", true)]), __props.showDescriptions && renderableBinding.description ? (openBlock(), createElementBlock("p", _hoisted_6$27, toDisplayString(renderableBinding.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", _hoisted_7$24, [(openBlock(), createBlock(resolveDynamicComponent(renderableBinding.componentImpl), mergeProps({ ref_for: true }, renderableBinding.normalizedProps), null, 16))])], 8, _hoisted_1$37);
12773
- }), 128)), renderableBindings.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_8$20, toDisplayString(__props.emptyText), 1)) : createCommentVNode("", true)], 2);
13276
+ }, [__props.showHeaders ? (openBlock(), createElementBlock("header", _hoisted_2$34, [createElementVNode("div", _hoisted_3$31, [createElementVNode("p", _hoisted_4$30, toDisplayString(renderableBinding.component), 1), renderableBinding.template_id || renderableBinding.id ? (openBlock(), createElementBlock("p", _hoisted_5$27, toDisplayString(renderableBinding.template_id ?? renderableBinding.id), 1)) : createCommentVNode("", true)]), __props.showDescriptions && renderableBinding.description ? (openBlock(), createElementBlock("p", _hoisted_6$27, toDisplayString(renderableBinding.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", _hoisted_7$25, [(openBlock(), createBlock(resolveDynamicComponent(renderableBinding.componentImpl), mergeProps({ ref_for: true }, renderableBinding.normalizedProps), null, 16))])], 8, _hoisted_1$39);
13277
+ }), 128)), renderableBindings.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_8$21, toDisplayString(__props.emptyText), 1)) : createCommentVNode("", true)], 2);
12774
13278
  };
12775
13279
  }
12776
13280
  }), [["__scopeId", "data-v-e6c3e169"]]);
@@ -12909,7 +13413,7 @@ function bioTemplatePresetWorkspaceProps(props) {
12909
13413
  }
12910
13414
  //#endregion
12911
13415
  //#region src/components/ControlWorkspaceView.vue?vue&type=script&setup=true&lang.ts
12912
- var _hoisted_1$36 = { class: "mint-control-workspace-view__content" };
13416
+ var _hoisted_1$38 = { class: "mint-control-workspace-view__content" };
12913
13417
  //#endregion
12914
13418
  //#region src/components/ControlWorkspaceView.vue
12915
13419
  var ControlWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -13126,7 +13630,7 @@ var ControlWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_def
13126
13630
  "form-disabled",
13127
13631
  "form-readonly"
13128
13632
  ])], true)]),
13129
- default: withCtx(() => [createElementVNode("main", _hoisted_1$36, [renderSlot(_ctx.$slots, "default", {
13633
+ default: withCtx(() => [createElementVNode("main", _hoisted_1$38, [renderSlot(_ctx.$slots, "default", {
13130
13634
  workspace: resolvedWorkspace.value,
13131
13635
  bindings: resolvedBindings.value,
13132
13636
  values: resolvedWorkspace.value.values,
@@ -13163,7 +13667,7 @@ var ControlWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_def
13163
13667
  }), [["__scopeId", "data-v-f3b22df2"]]);
13164
13668
  //#endregion
13165
13669
  //#region src/components/DoseDesignWorkspaceView.vue?vue&type=script&setup=true&lang.ts
13166
- var _hoisted_1$35 = { class: "mint-dose-design-workspace" };
13670
+ var _hoisted_1$37 = { class: "mint-dose-design-workspace" };
13167
13671
  //#endregion
13168
13672
  //#region src/components/DoseDesignWorkspaceView.vue
13169
13673
  var DoseDesignWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -13277,7 +13781,7 @@ var DoseDesignWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_
13277
13781
  onSubmit: _cache[2] || (_cache[2] = ($event) => emit("submit", $event)),
13278
13782
  onCancel: _cache[3] || (_cache[3] = ($event) => emit("cancel"))
13279
13783
  }), {
13280
- default: withCtx((workspaceSlotProps) => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps(workspaceSlotProps))), () => [createElementVNode("div", _hoisted_1$35, [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)]),
13784
+ default: withCtx((workspaceSlotProps) => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps(workspaceSlotProps))), () => [createElementVNode("div", _hoisted_1$37, [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)]),
13281
13785
  _: 3
13282
13786
  }, 16);
13283
13787
  };
@@ -13308,8 +13812,79 @@ var AppContainer_default = /* @__PURE__ */ defineComponent({
13308
13812
  }
13309
13813
  });
13310
13814
  //#endregion
13815
+ //#region src/components/LayoutResizeHandle.vue?vue&type=script&setup=true&lang.ts
13816
+ var _hoisted_1$36 = [
13817
+ "tabindex",
13818
+ "aria-label",
13819
+ "aria-orientation",
13820
+ "aria-valuemin",
13821
+ "aria-valuemax",
13822
+ "aria-valuenow",
13823
+ "aria-disabled"
13824
+ ];
13825
+ //#endregion
13826
+ //#region src/components/LayoutResizeHandle.vue
13827
+ var LayoutResizeHandle_default = /* @__PURE__ */ defineComponent({
13828
+ __name: "LayoutResizeHandle",
13829
+ props: {
13830
+ modelValue: {},
13831
+ min: {},
13832
+ max: {},
13833
+ label: {},
13834
+ orientation: {},
13835
+ edge: { default: void 0 },
13836
+ step: { default: 10 },
13837
+ disabled: {
13838
+ type: Boolean,
13839
+ default: false
13840
+ }
13841
+ },
13842
+ emits: ["update:modelValue", "resize-start"],
13843
+ setup(__props, { emit: __emit }) {
13844
+ /** Accessible pointer and keyboard handle for resizable workbench panes. */
13845
+ const props = __props;
13846
+ const emit = __emit;
13847
+ function update(value) {
13848
+ emit("update:modelValue", Math.min(props.max, Math.max(props.min, value)));
13849
+ }
13850
+ function handleKeydown(event) {
13851
+ if (props.disabled) return;
13852
+ const decrement = props.orientation === "vertical" ? "ArrowLeft" : "ArrowUp";
13853
+ const increment = props.orientation === "vertical" ? "ArrowRight" : "ArrowDown";
13854
+ if (event.key === decrement) update(props.modelValue - props.step);
13855
+ else if (event.key === increment) update(props.modelValue + props.step);
13856
+ else if (event.key === "Home") update(props.min);
13857
+ else if (event.key === "End") update(props.max);
13858
+ else return;
13859
+ event.preventDefault();
13860
+ }
13861
+ return (_ctx, _cache) => {
13862
+ return openBlock(), createElementBlock("div", {
13863
+ role: "separator",
13864
+ tabindex: __props.disabled ? -1 : 0,
13865
+ class: normalizeClass([
13866
+ "mint-layout-resize-handle",
13867
+ `mint-layout-resize-handle--${__props.orientation}`,
13868
+ __props.edge ? `mint-layout-resize-handle--edge-${__props.edge}` : ""
13869
+ ]),
13870
+ "aria-label": __props.label,
13871
+ "aria-orientation": __props.orientation,
13872
+ "aria-valuemin": __props.min,
13873
+ "aria-valuemax": __props.max,
13874
+ "aria-valuenow": __props.modelValue,
13875
+ "aria-disabled": __props.disabled || void 0,
13876
+ onPointerdown: _cache[0] || (_cache[0] = ($event) => !__props.disabled && emit("resize-start", $event)),
13877
+ onKeydown: handleKeydown
13878
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("span", {
13879
+ class: "mint-layout-resize-handle__bar",
13880
+ "aria-hidden": "true"
13881
+ }, null, -1)])], 42, _hoisted_1$36);
13882
+ };
13883
+ }
13884
+ });
13885
+ //#endregion
13311
13886
  //#region src/components/Divider.vue?vue&type=script&setup=true&lang.ts
13312
- var _hoisted_1$34 = {
13887
+ var _hoisted_1$35 = {
13313
13888
  key: 0,
13314
13889
  class: "mint-divider__line"
13315
13890
  };
@@ -13349,7 +13924,7 @@ var Divider_default = /* @__PURE__ */ defineComponent({
13349
13924
  role: "separator",
13350
13925
  "aria-orientation": "horizontal"
13351
13926
  }, [__props.label ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
13352
- __props.align === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$34)) : createCommentVNode("", true),
13927
+ __props.align === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$35)) : createCommentVNode("", true),
13353
13928
  createElementVNode("span", _hoisted_2$33, toDisplayString(__props.label), 1),
13354
13929
  _cache[0] || (_cache[0] = createElementVNode("span", { class: "mint-divider__line" }, null, -1))
13355
13930
  ], 64)) : createCommentVNode("", true)], 2));
@@ -13358,7 +13933,7 @@ var Divider_default = /* @__PURE__ */ defineComponent({
13358
13933
  });
13359
13934
  //#endregion
13360
13935
  //#region src/components/StatusIndicator.vue?vue&type=script&setup=true&lang.ts
13361
- var _hoisted_1$33 = { class: "mint-status" };
13936
+ var _hoisted_1$34 = { class: "mint-status" };
13362
13937
  var _hoisted_2$32 = {
13363
13938
  key: 0,
13364
13939
  class: "mint-status__label"
@@ -13384,7 +13959,7 @@ var StatusIndicator_default = /* @__PURE__ */ defineComponent({
13384
13959
  color: props.color
13385
13960
  } : {});
13386
13961
  return (_ctx, _cache) => {
13387
- return openBlock(), createElementBlock("span", _hoisted_1$33, [createElementVNode("span", {
13962
+ return openBlock(), createElementBlock("span", _hoisted_1$34, [createElementVNode("span", {
13388
13963
  class: normalizeClass([
13389
13964
  "mint-status__dot",
13390
13965
  { [`mint-status__dot--${__props.status}`]: !__props.color },
@@ -13397,7 +13972,7 @@ var StatusIndicator_default = /* @__PURE__ */ defineComponent({
13397
13972
  });
13398
13973
  //#endregion
13399
13974
  //#region src/components/ProgressBar.vue?vue&type=script&setup=true&lang.ts
13400
- var _hoisted_1$32 = {
13975
+ var _hoisted_1$33 = {
13401
13976
  key: 0,
13402
13977
  class: "mint-progress__header"
13403
13978
  };
@@ -13424,7 +13999,7 @@ var _hoisted_6$26 = [
13424
13999
  "aria-valuemax",
13425
14000
  "aria-label"
13426
14001
  ];
13427
- var _hoisted_7$23 = {
14002
+ var _hoisted_7$24 = {
13428
14003
  key: 3,
13429
14004
  class: "mint-progress__step-labels"
13430
14005
  };
@@ -13461,7 +14036,7 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
13461
14036
  const segmentCount = computed(() => props.steps.length || 0);
13462
14037
  return (_ctx, _cache) => {
13463
14038
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-progress", `mint-progress--${__props.variant}`]) }, [
13464
- __props.label || __props.showValue ? (openBlock(), createElementBlock("div", _hoisted_1$32, [
14039
+ __props.label || __props.showValue ? (openBlock(), createElementBlock("div", _hoisted_1$33, [
13465
14040
  __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$31, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
13466
14041
  __props.showValue && !__props.indeterminate && __props.variant === "rail" ? (openBlock(), createElementBlock("span", _hoisted_3$30, toDisplayString(clampedValue.value) + "%", 1)) : createCommentVNode("", true),
13467
14042
  __props.showValue && __props.variant === "segmented" && segmentCount.value ? (openBlock(), createElementBlock("span", _hoisted_4$29, toDisplayString(__props.currentStep) + " / " + toDisplayString(segmentCount.value), 1)) : createCommentVNode("", true)
@@ -13499,7 +14074,7 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
13499
14074
  ])
13500
14075
  }, null, 2);
13501
14076
  }), 128))], 10, _hoisted_6$26)),
13502
- __props.variant === "segmented" && __props.steps.length ? (openBlock(), createElementBlock("div", _hoisted_7$23, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.steps, (step, i) => {
14077
+ __props.variant === "segmented" && __props.steps.length ? (openBlock(), createElementBlock("div", _hoisted_7$24, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.steps, (step, i) => {
13503
14078
  return openBlock(), createElementBlock("span", {
13504
14079
  key: i,
13505
14080
  class: normalizeClass([
@@ -13515,7 +14090,7 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
13515
14090
  });
13516
14091
  //#endregion
13517
14092
  //#region src/components/Avatar.vue?vue&type=script&setup=true&lang.ts
13518
- var _hoisted_1$31 = ["aria-label"];
14093
+ var _hoisted_1$32 = ["aria-label"];
13519
14094
  var _hoisted_2$30 = ["src", "alt"];
13520
14095
  var _hoisted_3$29 = {
13521
14096
  key: 1,
@@ -13578,13 +14153,13 @@ var Avatar_default = /* @__PURE__ */ defineComponent({
13578
14153
  key: 0,
13579
14154
  class: normalizeClass(["mint-avatar__status", `mint-avatar__status--${__props.status}`]),
13580
14155
  "aria-hidden": "true"
13581
- }, null, 2)) : createCommentVNode("", true)], 10, _hoisted_1$31);
14156
+ }, null, 2)) : createCommentVNode("", true)], 10, _hoisted_1$32);
13582
14157
  };
13583
14158
  }
13584
14159
  });
13585
14160
  //#endregion
13586
14161
  //#region src/components/Breadcrumb.vue?vue&type=script&setup=true&lang.ts
13587
- var _hoisted_1$30 = {
14162
+ var _hoisted_1$31 = {
13588
14163
  class: "mint-breadcrumb",
13589
14164
  "aria-label": "Breadcrumb"
13590
14165
  };
@@ -13601,7 +14176,7 @@ var _hoisted_6$25 = {
13601
14176
  class: "mint-breadcrumb__separator",
13602
14177
  "aria-hidden": "true"
13603
14178
  };
13604
- var _hoisted_7$22 = {
14179
+ var _hoisted_7$23 = {
13605
14180
  key: 0,
13606
14181
  class: "mint-breadcrumb__chevron",
13607
14182
  viewBox: "0 0 24 24",
@@ -13629,7 +14204,7 @@ var Breadcrumb_default = /* @__PURE__ */ defineComponent({
13629
14204
  if (!item.href) emit("navigate", item);
13630
14205
  }
13631
14206
  return (_ctx, _cache) => {
13632
- return openBlock(), createElementBlock("nav", _hoisted_1$30, [createElementVNode("ol", _hoisted_2$29, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item, index) => {
14207
+ return openBlock(), createElementBlock("nav", _hoisted_1$31, [createElementVNode("ol", _hoisted_2$29, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item, index) => {
13633
14208
  return openBlock(), createElementBlock("li", {
13634
14209
  key: index,
13635
14210
  class: "mint-breadcrumb__item"
@@ -13645,12 +14220,46 @@ var Breadcrumb_default = /* @__PURE__ */ defineComponent({
13645
14220
  key: 1,
13646
14221
  class: "mint-breadcrumb__link",
13647
14222
  onClick: ($event) => handleClick(item)
13648
- }, toDisplayString(item.label), 9, _hoisted_4$27)) : (openBlock(), createElementBlock("span", _hoisted_5$25, toDisplayString(item.label), 1))]), index !== normalizedItems.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_6$25, [renderSlot(_ctx.$slots, "separator", {}, () => [__props.separator === "/" ? (openBlock(), createElementBlock("svg", _hoisted_7$22, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m9 18 6-6-6-6" }, null, -1)])])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(__props.separator), 1)], 64))])])) : createCommentVNode("", true)]);
14223
+ }, toDisplayString(item.label), 9, _hoisted_4$27)) : (openBlock(), createElementBlock("span", _hoisted_5$25, toDisplayString(item.label), 1))]), index !== normalizedItems.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_6$25, [renderSlot(_ctx.$slots, "separator", {}, () => [__props.separator === "/" ? (openBlock(), createElementBlock("svg", _hoisted_7$23, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m9 18 6-6-6-6" }, null, -1)])])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(__props.separator), 1)], 64))])])) : createCommentVNode("", true)]);
13649
14224
  }), 128))])]);
13650
14225
  };
13651
14226
  }
13652
14227
  });
13653
14228
  //#endregion
14229
+ //#region src/components/AdductText.vue?vue&type=script&setup=true&lang.ts
14230
+ var _hoisted_1$30 = ["title"];
14231
+ //#endregion
14232
+ //#region src/components/AdductText.vue
14233
+ var AdductText_default = /* @__PURE__ */ defineComponent({
14234
+ __name: "AdductText",
14235
+ props: {
14236
+ value: { default: null },
14237
+ emptyText: { default: "-" },
14238
+ variant: { default: "inline" },
14239
+ tone: { default: "default" },
14240
+ size: { default: "xs" },
14241
+ font: { default: "mono" }
14242
+ },
14243
+ setup(__props) {
14244
+ /** Compact, overflow-safe display for mass-spectrometry adduct notation. */
14245
+ const props = __props;
14246
+ const value = computed(() => props.value?.trim() ?? "");
14247
+ return (_ctx, _cache) => {
14248
+ return openBlock(), createElementBlock("span", {
14249
+ class: normalizeClass([
14250
+ "mint-adduct-text",
14251
+ `mint-adduct-text--${__props.variant}`,
14252
+ `mint-adduct-text--${__props.tone}`,
14253
+ `mint-adduct-text--${__props.size}`,
14254
+ `mint-adduct-text--${__props.font}`,
14255
+ { "mint-adduct-text--empty": !value.value }
14256
+ ]),
14257
+ title: value.value || void 0
14258
+ }, toDisplayString(value.value || __props.emptyText), 11, _hoisted_1$30);
14259
+ };
14260
+ }
14261
+ });
14262
+ //#endregion
13654
14263
  //#region src/components/BioTemplateRenderer.vue
13655
14264
  var BioTemplateRenderer_default = /* @__PURE__ */ defineComponent({
13656
14265
  __name: "BioTemplateRenderer",
@@ -13725,8 +14334,8 @@ var _hoisted_5$24 = {
13725
14334
  class: "mint-bio-template-experiment-workspace__templates"
13726
14335
  };
13727
14336
  var _hoisted_6$24 = { class: "mint-bio-template-experiment-workspace__template-id" };
13728
- var _hoisted_7$21 = { class: "mint-bio-template-experiment-workspace__template-version" };
13729
- var _hoisted_8$19 = { class: "mint-bio-template-experiment-workspace__meta" };
14337
+ var _hoisted_7$22 = { class: "mint-bio-template-experiment-workspace__template-version" };
14338
+ var _hoisted_8$20 = { class: "mint-bio-template-experiment-workspace__meta" };
13730
14339
  //#endregion
13731
14340
  //#region src/components/BioTemplateExperimentWorkspaceView.vue
13732
14341
  var BioTemplateExperimentWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -13878,7 +14487,7 @@ var BioTemplateExperimentWorkspaceView_default = /* @__PURE__ */ _plugin_vue_exp
13878
14487
  return openBlock(), createElementBlock("div", {
13879
14488
  key: template.id,
13880
14489
  class: "mint-bio-template-experiment-workspace__template"
13881
- }, [createElementVNode("p", _hoisted_6$24, toDisplayString(template.id), 1), createElementVNode("p", _hoisted_7$21, " v" + toDisplayString(template.version), 1)]);
14490
+ }, [createElementVNode("p", _hoisted_6$24, toDisplayString(template.id), 1), createElementVNode("p", _hoisted_7$22, " v" + toDisplayString(template.version), 1)]);
13882
14491
  }), 128))])) : createCommentVNode("", true),
13883
14492
  renderSlot(_ctx.$slots, "default", {
13884
14493
  target: __props.target,
@@ -13897,7 +14506,7 @@ var BioTemplateExperimentWorkspaceView_default = /* @__PURE__ */ _plugin_vue_exp
13897
14506
  "dense",
13898
14507
  "readonly"
13899
14508
  ])], true),
13900
- createElementVNode("p", _hoisted_8$19, " experiment: " + toDisplayString(resolvedCurrentExperimentId.value ?? "not selected"), 1)
14509
+ createElementVNode("p", _hoisted_8$20, " experiment: " + toDisplayString(resolvedCurrentExperimentId.value ?? "not selected"), 1)
13901
14510
  ]);
13902
14511
  };
13903
14512
  }
@@ -14015,11 +14624,11 @@ var _hoisted_4$25 = {
14015
14624
  };
14016
14625
  var _hoisted_5$23 = { class: "mint-bio-template-preset-workspace__main" };
14017
14626
  var _hoisted_6$23 = { class: "mint-bio-template-preset-workspace__sidebar-subtitle" };
14018
- var _hoisted_7$20 = {
14627
+ var _hoisted_7$21 = {
14019
14628
  key: 2,
14020
14629
  class: "mint-bio-template-preset-workspace__templates"
14021
14630
  };
14022
- var _hoisted_8$18 = { class: "mint-bio-template-preset-workspace__template-id" };
14631
+ var _hoisted_8$19 = { class: "mint-bio-template-preset-workspace__template-id" };
14023
14632
  var _hoisted_9$18 = { class: "mint-bio-template-preset-workspace__template-meta" };
14024
14633
  var _hoisted_10$18 = {
14025
14634
  key: 3,
@@ -14226,11 +14835,11 @@ var BioTemplatePresetWorkspaceView_default = /* @__PURE__ */ _plugin_vue_export_
14226
14835
  dense: __props.dense,
14227
14836
  readonly: __props.readonly
14228
14837
  }), null, 16, ["dense", "readonly"])], true)]),
14229
- __props.showTemplateSummary ? (openBlock(), createElementBlock("div", _hoisted_7$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(templateIds.value, (templateId) => {
14838
+ __props.showTemplateSummary ? (openBlock(), createElementBlock("div", _hoisted_7$21, [(openBlock(true), createElementBlock(Fragment, null, renderList(templateIds.value, (templateId) => {
14230
14839
  return openBlock(), createElementBlock("div", {
14231
14840
  key: templateId,
14232
14841
  class: "mint-bio-template-preset-workspace__template"
14233
- }, [createElementVNode("p", _hoisted_8$18, toDisplayString(templateId), 1), createElementVNode("p", _hoisted_9$18, toDisplayString(presetId.value) + " - Experiment " + toDisplayString(currentExperimentId.value ?? "not selected"), 1)]);
14842
+ }, [createElementVNode("p", _hoisted_8$19, toDisplayString(templateId), 1), createElementVNode("p", _hoisted_9$18, toDisplayString(presetId.value) + " - Experiment " + toDisplayString(currentExperimentId.value ?? "not selected"), 1)]);
14234
14843
  }), 128))])) : createCommentVNode("", true),
14235
14844
  __props.showComponentSummary ? (openBlock(), createElementBlock("p", _hoisted_10$18, " component prop bindings: " + toDisplayString(componentPropsCount.value), 1)) : createCommentVNode("", true)
14236
14845
  ]);
@@ -14250,14 +14859,14 @@ var _hoisted_3$25 = [
14250
14859
  "onDragover",
14251
14860
  "onDrop"
14252
14861
  ];
14253
- var _hoisted_4$24 = ["onClick"];
14862
+ var _hoisted_4$24 = ["aria-label", "onClick"];
14254
14863
  var _hoisted_5$22 = {
14255
14864
  key: 0,
14256
14865
  class: "mint-rack-editor__toolbar"
14257
14866
  };
14258
14867
  var _hoisted_6$22 = { class: "mint-rack-editor__toolbar-group" };
14259
- var _hoisted_7$19 = { class: "mint-rack-editor__toolbar-section" };
14260
- var _hoisted_8$17 = { class: "mint-rack-editor__format-btns" };
14868
+ var _hoisted_7$20 = { class: "mint-rack-editor__toolbar-section" };
14869
+ var _hoisted_8$18 = { class: "mint-rack-editor__format-btns" };
14261
14870
  var _hoisted_9$17 = ["onClick"];
14262
14871
  var _hoisted_10$17 = { class: "mint-rack-editor__toolbar-section" };
14263
14872
  var _hoisted_11$16 = { class: "mint-rack-editor__slot-btns" };
@@ -14442,10 +15051,13 @@ var RackEditor_default = /* @__PURE__ */ defineComponent({
14442
15051
  return (_ctx, _cache) => {
14443
15052
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-rack-editor", { "mint-rack-editor--readonly": __props.readonly }]) }, [
14444
15053
  createElementVNode("div", _hoisted_1$27, [createElementVNode("div", _hoisted_2$26, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(editor).racks.value, (rack, rackIndex) => {
14445
- return openBlock(), createElementBlock("button", {
15054
+ return openBlock(), createElementBlock("div", {
14446
15055
  key: rack.id,
15056
+ class: "mint-rack-editor__tab-item"
15057
+ }, [createElementVNode("button", {
14447
15058
  ref_for: true,
14448
15059
  ref: (el) => setTabRef(rack.id, el),
15060
+ type: "button",
14449
15061
  draggable: __props.allowReorder && !__props.readonly,
14450
15062
  title: __props.allowReorder && !__props.readonly ? `${rack.name} — press Alt with the arrow keys to reorder` : void 0,
14451
15063
  class: normalizeClass(["mint-rack-editor__tab", {
@@ -14469,13 +15081,14 @@ var RackEditor_default = /* @__PURE__ */ defineComponent({
14469
15081
  getWellCount(rack) > 0 ? (openBlock(), createElementBlock("span", {
14470
15082
  key: 0,
14471
15083
  class: normalizeClass(["mint-rack-editor__count", unref(editor).activeRackId.value === rack.id ? "mint-rack-editor__count--active" : "mint-rack-editor__count--inactive"])
14472
- }, toDisplayString(getWellCount(rack)), 3)) : createCommentVNode("", true),
14473
- unref(editor).racks.value.length > __props.minRacks && !__props.readonly ? (openBlock(), createElementBlock("button", {
14474
- key: 1,
14475
- class: "mint-rack-editor__tab-remove",
14476
- onClick: withModifiers(($event) => handleRemoveRack(rack.id), ["stop"])
14477
- }, " × ", 8, _hoisted_4$24)) : createCommentVNode("", true)
14478
- ], 42, _hoisted_3$25);
15084
+ }, toDisplayString(getWellCount(rack)), 3)) : createCommentVNode("", true)
15085
+ ], 42, _hoisted_3$25), unref(editor).racks.value.length > __props.minRacks && !__props.readonly ? (openBlock(), createElementBlock("button", {
15086
+ key: 0,
15087
+ type: "button",
15088
+ class: "mint-rack-editor__tab-remove",
15089
+ "aria-label": `Remove ${rack.name}`,
15090
+ onClick: withModifiers(($event) => handleRemoveRack(rack.id), ["stop"])
15091
+ }, " × ", 8, _hoisted_4$24)) : createCommentVNode("", true)]);
14479
15092
  }), 128))]), unref(editor).racks.value.length < __props.maxRacks && !__props.readonly ? (openBlock(), createElementBlock("button", {
14480
15093
  key: 0,
14481
15094
  class: "mint-rack-editor__add-btn",
@@ -14492,7 +15105,7 @@ var RackEditor_default = /* @__PURE__ */ defineComponent({
14492
15105
  }, [createElementVNode("path", { d: "M5 12h14" }), createElementVNode("path", { d: "M12 5v14" })], -1), createTextVNode(" Add Rack ", -1)])])) : createCommentVNode("", true)]),
14493
15106
  unref(editor).activeRack.value && !__props.readonly ? (openBlock(), createElementBlock("div", _hoisted_5$22, [
14494
15107
  createElementVNode("div", _hoisted_6$22, [
14495
- createElementVNode("div", _hoisted_7$19, [_cache[3] || (_cache[3] = createElementVNode("span", { class: "mint-rack-editor__toolbar-label" }, "Plate", -1)), createElementVNode("div", _hoisted_8$17, [(openBlock(), createElementBlock(Fragment, null, renderList(FORMAT_OPTIONS, (opt) => {
15108
+ createElementVNode("div", _hoisted_7$20, [_cache[3] || (_cache[3] = createElementVNode("span", { class: "mint-rack-editor__toolbar-label" }, "Plate", -1)), createElementVNode("div", _hoisted_8$18, [(openBlock(), createElementBlock(Fragment, null, renderList(FORMAT_OPTIONS, (opt) => {
14496
15109
  return createElementVNode("button", {
14497
15110
  key: opt.value,
14498
15111
  class: normalizeClass(["mint-rack-editor__format-btn", unref(editor).activeRack.value.format === opt.value ? "mint-rack-editor__format-btn--active" : "mint-rack-editor__format-btn--inactive"]),
@@ -14582,12 +15195,12 @@ var _hoisted_3$24 = { class: "mint-group-assigner__zone-header" };
14582
15195
  var _hoisted_4$23 = { class: "mint-group-assigner__zone-label" };
14583
15196
  var _hoisted_5$21 = { class: "mint-group-assigner__zone-count" };
14584
15197
  var _hoisted_6$21 = { class: "mint-group-assigner__zone-content" };
14585
- var _hoisted_7$18 = [
15198
+ var _hoisted_7$19 = [
14586
15199
  "aria-label",
14587
15200
  "onDragstart",
14588
15201
  "onKeydown"
14589
15202
  ];
14590
- var _hoisted_8$16 = { class: "mint-group-assigner__pill-name" };
15203
+ var _hoisted_8$17 = { class: "mint-group-assigner__pill-name" };
14591
15204
  var _hoisted_9$16 = { class: "mint-group-assigner__pill-count" };
14592
15205
  var _hoisted_10$16 = ["onClick"];
14593
15206
  var _hoisted_11$15 = {
@@ -14764,7 +15377,7 @@ var GroupAssigner_default = /* @__PURE__ */ defineComponent({
14764
15377
  class: "mint-group-assigner__pill-color",
14765
15378
  style: normalizeStyle({ backgroundColor: group.color })
14766
15379
  }, null, 4),
14767
- createElementVNode("span", _hoisted_8$16, toDisplayString(group.name), 1),
15380
+ createElementVNode("span", _hoisted_8$17, toDisplayString(group.name), 1),
14768
15381
  createElementVNode("span", _hoisted_9$16, toDisplayString(group.count), 1),
14769
15382
  createElementVNode("button", {
14770
15383
  type: "button",
@@ -14778,7 +15391,7 @@ var GroupAssigner_default = /* @__PURE__ */ defineComponent({
14778
15391
  stroke: "currentColor",
14779
15392
  "stroke-width": "2"
14780
15393
  }, [createElementVNode("path", { d: "M6 18L18 6M6 6l12 12" })], -1)])], 8, _hoisted_10$16)
14781
- ], 40, _hoisted_7$18);
15394
+ ], 40, _hoisted_7$19);
14782
15395
  }), 128)), unref(zone1Groups).length === 0 ? (openBlock(), createElementBlock("div", _hoisted_11$15, " Drag groups here ")) : createCommentVNode("", true)])], 38), createElementVNode("div", {
14783
15396
  class: normalizeClass([
14784
15397
  "mint-group-assigner__zone",
@@ -14940,8 +15553,8 @@ var _hoisted_3$23 = { class: "mint-reagent-editor__color-wrapper" };
14940
15553
  var _hoisted_4$22 = ["value"];
14941
15554
  var _hoisted_5$20 = ["value"];
14942
15555
  var _hoisted_6$20 = { class: "mint-reagent-editor__section" };
14943
- var _hoisted_7$17 = { class: "mint-reagent-editor__position-row" };
14944
- var _hoisted_8$15 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
15556
+ var _hoisted_7$18 = { class: "mint-reagent-editor__position-row" };
15557
+ var _hoisted_8$16 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
14945
15558
  var _hoisted_9$15 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
14946
15559
  var _hoisted_10$15 = [
14947
15560
  "value",
@@ -15161,7 +15774,7 @@ var ReagentEditor_default = /* @__PURE__ */ defineComponent({
15161
15774
  "aria-label": "Reagent name",
15162
15775
  onInput: updateName
15163
15776
  }, null, 40, _hoisted_5$20)])]),
15164
- createElementVNode("div", _hoisted_6$20, [_cache[6] || (_cache[6] = createStaticVNode("<div class=\"mint-reagent-editor__section-header\"><svg class=\"mint-reagent-editor__section-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect></svg> Position </div>", 1)), createElementVNode("div", _hoisted_7$17, [createElementVNode("div", _hoisted_8$15, [_cache[4] || (_cache[4] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Axis", -1)), createVNode(BaseSelect_default, {
15777
+ createElementVNode("div", _hoisted_6$20, [_cache[6] || (_cache[6] = createStaticVNode("<div class=\"mint-reagent-editor__section-header\"><svg class=\"mint-reagent-editor__section-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect></svg> Position </div>", 1)), createElementVNode("div", _hoisted_7$18, [createElementVNode("div", _hoisted_8$16, [_cache[4] || (_cache[4] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Axis", -1)), createVNode(BaseSelect_default, {
15165
15778
  "model-value": __props.modelValue.axis,
15166
15779
  options: axisOptions,
15167
15780
  size: "sm",
@@ -15660,11 +16273,11 @@ var _hoisted_4$21 = {
15660
16273
  };
15661
16274
  var _hoisted_5$19 = ["value", "placeholder"];
15662
16275
  var _hoisted_6$19 = ["value"];
15663
- var _hoisted_7$16 = {
16276
+ var _hoisted_7$17 = {
15664
16277
  value: "",
15665
16278
  disabled: ""
15666
16279
  };
15667
- var _hoisted_8$14 = ["value"];
16280
+ var _hoisted_8$15 = ["value"];
15668
16281
  var _hoisted_9$14 = ["value", "placeholder"];
15669
16282
  var _hoisted_10$14 = {
15670
16283
  key: 5,
@@ -15722,11 +16335,11 @@ var ProtocolStepParameterField_default = /* @__PURE__ */ defineComponent({
15722
16335
  value: scalarValue.value,
15723
16336
  class: normalizeClass(["mint-protocol-editor__select", hasError.value ? "mint-protocol-editor__input--error" : ""]),
15724
16337
  onChange: handleSelectChange
15725
- }, [createElementVNode("option", _hoisted_7$16, "Select " + toDisplayString(__props.parameter.label.toLowerCase()), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.parameter.options, (option) => {
16338
+ }, [createElementVNode("option", _hoisted_7$17, "Select " + toDisplayString(__props.parameter.label.toLowerCase()), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.parameter.options, (option) => {
15726
16339
  return openBlock(), createElementBlock("option", {
15727
16340
  key: option.value,
15728
16341
  value: option.value
15729
- }, toDisplayString(option.label), 9, _hoisted_8$14);
16342
+ }, toDisplayString(option.label), 9, _hoisted_8$15);
15730
16343
  }), 128))], 42, _hoisted_6$19)) : __props.parameter.type === "concentration" ? (openBlock(), createBlock(ConcentrationInput_default, {
15731
16344
  key: 3,
15732
16345
  "model-value": concentrationValue.value,
@@ -15812,8 +16425,8 @@ var _hoisted_6$18 = {
15812
16425
  stroke: "currentColor",
15813
16426
  viewBox: "0 0 24 24"
15814
16427
  };
15815
- var _hoisted_7$15 = ["d"];
15816
- var _hoisted_8$13 = { class: "mint-protocol-editor__template-text" };
16428
+ var _hoisted_7$16 = ["d"];
16429
+ var _hoisted_8$14 = { class: "mint-protocol-editor__template-text" };
15817
16430
  var _hoisted_9$13 = {
15818
16431
  key: 0,
15819
16432
  class: "mint-protocol-editor__template-menu"
@@ -15982,8 +16595,8 @@ var ProtocolStepEditor_default = /* @__PURE__ */ defineComponent({
15982
16595
  "stroke-linejoin": "round",
15983
16596
  "stroke-width": "2",
15984
16597
  d: unref(PROTOCOL_STEP_TYPE_ICONS)[selectedTemplate.value.type]
15985
- }, null, 8, _hoisted_7$15)])) : createCommentVNode("", true),
15986
- createElementVNode("span", _hoisted_8$13, toDisplayString(selectedTemplate.value?.name || "Select template..."), 1),
16598
+ }, null, 8, _hoisted_7$16)])) : createCommentVNode("", true),
16599
+ createElementVNode("span", _hoisted_8$14, toDisplayString(selectedTemplate.value?.name || "Select template..."), 1),
15987
16600
  (openBlock(), createElementBlock("svg", {
15988
16601
  class: normalizeClass(["mint-protocol-editor__template-arrow", unref(templateDropdownOpen) ? "mint-protocol-editor__template-arrow--open" : ""]),
15989
16602
  fill: "none",
@@ -16095,11 +16708,11 @@ var _hoisted_6$17 = {
16095
16708
  key: 0,
16096
16709
  class: "mint-sci-number__suffix"
16097
16710
  };
16098
- var _hoisted_7$14 = {
16711
+ var _hoisted_7$15 = {
16099
16712
  key: 3,
16100
16713
  class: "mint-sci-number__plain"
16101
16714
  };
16102
- var _hoisted_8$12 = {
16715
+ var _hoisted_8$13 = {
16103
16716
  key: 4,
16104
16717
  class: "mint-sci-number__unit"
16105
16718
  };
@@ -16240,8 +16853,8 @@ var ScientificNumber_default = /* @__PURE__ */ defineComponent({
16240
16853
  _cache[0] || (_cache[0] = createElementVNode("span", { class: "mint-sci-number__times" }, "×", -1)),
16241
16854
  _cache[1] || (_cache[1] = createElementVNode("span", { class: "mint-sci-number__base" }, "10", -1)),
16242
16855
  createElementVNode("span", _hoisted_4$19, toDisplayString(formatted.value.exponentStr), 1)
16243
- ], 64)) : formatted.value.type === "compact" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createElementVNode("span", _hoisted_5$17, toDisplayString(formatted.value.plain), 1), formatted.value.suffix ? (openBlock(), createElementBlock("span", _hoisted_6$17, toDisplayString(formatted.value.suffix), 1)) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_7$14, toDisplayString(formatted.value.plain), 1)),
16244
- __props.unit ? (openBlock(), createElementBlock("span", _hoisted_8$12, toDisplayString(__props.unit), 1)) : createCommentVNode("", true),
16856
+ ], 64)) : formatted.value.type === "compact" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createElementVNode("span", _hoisted_5$17, toDisplayString(formatted.value.plain), 1), formatted.value.suffix ? (openBlock(), createElementBlock("span", _hoisted_6$17, toDisplayString(formatted.value.suffix), 1)) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_7$15, toDisplayString(formatted.value.plain), 1)),
16857
+ __props.unit ? (openBlock(), createElementBlock("span", _hoisted_8$13, toDisplayString(__props.unit), 1)) : createCommentVNode("", true),
16245
16858
  __props.copyable ? (openBlock(), createElementBlock("button", {
16246
16859
  key: 5,
16247
16860
  class: normalizeClass(["mint-sci-number__copy-btn", { "mint-sci-number__copy-btn--copied": copied.value }]),
@@ -16262,54 +16875,87 @@ var ScientificNumber_default = /* @__PURE__ */ defineComponent({
16262
16875
  });
16263
16876
  //#endregion
16264
16877
  //#region src/components/ChemicalFormula.vue?vue&type=script&setup=true&lang.ts
16265
- var _hoisted_1$20 = {
16878
+ var _hoisted_1$20 = { class: "mint-chem-formula__formula" };
16879
+ var _hoisted_2$19 = {
16266
16880
  key: 0,
16267
16881
  class: "mint-chem-formula__element"
16268
16882
  };
16269
- var _hoisted_2$19 = {
16883
+ var _hoisted_3$18 = {
16270
16884
  key: 1,
16271
16885
  class: "mint-chem-formula__subscript"
16272
16886
  };
16273
- var _hoisted_3$18 = {
16887
+ var _hoisted_4$18 = {
16274
16888
  key: 2,
16275
16889
  class: "mint-chem-formula__superscript"
16276
16890
  };
16277
- var _hoisted_4$18 = {
16891
+ var _hoisted_5$16 = {
16278
16892
  key: 3,
16279
16893
  class: "mint-chem-formula__paren"
16280
16894
  };
16281
- var _hoisted_5$16 = {
16895
+ var _hoisted_6$16 = {
16282
16896
  key: 4,
16283
16897
  class: "mint-chem-formula__dot"
16284
16898
  };
16285
- var _hoisted_6$16 = {
16899
+ var _hoisted_7$14 = {
16286
16900
  key: 5,
16287
16901
  class: "mint-chem-formula__charge"
16288
16902
  };
16903
+ var _hoisted_8$12 = { key: 1 };
16289
16904
  //#endregion
16290
16905
  //#region src/components/ChemicalFormula.vue
16291
16906
  var ChemicalFormula_default = /* @__PURE__ */ defineComponent({
16292
16907
  __name: "ChemicalFormula",
16293
16908
  props: {
16294
- formula: {},
16909
+ formula: { default: null },
16295
16910
  inline: {
16296
16911
  type: Boolean,
16297
16912
  default: true
16298
- }
16913
+ },
16914
+ adduct: { default: null },
16915
+ emptyText: { default: "-" },
16916
+ pill: {
16917
+ type: Boolean,
16918
+ default: false
16919
+ },
16920
+ size: { default: "inherit" },
16921
+ tone: { default: "primary" }
16299
16922
  },
16300
16923
  setup(__props) {
16301
- /** Renders a chemical formula string (H₂O, C₆H₁₂O₆, Ca(OH)₂) with typographically correct subscripts and superscripts for charges. */
16924
+ /** Renders a chemical formula and optional MS adduct with typographically correct subscripts and charges. */
16925
+ const props = __props;
16302
16926
  const { renderFormulaParts } = useChemicalFormula();
16927
+ const formula = computed(() => props.formula?.trim() ?? "");
16928
+ const title = computed(() => [formula.value, props.adduct?.trim()].filter(Boolean).join(" "));
16303
16929
  function getParts(f) {
16304
16930
  return renderFormulaParts(f);
16305
16931
  }
16306
16932
  return (_ctx, _cache) => {
16307
- return openBlock(), createBlock(resolveDynamicComponent(__props.inline ? "span" : "div"), { class: normalizeClass(["mint-chem-formula", !__props.inline ? "mint-chem-formula--block" : ""]) }, {
16308
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(getParts(__props.formula), (part, i) => {
16309
- return openBlock(), createElementBlock(Fragment, { key: i }, [part.type === "element" ? (openBlock(), createElementBlock("span", _hoisted_1$20, toDisplayString(part.text), 1)) : part.type === "subscript" ? (openBlock(), createElementBlock("span", _hoisted_2$19, toDisplayString(part.text), 1)) : part.type === "superscript" ? (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(part.text), 1)) : part.type === "paren" ? (openBlock(), createElementBlock("span", _hoisted_4$18, toDisplayString(part.text), 1)) : part.type === "dot" ? (openBlock(), createElementBlock("span", _hoisted_5$16, toDisplayString(part.text), 1)) : part.type === "charge" ? (openBlock(), createElementBlock("span", _hoisted_6$16, toDisplayString(part.text), 1)) : createCommentVNode("", true)], 64);
16310
- }), 128))]),
16311
- _: 1
16312
- }, 8, ["class"]);
16933
+ return openBlock(), createBlock(resolveDynamicComponent(__props.inline ? "span" : "div"), {
16934
+ class: normalizeClass([
16935
+ "mint-chem-formula",
16936
+ !__props.inline ? "mint-chem-formula--block" : "",
16937
+ `mint-chem-formula--${__props.size}`,
16938
+ `mint-chem-formula--${__props.tone}`,
16939
+ {
16940
+ "mint-chem-formula--pill": __props.pill,
16941
+ "mint-chem-formula--empty": !formula.value
16942
+ }
16943
+ ]),
16944
+ title: title.value || void 0
16945
+ }, {
16946
+ default: withCtx(() => [formula.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
16947
+ createElementVNode("span", _hoisted_1$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(getParts(formula.value), (part, i) => {
16948
+ return openBlock(), createElementBlock(Fragment, { key: i }, [part.type === "element" ? (openBlock(), createElementBlock("span", _hoisted_2$19, toDisplayString(part.text), 1)) : part.type === "subscript" ? (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(part.text), 1)) : part.type === "superscript" ? (openBlock(), createElementBlock("span", _hoisted_4$18, toDisplayString(part.text), 1)) : part.type === "paren" ? (openBlock(), createElementBlock("span", _hoisted_5$16, toDisplayString(part.text), 1)) : part.type === "dot" ? (openBlock(), createElementBlock("span", _hoisted_6$16, toDisplayString(part.text), 1)) : part.type === "charge" ? (openBlock(), createElementBlock("span", _hoisted_7$14, toDisplayString(part.text), 1)) : createCommentVNode("", true)], 64);
16949
+ }), 128))]),
16950
+ __props.adduct ? (openBlock(), createBlock(AdductText_default, {
16951
+ key: 0,
16952
+ value: __props.adduct,
16953
+ size: "inherit"
16954
+ }, null, 8, ["value"])) : createCommentVNode("", true),
16955
+ renderSlot(_ctx.$slots, "default")
16956
+ ], 64)) : (openBlock(), createElementBlock("span", _hoisted_8$12, toDisplayString(__props.emptyText), 1))]),
16957
+ _: 3
16958
+ }, 8, ["class", "title"]);
16313
16959
  };
16314
16960
  }
16315
16961
  });
@@ -20234,10 +20880,22 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
20234
20880
  watch(() => new Map([...nav.nodes.value].map(([path, node]) => [path, nav.isAllowed(node)])), (allowed, previous) => {
20235
20881
  if (keys.value.size && [...allowed].some(([path, value]) => previous.has(path) && value !== previous.get(path))) resolve();
20236
20882
  });
20883
+ const selectedFileCounts = computed(() => {
20884
+ const counts = /* @__PURE__ */ new Map();
20885
+ for (const file of chosen.value.files) {
20886
+ const seen = /* @__PURE__ */ new Set();
20887
+ let parent = file.parentPath;
20888
+ while (parent && !seen.has(parent)) {
20889
+ seen.add(parent);
20890
+ counts.set(parent, (counts.get(parent) ?? 0) + 1);
20891
+ parent = nav.nodes.value.get(parent)?.parentPath;
20892
+ }
20893
+ }
20894
+ return counts;
20895
+ });
20237
20896
  function folderProgress(node) {
20238
20897
  if (node.kind !== "folder" || node.fileCount == null) return "";
20239
- const allowed = chosen.value.files.filter((file) => ancestorSelected(file, new Set([node.path]))).length;
20240
- return `${selected(node) ? allowed : 0} / ${node.fileCount}`;
20898
+ return `${selected(node) ? selectedFileCounts.value.get(node.path) ?? 0 : 0} / ${node.fileCount}`;
20241
20899
  }
20242
20900
  return {
20243
20901
  keys,
@@ -20273,7 +20931,10 @@ function localFilesAdapter(files, relativePaths) {
20273
20931
  kind: "folder",
20274
20932
  name: parts[i],
20275
20933
  path,
20276
- parentPath: parent
20934
+ parentPath: parent,
20935
+ fileCount: 0,
20936
+ bytes: 0,
20937
+ formats: {}
20277
20938
  });
20278
20939
  parent = path;
20279
20940
  }
@@ -20289,17 +20950,22 @@ function localFilesAdapter(files, relativePaths) {
20289
20950
  file
20290
20951
  });
20291
20952
  }
20953
+ const children = /* @__PURE__ */ new Map();
20292
20954
  for (const node of nodes.values()) {
20293
- if (node.kind !== "folder") continue;
20294
- const descendants = [...nodes.values()].filter((item) => item.kind === "file" && item.path.startsWith(`${node.path}/`));
20295
- node.fileCount = descendants.length;
20296
- node.bytes = descendants.reduce((sum, file) => sum + (file.bytes ?? 0), 0);
20297
- node.formats = {};
20298
- descendants.forEach((file) => {
20299
- node.formats[file.format] = (node.formats[file.format] ?? 0) + 1;
20300
- });
20955
+ const parent = node.parentPath ?? "";
20956
+ const siblings = children.get(parent);
20957
+ if (siblings) siblings.push(node);
20958
+ else children.set(parent, [node]);
20959
+ if (node.kind !== "file") continue;
20960
+ for (let slash = node.path.indexOf("/"); slash >= 0; slash = node.path.indexOf("/", slash + 1)) {
20961
+ const folder = nodes.get(node.path.slice(0, slash));
20962
+ if (folder?.kind !== "folder") continue;
20963
+ folder.fileCount = (folder.fileCount ?? 0) + 1;
20964
+ folder.bytes = (folder.bytes ?? 0) + (node.bytes ?? 0);
20965
+ folder.formats[node.format] = (folder.formats[node.format] ?? 0) + 1;
20966
+ }
20301
20967
  }
20302
- const list = (path) => [...nodes.values()].filter((node) => (node.parentPath ?? "") === path);
20968
+ const list = (path) => [...children.get(path) ?? []];
20303
20969
  return {
20304
20970
  listRoot: async () => list(""),
20305
20971
  listChildren: async (path) => list(path),
@@ -20903,6 +21569,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20903
21569
  //#region src/components/index.ts
20904
21570
  var components_exports = /* @__PURE__ */ __exportAll({
20905
21571
  ActionMenu: () => ActionMenu_default,
21572
+ AdductText: () => AdductText_default,
20906
21573
  AlertBox: () => AlertBox_default,
20907
21574
  AppAvatarMenu: () => AppAvatarMenu_default,
20908
21575
  AppContainer: () => AppContainer_default,
@@ -20973,6 +21640,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
20973
21640
  InstrumentStateBadge: () => InstrumentStateBadge_default,
20974
21641
  InstrumentStatusCard: () => InstrumentStatusCard_default,
20975
21642
  JobsStatusTray: () => JobsStatusTray_default,
21643
+ LayoutResizeHandle: () => LayoutResizeHandle_default,
20976
21644
  LcmsSequenceTable: () => LcmsSequenceTable_default,
20977
21645
  LoadingSpinner: () => LoadingSpinner_default,
20978
21646
  MobileSupportGate: () => MobileSupportGate_default,
@@ -20995,6 +21663,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
20995
21663
  SampleSelector: () => SampleSelector_default,
20996
21664
  ScheduleCalendar: () => ScheduleCalendar_default,
20997
21665
  ScientificNumber: () => ScientificNumber_default,
21666
+ SearchableSelect: () => SearchableSelect_default,
20998
21667
  SecretInput: () => SecretInput_default,
20999
21668
  SectionCard: () => SectionCard_default,
21000
21669
  SegmentedControl: () => SegmentedControl_default,
@@ -21016,6 +21685,6 @@ var components_exports = /* @__PURE__ */ __exportAll({
21016
21685
  WellPlate: () => WellPlate_default
21017
21686
  });
21018
21687
  //#endregion
21019
- export { AutoGroupModal_default as $, ChemicalFormula_default as A, ActionMenu_default as At, BioTemplateExperimentWorkspaceView_default as B, ColorSlider_default as Bt, SequenceProgressBar_default as C, StepWizard_default as Ct, formatSequenceRemaining as D, PluginIcon_default as Dt, formatSequenceEta as E, AppAvatarMenu_default as Et, SmartGroupModal_default as F, LoadingSpinner_default as Ft, StatusIndicator_default as G, Breadcrumb_default as H, GroupAssigner_default as I, Calendar_default as It, DoseDesignWorkspaceView_default as J, Divider_default as K, RackEditor_default as L, DropdownButton_default as Lt, ProtocolStepEditor_default as M, RuntimeUpdateNotice_default as Mt, SampleHierarchyTree_default as N, AppToastContainer_default as Nt, sequenceProgressPercent as O, CollapsibleCard_default as Ot, ReagentEditor_default as P, DataFrame_default as Pt, SampleSelector_default as Q, BioTemplatePresetWorkspaceView_default as R, SegmentedControl_default as Rt, InstrumentAlertLog_default as S, FormActions_default as St, estimateSequenceRemainingSeconds as T, AppPluginSwitcher_default as Tt, Avatar_default as U, BioTemplateRenderer_default as V, ProgressBar_default as W, ComponentBindingRenderer_default as X, ControlWorkspaceView_default as Y, ScheduleCalendar_default as Z, inferLcmsPlateTypeFromWellIds as _, PluginWorkspaceView_default as _t, FileBrowserModal_default as a, WellPlate_default as at, InstrumentStatusCard_default as b, AppSidebar_default as bt, TimeRangeInput_default as c, GeneratedPluginView_default as ct, AuditTrail_default as d, GeneratedPlotlyResult_default as dt, SmartGroupManual_default as et, LcmsSequenceTable_default as f, PlotlyChart_default as ft, extractLcmsSampleName as g, normalizeGeneratedJobInput as gt, extractLcmsCommonPrefix as h, generatedJobFormSchema as ht, ArtifactSaveDialog_default as i, SampleLegend_default as it, ScientificNumber_default as j, IconButton_default as jt, sequenceSamplesRemaining as k, ThemeToggle_default as kt, ExperimentDataViewer_default as l, JobsStatusTray_default as lt, basenameFromWindowsPath as m, generatedJobDefaults as mt, FilePicker_default as n, ReagentList_default as nt, SectionCard_default as o, ExperimentTimeline_default as ot, DEFAULT_LCMS_SEQUENCE_COLUMNS as p, ChartContainer_default as pt, AppContainer_default as q, FitPanel_default as r, PlateMapEditor_default as rt, ResourceCard_default as s, DoseCalculator_default as st, components_exports as t, SmartGroupFieldRecipe_default as tt, BatchProgressList_default as u, GeneratedResultRenderer_default as ut, lcmsWellIdFromPosition as v, MobileSupportGate_default as vt, estimateSequenceFinishDate as w, AppTopBar_default as wt, InstrumentStateBadge_default as x, FormBuilder_default as xt, reconstructLcmsPlateCellsFromSequenceItems as y, AppLayout_default as yt, BioTemplatePackWorkspaceView_default as z, BaseTabs_default as zt };
21688
+ export { ScheduleCalendar_default as $, ChemicalFormula_default as A, CollapsibleCard_default as At, BioTemplateExperimentWorkspaceView_default as B, SegmentedControl_default as Bt, SequenceProgressBar_default as C, FormBuilder_default as Ct, formatSequenceRemaining as D, AppPluginSwitcher_default as Dt, formatSequenceEta as E, AppTopBar_default as Et, SmartGroupModal_default as F, AppToastContainer_default as Ft, ProgressBar_default as G, AdductText_default as H, ColorSlider_default as Ht, GroupAssigner_default as I, DataFrame_default as It, LayoutResizeHandle_default as J, StatusIndicator_default as K, RackEditor_default as L, LoadingSpinner_default as Lt, ProtocolStepEditor_default as M, ActionMenu_default as Mt, SampleHierarchyTree_default as N, IconButton_default as Nt, sequenceProgressPercent as O, AppAvatarMenu_default as Ot, ReagentEditor_default as P, RuntimeUpdateNotice_default as Pt, ComponentBindingRenderer_default as Q, BioTemplatePresetWorkspaceView_default as R, Calendar_default as Rt, InstrumentAlertLog_default as S, AppSidebar_default as St, estimateSequenceRemainingSeconds as T, StepWizard_default as Tt, Breadcrumb_default as U, SearchableSelect_default as Ut, BioTemplateRenderer_default as V, BaseTabs_default as Vt, Avatar_default as W, DoseDesignWorkspaceView_default as X, AppContainer_default as Y, ControlWorkspaceView_default as Z, inferLcmsPlateTypeFromWellIds as _, generatedJobFormSchema as _t, FileBrowserModal_default as a, PlateMapEditor_default as at, InstrumentStatusCard_default as b, MobileSupportGate_default as bt, TimeRangeInput_default as c, ExperimentTimeline_default as ct, AuditTrail_default as d, JobsStatusTray_default as dt, SampleSelector_default as et, LcmsSequenceTable_default as f, GeneratedResultRenderer_default as ft, extractLcmsSampleName as g, generatedJobDefaults as gt, extractLcmsCommonPrefix as h, ChartContainer_default as ht, ArtifactSaveDialog_default as i, ReagentList_default as it, ScientificNumber_default as j, ThemeToggle_default as jt, sequenceSamplesRemaining as k, PluginIcon_default as kt, ExperimentDataViewer_default as l, DoseCalculator_default as lt, basenameFromWindowsPath as m, PlotlyChart_default as mt, FilePicker_default as n, SmartGroupManual_default as nt, SectionCard_default as o, SampleLegend_default as ot, DEFAULT_LCMS_SEQUENCE_COLUMNS as p, GeneratedPlotlyResult_default as pt, Divider_default as q, FitPanel_default as r, SmartGroupFieldRecipe_default as rt, ResourceCard_default as s, WellPlate_default as st, components_exports as t, AutoGroupModal_default as tt, BatchProgressList_default as u, GeneratedPluginView_default as ut, lcmsWellIdFromPosition as v, normalizeGeneratedJobInput as vt, estimateSequenceFinishDate as w, FormActions_default as wt, InstrumentStateBadge_default as x, AppLayout_default as xt, reconstructLcmsPlateCellsFromSequenceItems as y, PluginWorkspaceView_default as yt, BioTemplatePackWorkspaceView_default as z, DropdownButton_default as zt };
21020
21689
 
21021
- //# sourceMappingURL=components-DIum5hkx.js.map
21690
+ //# sourceMappingURL=components-CxQVQCpP.js.map