@morscherlab/mint-sdk 1.1.8 → 1.1.9

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 (90) hide show
  1. package/dist/__tests__/components/RetiredStyles.test.d.ts +1 -0
  2. package/dist/__tests__/composables/autoGroup/groupByOrder.test.d.ts +1 -0
  3. package/dist/__tests__/composables/useSampleGroups.tree.test.d.ts +1 -0
  4. package/dist/components/AppTopBar.vue.d.ts +6 -11
  5. package/dist/components/AutoGroupModal.adapter.d.ts +10 -6
  6. package/dist/components/PluginIcon.vue.d.ts +2 -2
  7. package/dist/components/PluginWorkspaceView.props.d.ts +5 -7
  8. package/dist/components/PluginWorkspaceView.vue.d.ts +0 -3
  9. package/dist/components/SampleSelector.groups.d.ts +7 -7
  10. package/dist/components/SampleSelector.selection.d.ts +6 -12
  11. package/dist/components/SampleSelector.tree.d.ts +39 -0
  12. package/dist/components/SampleSelectorGroupNode.vue.d.ts +9 -0
  13. package/dist/components/SmartGroup.types.d.ts +5 -0
  14. package/dist/components/SmartGroupFieldRecipe.groups.d.ts +3 -2
  15. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -0
  16. package/dist/components/index.js +1 -1
  17. package/dist/{components-CDomhGSj.js → components-BbtUpCTv.js} +913 -943
  18. package/dist/components-BbtUpCTv.js.map +1 -0
  19. package/dist/composables/index.d.ts +1 -1
  20. package/dist/composables/index.js +1 -1
  21. package/dist/composables/useAutoGroup.d.ts +3 -0
  22. package/dist/composables/usePlatformContext.d.ts +3 -0
  23. package/dist/composables/useSampleGroups.d.ts +25 -0
  24. package/dist/index.js +2 -2
  25. package/dist/install.js +1 -1
  26. package/dist/styles.css +130 -557
  27. package/dist/types/platform.d.ts +1 -0
  28. package/dist/{useProtocolTemplates-BMt0LlXf.js → useProtocolTemplates-BWfNaynA.js} +199 -24
  29. package/dist/useProtocolTemplates-BWfNaynA.js.map +1 -0
  30. package/dist/utils/pluginIcon.d.ts +1 -1
  31. package/dist/utils/sampleGroupPath.d.ts +6 -0
  32. package/package.json +1 -1
  33. package/src/__tests__/components/AppAvatarMenu.test.ts +11 -0
  34. package/src/__tests__/components/AppTopBar.test.ts +84 -10
  35. package/src/__tests__/components/AppTopBarPageSelector.test.ts +1 -1
  36. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +16 -6
  37. package/src/__tests__/components/PluginIcon.test.ts +19 -0
  38. package/src/__tests__/components/PluginWorkspaceView.test.ts +8 -0
  39. package/src/__tests__/components/RetiredStyles.test.ts +82 -0
  40. package/src/__tests__/components/SampleSelector.drag.test.ts +26 -0
  41. package/src/__tests__/components/SampleSelector.groups.test.ts +19 -6
  42. package/src/__tests__/components/SampleSelector.selection.test.ts +9 -23
  43. package/src/__tests__/components/SmartGroupFieldRecipe.groups.test.ts +5 -0
  44. package/src/__tests__/composables/autoGroup/compose.test.ts +9 -10
  45. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +249 -0
  46. package/src/__tests__/composables/autoGroup/integration.test.ts +3 -7
  47. package/src/__tests__/composables/useSampleGroups.tree.test.ts +145 -0
  48. package/src/components/AppTopBar.story.vue +9 -7
  49. package/src/components/AppTopBar.vue +79 -72
  50. package/src/components/AutoGroupModal.adapter.ts +17 -12
  51. package/src/components/AutoGroupModal.story.vue +89 -0
  52. package/src/components/AutoGroupModal.vue +16 -8
  53. package/src/components/PluginIcon.story.vue +11 -9
  54. package/src/components/PluginIcon.vue +3 -3
  55. package/src/components/PluginWorkspaceView.props.ts +5 -7
  56. package/src/components/PluginWorkspaceView.vue +0 -4
  57. package/src/components/SampleSelector.drag.ts +5 -5
  58. package/src/components/SampleSelector.groups.ts +15 -15
  59. package/src/components/SampleSelector.selection.ts +7 -46
  60. package/src/components/SampleSelector.story.vue +37 -0
  61. package/src/components/SampleSelector.tree.ts +48 -0
  62. package/src/components/SampleSelector.vue +52 -320
  63. package/src/components/SampleSelectorGroupNode.vue +197 -0
  64. package/src/components/SmartGroup.types.ts +5 -0
  65. package/src/components/SmartGroupFieldRecipe.groups.ts +6 -2
  66. package/src/components/SmartGroupFieldRecipe.vue +76 -4
  67. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -2
  68. package/src/composables/autoGroup/compose.ts +31 -10
  69. package/src/composables/index.ts +1 -0
  70. package/src/composables/useAutoGroup.ts +108 -5
  71. package/src/composables/useSampleGroups.ts +118 -33
  72. package/src/styles/components/app-avatar-menu.css +2 -1
  73. package/src/styles/components/app-plugin-switcher.css +0 -13
  74. package/src/styles/components/app-top-bar.css +13 -54
  75. package/src/styles/components/dose-calculator.css +0 -4
  76. package/src/styles/components/experiment-popover.css +2 -104
  77. package/src/styles/components/experiment-selector-modal.css +0 -7
  78. package/src/styles/components/plugin-icon.css +3 -0
  79. package/src/styles/components/protocol-step-editor.css +0 -6
  80. package/src/styles/components/reagent-editor.css +0 -5
  81. package/src/styles/components/sample-hierarchy-tree.css +0 -4
  82. package/src/styles/components/sample-selector.css +0 -96
  83. package/src/styles/components/schedule-calendar.css +0 -6
  84. package/src/styles/components/smart-group.css +22 -0
  85. package/src/styles/components/well-plate.css +1 -27
  86. package/src/types/platform.ts +1 -0
  87. package/src/utils/pluginIcon.ts +5 -2
  88. package/src/utils/sampleGroupPath.ts +19 -0
  89. package/dist/components-CDomhGSj.js.map +0 -1
  90. package/dist/useProtocolTemplates-BMt0LlXf.js.map +0 -1
@@ -4,18 +4,18 @@ import { a as BaseSelect_default, i as BasePill_default, n as Skeleton_default,
4
4
  import { A as useConcentrationUnits, At as BaseCheckbox_default, Ct as DatePicker_default, Dt as BaseSlider_default, Ft as shift, H as getInjectedPlatformContext, I as useChemicalFormula, It as BaseTextarea_default, L as GeneratedPathInput_default, M as SequenceInput_default, Mt as computePosition, Nt as flip, O as ConcentrationInput_default, Ot as BaseRadioGroup_default, P as FormulaInput_default, Pt as offset, Q as normalizeJobPercent, R as _plugin_vue_export_helper_default, T as getDefaultControlView, Tt as useListSelection, W as resolveCurrentExperimentId, Z as jobStatusLabel, _ as controlsToFormSchema, at as TagsInput_default, ct as compareTime, f as resolveControlModel, ft as formatDuration, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, it as NumberInput_default, j as MoleculeInput_default, jt as Tooltip_default, k as UnitInput_default, kt as BaseToggle_default, lt as durationMinutes, m as controlValuesToComponentBindingsById, nt as AlertBox_default, o as defineDoseDesignControlModel, ot as TimePicker_default, p as controlValuesToComponentBindings, pt as formatTime, q as useGeneratedAnalysis, r as getControlDefaults, rt as FileUploader_default, tt as DateTimePicker_default, u as useControlWorkspace, w as controlsToViewItems, wt as MultiSelect_default, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as ArtifactSelectorModal_default } from "./useControlSchema-BMVb2XIQ.js";
5
5
  import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-D7LFUokT.js";
6
6
  import { t as useDropdownState } from "./useDropdownState-DSb3BC3N.js";
7
- import { D as readFileAsText, G as useAppExperiment, H as DEFAULT_MOBILE_VIEWPORT_QUERY, I as DEFAULT_COLORS, K as useTheme, L as useWellPlateEditor, M as parseCSV, Q as useSortedItems, R as useDoseCalculator, U as useMobileSupportGate, V as usePluginJobCenter, W as APP_EXPERIMENT_KEY, X as useTextSearch, _ as useScheduleDrag, a as useReagentSeries, b as useExpansionSet, c as useBioTemplatePresetWorkspace, j as useAutoGroup, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, q as useToast, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData } from "./useProtocolTemplates-BMt0LlXf.js";
7
+ import { B as useDoseCalculator, C as getSampleGroupParentPath, G as useMobileSupportGate, J as useTheme, K as APP_EXPERIMENT_KEY, N as useAutoGroup, P as parseCSV, Q as useTextSearch, R as DEFAULT_COLORS, S as getSampleGroupMajorPrefix, U as usePluginJobCenter, W as DEFAULT_MOBILE_VIEWPORT_QUERY, Y as useToast, _ as useScheduleDrag, a as useReagentSeries, b as useExpansionSet, c as useBioTemplatePresetWorkspace, et as useSortedItems, k as readFileAsText, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, q as useAppExperiment, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData, z as useWellPlateEditor } from "./useProtocolTemplates-BWfNaynA.js";
8
8
  import { r as useApi } from "./useApi-CDBq6z23.js";
9
9
  import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-DG3HOFGA.js";
10
10
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-DQ0MjwHZ.js";
11
11
  import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-tLwJ7XF4.js";
12
12
  import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-Cr-48-u2.js";
13
13
  import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-B6P2msT4.js";
14
- import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toRaw, toRef, unref, useId, useModel, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
14
+ import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRaw, toRef, unref, useId, useModel, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
15
15
  //#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
16
- var _hoisted_1$75 = { class: "mint-color-slider__row" };
17
- var _hoisted_2$67 = { class: "mint-color-slider__track" };
18
- var _hoisted_3$60 = [
16
+ var _hoisted_1$76 = { class: "mint-color-slider__row" };
17
+ var _hoisted_2$68 = { class: "mint-color-slider__track" };
18
+ var _hoisted_3$61 = [
19
19
  "value",
20
20
  "min",
21
21
  "max",
@@ -130,7 +130,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
130
130
  emit("update:modelValue", Number(target.value));
131
131
  }
132
132
  return (_ctx, _cache) => {
133
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$75, [createElementVNode("div", _hoisted_2$67, [createElementVNode("input", {
133
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$76, [createElementVNode("div", _hoisted_2$68, [createElementVNode("input", {
134
134
  type: "range",
135
135
  value: currentValue.value,
136
136
  min: __props.min,
@@ -147,7 +147,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
147
147
  "--thumb-size": `${sizeConfig.value.thumb}px`
148
148
  }),
149
149
  onInput: handleInput
150
- }, null, 44, _hoisted_3$60)]), __props.showValue ? (openBlock(), createElementBlock("div", {
150
+ }, null, 44, _hoisted_3$61)]), __props.showValue ? (openBlock(), createElementBlock("div", {
151
151
  key: 0,
152
152
  class: "mint-color-slider__badge",
153
153
  style: normalizeStyle({
@@ -166,13 +166,13 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
166
166
  });
167
167
  //#endregion
168
168
  //#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
169
- var _hoisted_1$74 = [
169
+ var _hoisted_1$75 = [
170
170
  "aria-selected",
171
171
  "aria-disabled",
172
172
  "onClick"
173
173
  ];
174
- var _hoisted_2$66 = { class: "mint-tab__content" };
175
- var _hoisted_3$59 = {
174
+ var _hoisted_2$67 = { class: "mint-tab__content" };
175
+ var _hoisted_3$60 = {
176
176
  key: 0,
177
177
  class: "mint-tab__icon mint-tab__icon--svg",
178
178
  viewBox: "0 0 24 24",
@@ -183,8 +183,8 @@ var _hoisted_3$59 = {
183
183
  "stroke-linejoin": "round",
184
184
  "aria-hidden": "true"
185
185
  };
186
- var _hoisted_4$55 = ["d"];
187
- var _hoisted_5$53 = ["d"];
186
+ var _hoisted_4$56 = ["d"];
187
+ var _hoisted_5$54 = ["d"];
188
188
  var _hoisted_6$50 = {
189
189
  key: 1,
190
190
  class: "mint-tab__icon"
@@ -234,33 +234,33 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
234
234
  tab.disabled ? "mint-tab--disabled" : ""
235
235
  ]),
236
236
  onClick: ($event) => selectTab(tab.id)
237
- }, [createElementVNode("span", _hoisted_2$66, [
238
- isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$59, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
237
+ }, [createElementVNode("span", _hoisted_2$67, [
238
+ isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$60, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
239
239
  return openBlock(), createElementBlock("path", {
240
240
  key: index,
241
241
  d
242
- }, null, 8, _hoisted_4$55);
242
+ }, null, 8, _hoisted_4$56);
243
243
  }), 128)) : (openBlock(), createElementBlock("path", {
244
244
  key: 1,
245
245
  d: tab.icon
246
- }, null, 8, _hoisted_5$53))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$50, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
246
+ }, null, 8, _hoisted_5$54))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$50, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
247
247
  createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
248
248
  tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$44, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
249
- ])], 10, _hoisted_1$74);
249
+ ])], 10, _hoisted_1$75);
250
250
  }), 128))], 2);
251
251
  };
252
252
  }
253
253
  });
254
254
  //#endregion
255
255
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
256
- var _hoisted_1$73 = [
256
+ var _hoisted_1$74 = [
257
257
  "aria-checked",
258
258
  "disabled",
259
259
  "onClick",
260
260
  "onKeydown"
261
261
  ];
262
- var _hoisted_2$65 = { class: "mint-segmented-control__label" };
263
- var _hoisted_3$58 = {
262
+ var _hoisted_2$66 = { class: "mint-segmented-control__label" };
263
+ var _hoisted_3$59 = {
264
264
  key: 0,
265
265
  class: "mint-segmented-control__description"
266
266
  };
@@ -332,24 +332,24 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
332
332
  ]),
333
333
  onClick: ($event) => handleSelect(option),
334
334
  onKeydown: ($event) => handleKeydown($event, option)
335
- }, [createElementVNode("span", _hoisted_2$65, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$58, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$73);
335
+ }, [createElementVNode("span", _hoisted_2$66, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$59, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$74);
336
336
  }), 128))], 2);
337
337
  };
338
338
  }
339
339
  });
340
340
  //#endregion
341
341
  //#region src/components/DropdownButton.vue?vue&type=script&setup=true&lang.ts
342
- var _hoisted_1$72 = ["disabled", "aria-expanded"];
343
- var _hoisted_2$64 = {
342
+ var _hoisted_1$73 = ["disabled", "aria-expanded"];
343
+ var _hoisted_2$65 = {
344
344
  key: 0,
345
345
  class: "mint-dropdown-button__spinner",
346
346
  viewBox: "0 0 24 24",
347
347
  fill: "none",
348
348
  "aria-hidden": "true"
349
349
  };
350
- var _hoisted_3$57 = { class: "mint-dropdown-button__label" };
351
- var _hoisted_4$54 = ["aria-activedescendant"];
352
- var _hoisted_5$52 = [
350
+ var _hoisted_3$58 = { class: "mint-dropdown-button__label" };
351
+ var _hoisted_4$55 = ["aria-activedescendant"];
352
+ var _hoisted_5$53 = [
353
353
  "id",
354
354
  "aria-selected",
355
355
  "aria-disabled",
@@ -435,7 +435,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
435
435
  "aria-haspopup": "listbox",
436
436
  onClick: toggle
437
437
  }, [
438
- __props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$64, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
438
+ __props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$65, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
439
439
  cx: "12",
440
440
  cy: "12",
441
441
  r: "10",
@@ -448,7 +448,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
448
448
  "stroke-width": "3",
449
449
  "stroke-linecap": "round"
450
450
  }, null, -1)])])) : createCommentVNode("", true),
451
- createElementVNode("span", _hoisted_3$57, toDisplayString(selectedLabel.value), 1),
451
+ createElementVNode("span", _hoisted_3$58, toDisplayString(selectedLabel.value), 1),
452
452
  (openBlock(), createElementBlock("svg", {
453
453
  class: normalizeClass(["mint-dropdown-button__chevron", { "mint-dropdown-button__chevron--open": unref(isOpen) }]),
454
454
  viewBox: "0 0 24 24",
@@ -458,7 +458,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
458
458
  "stroke-linecap": "round",
459
459
  "stroke-linejoin": "round"
460
460
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
461
- ], 10, _hoisted_1$72), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
461
+ ], 10, _hoisted_1$73), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
462
462
  default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("ul", {
463
463
  key: 0,
464
464
  class: "mint-dropdown-button__menu",
@@ -480,8 +480,8 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
480
480
  createElementVNode("span", _hoisted_6$49, toDisplayString(option.label), 1),
481
481
  option.description ? (openBlock(), createElementBlock("span", _hoisted_7$43, toDisplayString(option.description), 1)) : createCommentVNode("", true),
482
482
  option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$39, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : createCommentVNode("", true)
483
- ], 10, _hoisted_5$52);
484
- }), 128))], 8, _hoisted_4$54)) : createCommentVNode("", true)]),
483
+ ], 10, _hoisted_5$53);
484
+ }), 128))], 8, _hoisted_4$55)) : createCommentVNode("", true)]),
485
485
  _: 1
486
486
  })], 512);
487
487
  };
@@ -489,14 +489,14 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
489
489
  });
490
490
  //#endregion
491
491
  //#region src/components/Calendar.vue?vue&type=script&setup=true&lang.ts
492
- var _hoisted_1$71 = { class: "mint-calendar" };
493
- var _hoisted_2$63 = {
492
+ var _hoisted_1$72 = { class: "mint-calendar" };
493
+ var _hoisted_2$64 = {
494
494
  key: 0,
495
495
  class: "mint-calendar__header"
496
496
  };
497
- var _hoisted_3$56 = { class: "mint-calendar__title" };
498
- var _hoisted_4$53 = { class: "mint-calendar__weekdays" };
499
- var _hoisted_5$51 = { class: "mint-calendar__grid" };
497
+ var _hoisted_3$57 = { class: "mint-calendar__title" };
498
+ var _hoisted_4$54 = { class: "mint-calendar__weekdays" };
499
+ var _hoisted_5$52 = { class: "mint-calendar__grid" };
500
500
  var _hoisted_6$48 = [
501
501
  "disabled",
502
502
  "onClick",
@@ -723,8 +723,8 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
723
723
  emit("navigate", "next", currentMonth.value, currentYear.value);
724
724
  }
725
725
  return (_ctx, _cache) => {
726
- return openBlock(), createElementBlock("div", _hoisted_1$71, [
727
- __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$63, [
726
+ return openBlock(), createElementBlock("div", _hoisted_1$72, [
727
+ __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$64, [
728
728
  createElementVNode("button", {
729
729
  type: "button",
730
730
  class: "mint-calendar__nav-btn",
@@ -743,7 +743,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
743
743
  year: currentYear.value,
744
744
  prevMonth,
745
745
  nextMonth
746
- }, () => [createElementVNode("span", _hoisted_3$56, toDisplayString(monthLabel.value), 1)]),
746
+ }, () => [createElementVNode("span", _hoisted_3$57, toDisplayString(monthLabel.value), 1)]),
747
747
  createElementVNode("button", {
748
748
  type: "button",
749
749
  class: "mint-calendar__nav-btn",
@@ -758,7 +758,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
758
758
  "stroke-linejoin": "round"
759
759
  }, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])])
760
760
  ])) : createCommentVNode("", true),
761
- createElementVNode("div", _hoisted_4$53, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekDayLabels.value, (label, i) => {
761
+ createElementVNode("div", _hoisted_4$54, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekDayLabels.value, (label, i) => {
762
762
  return openBlock(), createElementBlock("span", {
763
763
  key: i,
764
764
  class: "mint-calendar__weekday"
@@ -767,7 +767,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
767
767
  index: i
768
768
  }, () => [createTextVNode(toDisplayString(label), 1)])]);
769
769
  }), 128))]),
770
- createElementVNode("div", _hoisted_5$51, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day, i) => {
770
+ createElementVNode("div", _hoisted_5$52, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day, i) => {
771
771
  return openBlock(), createElementBlock("button", {
772
772
  key: i,
773
773
  type: "button",
@@ -797,14 +797,14 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
797
797
  });
798
798
  //#endregion
799
799
  //#region src/components/DataFrame.vue?vue&type=script&setup=true&lang.ts
800
- var _hoisted_1$70 = {
800
+ var _hoisted_1$71 = {
801
801
  key: 0,
802
802
  class: "mint-dataframe__header"
803
803
  };
804
- var _hoisted_2$62 = { class: "mint-dataframe__search-wrapper" };
805
- var _hoisted_3$55 = ["placeholder"];
806
- var _hoisted_4$52 = { class: "mint-dataframe__table" };
807
- var _hoisted_5$50 = {
804
+ var _hoisted_2$63 = { class: "mint-dataframe__search-wrapper" };
805
+ var _hoisted_3$56 = ["placeholder"];
806
+ var _hoisted_4$53 = { class: "mint-dataframe__table" };
807
+ var _hoisted_5$51 = {
808
808
  key: 0,
809
809
  class: "mint-dataframe__th mint-dataframe__th--checkbox"
810
810
  };
@@ -838,7 +838,7 @@ var _hoisted_17$19 = {
838
838
  key: 1,
839
839
  class: "mint-dataframe__loading"
840
840
  };
841
- var _hoisted_18$17 = {
841
+ var _hoisted_18$18 = {
842
842
  key: 1,
843
843
  class: "mint-dataframe__footer"
844
844
  };
@@ -1092,7 +1092,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1092
1092
  });
1093
1093
  return (_ctx, _cache) => {
1094
1094
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dataframe", { "mint-dataframe--bordered": __props.bordered }]) }, [
1095
- __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$70, [createElementVNode("div", _hoisted_2$62, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1095
+ __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$71, [createElementVNode("div", _hoisted_2$63, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1096
1096
  class: "mint-dataframe__search-icon",
1097
1097
  viewBox: "0 0 24 24",
1098
1098
  fill: "none",
@@ -1109,13 +1109,13 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1109
1109
  type: "text",
1110
1110
  class: "mint-dataframe__search",
1111
1111
  placeholder: __props.searchPlaceholder
1112
- }, null, 8, _hoisted_3$55), [[vModelText, searchQuery.value]])])])) : createCommentVNode("", true),
1112
+ }, null, 8, _hoisted_3$56), [[vModelText, searchQuery.value]])])])) : createCommentVNode("", true),
1113
1113
  createElementVNode("div", {
1114
1114
  class: "mint-dataframe__table-wrapper",
1115
1115
  style: normalizeStyle(wrapperStyle.value)
1116
1116
  }, [
1117
- createElementVNode("table", _hoisted_4$52, [createElementVNode("thead", { class: normalizeClass(["mint-dataframe__thead", { "mint-dataframe__thead--sticky": __props.stickyHeader }]) }, [createElementVNode("tr", null, [
1118
- __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_5$50, [createElementVNode("input", {
1117
+ createElementVNode("table", _hoisted_4$53, [createElementVNode("thead", { class: normalizeClass(["mint-dataframe__thead", { "mint-dataframe__thead--sticky": __props.stickyHeader }]) }, [createElementVNode("tr", null, [
1118
+ __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_5$51, [createElementVNode("input", {
1119
1119
  type: "checkbox",
1120
1120
  checked: allSelected.value,
1121
1121
  indeterminate: selectIndeterminate.value,
@@ -1254,7 +1254,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1254
1254
  "stroke-linecap": "round"
1255
1255
  })], -1))])])) : createCommentVNode("", true)
1256
1256
  ], 4),
1257
- __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_18$17, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_19$16, 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$15, [
1257
+ __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_18$18, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_19$16, 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$15, [
1258
1258
  createElementVNode("button", {
1259
1259
  type: "button",
1260
1260
  class: "mint-dataframe__page-btn",
@@ -1289,9 +1289,9 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1289
1289
  });
1290
1290
  //#endregion
1291
1291
  //#region src/components/AppToastContainer.vue?vue&type=script&setup=true&lang.ts
1292
- var _hoisted_1$69 = { class: "mint-toast__container" };
1293
- var _hoisted_2$61 = ["onClick"];
1294
- var _hoisted_3$54 = { class: "mint-toast__message" };
1292
+ var _hoisted_1$70 = { class: "mint-toast__container" };
1293
+ var _hoisted_2$62 = ["onClick"];
1294
+ var _hoisted_3$55 = { class: "mint-toast__message" };
1295
1295
  //#endregion
1296
1296
  //#region src/components/AppToastContainer.vue
1297
1297
  var AppToastContainer_default = /* @__PURE__ */ defineComponent({
@@ -1306,7 +1306,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1306
1306
  info: "#3B82F6"
1307
1307
  };
1308
1308
  return (_ctx, _cache) => {
1309
- return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$69, [createVNode(TransitionGroup, { name: "toast" }, {
1309
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$70, [createVNode(TransitionGroup, { name: "toast" }, {
1310
1310
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(toasts), (toast) => {
1311
1311
  return openBlock(), createElementBlock("div", {
1312
1312
  key: toast.id,
@@ -1380,7 +1380,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1380
1380
  createElementVNode("path", { d: "M12 16v-4" }, null, -1),
1381
1381
  createElementVNode("path", { d: "M12 8h.01" }, null, -1)
1382
1382
  ])], 4)),
1383
- createElementVNode("span", _hoisted_3$54, toDisplayString(toast.message), 1),
1383
+ createElementVNode("span", _hoisted_3$55, toDisplayString(toast.message), 1),
1384
1384
  createElementVNode("span", {
1385
1385
  class: "mint-toast__progress",
1386
1386
  style: normalizeStyle({
@@ -1388,7 +1388,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1388
1388
  animationDuration: `${toast.duration ?? 3500}ms`
1389
1389
  })
1390
1390
  }, null, 4)
1391
- ], 14, _hoisted_2$61);
1391
+ ], 14, _hoisted_2$62);
1392
1392
  }), 128))]),
1393
1393
  _: 1
1394
1394
  })])]);
@@ -1540,7 +1540,7 @@ var Ellipsis = createLucideIcon("ellipsis", [
1540
1540
  ]);
1541
1541
  //#endregion
1542
1542
  //#region src/components/IconButton.vue?vue&type=script&setup=true&lang.ts
1543
- var _hoisted_1$68 = [
1543
+ var _hoisted_1$69 = [
1544
1544
  "disabled",
1545
1545
  "aria-label",
1546
1546
  "title"
@@ -1602,19 +1602,19 @@ var IconButton_default = /* @__PURE__ */ defineComponent({
1602
1602
  }, null, -1)])], 2)) : (openBlock(), createElementBlock("span", {
1603
1603
  key: 1,
1604
1604
  class: normalizeClass(`mint-icon-button__icon--${__props.size}`)
1605
- }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$68);
1605
+ }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$69);
1606
1606
  };
1607
1607
  }
1608
1608
  });
1609
1609
  //#endregion
1610
1610
  //#region src/components/ActionMenu.vue?vue&type=script&setup=true&lang.ts
1611
- var _hoisted_1$67 = [
1611
+ var _hoisted_1$68 = [
1612
1612
  "href",
1613
1613
  "target",
1614
1614
  "rel",
1615
1615
  "onClick"
1616
1616
  ];
1617
- var _hoisted_2$60 = ["disabled", "onClick"];
1617
+ var _hoisted_2$61 = ["disabled", "onClick"];
1618
1618
  //#endregion
1619
1619
  //#region src/components/ActionMenu.vue
1620
1620
  var ActionMenu_default = /* @__PURE__ */ defineComponent({
@@ -1781,21 +1781,21 @@ var ActionMenu_default = /* @__PURE__ */ defineComponent({
1781
1781
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
1782
1782
  role: "menuitem",
1783
1783
  onClick: ($event) => handleSelect(item)
1784
- }, toDisplayString(item.label), 11, _hoisted_1$67)) : (openBlock(), createElementBlock("button", {
1784
+ }, toDisplayString(item.label), 11, _hoisted_1$68)) : (openBlock(), createElementBlock("button", {
1785
1785
  key: 1,
1786
1786
  type: "button",
1787
1787
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
1788
1788
  role: "menuitem",
1789
1789
  disabled: item.disabled,
1790
1790
  onClick: ($event) => handleSelect(item)
1791
- }, toDisplayString(item.label), 11, _hoisted_2$60))], 64);
1791
+ }, toDisplayString(item.label), 11, _hoisted_2$61))], 64);
1792
1792
  }), 128))], 36)) : createCommentVNode("", true)]))], 64);
1793
1793
  };
1794
1794
  }
1795
1795
  });
1796
1796
  //#endregion
1797
1797
  //#region src/components/ThemeToggle.vue?vue&type=script&setup=true&lang.ts
1798
- var _hoisted_1$66 = {
1798
+ var _hoisted_1$67 = {
1799
1799
  key: 0,
1800
1800
  class: "mint-theme-toggle__icon",
1801
1801
  viewBox: "0 0 24 24",
@@ -1805,7 +1805,7 @@ var _hoisted_1$66 = {
1805
1805
  "stroke-linecap": "round",
1806
1806
  "stroke-linejoin": "round"
1807
1807
  };
1808
- var _hoisted_2$59 = {
1808
+ var _hoisted_2$60 = {
1809
1809
  key: 1,
1810
1810
  class: "mint-theme-toggle__icon",
1811
1811
  viewBox: "0 0 24 24",
@@ -1831,7 +1831,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1831
1831
  label: unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
1832
1832
  onClick: unref(toggleTheme)
1833
1833
  }, {
1834
- default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$66, [..._cache[0] || (_cache[0] = [
1834
+ default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$67, [..._cache[0] || (_cache[0] = [
1835
1835
  createElementVNode("circle", {
1836
1836
  cx: "12",
1837
1837
  cy: "12",
@@ -1845,7 +1845,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1845
1845
  createElementVNode("path", { d: "M20 12h2" }, null, -1),
1846
1846
  createElementVNode("path", { d: "m6.34 17.66-1.41 1.41" }, null, -1),
1847
1847
  createElementVNode("path", { d: "m19.07 4.93-1.41 1.41" }, null, -1)
1848
- ])])) : (openBlock(), createElementBlock("svg", _hoisted_2$59, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }, null, -1)])]))]),
1848
+ ])])) : (openBlock(), createElementBlock("svg", _hoisted_2$60, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }, null, -1)])]))]),
1849
1849
  _: 1
1850
1850
  }, 8, [
1851
1851
  "size",
@@ -1857,11 +1857,11 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1857
1857
  });
1858
1858
  //#endregion
1859
1859
  //#region src/components/CollapsibleCard.vue?vue&type=script&setup=true&lang.ts
1860
- var _hoisted_1$65 = { class: "mint-collapsible-card__header-shell" };
1861
- var _hoisted_2$58 = ["disabled", "aria-expanded"];
1862
- var _hoisted_3$53 = { class: "mint-collapsible-card__title-section" };
1863
- var _hoisted_4$51 = ["d"];
1864
- var _hoisted_5$49 = ["d"];
1860
+ var _hoisted_1$66 = { class: "mint-collapsible-card__header-shell" };
1861
+ var _hoisted_2$59 = ["disabled", "aria-expanded"];
1862
+ var _hoisted_3$54 = { class: "mint-collapsible-card__title-section" };
1863
+ var _hoisted_4$52 = ["d"];
1864
+ var _hoisted_5$50 = ["d"];
1865
1865
  var _hoisted_6$46 = { class: "mint-collapsible-card__titles" };
1866
1866
  var _hoisted_7$40 = { class: "mint-collapsible-card__title" };
1867
1867
  var _hoisted_8$36 = {
@@ -1899,7 +1899,7 @@ var _hoisted_16$18 = [
1899
1899
  "aria-expanded"
1900
1900
  ];
1901
1901
  var _hoisted_17$18 = { class: "mint-collapsible-card__body" };
1902
- var _hoisted_18$16 = { class: "mint-collapsible-card__content" };
1902
+ var _hoisted_18$17 = { class: "mint-collapsible-card__content" };
1903
1903
  //#endregion
1904
1904
  //#region src/components/CollapsibleCard.vue
1905
1905
  var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
@@ -1979,13 +1979,13 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
1979
1979
  emit("action", action.id);
1980
1980
  }
1981
1981
  return (_ctx, _cache) => {
1982
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$65, [createElementVNode("button", {
1982
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$66, [createElementVNode("button", {
1983
1983
  type: "button",
1984
1984
  class: normalizeClass(headerClasses.value),
1985
1985
  disabled: __props.disabled,
1986
1986
  "aria-expanded": isOpen.value,
1987
1987
  onClick: toggle
1988
- }, [createElementVNode("div", _hoisted_3$53, [__props.icon ? (openBlock(), createElementBlock("div", {
1988
+ }, [createElementVNode("div", _hoisted_3$54, [__props.icon ? (openBlock(), createElementBlock("div", {
1989
1989
  key: 0,
1990
1990
  class: "mint-collapsible-card__icon-badge",
1991
1991
  style: normalizeStyle(iconBgStyle.value)
@@ -2003,15 +2003,15 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2003
2003
  return openBlock(), createElementBlock("path", {
2004
2004
  key: i,
2005
2005
  d
2006
- }, null, 8, _hoisted_4$51);
2006
+ }, null, 8, _hoisted_4$52);
2007
2007
  }), 128)) : (openBlock(), createElementBlock("path", {
2008
2008
  key: 1,
2009
2009
  d: __props.icon
2010
- }, null, 8, _hoisted_5$49))], 4)) : (openBlock(), createElementBlock("span", {
2010
+ }, null, 8, _hoisted_5$50))], 4)) : (openBlock(), createElementBlock("span", {
2011
2011
  key: 1,
2012
2012
  class: "mint-collapsible-card__icon-text",
2013
2013
  style: normalizeStyle(iconColorStyle.value)
2014
- }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$46, [createElementVNode("h3", _hoisted_7$40, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$36, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$58), createElementVNode("div", _hoisted_9$34, [
2014
+ }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$46, [createElementVNode("h3", _hoisted_7$40, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$36, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$59), createElementVNode("div", _hoisted_9$34, [
2015
2015
  __props.badge !== void 0 ? (openBlock(), createElementBlock("span", {
2016
2016
  key: 0,
2017
2017
  class: normalizeClass(badgeClasses.value)
@@ -2066,7 +2066,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2066
2066
  "aria-hidden": "true"
2067
2067
  }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$18)
2068
2068
  ])]), createVNode(Transition, { name: "collapse" }, {
2069
- default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$18, [createElementVNode("div", _hoisted_18$16, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2069
+ default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$18, [createElementVNode("div", _hoisted_18$17, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2070
2070
  _: 3
2071
2071
  })], 2);
2072
2072
  };
@@ -2077,6 +2077,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2077
2077
  var PLUGIN_ICON_FALLBACK_PATH = "M14 7v4a1 1 0 0 0 1 1h4M5 3h9l5 5v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z";
2078
2078
  var PATH_REGEX = /^[Mm][\s,\d\-.]/;
2079
2079
  var RASTER_DATA_URL_REGEX = /^data:image\/(png|jpeg|jpg|gif|webp);/;
2080
+ var SAME_ORIGIN_ASSET_URL_REGEX = /^\/(?!\/)[^\s?#]+\.(?:svg|png|jpe?g|gif|webp)(?:[?#].*)?$/i;
2080
2081
  var VIEW_BOX_REGEX = /^-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s+\d+(?:\.\d+)?\s+\d+(?:\.\d+)?$/;
2081
2082
  var COLOR_REGEX = /^(#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})|currentColor|white|black|none)$/i;
2082
2083
  var MAX_STRUCTURED_ICON_LENGTH = 8e3;
@@ -2104,8 +2105,8 @@ function detectPluginIcon(icon) {
2104
2105
  format: "data-url",
2105
2106
  value: raw
2106
2107
  };
2107
- if (raw.startsWith("https://")) return {
2108
- format: "https-url",
2108
+ if (raw.startsWith("https://") || SAME_ORIGIN_ASSET_URL_REGEX.test(raw)) return {
2109
+ format: "asset-url",
2109
2110
  value: raw
2110
2111
  };
2111
2112
  return {
@@ -2206,18 +2207,18 @@ function isFiniteNumber(value, min, max) {
2206
2207
  }
2207
2208
  //#endregion
2208
2209
  //#region src/components/internal/ActionItemInternal.vue?vue&type=script&setup=true&lang.ts
2209
- var _hoisted_1$64 = [
2210
+ var _hoisted_1$65 = [
2210
2211
  "href",
2211
2212
  "aria-disabled",
2212
2213
  "tabindex"
2213
2214
  ];
2214
- var _hoisted_2$57 = [
2215
+ var _hoisted_2$58 = [
2215
2216
  "href",
2216
2217
  "aria-disabled",
2217
2218
  "tabindex",
2218
2219
  "onClick"
2219
2220
  ];
2220
- var _hoisted_3$52 = ["type", "disabled"];
2221
+ var _hoisted_3$53 = ["type", "disabled"];
2221
2222
  //#endregion
2222
2223
  //#region src/components/internal/ActionItemInternal.vue
2223
2224
  var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
@@ -2263,7 +2264,7 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2263
2264
  "aria-disabled": __props.disabled || void 0,
2264
2265
  tabindex: __props.disabled ? -1 : void 0,
2265
2266
  onClick: handleClick
2266
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$64)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2267
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$65)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2267
2268
  key: 1,
2268
2269
  to: __props.to,
2269
2270
  custom: ""
@@ -2273,33 +2274,33 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2273
2274
  "aria-disabled": __props.disabled || void 0,
2274
2275
  tabindex: __props.disabled ? -1 : void 0,
2275
2276
  onClick: ($event) => handleRouterClick($event, navigate)
2276
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$57)]),
2277
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$58)]),
2277
2278
  _: 3
2278
2279
  }, 8, ["to"])) : (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, _ctx.$attrs, {
2279
2280
  type: __props.type,
2280
2281
  disabled: __props.disabled,
2281
2282
  onClick: handleClick
2282
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_3$52));
2283
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_3$53));
2283
2284
  };
2284
2285
  }
2285
2286
  });
2286
2287
  //#endregion
2287
2288
  //#region src/components/PluginIcon.vue?vue&type=script&setup=true&lang.ts
2288
- var _hoisted_1$63 = ["viewBox"];
2289
- var _hoisted_2$56 = { key: 0 };
2290
- var _hoisted_3$51 = [
2289
+ var _hoisted_1$64 = ["viewBox"];
2290
+ var _hoisted_2$57 = { key: 0 };
2291
+ var _hoisted_3$52 = [
2291
2292
  "id",
2292
2293
  "x1",
2293
2294
  "y1",
2294
2295
  "x2",
2295
2296
  "y2"
2296
2297
  ];
2297
- var _hoisted_4$50 = [
2298
+ var _hoisted_4$51 = [
2298
2299
  "offset",
2299
2300
  "stop-color",
2300
2301
  "stop-opacity"
2301
2302
  ];
2302
- var _hoisted_5$48 = [
2303
+ var _hoisted_5$49 = [
2303
2304
  "x",
2304
2305
  "y",
2305
2306
  "width",
@@ -2343,10 +2344,10 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2343
2344
  * - Structured MINT icon JSON ({"type":"mint-icon",...}) → controlled multi-color SVG
2344
2345
  * - SVG path data (e.g. "M13 10V3...") → inline <svg><path>
2345
2346
  * - Raster data URL (data:image/png|jpeg|jpg|gif|webp;...) → <img>
2346
- * - https:// URL → <img> with no-referrer + lazy loading
2347
+ * - https:// URL or root-relative static image/SVG asset → <img> with no-referrer + lazy loading
2347
2348
  * - Anything else → MINT canonical plugin placeholder path
2348
2349
  *
2349
- * http:// URLs and data:image/svg+xml URLs are deliberately rejected
2350
+ * http://, protocol-relative, and data:image/svg+xml URLs are deliberately rejected
2350
2351
  * (mixed-content + XSS, see spec 2026-05-04-plugin-icon-component-design.md). */
2351
2352
  const props = __props;
2352
2353
  const detected = computed(() => detectPluginIcon(props.icon));
@@ -2400,7 +2401,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2400
2401
  viewBox: structuredIcon.value.viewBox,
2401
2402
  "aria-hidden": "true"
2402
2403
  }, [
2403
- structuredIcon.value.gradient ? (openBlock(), createElementBlock("defs", _hoisted_2$56, [createElementVNode("linearGradient", {
2404
+ structuredIcon.value.gradient ? (openBlock(), createElementBlock("defs", _hoisted_2$57, [createElementVNode("linearGradient", {
2404
2405
  id: gradientId.value,
2405
2406
  x1: gradientCoords.value.x1,
2406
2407
  y1: gradientCoords.value.y1,
@@ -2412,8 +2413,8 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2412
2413
  offset: stop.offset,
2413
2414
  "stop-color": stop.color,
2414
2415
  "stop-opacity": stop.opacity
2415
- }, null, 8, _hoisted_4$50);
2416
- }), 128))], 8, _hoisted_3$51)])) : createCommentVNode("", true),
2416
+ }, null, 8, _hoisted_4$51);
2417
+ }), 128))], 8, _hoisted_3$52)])) : createCommentVNode("", true),
2417
2418
  structuredIcon.value.background ? (openBlock(), createElementBlock("rect", {
2418
2419
  key: 1,
2419
2420
  x: structuredViewBox.value.x,
@@ -2422,7 +2423,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2422
2423
  height: structuredViewBox.value.height,
2423
2424
  rx: structuredIcon.value.background.radius,
2424
2425
  fill: backgroundFill.value
2425
- }, null, 8, _hoisted_5$48)) : createCommentVNode("", true),
2426
+ }, null, 8, _hoisted_5$49)) : createCommentVNode("", true),
2426
2427
  (openBlock(true), createElementBlock(Fragment, null, renderList(structuredIcon.value.paths, (path, index) => {
2427
2428
  return openBlock(), createElementBlock("path", {
2428
2429
  key: index,
@@ -2435,7 +2436,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2435
2436
  "stroke-linejoin": "round"
2436
2437
  }, null, 8, _hoisted_6$45);
2437
2438
  }), 128))
2438
- ], 8, _hoisted_1$63)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$39, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$35)])) : (openBlock(), createElementBlock("img", {
2439
+ ], 8, _hoisted_1$64)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$39, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$35)])) : (openBlock(), createElementBlock("img", {
2439
2440
  key: 2,
2440
2441
  class: "mint-plugin-icon__img",
2441
2442
  src: iconValue.value,
@@ -2448,17 +2449,17 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2448
2449
  });
2449
2450
  //#endregion
2450
2451
  //#region src/components/internal/AppTopBarPageSelectorInternal.vue?vue&type=script&setup=true&lang.ts
2451
- var _hoisted_1$62 = ["aria-expanded"];
2452
- var _hoisted_2$55 = {
2452
+ var _hoisted_1$63 = ["aria-expanded"];
2453
+ var _hoisted_2$56 = {
2453
2454
  key: 1,
2454
2455
  class: "mint-page-selector__icon-fallback"
2455
2456
  };
2456
- var _hoisted_3$50 = { class: "mint-page-selector__label" };
2457
- var _hoisted_4$49 = {
2457
+ var _hoisted_3$51 = { class: "mint-page-selector__label" };
2458
+ var _hoisted_4$50 = {
2458
2459
  class: "mint-page-selector__chevron-wrap",
2459
2460
  "aria-hidden": "true"
2460
2461
  };
2461
- var _hoisted_5$47 = {
2462
+ var _hoisted_5$48 = {
2462
2463
  key: 0,
2463
2464
  class: "mint-page-selector__menu",
2464
2465
  role: "menu"
@@ -2516,10 +2517,10 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2516
2517
  class: "mint-page-selector__trigger-metadata-icon",
2517
2518
  icon: current.value.icon,
2518
2519
  size: "sm",
2519
- variant: "tinted"
2520
- }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_2$55, toDisplayString(current.value.label.charAt(0)), 1))])], 2)) : createCommentVNode("", true),
2521
- createElementVNode("span", _hoisted_3$50, toDisplayString(current.value?.label ?? __props.placeholder), 1),
2522
- createElementVNode("span", _hoisted_4$49, [(openBlock(), createElementBlock("svg", {
2520
+ variant: "solid"
2521
+ }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_2$56, toDisplayString(current.value.label.charAt(0)), 1))])], 2)) : createCommentVNode("", true),
2522
+ createElementVNode("span", _hoisted_3$51, toDisplayString(current.value?.label ?? __props.placeholder), 1),
2523
+ createElementVNode("span", _hoisted_4$50, [(openBlock(), createElementBlock("svg", {
2523
2524
  class: normalizeClass(["mint-page-selector__chevron", { "mint-page-selector__chevron--open": unref(isOpen) }]),
2524
2525
  viewBox: "0 0 24 24",
2525
2526
  fill: "none",
@@ -2528,7 +2529,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2528
2529
  "stroke-linecap": "round",
2529
2530
  "stroke-linejoin": "round"
2530
2531
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
2531
- ], 10, _hoisted_1$62), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$47, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2532
+ ], 10, _hoisted_1$63), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$48, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2532
2533
  return openBlock(), createBlock(ActionItemInternal_default, {
2533
2534
  key: page.id,
2534
2535
  href: page.href,
@@ -2547,7 +2548,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2547
2548
  class: "mint-page-selector__metadata-icon",
2548
2549
  icon: page.icon,
2549
2550
  size: "sm",
2550
- variant: "tinted"
2551
+ variant: "solid"
2551
2552
  }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_6$44, toDisplayString(page.label.charAt(0)), 1))])], 2), createElementVNode("span", _hoisted_7$38, toDisplayString(page.label), 1)]),
2552
2553
  _: 2
2553
2554
  }, 1032, [
@@ -2563,16 +2564,16 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2563
2564
  });
2564
2565
  //#endregion
2565
2566
  //#region src/components/internal/AppTopBarPillNavInternal.vue?vue&type=script&setup=true&lang.ts
2566
- var _hoisted_1$61 = {
2567
+ var _hoisted_1$62 = {
2567
2568
  class: "mint-pill-nav",
2568
2569
  "aria-label": "Primary"
2569
2570
  };
2570
- var _hoisted_2$54 = [
2571
+ var _hoisted_2$55 = [
2571
2572
  "disabled",
2572
2573
  "aria-expanded",
2573
2574
  "onClick"
2574
2575
  ];
2575
- var _hoisted_3$49 = {
2576
+ var _hoisted_3$50 = {
2576
2577
  key: 0,
2577
2578
  class: "mint-pill-nav__icon",
2578
2579
  viewBox: "0 0 24 24",
@@ -2583,8 +2584,8 @@ var _hoisted_3$49 = {
2583
2584
  "stroke-linejoin": "round",
2584
2585
  "aria-hidden": "true"
2585
2586
  };
2586
- var _hoisted_4$48 = ["d"];
2587
- var _hoisted_5$46 = ["d"];
2587
+ var _hoisted_4$49 = ["d"];
2588
+ var _hoisted_5$47 = ["d"];
2588
2589
  var _hoisted_6$43 = {
2589
2590
  key: 0,
2590
2591
  class: "mint-pill-nav__icon",
@@ -2663,7 +2664,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2663
2664
  }
2664
2665
  useEventListener(() => document, "click", handleClickOutside);
2665
2666
  return (_ctx, _cache) => {
2666
- return openBlock(), createElementBlock("nav", _hoisted_1$61, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
2667
+ return openBlock(), createElementBlock("nav", _hoisted_1$62, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
2667
2668
  return openBlock(), createElementBlock("div", {
2668
2669
  key: item.id,
2669
2670
  ref_for: true,
@@ -2682,15 +2683,15 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2682
2683
  "aria-haspopup": "menu",
2683
2684
  onClick: withModifiers(($event) => handleClick(item), ["stop"])
2684
2685
  }, [
2685
- isSvgIcon(item.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$49, [Array.isArray(item.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(item.icon, (d, index) => {
2686
+ isSvgIcon(item.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$50, [Array.isArray(item.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(item.icon, (d, index) => {
2686
2687
  return openBlock(), createElementBlock("path", {
2687
2688
  key: index,
2688
2689
  d
2689
- }, null, 8, _hoisted_4$48);
2690
+ }, null, 8, _hoisted_4$49);
2690
2691
  }), 128)) : (openBlock(), createElementBlock("path", {
2691
2692
  key: 1,
2692
2693
  d: item.icon
2693
- }, null, 8, _hoisted_5$46))])) : createCommentVNode("", true),
2694
+ }, null, 8, _hoisted_5$47))])) : createCommentVNode("", true),
2694
2695
  createTextVNode(" " + toDisplayString(item.label) + " ", 1),
2695
2696
  (openBlock(), createElementBlock("svg", {
2696
2697
  class: normalizeClass(["mint-pill-nav__chevron", { "mint-pill-nav__chevron--open": openItemId.value === item.id }]),
@@ -2702,7 +2703,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2702
2703
  "stroke-linejoin": "round",
2703
2704
  "aria-hidden": "true"
2704
2705
  }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
2705
- ], 10, _hoisted_2$54)) : (openBlock(), createBlock(ActionItemInternal_default, {
2706
+ ], 10, _hoisted_2$55)) : (openBlock(), createBlock(ActionItemInternal_default, {
2706
2707
  key: 1,
2707
2708
  href: item.href,
2708
2709
  to: item.to,
@@ -2760,18 +2761,18 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2760
2761
  });
2761
2762
  //#endregion
2762
2763
  //#region src/components/AppAvatarMenu.vue?vue&type=script&setup=true&lang.ts
2763
- var _hoisted_1$60 = ["aria-expanded", "title"];
2764
- var _hoisted_2$53 = { class: "mint-avatar-menu__avatar" };
2765
- var _hoisted_3$48 = {
2764
+ var _hoisted_1$61 = ["aria-expanded", "title"];
2765
+ var _hoisted_2$54 = { class: "mint-avatar-menu__avatar" };
2766
+ var _hoisted_3$49 = {
2766
2767
  key: 0,
2767
2768
  class: "mint-avatar-menu__name"
2768
2769
  };
2769
- var _hoisted_4$47 = {
2770
+ var _hoisted_4$48 = {
2770
2771
  key: 0,
2771
2772
  class: "mint-avatar-menu__panel",
2772
2773
  role: "menu"
2773
2774
  };
2774
- var _hoisted_5$45 = {
2775
+ var _hoisted_5$46 = {
2775
2776
  key: 0,
2776
2777
  class: "mint-avatar-menu__header"
2777
2778
  };
@@ -2863,8 +2864,8 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2863
2864
  "aria-haspopup": "menu",
2864
2865
  title: __props.userName ? `${__props.userName} · Account menu` : "Account menu",
2865
2866
  onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"]))
2866
- }, [createElementVNode("span", _hoisted_2$53, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$48, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 10, _hoisted_1$60), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_4$47, [
2867
- __props.userName || __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_5$45, [__props.userName ? (openBlock(), createElementBlock("div", _hoisted_6$42, toDisplayString(__props.userName), 1)) : createCommentVNode("", true), __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_7$36, toDisplayString(__props.userEmail), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
2867
+ }, [createElementVNode("span", _hoisted_2$54, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$49, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 10, _hoisted_1$61), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_4$48, [
2868
+ __props.userName || __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_5$46, [__props.userName ? (openBlock(), createElementBlock("div", _hoisted_6$42, toDisplayString(__props.userName), 1)) : createCommentVNode("", true), __props.userEmail ? (openBlock(), createElementBlock("div", _hoisted_7$36, toDisplayString(__props.userEmail), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
2868
2869
  renderSlot(_ctx.$slots, "items", { close: closeSilently }, () => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
2869
2870
  return openBlock(), createElementBlock(Fragment, { key: item.id }, [item.divider ? (openBlock(), createElementBlock("div", _hoisted_8$33)) : (openBlock(), createBlock(ActionItemInternal_default, {
2870
2871
  key: 1,
@@ -2902,17 +2903,17 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2902
2903
  });
2903
2904
  //#endregion
2904
2905
  //#region src/components/AppPluginSwitcher.vue?vue&type=script&setup=true&lang.ts
2905
- var _hoisted_1$59 = ["aria-expanded"];
2906
- var _hoisted_2$52 = { class: "mint-plugin-switcher__label" };
2907
- var _hoisted_3$47 = {
2906
+ var _hoisted_1$60 = ["aria-expanded"];
2907
+ var _hoisted_2$53 = { class: "mint-plugin-switcher__label" };
2908
+ var _hoisted_3$48 = {
2908
2909
  key: 0,
2909
2910
  class: "mint-plugin-switcher__version"
2910
2911
  };
2911
- var _hoisted_4$46 = {
2912
+ var _hoisted_4$47 = {
2912
2913
  class: "mint-plugin-switcher__chevron-wrap",
2913
2914
  "aria-hidden": "true"
2914
2915
  };
2915
- var _hoisted_5$44 = {
2916
+ var _hoisted_5$45 = {
2916
2917
  key: 0,
2917
2918
  class: "mint-plugin-switcher__menu",
2918
2919
  role: "menu"
@@ -2982,9 +2983,9 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
2982
2983
  "aria-haspopup": "menu",
2983
2984
  onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"]))
2984
2985
  }, [
2985
- createElementVNode("span", _hoisted_2$52, toDisplayString(__props.current.label), 1),
2986
- __props.current.version ? (openBlock(), createElementBlock("span", _hoisted_3$47, "v" + toDisplayString(__props.current.version), 1)) : createCommentVNode("", true),
2987
- createElementVNode("span", _hoisted_4$46, [(openBlock(), createElementBlock("svg", {
2986
+ createElementVNode("span", _hoisted_2$53, toDisplayString(__props.current.label), 1),
2987
+ __props.current.version ? (openBlock(), createElementBlock("span", _hoisted_3$48, "v" + toDisplayString(__props.current.version), 1)) : createCommentVNode("", true),
2988
+ createElementVNode("span", _hoisted_4$47, [(openBlock(), createElementBlock("svg", {
2988
2989
  class: normalizeClass(["mint-plugin-switcher__chevron", { "mint-plugin-switcher__chevron--open": unref(isOpen) }]),
2989
2990
  viewBox: "0 0 24 24",
2990
2991
  fill: "none",
@@ -2993,7 +2994,7 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
2993
2994
  "stroke-linecap": "round",
2994
2995
  "stroke-linejoin": "round"
2995
2996
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
2996
- ], 10, _hoisted_1$59), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$44, [
2997
+ ], 10, _hoisted_1$60), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$45, [
2997
2998
  _cache[4] || (_cache[4] = createElementVNode("div", { class: "mint-plugin-switcher__menu-title" }, "Switch plugin", -1)),
2998
2999
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.plugins, (plugin) => {
2999
3000
  return openBlock(), createBlock(ActionItemInternal_default, {
@@ -3090,54 +3091,61 @@ function currentItemIdFromLocation(pages, pathname, routePrefix) {
3090
3091
  }
3091
3092
  //#endregion
3092
3093
  //#region src/components/AppTopBar.vue?vue&type=script&setup=true&lang.ts
3093
- var _hoisted_1$58 = { class: "mint-topbar__container" };
3094
- var _hoisted_2$51 = { class: "mint-topbar__brand" };
3095
- var _hoisted_3$46 = ["href"];
3096
- var _hoisted_4$45 = {
3094
+ var _hoisted_1$59 = { class: "mint-topbar__container" };
3095
+ var _hoisted_2$52 = { class: "mint-topbar__brand" };
3096
+ var _hoisted_3$47 = ["href"];
3097
+ var _hoisted_4$46 = {
3097
3098
  key: 0,
3098
- class: "mint-topbar__logo"
3099
+ class: "mint-topbar__identity"
3099
3100
  };
3100
- var _hoisted_5$43 = {
3101
+ var _hoisted_5$44 = {
3101
3102
  key: 0,
3102
3103
  class: "mint-topbar__logo"
3103
3104
  };
3104
3105
  var _hoisted_6$40 = {
3105
3106
  key: 0,
3106
- class: "mint-topbar__logo"
3107
+ class: "mint-topbar__identity"
3107
3108
  };
3108
3109
  var _hoisted_7$34 = {
3110
+ key: 0,
3111
+ class: "mint-topbar__logo"
3112
+ };
3113
+ var _hoisted_8$31 = {
3114
+ key: 0,
3115
+ class: "mint-topbar__identity"
3116
+ };
3117
+ var _hoisted_9$29 = {
3118
+ key: 0,
3119
+ class: "mint-topbar__logo"
3120
+ };
3121
+ var _hoisted_10$27 = {
3109
3122
  key: 2,
3110
3123
  class: "mint-topbar-title-group"
3111
3124
  };
3112
- var _hoisted_8$31 = { class: "mint-topbar-title" };
3113
- var _hoisted_9$29 = { class: "mint-topbar-subtitle" };
3114
- var _hoisted_10$27 = {
3125
+ var _hoisted_11$25 = { class: "mint-topbar-title" };
3126
+ var _hoisted_12$23 = { class: "mint-topbar-subtitle" };
3127
+ var _hoisted_13$23 = {
3115
3128
  key: 3,
3116
3129
  class: "mint-topbar__title-only"
3117
3130
  };
3118
- var _hoisted_11$25 = {
3131
+ var _hoisted_14$20 = {
3119
3132
  key: 4,
3120
3133
  class: "mint-topbar__center"
3121
3134
  };
3122
- var _hoisted_12$23 = { class: "mint-topbar__right" };
3123
- var _hoisted_13$23 = {
3135
+ var _hoisted_15$19 = { class: "mint-topbar__right" };
3136
+ var _hoisted_16$17 = {
3124
3137
  key: 0,
3125
3138
  class: "mint-topbar__standalone-badge"
3126
3139
  };
3127
- var _hoisted_14$20 = {
3140
+ var _hoisted_17$17 = {
3128
3141
  key: 2,
3129
3142
  class: "mint-topbar__standalone-badge"
3130
3143
  };
3131
- var _hoisted_15$19 = {
3144
+ var _hoisted_18$16 = {
3132
3145
  key: 0,
3133
3146
  class: "mint-topbar__icon-btn-dot",
3134
3147
  "aria-hidden": "true"
3135
3148
  };
3136
- var _hoisted_16$17 = { class: "mint-topbar__profile-avatar" };
3137
- var _hoisted_17$17 = {
3138
- key: 0,
3139
- class: "mint-topbar__profile-name"
3140
- };
3141
3149
  //#endregion
3142
3150
  //#region src/components/AppTopBar.vue
3143
3151
  var AppTopBar_default = /* @__PURE__ */ defineComponent({
@@ -3184,16 +3192,11 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3184
3192
  default: false
3185
3193
  },
3186
3194
  adminPath: { default: "/admin" },
3187
- showProfile: {
3188
- type: Boolean,
3189
- default: false
3190
- },
3191
3195
  userName: {},
3192
3196
  userInitial: {},
3193
3197
  userEmail: {}
3194
3198
  },
3195
3199
  emits: [
3196
- "profile-click",
3197
3200
  "admin-click",
3198
3201
  "page-selector-select",
3199
3202
  "pill-select",
@@ -3216,6 +3219,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3216
3219
  const { isIntegrated, plugin } = usePlatformContext();
3217
3220
  const isStandalone = computed(() => !isIntegrated.value);
3218
3221
  const appExperiment = inject(APP_EXPERIMENT_KEY, null);
3222
+ const canBindExperiment = computed(() => plugin.value?.plugin_type !== "static");
3219
3223
  const pluginIcon = computed(() => {
3220
3224
  const currentPlugin = plugin.value;
3221
3225
  return currentPlugin?.icon ? {
@@ -3223,11 +3227,6 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3223
3227
  color: currentPlugin.color
3224
3228
  } : null;
3225
3229
  });
3226
- const profileInitial = computed(() => {
3227
- if (props.userInitial) return props.userInitial;
3228
- if (props.userName) return props.userName.charAt(0).toUpperCase();
3229
- return "U";
3230
- });
3231
3230
  const hasPlatformPageSelector = computed(() => props.pageSelector === void 0 && (plugin.value?.nav_items?.length ?? 0) > 1);
3232
3231
  const hasPageSelector = computed(() => (props.pageSelector?.length ?? 0) > 1 || hasPlatformPageSelector.value);
3233
3232
  const hasPluginSwitcher = computed(() => !!props.pluginSwitcher);
@@ -3243,40 +3242,61 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3243
3242
  return (_ctx, _cache) => {
3244
3243
  const _component_router_link = resolveComponent("router-link");
3245
3244
  return openBlock(), createElementBlock(Fragment, null, [
3246
- createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$58, [
3247
- createElementVNode("div", _hoisted_2$51, [__props.homePath && (__props.homePath.startsWith("http") || __props.homePath.startsWith("/")) ? (openBlock(), createElementBlock("a", {
3245
+ createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$59, [
3246
+ createElementVNode("div", _hoisted_2$52, [__props.homePath && (__props.homePath.startsWith("http") || __props.homePath.startsWith("/")) ? (openBlock(), createElementBlock("a", {
3248
3247
  key: 0,
3249
3248
  href: __props.homePath,
3250
3249
  class: "mint-topbar-home-link"
3251
- }, [renderSlot(_ctx.$slots, "icon", {}, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3250
+ }, [unref(isIntegrated) || _ctx.$slots.icon || _ctx.$slots.logo || pluginIcon.value || __props.showLogo ? (openBlock(), createElementBlock("span", _hoisted_4$46, [unref(isIntegrated) ? (openBlock(), createBlock(PluginIcon_default, {
3251
+ key: 0,
3252
+ class: "mint-topbar__plugin-icon",
3253
+ icon: unref(plugin)?.icon,
3254
+ tone: unref(plugin)?.color,
3255
+ size: "topbar",
3256
+ variant: "solid"
3257
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "icon", { key: 1 }, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3252
3258
  key: 0,
3253
3259
  class: "mint-topbar__plugin-icon",
3254
3260
  icon: pluginIcon.value.icon,
3255
3261
  tone: pluginIcon.value.color,
3256
- size: "md",
3262
+ size: "topbar",
3257
3263
  variant: "solid"
3258
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_4$45, [..._cache[17] || (_cache[17] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])], 8, _hoisted_3$46)) : __props.homePath ? (openBlock(), createBlock(_component_router_link, {
3264
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_5$44, [..._cache[16] || (_cache[16] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])])) : createCommentVNode("", true)], 8, _hoisted_3$47)) : __props.homePath ? (openBlock(), createBlock(_component_router_link, {
3259
3265
  key: 1,
3260
3266
  to: __props.homePath,
3261
3267
  class: "mint-topbar-home-link"
3262
3268
  }, {
3263
- default: withCtx(() => [renderSlot(_ctx.$slots, "icon", {}, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3269
+ default: withCtx(() => [unref(isIntegrated) || _ctx.$slots.icon || _ctx.$slots.logo || pluginIcon.value || __props.showLogo ? (openBlock(), createElementBlock("span", _hoisted_6$40, [unref(isIntegrated) ? (openBlock(), createBlock(PluginIcon_default, {
3270
+ key: 0,
3271
+ class: "mint-topbar__plugin-icon",
3272
+ icon: unref(plugin)?.icon,
3273
+ tone: unref(plugin)?.color,
3274
+ size: "topbar",
3275
+ variant: "solid"
3276
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "icon", { key: 1 }, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3264
3277
  key: 0,
3265
3278
  class: "mint-topbar__plugin-icon",
3266
3279
  icon: pluginIcon.value.icon,
3267
3280
  tone: pluginIcon.value.color,
3268
- size: "md",
3281
+ size: "topbar",
3269
3282
  variant: "solid"
3270
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_5$43, [..._cache[18] || (_cache[18] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
3283
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_7$34, [..._cache[17] || (_cache[17] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])])) : createCommentVNode("", true)]),
3271
3284
  _: 3
3272
- }, 8, ["to"])) : renderSlot(_ctx.$slots, "icon", { key: 2 }, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3285
+ }, 8, ["to"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(isIntegrated) || _ctx.$slots.icon || _ctx.$slots.logo || pluginIcon.value || __props.showLogo ? (openBlock(), createElementBlock("span", _hoisted_8$31, [unref(isIntegrated) ? (openBlock(), createBlock(PluginIcon_default, {
3286
+ key: 0,
3287
+ class: "mint-topbar__plugin-icon",
3288
+ icon: unref(plugin)?.icon,
3289
+ tone: unref(plugin)?.color,
3290
+ size: "topbar",
3291
+ variant: "solid"
3292
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "icon", { key: 1 }, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
3273
3293
  key: 0,
3274
3294
  class: "mint-topbar__plugin-icon",
3275
3295
  icon: pluginIcon.value.icon,
3276
3296
  tone: pluginIcon.value.color,
3277
- size: "md",
3297
+ size: "topbar",
3278
3298
  variant: "solid"
3279
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_6$40, [..._cache[19] || (_cache[19] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
3299
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_9$29, [..._cache[18] || (_cache[18] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])])) : createCommentVNode("", true)], 64))]),
3280
3300
  hasPluginSwitcher.value && __props.pluginSwitcher ? (openBlock(), createBlock(AppPluginSwitcher_default, {
3281
3301
  key: 0,
3282
3302
  current: __props.pluginSwitcher.current,
@@ -3304,23 +3324,23 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3304
3324
  fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "page-selector-item-icon", normalizeProps(guardReactiveProps(slotProps)))]),
3305
3325
  key: "1"
3306
3326
  } : void 0]), 1032, ["pages", "current-page-id"])) : createCommentVNode("", true),
3307
- hasTitleGroup.value ? (openBlock(), createElementBlock("div", _hoisted_7$34, [createElementVNode("span", _hoisted_8$31, toDisplayString(__props.title), 1), createElementVNode("span", _hoisted_9$29, toDisplayString(__props.subtitle), 1)])) : hasTitleOnly.value ? (openBlock(), createElementBlock("span", _hoisted_10$27, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
3327
+ hasTitleGroup.value ? (openBlock(), createElementBlock("div", _hoisted_10$27, [createElementVNode("span", _hoisted_11$25, toDisplayString(__props.title), 1), createElementVNode("span", _hoisted_12$23, toDisplayString(__props.subtitle), 1)])) : hasTitleOnly.value ? (openBlock(), createElementBlock("span", _hoisted_13$23, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
3308
3328
  renderSlot(_ctx.$slots, "nav"),
3309
- hasPillNav.value || _ctx.$slots.center ? (openBlock(), createElementBlock("div", _hoisted_11$25, [renderSlot(_ctx.$slots, "center", {}, () => [hasPillNav.value && __props.pillNav ? (openBlock(), createBlock(AppTopBarPillNavInternal_default, {
3329
+ hasPillNav.value || _ctx.$slots.center ? (openBlock(), createElementBlock("div", _hoisted_14$20, [renderSlot(_ctx.$slots, "center", {}, () => [hasPillNav.value && __props.pillNav ? (openBlock(), createBlock(AppTopBarPillNavInternal_default, {
3310
3330
  key: 0,
3311
3331
  items: normalizedPillNav.value,
3312
3332
  "current-item-id": __props.currentPillId,
3313
3333
  onSelect: _cache[3] || (_cache[3] = ($event) => emit("pill-select", $event)),
3314
3334
  onOptionSelect: _cache[4] || (_cache[4] = (option, item) => emit("pill-option-select", option, item))
3315
3335
  }, null, 8, ["items", "current-item-id"])) : createCommentVNode("", true)])])) : createCommentVNode("", true),
3316
- createElementVNode("div", _hoisted_12$23, [
3317
- __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_13$23, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3318
- unref(appExperiment) && !isStandalone.value ? (openBlock(), createBlock(unref(ExperimentPopover), mergeProps({ key: 1 }, unref(appExperiment).popover.value, {
3336
+ createElementVNode("div", _hoisted_15$19, [
3337
+ __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_16$17, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3338
+ unref(appExperiment) && !isStandalone.value && canBindExperiment.value ? (openBlock(), createBlock(unref(ExperimentPopover), mergeProps({ key: 1 }, unref(appExperiment).popover.value, {
3319
3339
  onSelect: _cache[5] || (_cache[5] = ($event) => unref(appExperiment).openModal()),
3320
3340
  onSave: _cache[6] || (_cache[6] = ($event) => unref(appExperiment).handleSave()),
3321
3341
  onDetach: _cache[7] || (_cache[7] = ($event) => unref(appExperiment).handleDetach())
3322
3342
  }), null, 16)) : createCommentVNode("", true),
3323
- unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_14$20, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3343
+ unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_17$17, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3324
3344
  renderSlot(_ctx.$slots, "actions"),
3325
3345
  __props.showNotifications ? (openBlock(), createElementBlock("button", {
3326
3346
  key: 3,
@@ -3328,7 +3348,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3328
3348
  class: "mint-topbar__icon-btn",
3329
3349
  "aria-label": "Notifications",
3330
3350
  onClick: _cache[8] || (_cache[8] = ($event) => emit("notifications-click"))
3331
- }, [_cache[20] || (_cache[20] = createElementVNode("svg", {
3351
+ }, [_cache[19] || (_cache[19] = createElementVNode("svg", {
3332
3352
  class: "mint-topbar__icon-btn-icon",
3333
3353
  viewBox: "0 0 24 24",
3334
3354
  fill: "none",
@@ -3336,7 +3356,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3336
3356
  "stroke-width": "2",
3337
3357
  "stroke-linecap": "round",
3338
3358
  "stroke-linejoin": "round"
3339
- }, [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_15$19)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3359
+ }, [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$16)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3340
3360
  __props.showThemeToggle ? (openBlock(), createBlock(ThemeToggle_default, {
3341
3361
  key: 4,
3342
3362
  size: "sm"
@@ -3347,7 +3367,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3347
3367
  class: "mint-topbar__settings-btn",
3348
3368
  "aria-label": "Open settings",
3349
3369
  onClick: _cache[9] || (_cache[9] = ($event) => settingsOpen.value = true)
3350
- }, [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
3370
+ }, [..._cache[20] || (_cache[20] = [createElementVNode("svg", {
3351
3371
  class: "mint-topbar__settings-icon",
3352
3372
  viewBox: "0 0 24 24",
3353
3373
  fill: "none",
@@ -3367,7 +3387,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3367
3387
  "aria-label": "Admin Dashboard",
3368
3388
  onClick: _cache[10] || (_cache[10] = ($event) => emit("admin-click"))
3369
3389
  }, {
3370
- default: withCtx(() => [..._cache[22] || (_cache[22] = [createElementVNode("svg", {
3390
+ default: withCtx(() => [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
3371
3391
  class: "mint-topbar__admin-icon",
3372
3392
  viewBox: "0 0 24 24",
3373
3393
  fill: "none",
@@ -3399,19 +3419,13 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3399
3419
  "user-initial",
3400
3420
  "user-email",
3401
3421
  "items"
3402
- ])) : __props.showProfile ? (openBlock(), createElementBlock("button", {
3403
- key: 8,
3404
- type: "button",
3405
- class: "mint-topbar__profile-btn",
3406
- "aria-label": "Edit profile",
3407
- onClick: _cache[13] || (_cache[13] = ($event) => emit("profile-click"))
3408
- }, [createElementVNode("div", _hoisted_16$17, toDisplayString(profileInitial.value), 1), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_17$17, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true)
3422
+ ])) : createCommentVNode("", true)
3409
3423
  ])
3410
3424
  ])], 2),
3411
3425
  __props.showSettings && settingsOpen.value ? (openBlock(), createBlock(unref(SettingsModal), {
3412
3426
  key: 0,
3413
3427
  modelValue: settingsOpen.value,
3414
- "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => settingsOpen.value = $event),
3428
+ "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => settingsOpen.value = $event),
3415
3429
  title: __props.settingsConfig?.title,
3416
3430
  tabs: normalizedSettingsTabs.value,
3417
3431
  "show-appearance": __props.settingsConfig?.showAppearance ?? true,
@@ -3424,7 +3438,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3424
3438
  values: __props.settingsConfig?.values,
3425
3439
  enhancements: __props.settingsConfig?.enhancements,
3426
3440
  "user-type": __props.settingsConfig?.userType,
3427
- "onUpdate:values": _cache[15] || (_cache[15] = ($event) => emit("settings-values-change", $event))
3441
+ "onUpdate:values": _cache[14] || (_cache[14] = ($event) => emit("settings-values-change", $event))
3428
3442
  }, createSlots({
3429
3443
  appearance: withCtx(() => [renderSlot(_ctx.$slots, "settings-appearance")]),
3430
3444
  _: 2
@@ -3448,21 +3462,21 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3448
3462
  "enhancements",
3449
3463
  "user-type"
3450
3464
  ])) : createCommentVNode("", true),
3451
- unref(appExperiment) && !isStandalone.value && unref(appExperiment).selectorModal.value.modelValue ? (openBlock(), createBlock(unref(ExperimentSelectorModal), mergeProps({ key: 1 }, unref(appExperiment).selectorModal.value, { "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $event ? unref(appExperiment).openModal() : unref(appExperiment).closeModal()) }), null, 16)) : createCommentVNode("", true)
3465
+ unref(appExperiment) && !isStandalone.value && canBindExperiment.value && unref(appExperiment).selectorModal.value.modelValue ? (openBlock(), createBlock(unref(ExperimentSelectorModal), mergeProps({ key: 1 }, unref(appExperiment).selectorModal.value, { "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => $event ? unref(appExperiment).openModal() : unref(appExperiment).closeModal()) }), null, 16)) : createCommentVNode("", true)
3452
3466
  ], 64);
3453
3467
  };
3454
3468
  }
3455
3469
  });
3456
3470
  //#endregion
3457
3471
  //#region src/components/StepWizard.vue?vue&type=script&setup=true&lang.ts
3458
- var _hoisted_1$57 = {
3472
+ var _hoisted_1$58 = {
3459
3473
  key: 0,
3460
3474
  class: "mint-wizard__progress"
3461
3475
  };
3462
- var _hoisted_2$50 = { class: "mint-wizard__steps-indicator" };
3463
- var _hoisted_3$45 = ["onClick"];
3464
- var _hoisted_4$44 = { class: "mint-wizard__step-dot" };
3465
- var _hoisted_5$42 = {
3476
+ var _hoisted_2$51 = { class: "mint-wizard__steps-indicator" };
3477
+ var _hoisted_3$46 = ["onClick"];
3478
+ var _hoisted_4$45 = { class: "mint-wizard__step-dot" };
3479
+ var _hoisted_5$43 = {
3466
3480
  key: 0,
3467
3481
  width: "12",
3468
3482
  height: "12",
@@ -3571,18 +3585,18 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3571
3585
  tabindex: "0",
3572
3586
  onKeydown: handleKeydown
3573
3587
  }, [
3574
- props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$57, [renderSlot(_ctx.$slots, "progress", {
3588
+ props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$58, [renderSlot(_ctx.$slots, "progress", {
3575
3589
  steps: props.steps,
3576
3590
  current: props.modelValue,
3577
3591
  states: stepStates.value
3578
- }, () => [createElementVNode("div", _hoisted_2$50, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3592
+ }, () => [createElementVNode("div", _hoisted_2$51, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3579
3593
  return openBlock(), createElementBlock(Fragment, { key: step.id }, [index > 0 ? (openBlock(), createElementBlock("div", {
3580
3594
  key: 0,
3581
3595
  class: normalizeClass(["mint-wizard__step-connector", stepStates.value[index - 1] === "completed" ? "mint-wizard__step-connector--completed" : ""])
3582
3596
  }, null, 2)) : createCommentVNode("", true), createElementVNode("div", {
3583
3597
  class: normalizeClass(["mint-wizard__step-indicator", `mint-wizard__step-indicator--${stepStates.value[index]}`]),
3584
3598
  onClick: ($event) => goToStep(index)
3585
- }, [createElementVNode("div", _hoisted_4$44, [stepStates.value[index] === "completed" ? (openBlock(), createElementBlock("svg", _hoisted_5$42, [..._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$39, toDisplayString(step.label), 1)], 10, _hoisted_3$45)], 64);
3599
+ }, [createElementVNode("div", _hoisted_4$45, [stepStates.value[index] === "completed" ? (openBlock(), createElementBlock("svg", _hoisted_5$43, [..._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$39, toDisplayString(step.label), 1)], 10, _hoisted_3$46)], 64);
3586
3600
  }), 128))])])])) : createCommentVNode("", true),
3587
3601
  createElementVNode("div", _hoisted_7$33, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3588
3602
  return withDirectives((openBlock(), createElementBlock("div", {
@@ -3634,23 +3648,23 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3634
3648
  });
3635
3649
  //#endregion
3636
3650
  //#region src/components/internal/FormSectionRenderer.vue?vue&type=script&setup=true&lang.ts
3637
- var _hoisted_1$56 = {
3651
+ var _hoisted_1$57 = {
3638
3652
  key: 0,
3639
3653
  class: "mint-form-section"
3640
3654
  };
3641
- var _hoisted_2$49 = {
3655
+ var _hoisted_2$50 = {
3642
3656
  key: 1,
3643
3657
  class: "mint-form-section--static"
3644
3658
  };
3645
- var _hoisted_3$44 = {
3659
+ var _hoisted_3$45 = {
3646
3660
  key: 0,
3647
3661
  class: "mint-form-section__header"
3648
3662
  };
3649
- var _hoisted_4$43 = {
3663
+ var _hoisted_4$44 = {
3650
3664
  key: 0,
3651
3665
  class: "mint-form-section__title"
3652
3666
  };
3653
- var _hoisted_5$41 = {
3667
+ var _hoisted_5$42 = {
3654
3668
  key: 1,
3655
3669
  class: "mint-form-section__description"
3656
3670
  };
@@ -3667,7 +3681,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3667
3681
  const visibleFields = computed(() => props.section.fields.filter((f) => props.builder.isFieldVisible(f.name)));
3668
3682
  const gridStyle = computed(() => ({ gridTemplateColumns: `repeat(${props.section.columns ?? 1}, 1fr)` }));
3669
3683
  return (_ctx, _cache) => {
3670
- return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$56, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
3684
+ return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$57, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
3671
3685
  section: __props.section,
3672
3686
  form: __props.builder.form
3673
3687
  }, () => [__props.section.collapsible ? (openBlock(), createBlock(CollapsibleCard_default, {
@@ -3702,7 +3716,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3702
3716
  "title",
3703
3717
  "subtitle",
3704
3718
  "default-open"
3705
- ])) : (openBlock(), createElementBlock("div", _hoisted_2$49, [__props.section.title || __props.section.description ? (openBlock(), createElementBlock("div", _hoisted_3$44, [__props.section.title ? (openBlock(), createElementBlock("h3", _hoisted_4$43, toDisplayString(__props.section.title), 1)) : createCommentVNode("", true), __props.section.description ? (openBlock(), createElementBlock("p", _hoisted_5$41, toDisplayString(__props.section.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
3719
+ ])) : (openBlock(), createElementBlock("div", _hoisted_2$50, [__props.section.title || __props.section.description ? (openBlock(), createElementBlock("div", _hoisted_3$45, [__props.section.title ? (openBlock(), createElementBlock("h3", _hoisted_4$44, toDisplayString(__props.section.title), 1)) : createCommentVNode("", true), __props.section.description ? (openBlock(), createElementBlock("p", _hoisted_5$42, toDisplayString(__props.section.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
3706
3720
  class: "mint-form-section__grid",
3707
3721
  style: normalizeStyle(gridStyle.value)
3708
3722
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleFields.value, (field) => {
@@ -3728,7 +3742,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3728
3742
  });
3729
3743
  //#endregion
3730
3744
  //#region src/components/FormActions.vue?vue&type=script&setup=true&lang.ts
3731
- var _hoisted_1$55 = { class: "mint-form-actions" };
3745
+ var _hoisted_1$56 = { class: "mint-form-actions" };
3732
3746
  //#endregion
3733
3747
  //#region src/components/FormActions.vue
3734
3748
  var FormActions_default = /* @__PURE__ */ defineComponent({
@@ -3785,7 +3799,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3785
3799
  */
3786
3800
  const emit = __emit;
3787
3801
  return (_ctx, _cache) => {
3788
- return openBlock(), createElementBlock("div", _hoisted_1$55, [
3802
+ return openBlock(), createElementBlock("div", _hoisted_1$56, [
3789
3803
  __props.showCancel ? (openBlock(), createBlock(BaseButton_default, {
3790
3804
  key: 0,
3791
3805
  variant: "ghost",
@@ -3830,7 +3844,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3830
3844
  });
3831
3845
  //#endregion
3832
3846
  //#region src/components/FormBuilder.vue?vue&type=script&setup=true&lang.ts
3833
- var _hoisted_1$54 = { class: "mint-form-builder__step" };
3847
+ var _hoisted_1$55 = { class: "mint-form-builder__step" };
3834
3848
  //#endregion
3835
3849
  //#region src/components/FormBuilder.vue
3836
3850
  var FormBuilder_default = /* @__PURE__ */ defineComponent({
@@ -3979,7 +3993,7 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
3979
3993
  }, createSlots({ _: 2 }, [renderList(resolvedSchema.value.steps, (step) => {
3980
3994
  return {
3981
3995
  name: `step-${step.id}`,
3982
- fn: withCtx(() => [createElementVNode("div", _hoisted_1$54, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
3996
+ fn: withCtx(() => [createElementVNode("div", _hoisted_1$55, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
3983
3997
  return openBlock(), createElementBlock(Fragment, { key: section.id }, [unref(builder).isSectionVisible(section.id) ? (openBlock(), createBlock(FormSectionRenderer_default, {
3984
3998
  key: 0,
3985
3999
  section,
@@ -4066,20 +4080,20 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
4066
4080
  });
4067
4081
  //#endregion
4068
4082
  //#region src/components/AppSidebar.vue?vue&type=script&setup=true&lang.ts
4069
- var _hoisted_1$53 = {
4083
+ var _hoisted_1$54 = {
4070
4084
  key: 0,
4071
4085
  class: "mint-sidebar__header"
4072
4086
  };
4073
- var _hoisted_2$48 = {
4087
+ var _hoisted_2$49 = {
4074
4088
  key: 0,
4075
4089
  class: "mint-sidebar__heading"
4076
4090
  };
4077
- var _hoisted_3$43 = { class: "mint-sidebar__heading-copy" };
4078
- var _hoisted_4$42 = {
4091
+ var _hoisted_3$44 = { class: "mint-sidebar__heading-copy" };
4092
+ var _hoisted_4$43 = {
4079
4093
  key: 0,
4080
4094
  class: "mint-sidebar__title"
4081
4095
  };
4082
- var _hoisted_5$40 = {
4096
+ var _hoisted_5$41 = {
4083
4097
  key: 1,
4084
4098
  class: "mint-sidebar__subtitle"
4085
4099
  };
@@ -4342,10 +4356,10 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4342
4356
  class: normalizeClass(sidebarClasses.value),
4343
4357
  style: normalizeStyle(sidebarStyle.value)
4344
4358
  }, [
4345
- _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || resolvedCollapsible.value ? (openBlock(), createElementBlock("div", _hoisted_1$53, [renderSlot(_ctx.$slots, "header", {
4359
+ _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || resolvedCollapsible.value ? (openBlock(), createElementBlock("div", _hoisted_1$54, [renderSlot(_ctx.$slots, "header", {
4346
4360
  collapsed: collapsedModel.value,
4347
4361
  toggleCollapsed
4348
- }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$48, [createElementVNode("div", _hoisted_3$43, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$42, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$40, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$38, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), resolvedCollapsible.value ? (openBlock(), createElementBlock("button", {
4362
+ }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$49, [createElementVNode("div", _hoisted_3$44, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$43, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$41, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$38, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), resolvedCollapsible.value ? (openBlock(), createElementBlock("button", {
4349
4363
  key: 1,
4350
4364
  type: "button",
4351
4365
  class: "mint-sidebar__collapse-button",
@@ -4464,13 +4478,13 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4464
4478
  });
4465
4479
  //#endregion
4466
4480
  //#region src/components/AppLayout.vue?vue&type=script&setup=true&lang.ts
4467
- var _hoisted_1$52 = {
4481
+ var _hoisted_1$53 = {
4468
4482
  key: 0,
4469
4483
  class: "mint-layout__topbar"
4470
4484
  };
4471
- var _hoisted_2$47 = { class: "mint-layout__body" };
4472
- var _hoisted_3$42 = ["aria-label", "aria-expanded"];
4473
- var _hoisted_4$41 = {
4485
+ var _hoisted_2$48 = { class: "mint-layout__body" };
4486
+ var _hoisted_3$43 = ["aria-label", "aria-expanded"];
4487
+ var _hoisted_4$42 = {
4474
4488
  key: 0,
4475
4489
  class: "mint-layout__sidebar-toggle-icon",
4476
4490
  viewBox: "0 0 24 24",
@@ -4481,7 +4495,7 @@ var _hoisted_4$41 = {
4481
4495
  "stroke-linejoin": "round",
4482
4496
  "aria-hidden": "true"
4483
4497
  };
4484
- var _hoisted_5$39 = {
4498
+ var _hoisted_5$40 = {
4485
4499
  key: 1,
4486
4500
  class: "mint-layout__sidebar-toggle-icon",
4487
4501
  viewBox: "0 0 24 24",
@@ -4570,7 +4584,7 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4570
4584
  sidebarOpenModel.value = false;
4571
4585
  }
4572
4586
  return (_ctx, _cache) => {
4573
- return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$52, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$47, [
4587
+ return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$53, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$48, [
4574
4588
  __props.responsiveSidebar && _ctx.$slots.sidebar ? (openBlock(), createElementBlock("button", {
4575
4589
  key: 0,
4576
4590
  type: "button",
@@ -4578,7 +4592,7 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4578
4592
  "aria-label": sidebarOpenModel.value ? __props.sidebarCloseLabel : __props.sidebarToggleLabel,
4579
4593
  "aria-expanded": sidebarOpenModel.value,
4580
4594
  onClick: toggleSidebar
4581
- }, [!sidebarOpenModel.value ? (openBlock(), createElementBlock("svg", _hoisted_4$41, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M4 6h16M4 12h16M4 18h16" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_5$39, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M6 18 18 6M6 6l12 12" }, null, -1)])]))], 8, _hoisted_3$42)) : createCommentVNode("", true),
4595
+ }, [!sidebarOpenModel.value ? (openBlock(), createElementBlock("svg", _hoisted_4$42, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M4 6h16M4 12h16M4 18h16" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_5$40, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M6 18 18 6M6 6l12 12" }, null, -1)])]))], 8, _hoisted_3$43)) : createCommentVNode("", true),
4582
4596
  __props.responsiveSidebar && _ctx.$slots.sidebar && sidebarOpenModel.value ? (openBlock(), createElementBlock("div", {
4583
4597
  key: 1,
4584
4598
  class: "mint-layout__sidebar-backdrop",
@@ -4596,11 +4610,11 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4596
4610
  });
4597
4611
  //#endregion
4598
4612
  //#region src/components/MobileSupportGate.vue?vue&type=script&setup=true&lang.ts
4599
- var _hoisted_1$51 = { class: "mint-mobile-support-gate__panel" };
4600
- var _hoisted_2$46 = { class: "mint-mobile-support-gate__copy" };
4601
- var _hoisted_3$41 = { class: "mint-mobile-support-gate__eyebrow" };
4602
- var _hoisted_4$40 = { class: "mint-mobile-support-gate__message" };
4603
- var _hoisted_5$38 = { class: "mint-mobile-support-gate__hint" };
4613
+ var _hoisted_1$52 = { class: "mint-mobile-support-gate__panel" };
4614
+ var _hoisted_2$47 = { class: "mint-mobile-support-gate__copy" };
4615
+ var _hoisted_3$42 = { class: "mint-mobile-support-gate__eyebrow" };
4616
+ var _hoisted_4$41 = { class: "mint-mobile-support-gate__message" };
4617
+ var _hoisted_5$39 = { class: "mint-mobile-support-gate__hint" };
4604
4618
  var nextMobileSupportGateTitleId = 0;
4605
4619
  //#endregion
4606
4620
  //#region src/components/MobileSupportGate.vue
@@ -4634,17 +4648,17 @@ var MobileSupportGate_default = /* @__PURE__ */ defineComponent({
4634
4648
  }, [renderSlot(_ctx.$slots, "unsupported", {
4635
4649
  isMobileViewport: unref(isMobileViewport),
4636
4650
  isSupported: unref(isSupported)
4637
- }, () => [createElementVNode("section", _hoisted_1$51, [
4651
+ }, () => [createElementVNode("section", _hoisted_1$52, [
4638
4652
  _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)),
4639
- createElementVNode("div", _hoisted_2$46, [
4640
- createElementVNode("p", _hoisted_3$41, toDisplayString(__props.appName), 1),
4653
+ createElementVNode("div", _hoisted_2$47, [
4654
+ createElementVNode("p", _hoisted_3$42, toDisplayString(__props.appName), 1),
4641
4655
  createElementVNode("h1", {
4642
4656
  id: titleId,
4643
4657
  class: "mint-mobile-support-gate__title"
4644
4658
  }, toDisplayString(__props.title), 1),
4645
- createElementVNode("p", _hoisted_4$40, toDisplayString(__props.message), 1)
4659
+ createElementVNode("p", _hoisted_4$41, toDisplayString(__props.message), 1)
4646
4660
  ]),
4647
- createElementVNode("div", _hoisted_5$38, [_cache[0] || (_cache[0] = createElementVNode("svg", {
4661
+ createElementVNode("div", _hoisted_5$39, [_cache[0] || (_cache[0] = createElementVNode("svg", {
4648
4662
  class: "mint-mobile-support-gate__hint-icon",
4649
4663
  viewBox: "0 0 24 24",
4650
4664
  fill: "none",
@@ -4865,10 +4879,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
4865
4879
  default: false
4866
4880
  },
4867
4881
  adminPath: { default: "/admin" },
4868
- showProfile: {
4869
- type: Boolean,
4870
- default: false
4871
- },
4872
4882
  userName: { default: void 0 },
4873
4883
  userInitial: { default: void 0 },
4874
4884
  userEmail: { default: void 0 },
@@ -4971,7 +4981,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
4971
4981
  "sign-out",
4972
4982
  "notifications-click",
4973
4983
  "settings-values-change",
4974
- "profile-click",
4975
4984
  "admin-click",
4976
4985
  "experiment-select",
4977
4986
  "experiment-detach",
@@ -5101,7 +5110,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
5101
5110
  "has-notification-dot": __props.hasNotificationDot,
5102
5111
  "show-admin": __props.showAdmin,
5103
5112
  "admin-path": __props.adminPath,
5104
- "show-profile": __props.showProfile,
5105
5113
  "user-name": __props.userName,
5106
5114
  "user-initial": __props.userInitial,
5107
5115
  "user-email": __props.userEmail,
@@ -5114,8 +5122,7 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
5114
5122
  onSignOut: _cache[3] || (_cache[3] = ($event) => emit("sign-out")),
5115
5123
  onNotificationsClick: _cache[4] || (_cache[4] = ($event) => emit("notifications-click")),
5116
5124
  onSettingsValuesChange: _cache[5] || (_cache[5] = ($event) => emit("settings-values-change", $event)),
5117
- onProfileClick: _cache[6] || (_cache[6] = ($event) => emit("profile-click")),
5118
- onAdminClick: _cache[7] || (_cache[7] = ($event) => emit("admin-click"))
5125
+ onAdminClick: _cache[6] || (_cache[6] = ($event) => emit("admin-click"))
5119
5126
  }, createSlots({ _: 2 }, [renderList(topBarSlotNames.value, (slotName) => {
5120
5127
  return {
5121
5128
  name: slotName,
@@ -5142,7 +5149,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
5142
5149
  "has-notification-dot",
5143
5150
  "show-admin",
5144
5151
  "admin-path",
5145
- "show-profile",
5146
5152
  "user-name",
5147
5153
  "user-initial",
5148
5154
  "user-email",
@@ -5200,9 +5206,9 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
5200
5206
  "collapse-button-label": __props.sidebarCollapseButtonLabel,
5201
5207
  "expand-button-label": __props.sidebarExpandButtonLabel,
5202
5208
  "onUpdate:modelValue": unref(handleControlValuesUpdate),
5203
- "onUpdate:collapsed": _cache[8] || (_cache[8] = ($event) => emit("update:sidebarCollapsed", $event)),
5209
+ "onUpdate:collapsed": _cache[7] || (_cache[7] = ($event) => emit("update:sidebarCollapsed", $event)),
5204
5210
  "onUpdate:toggle": handleToggle,
5205
- onSectionAction: _cache[9] || (_cache[9] = (sectionId, actionId) => emit("section-action", sectionId, actionId)),
5211
+ onSectionAction: _cache[8] || (_cache[8] = (sectionId, actionId) => emit("section-action", sectionId, actionId)),
5206
5212
  onFormSubmit: handleFormSubmit,
5207
5213
  onFormCancel: handleFormCancel
5208
5214
  }, createSlots({ _: 2 }, [renderList(sidebarSlotNames.value, (slotName) => {
@@ -5344,7 +5350,7 @@ function humanize(value) {
5344
5350
  }
5345
5351
  //#endregion
5346
5352
  //#region src/components/LoadingSpinner.vue?vue&type=script&setup=true&lang.ts
5347
- var _hoisted_1$50 = { class: "mint-spinner__label" };
5353
+ var _hoisted_1$51 = { class: "mint-spinner__label" };
5348
5354
  //#endregion
5349
5355
  //#region src/components/LoadingSpinner.vue
5350
5356
  var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
@@ -5379,26 +5385,26 @@ var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
5379
5385
  style: { "opacity": "0.75" },
5380
5386
  fill: "currentColor",
5381
5387
  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"
5382
- })], -1)), createElementVNode("span", _hoisted_1$50, toDisplayString(__props.label), 1)], 2);
5388
+ })], -1)), createElementVNode("span", _hoisted_1$51, toDisplayString(__props.label), 1)], 2);
5383
5389
  };
5384
5390
  }
5385
5391
  });
5386
5392
  //#endregion
5387
5393
  //#region src/components/ChartContainer.vue?vue&type=script&setup=true&lang.ts
5388
- var _hoisted_1$49 = { class: "mint-chart" };
5389
- var _hoisted_2$45 = {
5394
+ var _hoisted_1$50 = { class: "mint-chart" };
5395
+ var _hoisted_2$46 = {
5390
5396
  key: 0,
5391
5397
  class: "mint-chart__header"
5392
5398
  };
5393
- var _hoisted_3$40 = {
5399
+ var _hoisted_3$41 = {
5394
5400
  key: 0,
5395
5401
  class: "mint-chart__header-text"
5396
5402
  };
5397
- var _hoisted_4$39 = {
5403
+ var _hoisted_4$40 = {
5398
5404
  key: 0,
5399
5405
  class: "mint-chart__title"
5400
5406
  };
5401
- var _hoisted_5$37 = {
5407
+ var _hoisted_5$38 = {
5402
5408
  key: 1,
5403
5409
  class: "mint-chart__description"
5404
5410
  };
@@ -5435,8 +5441,8 @@ var ChartContainer_default = /* @__PURE__ */ defineComponent({
5435
5441
  setup(__props) {
5436
5442
  /** Wraps a chart with header, toolbar slot, loading overlay, empty state, and legend slot. */
5437
5443
  return (_ctx, _cache) => {
5438
- return openBlock(), createElementBlock("div", _hoisted_1$49, [
5439
- __props.title || __props.description || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2$45, [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_3$40, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$39, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$37, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_6$36, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5444
+ return openBlock(), createElementBlock("div", _hoisted_1$50, [
5445
+ __props.title || __props.description || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2$46, [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_3$41, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$40, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$38, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_6$36, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5440
5446
  createElementVNode("div", _hoisted_7$31, [__props.loading ? (openBlock(), createElementBlock("div", _hoisted_8$28, [createVNode(LoadingSpinner_default, { size: "lg" })])) : __props.empty ? renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createVNode(EmptyState_default, {
5441
5447
  title: __props.emptyMessage,
5442
5448
  size: "sm",
@@ -5449,8 +5455,8 @@ var ChartContainer_default = /* @__PURE__ */ defineComponent({
5449
5455
  });
5450
5456
  //#endregion
5451
5457
  //#region src/components/GeneratedPlotlyResult.vue?vue&type=script&setup=true&lang.ts
5452
- var _hoisted_1$48 = ["src"];
5453
- var _hoisted_2$44 = {
5458
+ var _hoisted_1$49 = ["src"];
5459
+ var _hoisted_2$45 = {
5454
5460
  key: 1,
5455
5461
  class: "mint-generated-result__plotly-error",
5456
5462
  role: "alert"
@@ -5505,7 +5511,7 @@ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_de
5505
5511
  class: "mint-generated-result__image",
5506
5512
  src: `data:${__props.fallback.media_type};base64,${__props.fallback.data}`,
5507
5513
  alt: "Static Plotly chart fallback"
5508
- }, null, 8, _hoisted_1$48)) : failed.value ? (openBlock(), createElementBlock("p", _hoisted_2$44, " Unable to display this chart. ")) : createCommentVNode("", true), withDirectives(createElementVNode("div", {
5514
+ }, null, 8, _hoisted_1$49)) : failed.value ? (openBlock(), createElementBlock("p", _hoisted_2$45, " Unable to display this chart. ")) : createCommentVNode("", true), withDirectives(createElementVNode("div", {
5509
5515
  ref_key: "chartElement",
5510
5516
  ref: chartElement,
5511
5517
  class: "mint-generated-result__plotly",
@@ -5518,20 +5524,20 @@ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_de
5518
5524
  }), [["__scopeId", "data-v-3a33df40"]]);
5519
5525
  //#endregion
5520
5526
  //#region src/components/GeneratedResultRenderer.vue?vue&type=script&setup=true&lang.ts
5521
- var _hoisted_1$47 = {
5527
+ var _hoisted_1$48 = {
5522
5528
  class: "mint-generated-result",
5523
5529
  "aria-live": "polite"
5524
5530
  };
5525
- var _hoisted_2$43 = {
5531
+ var _hoisted_2$44 = {
5526
5532
  key: 0,
5527
5533
  class: "mint-generated-result__text"
5528
5534
  };
5529
- var _hoisted_3$39 = {
5535
+ var _hoisted_3$40 = {
5530
5536
  key: 1,
5531
5537
  class: "mint-generated-result__json"
5532
5538
  };
5533
- var _hoisted_4$38 = ["src", "alt"];
5534
- var _hoisted_5$36 = ["href", "download"];
5539
+ var _hoisted_4$39 = ["src", "alt"];
5540
+ var _hoisted_5$37 = ["href", "download"];
5535
5541
  //#endregion
5536
5542
  //#region src/components/GeneratedResultRenderer.vue
5537
5543
  var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -5565,7 +5571,7 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5565
5571
  return value.replace(/[_-]+/g, " ").replace(/^\w/, (character) => character.toUpperCase());
5566
5572
  }
5567
5573
  return (_ctx, _cache) => {
5568
- return openBlock(), createElementBlock("article", _hoisted_1$47, [__props.result.kind === "text" ? (openBlock(), createElementBlock("p", _hoisted_2$43, toDisplayString(__props.result.text), 1)) : __props.result.kind === "json" ? (openBlock(), createElementBlock("pre", _hoisted_3$39, toDisplayString(formattedJson.value), 1)) : __props.result.kind === "table" ? (openBlock(), createBlock(DataFrame_default, {
5574
+ return openBlock(), createElementBlock("article", _hoisted_1$48, [__props.result.kind === "text" ? (openBlock(), createElementBlock("p", _hoisted_2$44, toDisplayString(__props.result.text), 1)) : __props.result.kind === "json" ? (openBlock(), createElementBlock("pre", _hoisted_3$40, toDisplayString(formattedJson.value), 1)) : __props.result.kind === "table" ? (openBlock(), createBlock(DataFrame_default, {
5569
5575
  key: 2,
5570
5576
  data: __props.result.rows,
5571
5577
  columns: tableColumns.value,
@@ -5581,7 +5587,7 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5581
5587
  class: "mint-generated-result__image",
5582
5588
  src: `data:${__props.result.media_type};base64,${__props.result.data}`,
5583
5589
  alt: __props.result.alt
5584
- }, null, 8, _hoisted_4$38)]),
5590
+ }, null, 8, _hoisted_4$39)]),
5585
5591
  _: 1
5586
5592
  })) : __props.result.kind === "plotly" ? (openBlock(), createBlock(GeneratedPlotlyResult_default, {
5587
5593
  key: 4,
@@ -5592,21 +5598,21 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5592
5598
  class: "mint-generated-result__artifact",
5593
5599
  href: artifactHref.value,
5594
5600
  download: __props.result.name
5595
- }, [createElementVNode("span", null, toDisplayString(__props.result.name), 1), createElementVNode("small", null, toDisplayString(__props.result.media_type), 1)], 8, _hoisted_5$36))]);
5601
+ }, [createElementVNode("span", null, toDisplayString(__props.result.name), 1), createElementVNode("small", null, toDisplayString(__props.result.media_type), 1)], 8, _hoisted_5$37))]);
5596
5602
  };
5597
5603
  }
5598
5604
  }), [["__scopeId", "data-v-a3757b3e"]]);
5599
5605
  //#endregion
5600
5606
  //#region src/components/JobsStatusTray.vue?vue&type=script&setup=true&lang.ts
5601
- var _hoisted_1$46 = { class: "mint-jobs-tray" };
5602
- var _hoisted_2$42 = ["aria-expanded"];
5603
- var _hoisted_3$38 = { class: "mint-jobs-tray__trigger-label" };
5604
- var _hoisted_4$37 = {
5607
+ var _hoisted_1$47 = { class: "mint-jobs-tray" };
5608
+ var _hoisted_2$43 = ["aria-expanded"];
5609
+ var _hoisted_3$39 = { class: "mint-jobs-tray__trigger-label" };
5610
+ var _hoisted_4$38 = {
5605
5611
  key: 0,
5606
5612
  class: "mint-jobs-tray__count",
5607
5613
  "aria-live": "polite"
5608
5614
  };
5609
- var _hoisted_5$35 = { class: "mint-jobs-tray__header" };
5615
+ var _hoisted_5$36 = { class: "mint-jobs-tray__header" };
5610
5616
  var _hoisted_6$35 = { class: "mint-jobs-tray__subtitle" };
5611
5617
  var _hoisted_7$30 = { class: "mint-jobs-tray__header-actions" };
5612
5618
  var _hoisted_8$27 = ["disabled"];
@@ -5638,20 +5644,20 @@ var _hoisted_22$10 = { class: "mint-jobs-tray__job-footer" };
5638
5644
  var _hoisted_23$9 = { class: "mint-jobs-tray__job-actions" };
5639
5645
  var _hoisted_24$9 = ["disabled", "onClick"];
5640
5646
  var _hoisted_25$9 = ["disabled", "onClick"];
5641
- var _hoisted_26$9 = {
5647
+ var _hoisted_26$8 = {
5642
5648
  key: 0,
5643
5649
  class: "mint-jobs-tray__clear-row"
5644
5650
  };
5645
- var _hoisted_27$8 = {
5651
+ var _hoisted_27$7 = {
5646
5652
  key: 1,
5647
5653
  class: "mint-jobs-tray__empty"
5648
5654
  };
5649
- var _hoisted_28$7 = { class: "mint-jobs-tray__job-heading" };
5650
- var _hoisted_29$6 = { class: "mint-jobs-tray__job-identity" };
5651
- var _hoisted_30$6 = ["onClick"];
5652
- var _hoisted_31$6 = { class: "mint-jobs-tray__kind" };
5653
- var _hoisted_32$6 = { class: "mint-jobs-tray__job-footer" };
5654
- var _hoisted_33$6 = ["disabled", "onClick"];
5655
+ var _hoisted_28$6 = { class: "mint-jobs-tray__job-heading" };
5656
+ var _hoisted_29$5 = { class: "mint-jobs-tray__job-identity" };
5657
+ var _hoisted_30$5 = ["onClick"];
5658
+ var _hoisted_31$5 = { class: "mint-jobs-tray__kind" };
5659
+ var _hoisted_32$5 = { class: "mint-jobs-tray__job-footer" };
5660
+ var _hoisted_33$5 = ["disabled", "onClick"];
5655
5661
  //#endregion
5656
5662
  //#region src/components/JobsStatusTray.vue
5657
5663
  var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
@@ -5766,7 +5772,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5766
5772
  return openBlock(), createBlock(Teleport, {
5767
5773
  to: teleportTarget.value,
5768
5774
  disabled: __props.teleportTo === false
5769
- }, [createElementVNode("div", _hoisted_1$46, [
5775
+ }, [createElementVNode("div", _hoisted_1$47, [
5770
5776
  createElementVNode("button", {
5771
5777
  ref_key: "triggerRef",
5772
5778
  ref: triggerRef,
@@ -5784,9 +5790,9 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5784
5790
  stroke: "currentColor",
5785
5791
  "aria-hidden": "true"
5786
5792
  }, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2" }, null, -1), createElementVNode("path", { d: "M9 5a3 3 0 0 1 6 0v2H9V5Z" }, null, -1)])], 2)),
5787
- createElementVNode("span", _hoisted_3$38, toDisplayString(unref(tray).featuredJob.value ? unref(jobStatusLabel)(unref(tray).featuredJob.value.status) : "Jobs"), 1),
5788
- unref(tray).activeJobs.value.length > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$37, toDisplayString(unref(tray).activeJobs.value.length), 1)) : createCommentVNode("", true)
5789
- ], 8, _hoisted_2$42),
5793
+ createElementVNode("span", _hoisted_3$39, toDisplayString(unref(tray).featuredJob.value ? unref(jobStatusLabel)(unref(tray).featuredJob.value.status) : "Jobs"), 1),
5794
+ unref(tray).activeJobs.value.length > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$38, toDisplayString(unref(tray).activeJobs.value.length), 1)) : createCommentVNode("", true)
5795
+ ], 8, _hoisted_2$43),
5790
5796
  createVNode(Transition, { name: "mint-jobs-tray-fade" }, {
5791
5797
  default: withCtx(() => [unref(tray).isOpen.value ? (openBlock(), createElementBlock("div", {
5792
5798
  key: 0,
@@ -5809,7 +5815,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5809
5815
  tabindex: "-1",
5810
5816
  onKeydown: onPanelKeydown
5811
5817
  }, [
5812
- createElementVNode("header", _hoisted_5$35, [createElementVNode("div", null, [createElementVNode("h2", {
5818
+ createElementVNode("header", _hoisted_5$36, [createElementVNode("div", null, [createElementVNode("h2", {
5813
5819
  id: titleId,
5814
5820
  class: "mint-jobs-tray__title"
5815
5821
  }, toDisplayString(__props.title), 1), createElementVNode("p", _hoisted_6$35, toDisplayString(unref(tray).jobs.value.length) + " total", 1)]), createElementVNode("div", _hoisted_7$30, [unref(tray).canRefresh.value ? (openBlock(), createElementBlock("button", {
@@ -5892,21 +5898,21 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5892
5898
  }, [createElementVNode("path", { d: "M4 7h16M9 7V4h6v3m-8 0 1 13h8l1-13M10 11v5M14 11v5" })], -1)])], 8, _hoisted_25$9)) : createCommentVNode("", true)])])
5893
5899
  ]);
5894
5900
  }), 128))], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
5895
- canClear.value ? (openBlock(), createElementBlock("div", _hoisted_26$9, [createElementVNode("button", {
5901
+ canClear.value ? (openBlock(), createElementBlock("div", _hoisted_26$8, [createElementVNode("button", {
5896
5902
  type: "button",
5897
5903
  class: "mint-jobs-tray__action mint-jobs-tray__action--danger",
5898
5904
  onClick: clearFinished
5899
5905
  }, " Clear finished ")])) : createCommentVNode("", true),
5900
- unref(tray).historyJobs.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_27$8, " No job history ")) : createCommentVNode("", true),
5906
+ unref(tray).historyJobs.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_27$7, " No job history ")) : createCommentVNode("", true),
5901
5907
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(tray).historyJobs.value, (job) => {
5902
5908
  return openBlock(), createElementBlock("article", {
5903
5909
  key: job.job_id,
5904
5910
  class: "mint-jobs-tray__job"
5905
- }, [createElementVNode("div", _hoisted_28$7, [createElementVNode("div", _hoisted_29$6, [createElementVNode("button", {
5911
+ }, [createElementVNode("div", _hoisted_28$6, [createElementVNode("div", _hoisted_29$5, [createElementVNode("button", {
5906
5912
  type: "button",
5907
5913
  class: "mint-jobs-tray__job-select",
5908
5914
  onClick: ($event) => emit("select", job)
5909
- }, toDisplayString(job.name), 9, _hoisted_30$6), createElementVNode("span", _hoisted_31$6, toDisplayString(job.kind), 1)]), createElementVNode("span", { class: normalizeClass(["mint-jobs-tray__status", statusClass(job)]) }, toDisplayString(unref(jobStatusLabel)(job.status)), 3)]), createElementVNode("div", _hoisted_32$6, [createElementVNode("span", null, toDisplayString(formatTimestamp(job.completed_at || job.created_at)), 1), job.can_delete && unref(tray).canDelete.value ? (openBlock(), createElementBlock("button", {
5915
+ }, toDisplayString(job.name), 9, _hoisted_30$5), createElementVNode("span", _hoisted_31$5, toDisplayString(job.kind), 1)]), createElementVNode("span", { class: normalizeClass(["mint-jobs-tray__status", statusClass(job)]) }, toDisplayString(unref(jobStatusLabel)(job.status)), 3)]), createElementVNode("div", _hoisted_32$5, [createElementVNode("span", null, toDisplayString(formatTimestamp(job.completed_at || job.created_at)), 1), job.can_delete && unref(tray).canDelete.value ? (openBlock(), createElementBlock("button", {
5910
5916
  key: 0,
5911
5917
  type: "button",
5912
5918
  class: "mint-jobs-tray__icon-button mint-jobs-tray__icon-button--danger",
@@ -5918,7 +5924,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5918
5924
  fill: "none",
5919
5925
  stroke: "currentColor",
5920
5926
  "aria-hidden": "true"
5921
- }, [createElementVNode("path", { d: "M4 7h16M9 7V4h6v3m-8 0 1 13h8l1-13M10 11v5M14 11v5" })], -1)])], 8, _hoisted_33$6)) : createCommentVNode("", true)])]);
5927
+ }, [createElementVNode("path", { d: "M4 7h16M9 7V4h6v3m-8 0 1 13h8l1-13M10 11v5M14 11v5" })], -1)])], 8, _hoisted_33$5)) : createCommentVNode("", true)])]);
5922
5928
  }), 128))
5923
5929
  ], 64))])
5924
5930
  ], 544)) : createCommentVNode("", true)]),
@@ -5930,17 +5936,17 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5930
5936
  });
5931
5937
  //#endregion
5932
5938
  //#region src/components/GeneratedPluginView.vue?vue&type=script&setup=true&lang.ts
5933
- var _hoisted_1$45 = { class: "mint-generated-workspace" };
5934
- var _hoisted_2$41 = {
5939
+ var _hoisted_1$46 = { class: "mint-generated-workspace" };
5940
+ var _hoisted_2$42 = {
5935
5941
  key: 0,
5936
5942
  class: "mint-generated-workspace__loading"
5937
5943
  };
5938
- var _hoisted_3$37 = {
5944
+ var _hoisted_3$38 = {
5939
5945
  key: 1,
5940
5946
  class: "mint-generated-workspace__header"
5941
5947
  };
5942
- var _hoisted_4$36 = { key: 0 };
5943
- var _hoisted_5$34 = {
5948
+ var _hoisted_4$37 = { key: 0 };
5949
+ var _hoisted_5$35 = {
5944
5950
  class: "mint-generated-workspace__resources",
5945
5951
  "aria-label": "Job resource requirements"
5946
5952
  };
@@ -6043,17 +6049,17 @@ var GeneratedPluginView_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
6043
6049
  "onUpdate:values": updateValues,
6044
6050
  onFormSubmit: submitJob
6045
6051
  }, {
6046
- default: withCtx(() => [createElementVNode("main", _hoisted_1$45, [unref(generated).isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2$41, [createVNode(LoadingSpinner_default, { size: "lg" }), _cache[1] || (_cache[1] = createElementVNode("span", null, "Loading analysis workspace", -1))])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
6052
+ default: withCtx(() => [createElementVNode("main", _hoisted_1$46, [unref(generated).isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2$42, [createVNode(LoadingSpinner_default, { size: "lg" }), _cache[1] || (_cache[1] = createElementVNode("span", null, "Loading analysis workspace", -1))])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
6047
6053
  unref(generated).error.value ? (openBlock(), createBlock(AlertBox_default, {
6048
6054
  key: 0,
6049
6055
  type: "error",
6050
6056
  message: unref(generated).error.value
6051
6057
  }, null, 8, ["message"])) : createCommentVNode("", true),
6052
- activeDefinition.value ? (openBlock(), createElementBlock("header", _hoisted_3$37, [createElementVNode("div", null, [
6058
+ activeDefinition.value ? (openBlock(), createElementBlock("header", _hoisted_3$38, [createElementVNode("div", null, [
6053
6059
  _cache[2] || (_cache[2] = createElementVNode("p", { class: "mint-generated-workspace__eyebrow" }, "Analysis result", -1)),
6054
6060
  createElementVNode("h1", null, toDisplayString(activeDefinition.value.title), 1),
6055
- activeDefinition.value.description ? (openBlock(), createElementBlock("p", _hoisted_4$36, toDisplayString(activeDefinition.value.description), 1)) : createCommentVNode("", true)
6056
- ]), createElementVNode("div", _hoisted_5$34, [createElementVNode("span", null, toDisplayString(resourceSummary(activeDefinition.value)), 1)])])) : createCommentVNode("", true),
6061
+ activeDefinition.value.description ? (openBlock(), createElementBlock("p", _hoisted_4$37, toDisplayString(activeDefinition.value.description), 1)) : createCommentVNode("", true)
6062
+ ]), createElementVNode("div", _hoisted_5$35, [createElementVNode("span", null, toDisplayString(resourceSummary(activeDefinition.value)), 1)])])) : createCommentVNode("", true),
6057
6063
  createElementVNode("section", _hoisted_6$34, [currentResult.value ? (openBlock(), createBlock(GeneratedResultRenderer_default, {
6058
6064
  key: 0,
6059
6065
  result: currentResult.value
@@ -6086,11 +6092,11 @@ var GeneratedPluginView_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
6086
6092
  }), [["__scopeId", "data-v-6c599fd1"]]);
6087
6093
  //#endregion
6088
6094
  //#region src/components/DoseCalculatorVolumeField.vue?vue&type=script&setup=true&lang.ts
6089
- var _hoisted_1$44 = { class: "mint-dose-calculator__field" };
6090
- var _hoisted_2$40 = { class: "mint-dose-calculator__field-label" };
6091
- var _hoisted_3$36 = { class: "mint-dose-calculator__field-row" };
6092
- var _hoisted_4$35 = ["value", "disabled"];
6093
- var _hoisted_5$33 = ["value", "disabled"];
6095
+ var _hoisted_1$45 = { class: "mint-dose-calculator__field" };
6096
+ var _hoisted_2$41 = { class: "mint-dose-calculator__field-label" };
6097
+ var _hoisted_3$37 = { class: "mint-dose-calculator__field-row" };
6098
+ var _hoisted_4$36 = ["value", "disabled"];
6099
+ var _hoisted_5$34 = ["value", "disabled"];
6094
6100
  var _hoisted_6$33 = ["value"];
6095
6101
  //#endregion
6096
6102
  //#region src/components/DoseCalculatorVolumeField.vue
@@ -6127,7 +6133,7 @@ var DoseCalculatorVolumeField_default = /* @__PURE__ */ defineComponent({
6127
6133
  });
6128
6134
  }
6129
6135
  return (_ctx, _cache) => {
6130
- return openBlock(), createElementBlock("div", _hoisted_1$44, [createElementVNode("label", _hoisted_2$40, toDisplayString(__props.label), 1), createElementVNode("div", _hoisted_3$36, [createElementVNode("input", {
6136
+ return openBlock(), createElementBlock("div", _hoisted_1$45, [createElementVNode("label", _hoisted_2$41, toDisplayString(__props.label), 1), createElementVNode("div", _hoisted_3$37, [createElementVNode("input", {
6131
6137
  type: "number",
6132
6138
  value: __props.modelValue.value,
6133
6139
  disabled: __props.disabled,
@@ -6135,7 +6141,7 @@ var DoseCalculatorVolumeField_default = /* @__PURE__ */ defineComponent({
6135
6141
  min: "0",
6136
6142
  step: "any",
6137
6143
  onInput: handleValueInput
6138
- }, null, 40, _hoisted_4$35), createElementVNode("select", {
6144
+ }, null, 40, _hoisted_4$36), createElementVNode("select", {
6139
6145
  value: __props.modelValue.unit,
6140
6146
  disabled: __props.disabled,
6141
6147
  class: "mint-dose-calculator__select",
@@ -6145,21 +6151,21 @@ var DoseCalculatorVolumeField_default = /* @__PURE__ */ defineComponent({
6145
6151
  key: unit,
6146
6152
  value: unit
6147
6153
  }, toDisplayString(unit), 9, _hoisted_6$33);
6148
- }), 128))], 40, _hoisted_5$33)])]);
6154
+ }), 128))], 40, _hoisted_5$34)])]);
6149
6155
  };
6150
6156
  }
6151
6157
  });
6152
6158
  //#endregion
6153
6159
  //#region src/components/DoseCalculator.vue?vue&type=script&setup=true&lang.ts
6154
- var _hoisted_1$43 = {
6160
+ var _hoisted_1$44 = {
6155
6161
  key: 0,
6156
6162
  class: "mint-dose-calculator__tabs",
6157
6163
  role: "tablist"
6158
6164
  };
6159
- var _hoisted_2$39 = ["aria-selected"];
6160
- var _hoisted_3$35 = ["aria-selected"];
6161
- var _hoisted_4$34 = ["aria-selected"];
6162
- var _hoisted_5$32 = {
6165
+ var _hoisted_2$40 = ["aria-selected"];
6166
+ var _hoisted_3$36 = ["aria-selected"];
6167
+ var _hoisted_4$35 = ["aria-selected"];
6168
+ var _hoisted_5$33 = {
6163
6169
  key: 1,
6164
6170
  class: "mint-dose-calculator__form",
6165
6171
  role: "tabpanel"
@@ -6197,28 +6203,28 @@ var _hoisted_24$8 = {
6197
6203
  class: "mint-dose-calculator__preview"
6198
6204
  };
6199
6205
  var _hoisted_25$8 = { class: "mint-dose-calculator__preview-steps" };
6200
- var _hoisted_26$8 = { class: "mint-dose-calculator__preview-step" };
6201
- var _hoisted_27$7 = { class: "mint-dose-calculator__preview-step-num" };
6202
- var _hoisted_28$6 = { class: "mint-dose-calculator__preview-step-conc" };
6203
- var _hoisted_29$5 = {
6206
+ var _hoisted_26$7 = { class: "mint-dose-calculator__preview-step" };
6207
+ var _hoisted_27$6 = { class: "mint-dose-calculator__preview-step-num" };
6208
+ var _hoisted_28$5 = { class: "mint-dose-calculator__preview-step-conc" };
6209
+ var _hoisted_29$4 = {
6204
6210
  key: 0,
6205
6211
  class: "mint-dose-calculator__preview-arrow"
6206
6212
  };
6207
- var _hoisted_30$5 = {
6213
+ var _hoisted_30$4 = {
6208
6214
  key: 1,
6209
6215
  class: "mint-dose-calculator__error"
6210
6216
  };
6211
- var _hoisted_31$5 = {
6217
+ var _hoisted_31$4 = {
6212
6218
  key: 3,
6213
6219
  class: "mint-dose-calculator__form",
6214
6220
  role: "tabpanel"
6215
6221
  };
6216
- var _hoisted_32$5 = { class: "mint-dose-calculator__field" };
6217
- var _hoisted_33$5 = {
6222
+ var _hoisted_32$4 = { class: "mint-dose-calculator__field" };
6223
+ var _hoisted_33$4 = {
6218
6224
  key: 0,
6219
6225
  class: "mint-dose-calculator__error"
6220
6226
  };
6221
- var _hoisted_34$5 = {
6227
+ var _hoisted_34$4 = {
6222
6228
  key: 4,
6223
6229
  class: "mint-dose-calculator__mw-section"
6224
6230
  };
@@ -6344,30 +6350,30 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6344
6350
  });
6345
6351
  return (_ctx, _cache) => {
6346
6352
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dose-calculator", __props.disabled ? "mint-dose-calculator--disabled" : ""]) }, [
6347
- showTabs.value ? (openBlock(), createElementBlock("div", _hoisted_1$43, [
6353
+ showTabs.value ? (openBlock(), createElementBlock("div", _hoisted_1$44, [
6348
6354
  createElementVNode("button", {
6349
6355
  type: "button",
6350
6356
  class: normalizeClass(["mint-dose-calculator__tab", activeMode.value === "dilution" ? "mint-dose-calculator__tab--active" : ""]),
6351
6357
  role: "tab",
6352
6358
  "aria-selected": activeMode.value === "dilution",
6353
6359
  onClick: _cache[0] || (_cache[0] = ($event) => activeMode.value = "dilution")
6354
- }, " Dilution ", 10, _hoisted_2$39),
6360
+ }, " Dilution ", 10, _hoisted_2$40),
6355
6361
  createElementVNode("button", {
6356
6362
  type: "button",
6357
6363
  class: normalizeClass(["mint-dose-calculator__tab", activeMode.value === "serial" ? "mint-dose-calculator__tab--active" : ""]),
6358
6364
  role: "tab",
6359
6365
  "aria-selected": activeMode.value === "serial",
6360
6366
  onClick: _cache[1] || (_cache[1] = ($event) => activeMode.value = "serial")
6361
- }, " Serial ", 10, _hoisted_3$35),
6367
+ }, " Serial ", 10, _hoisted_3$36),
6362
6368
  createElementVNode("button", {
6363
6369
  type: "button",
6364
6370
  class: normalizeClass(["mint-dose-calculator__tab", activeMode.value === "conversion" ? "mint-dose-calculator__tab--active" : ""]),
6365
6371
  role: "tab",
6366
6372
  "aria-selected": activeMode.value === "conversion",
6367
6373
  onClick: _cache[2] || (_cache[2] = ($event) => activeMode.value = "conversion")
6368
- }, " Conversion ", 10, _hoisted_4$34)
6374
+ }, " Conversion ", 10, _hoisted_4$35)
6369
6375
  ])) : createCommentVNode("", true),
6370
- activeMode.value === "dilution" ? (openBlock(), createElementBlock("div", _hoisted_5$32, [
6376
+ activeMode.value === "dilution" ? (openBlock(), createElementBlock("div", _hoisted_5$33, [
6371
6377
  createElementVNode("div", _hoisted_6$32, [_cache[10] || (_cache[10] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Stock Concentration", -1)), createVNode(ConcentrationInput_default, {
6372
6378
  modelValue: stockConcentration.value,
6373
6379
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => stockConcentration.value = $event),
@@ -6446,15 +6452,15 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6446
6452
  ]),
6447
6453
  _cache[22] || (_cache[22] = createElementVNode("div", { class: "mint-dose-calculator__divider" }, null, -1)),
6448
6454
  serialResult.value?.valid ? (openBlock(), createElementBlock("div", _hoisted_24$8, [_cache[21] || (_cache[21] = createElementVNode("div", { class: "mint-dose-calculator__preview-title" }, "Preview", -1)), createElementVNode("div", _hoisted_25$8, [(openBlock(true), createElementBlock(Fragment, null, renderList(serialResult.value.steps, (step, index) => {
6449
- return openBlock(), createElementBlock(Fragment, { key: step.stepNumber }, [createElementVNode("div", _hoisted_26$8, [createElementVNode("span", _hoisted_27$7, toDisplayString(step.stepNumber) + ":", 1), createElementVNode("span", _hoisted_28$6, toDisplayString(unref(formatWithUnit)(step.concentration, 3)), 1)]), index < serialResult.value.steps.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_29$5, " → ")) : createCommentVNode("", true)], 64);
6450
- }), 128))])])) : serialResult.value?.error ? (openBlock(), createElementBlock("div", _hoisted_30$5, toDisplayString(serialResult.value.error), 1)) : createCommentVNode("", true)
6451
- ])) : activeMode.value === "conversion" ? (openBlock(), createElementBlock("div", _hoisted_31$5, [createElementVNode("div", _hoisted_32$5, [_cache[23] || (_cache[23] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Input Concentration", -1)), createVNode(ConcentrationInput_default, {
6455
+ return openBlock(), createElementBlock(Fragment, { key: step.stepNumber }, [createElementVNode("div", _hoisted_26$7, [createElementVNode("span", _hoisted_27$6, toDisplayString(step.stepNumber) + ":", 1), createElementVNode("span", _hoisted_28$5, toDisplayString(unref(formatWithUnit)(step.concentration, 3)), 1)]), index < serialResult.value.steps.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_29$4, " → ")) : createCommentVNode("", true)], 64);
6456
+ }), 128))])])) : serialResult.value?.error ? (openBlock(), createElementBlock("div", _hoisted_30$4, toDisplayString(serialResult.value.error), 1)) : createCommentVNode("", true)
6457
+ ])) : activeMode.value === "conversion" ? (openBlock(), createElementBlock("div", _hoisted_31$4, [createElementVNode("div", _hoisted_32$4, [_cache[23] || (_cache[23] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Input Concentration", -1)), createVNode(ConcentrationInput_default, {
6452
6458
  disabled: __props.disabled,
6453
6459
  "molecular-weight": __props.molecularWeight,
6454
6460
  "show-conversion": true,
6455
6461
  size: "md"
6456
- }, null, 8, ["disabled", "molecular-weight"])]), !__props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_33$5, " Provide molecular weight for mass ↔ molarity conversion ")) : createCommentVNode("", true)])) : createCommentVNode("", true),
6457
- __props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_34$5, [createElementVNode("span", _hoisted_35$4, " Molecular Weight: " + toDisplayString(__props.molecularWeight) + " g/mol ", 1)])) : createCommentVNode("", true),
6462
+ }, null, 8, ["disabled", "molecular-weight"])]), !__props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_33$4, " Provide molecular weight for mass ↔ molarity conversion ")) : createCommentVNode("", true)])) : createCommentVNode("", true),
6463
+ __props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_34$4, [createElementVNode("span", _hoisted_35$4, " Molecular Weight: " + toDisplayString(__props.molecularWeight) + " g/mol ", 1)])) : createCommentVNode("", true),
6458
6464
  hasTargetWells.value ? (openBlock(), createElementBlock("div", _hoisted_36$4, [createElementVNode("button", {
6459
6465
  type: "button",
6460
6466
  class: "mint-dose-calculator__apply-btn",
@@ -6505,19 +6511,19 @@ function formatProtocolDuration(minutes) {
6505
6511
  }
6506
6512
  //#endregion
6507
6513
  //#region src/components/ExperimentTimeline.vue?vue&type=script&setup=true&lang.ts
6508
- var _hoisted_1$42 = ["aria-label"];
6509
- var _hoisted_2$38 = [
6514
+ var _hoisted_1$43 = ["aria-label"];
6515
+ var _hoisted_2$39 = [
6510
6516
  "draggable",
6511
6517
  "onDragstart",
6512
6518
  "onDragover",
6513
6519
  "onDrop"
6514
6520
  ];
6515
- var _hoisted_3$34 = {
6521
+ var _hoisted_3$35 = {
6516
6522
  key: 0,
6517
6523
  class: "mint-timeline__connector"
6518
6524
  };
6519
- var _hoisted_4$33 = ["onClick"];
6520
- var _hoisted_5$31 = {
6525
+ var _hoisted_4$34 = ["onClick"];
6526
+ var _hoisted_5$32 = {
6521
6527
  fill: "none",
6522
6528
  stroke: "currentColor",
6523
6529
  viewBox: "0 0 24 24"
@@ -6724,7 +6730,7 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6724
6730
  onDrop: ($event) => handleDrop($event, step),
6725
6731
  onDragend: handleDragEnd
6726
6732
  }, [
6727
- index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_3$34)) : createCommentVNode("", true),
6733
+ index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_3$35)) : createCommentVNode("", true),
6728
6734
  createElementVNode("div", {
6729
6735
  class: normalizeClass([
6730
6736
  "mint-timeline__card",
@@ -6747,7 +6753,7 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6747
6753
  backgroundColor: `${getStepColor(step)}20`,
6748
6754
  color: getStepColor(step)
6749
6755
  } : {})
6750
- }, [(openBlock(), createElementBlock("svg", _hoisted_5$31, [createElementVNode("path", {
6756
+ }, [(openBlock(), createElementBlock("svg", _hoisted_5$32, [createElementVNode("path", {
6751
6757
  "stroke-linecap": "round",
6752
6758
  "stroke-linejoin": "round",
6753
6759
  "stroke-width": "2",
@@ -6818,7 +6824,7 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6818
6824
  onClick: withModifiers(($event) => handleStatusChange(step, status), ["stop"])
6819
6825
  }, toDisplayString(status.replace("_", " ")), 11, _hoisted_15$15);
6820
6826
  }), 64))])) : createCommentVNode("", true)
6821
- ], 8, _hoisted_10$22)) : createCommentVNode("", true)], 14, _hoisted_4$33),
6827
+ ], 8, _hoisted_10$22)) : createCommentVNode("", true)], 14, _hoisted_4$34),
6822
6828
  __props.editable && __props.orientation === "vertical" ? (openBlock(), createElementBlock("button", {
6823
6829
  key: 1,
6824
6830
  type: "button",
@@ -6837,7 +6843,7 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6837
6843
  })], -1)])], 8, _hoisted_16$13)) : createCommentVNode("", true),
6838
6844
  __props.orientation === "vertical" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_17$13)) : createCommentVNode("", true),
6839
6845
  __props.orientation === "horizontal" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_18$13)) : createCommentVNode("", true)
6840
- ], 40, _hoisted_2$38);
6846
+ ], 40, _hoisted_2$39);
6841
6847
  }), 128)),
6842
6848
  sortedSteps.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_19$13, [createElementVNode("div", _hoisted_20$12, [_cache[5] || (_cache[5] = createElementVNode("p", { class: "mint-timeline__empty-text" }, "No protocol steps defined", -1)), __props.editable ? (openBlock(), createElementBlock("button", {
6843
6849
  key: 0,
@@ -6860,17 +6866,17 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6860
6866
  "stroke-width": "2",
6861
6867
  d: "M12 4v16m8-8H4"
6862
6868
  })], -1)), createElementVNode("span", { class: normalizeClass(`mint-timeline__add-end-text--${__props.size}`) }, "Add Step", 2)], 2)) : createCommentVNode("", true)
6863
- ], 10, _hoisted_1$42);
6869
+ ], 10, _hoisted_1$43);
6864
6870
  };
6865
6871
  }
6866
6872
  });
6867
6873
  //#endregion
6868
6874
  //#region src/components/internal/WellEditPopupInternal.vue?vue&type=script&setup=true&lang.ts
6869
- var _hoisted_1$41 = { class: "mint-well-edit-popup__header" };
6870
- var _hoisted_2$37 = { class: "mint-well-edit-popup__header-left" };
6871
- var _hoisted_3$33 = { class: "mint-well-edit-popup__well-id" };
6872
- var _hoisted_4$32 = { class: "mint-well-edit-popup__body" };
6873
- var _hoisted_5$30 = { key: 0 };
6875
+ var _hoisted_1$42 = { class: "mint-well-edit-popup__header" };
6876
+ var _hoisted_2$38 = { class: "mint-well-edit-popup__header-left" };
6877
+ var _hoisted_3$34 = { class: "mint-well-edit-popup__well-id" };
6878
+ var _hoisted_4$33 = { class: "mint-well-edit-popup__body" };
6879
+ var _hoisted_5$31 = { key: 0 };
6874
6880
  var _hoisted_6$30 = { class: "mint-well-edit-popup__row" };
6875
6881
  var _hoisted_7$27 = { key: 0 };
6876
6882
  var _hoisted_8$24 = { class: "mint-well-edit-popup__type-grid" };
@@ -6988,7 +6994,7 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
6988
6994
  style: normalizeStyle(popupStyle.value),
6989
6995
  onClick: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop"]))
6990
6996
  }, [
6991
- createElementVNode("div", _hoisted_1$41, [createElementVNode("div", _hoisted_2$37, [createElementVNode("span", _hoisted_3$33, toDisplayString(__props.wellId), 1), _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-well-edit-popup__title" }, "Edit Well", -1))]), createElementVNode("button", {
6997
+ createElementVNode("div", _hoisted_1$42, [createElementVNode("div", _hoisted_2$38, [createElementVNode("span", _hoisted_3$34, toDisplayString(__props.wellId), 1), _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-well-edit-popup__title" }, "Edit Well", -1))]), createElementVNode("button", {
6992
6998
  class: "mint-well-edit-popup__close",
6993
6999
  onClick: close
6994
7000
  }, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
@@ -7001,8 +7007,8 @@ var WellEditPopupInternal_default = /* @__PURE__ */ defineComponent({
7001
7007
  "stroke-linecap": "round",
7002
7008
  "stroke-linejoin": "round"
7003
7009
  }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])]),
7004
- createElementVNode("div", _hoisted_4$32, [
7005
- hasField("label") ? (openBlock(), createElementBlock("div", _hoisted_5$30, [_cache[8] || (_cache[8] = createElementVNode("label", { class: "mint-well-edit-popup__label" }, "Sample Name", -1)), withDirectives(createElementVNode("input", {
7010
+ createElementVNode("div", _hoisted_4$33, [
7011
+ hasField("label") ? (openBlock(), createElementBlock("div", _hoisted_5$31, [_cache[8] || (_cache[8] = createElementVNode("label", { class: "mint-well-edit-popup__label" }, "Sample Name", -1)), withDirectives(createElementVNode("input", {
7006
7012
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.value.label = $event),
7007
7013
  type: "text",
7008
7014
  placeholder: "e.g., Sample_001",
@@ -7687,11 +7693,11 @@ var DEFAULT_WELL_LEGEND_ITEMS = [
7687
7693
  ];
7688
7694
  //#endregion
7689
7695
  //#region src/components/WellPlate.vue?vue&type=script&setup=true&lang.ts
7690
- var _hoisted_1$40 = { class: "mint-well-plate__scroll" };
7691
- var _hoisted_2$36 = { class: "mint-well-plate__content" };
7692
- var _hoisted_3$32 = ["aria-label"];
7693
- var _hoisted_4$31 = { key: 0 };
7694
- var _hoisted_5$29 = ["colspan"];
7696
+ var _hoisted_1$41 = { class: "mint-well-plate__scroll" };
7697
+ var _hoisted_2$37 = { class: "mint-well-plate__content" };
7698
+ var _hoisted_3$33 = ["aria-label"];
7699
+ var _hoisted_4$32 = { key: 0 };
7700
+ var _hoisted_5$30 = ["colspan"];
7695
7701
  var _hoisted_6$29 = ["colspan"];
7696
7702
  var _hoisted_7$26 = { key: 1 };
7697
7703
  var _hoisted_8$23 = ["rowspan"];
@@ -7911,7 +7917,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7911
7917
  ref: plateRef,
7912
7918
  class: normalizeClass(["mint-well-plate", isFillMode.value ? "mint-well-plate--fill" : "mint-well-plate--inline"]),
7913
7919
  style: normalizeStyle(containerStyle.value)
7914
- }, [createElementVNode("div", _hoisted_1$40, [createElementVNode("div", _hoisted_2$36, [
7920
+ }, [createElementVNode("div", _hoisted_1$41, [createElementVNode("div", _hoisted_2$37, [
7915
7921
  createElementVNode("table", {
7916
7922
  ref_key: "tableRef",
7917
7923
  ref: tableRef,
@@ -7920,7 +7926,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7920
7926
  "aria-label": `${props.format}-well plate`,
7921
7927
  style: normalizeStyle(tableStyle.value)
7922
7928
  }, [
7923
- hasColumnConditions.value ? (openBlock(), createElementBlock("thead", _hoisted_4$31, [createElementVNode("tr", null, [
7929
+ hasColumnConditions.value ? (openBlock(), createElementBlock("thead", _hoisted_4$32, [createElementVNode("tr", null, [
7924
7930
  createElementVNode("th", { style: normalizeStyle({ width: sizeConfig.value.headerWidth }) }, null, 4),
7925
7931
  hasRowConditions.value ? (openBlock(), createElementBlock("th", {
7926
7932
  key: 0,
@@ -7936,7 +7942,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7936
7942
  fontSize: sizeConfig.value.fontSize,
7937
7943
  color: span.condition.color
7938
7944
  })
7939
- }, [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_5$29)) : (openBlock(), createElementBlock("th", {
7945
+ }, [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_5$30)) : (openBlock(), createElementBlock("th", {
7940
7946
  key: 1,
7941
7947
  colspan: span.colspan
7942
7948
  }, null, 8, _hoisted_6$29))], 64);
@@ -8048,7 +8054,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8048
8054
  }), 128))
8049
8055
  ]);
8050
8056
  }), 128))])
8051
- ], 12, _hoisted_3$32),
8057
+ ], 12, _hoisted_3$33),
8052
8058
  props.heatmap?.enabled && props.heatmap.showLegend ? (openBlock(), createElementBlock("div", _hoisted_16$12, [
8053
8059
  createElementVNode("span", _hoisted_17$12, toDisplayString(props.heatmap.min ?? 0), 1),
8054
8060
  createElementVNode("div", _hoisted_18$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.heatmap.colorScale === "custom" && props.heatmap.customColors?.length ? props.heatmap.customColors : unref(HEATMAP_COLORS)[props.heatmap.colorScale || "viridis"], (color, index) => {
@@ -8106,8 +8112,8 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
8106
8112
  });
8107
8113
  //#endregion
8108
8114
  //#region src/components/SampleLegend.vue?vue&type=script&setup=true&lang.ts
8109
- var _hoisted_1$39 = ["aria-pressed", "onClick"];
8110
- var _hoisted_2$35 = ["aria-label", "onClick"];
8115
+ var _hoisted_1$40 = ["aria-pressed", "onClick"];
8116
+ var _hoisted_2$36 = ["aria-label", "onClick"];
8111
8117
  //#endregion
8112
8118
  //#region src/components/SampleLegend.vue
8113
8119
  var SampleLegend_default = /* @__PURE__ */ defineComponent({
@@ -8207,8 +8213,8 @@ var SampleLegend_default = /* @__PURE__ */ defineComponent({
8207
8213
  "stroke-linejoin": "round",
8208
8214
  "stroke-width": "2",
8209
8215
  d: "M6 18L18 6M6 6l12 12"
8210
- })], -1)])], 8, _hoisted_2$35)) : createCommentVNode("", true)
8211
- ], 10, _hoisted_1$39);
8216
+ })], -1)])], 8, _hoisted_2$36)) : createCommentVNode("", true)
8217
+ ], 10, _hoisted_1$40);
8212
8218
  }), 128)), __props.editable ? (openBlock(), createElementBlock("button", {
8213
8219
  key: 0,
8214
8220
  type: "button",
@@ -8231,11 +8237,11 @@ var SampleLegend_default = /* @__PURE__ */ defineComponent({
8231
8237
  });
8232
8238
  //#endregion
8233
8239
  //#region src/components/internal/PlateMapEditorToolbarInternal.vue?vue&type=script&setup=true&lang.ts
8234
- var _hoisted_1$38 = { class: "mint-plate-editor__toolbar" };
8235
- var _hoisted_2$34 = { class: "mint-plate-editor__tabs" };
8236
- var _hoisted_3$31 = ["onClick"];
8237
- var _hoisted_4$30 = { class: "mint-plate-editor__tab-name" };
8238
- var _hoisted_5$28 = {
8240
+ var _hoisted_1$39 = { class: "mint-plate-editor__toolbar" };
8241
+ var _hoisted_2$35 = { class: "mint-plate-editor__tabs" };
8242
+ var _hoisted_3$32 = ["onClick"];
8243
+ var _hoisted_4$31 = { class: "mint-plate-editor__tab-name" };
8244
+ var _hoisted_5$29 = {
8239
8245
  key: 0,
8240
8246
  class: "mint-plate-editor__tab-count"
8241
8247
  };
@@ -8270,8 +8276,8 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8270
8276
  const props = __props;
8271
8277
  const emit = __emit;
8272
8278
  return (_ctx, _cache) => {
8273
- return openBlock(), createElementBlock("div", _hoisted_1$38, [
8274
- createElementVNode("div", _hoisted_2$34, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.plates, (plate, index) => {
8279
+ return openBlock(), createElementBlock("div", _hoisted_1$39, [
8280
+ createElementVNode("div", _hoisted_2$35, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.plates, (plate, index) => {
8275
8281
  return openBlock(), createElementBlock("button", {
8276
8282
  key: plate.id,
8277
8283
  type: "button",
@@ -8282,8 +8288,8 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8282
8288
  class: "mint-plate-editor__tab-slot",
8283
8289
  style: normalizeStyle({ backgroundColor: __props.slotColorForPlate(plate.id, index) })
8284
8290
  }, null, 4),
8285
- createElementVNode("span", _hoisted_4$30, toDisplayString(plate.name), 1),
8286
- __props.plateWellCounts[plate.id] > 0 ? (openBlock(), createElementBlock("span", _hoisted_5$28, toDisplayString(__props.plateWellCounts[plate.id]), 1)) : createCommentVNode("", true),
8291
+ createElementVNode("span", _hoisted_4$31, toDisplayString(plate.name), 1),
8292
+ __props.plateWellCounts[plate.id] > 0 ? (openBlock(), createElementBlock("span", _hoisted_5$29, toDisplayString(__props.plateWellCounts[plate.id]), 1)) : createCommentVNode("", true),
8287
8293
  props.plates.length > 1 ? (openBlock(), createElementBlock("button", {
8288
8294
  key: 1,
8289
8295
  type: "button",
@@ -8298,7 +8304,7 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8298
8304
  "stroke-linecap": "round",
8299
8305
  "stroke-linejoin": "round"
8300
8306
  }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])], 8, _hoisted_6$28)) : createCommentVNode("", true)
8301
- ], 10, _hoisted_3$31);
8307
+ ], 10, _hoisted_3$32);
8302
8308
  }), 128)), __props.canAddPlate ? (openBlock(), createElementBlock("button", {
8303
8309
  key: 0,
8304
8310
  type: "button",
@@ -8385,17 +8391,17 @@ var PlateMapEditorToolbarInternal_default = /* @__PURE__ */ defineComponent({
8385
8391
  });
8386
8392
  //#endregion
8387
8393
  //#region src/components/PlateMapEditor.vue?vue&type=script&setup=true&lang.ts
8388
- var _hoisted_1$37 = { class: "mint-plate-editor__main" };
8389
- var _hoisted_2$33 = {
8394
+ var _hoisted_1$38 = { class: "mint-plate-editor__main" };
8395
+ var _hoisted_2$34 = {
8390
8396
  key: 2,
8391
8397
  class: "mint-plate-editor__selection-bar"
8392
8398
  };
8393
- var _hoisted_3$30 = { class: "mint-plate-editor__selection-count" };
8394
- var _hoisted_4$29 = {
8399
+ var _hoisted_3$31 = { class: "mint-plate-editor__selection-count" };
8400
+ var _hoisted_4$30 = {
8395
8401
  key: 0,
8396
8402
  class: "mint-plate-editor__sidebar"
8397
8403
  };
8398
- var _hoisted_5$27 = { class: "mint-plate-editor__sidebar-panel" };
8404
+ var _hoisted_5$28 = { class: "mint-plate-editor__sidebar-panel" };
8399
8405
  var _hoisted_6$27 = {
8400
8406
  key: 0,
8401
8407
  class: "mint-plate-editor__add-sample"
@@ -8589,7 +8595,7 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8589
8595
  useEventListener(() => document, "keydown", handleKeyDown);
8590
8596
  return (_ctx, _cache) => {
8591
8597
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-plate-editor", { "mint-plate-editor--with-sidebar": __props.showSidebar }]) }, [
8592
- createElementVNode("div", _hoisted_1$37, [
8598
+ createElementVNode("div", _hoisted_1$38, [
8593
8599
  __props.showToolbar ? (openBlock(), createBlock(PlateMapEditorToolbarInternal_default, {
8594
8600
  key: 0,
8595
8601
  plates: unref(editor).plates.value,
@@ -8632,8 +8638,8 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8632
8638
  "sample-colors",
8633
8639
  "size"
8634
8640
  ])) : createCommentVNode("", true),
8635
- unref(editor).selectedWells.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$33, [
8636
- createElementVNode("span", _hoisted_3$30, [createElementVNode("strong", null, toDisplayString(unref(editor).selectedWells.value.length), 1), _cache[8] || (_cache[8] = createTextVNode(" wells selected ", -1))]),
8641
+ unref(editor).selectedWells.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$34, [
8642
+ createElementVNode("span", _hoisted_3$31, [createElementVNode("strong", null, toDisplayString(unref(editor).selectedWells.value.length), 1), _cache[8] || (_cache[8] = createTextVNode(" wells selected ", -1))]),
8637
8643
  _cache[9] || (_cache[9] = createElementVNode("div", { class: "mint-plate-editor__spacer" }, null, -1)),
8638
8644
  unref(editor).activeSampleId.value ? (openBlock(), createElementBlock("button", {
8639
8645
  key: 0,
@@ -8649,7 +8655,7 @@ var PlateMapEditor_default = /* @__PURE__ */ defineComponent({
8649
8655
  ])) : createCommentVNode("", true),
8650
8656
  _cache[10] || (_cache[10] = createStaticVNode("<div class=\"mint-plate-editor__legend\"><div class=\"mint-plate-editor__legend-items\"><div class=\"mint-plate-editor__legend-item\"><div class=\"mint-plate-editor__legend-swatch\" style=\"background-color:rgba(16, 185, 129, 0.15);border:1px solid rgba(16, 185, 129, 0.4);\"></div><span class=\"mint-plate-editor__legend-label\">Sample</span></div><div class=\"mint-plate-editor__legend-item\"><div class=\"mint-plate-editor__legend-swatch\" style=\"background-color:rgba(59, 130, 246, 0.15);border:1px solid rgba(59, 130, 246, 0.4);\"></div><span class=\"mint-plate-editor__legend-label\">Control</span></div><div class=\"mint-plate-editor__legend-item\"><div class=\"mint-plate-editor__legend-swatch\" style=\"background-color:rgba(249, 115, 22, 0.15);border:1px solid rgba(249, 115, 22, 0.4);\"></div><span class=\"mint-plate-editor__legend-label\">Blank</span></div><div class=\"mint-plate-editor__legend-item\"><div class=\"mint-plate-editor__legend-swatch\" style=\"background-color:rgba(139, 92, 246, 0.15);border:1px solid rgba(139, 92, 246, 0.4);\"></div><span class=\"mint-plate-editor__legend-label\">QC</span></div></div><span class=\"mint-plate-editor__legend-hint\"><svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72\"></path><path d=\"m14 7 3 3\"></path><path d=\"M5 6v4\"></path><path d=\"M19 14v4\"></path><path d=\"M10 2v2\"></path><path d=\"M7 8H3\"></path><path d=\"M21 16h-4\"></path><path d=\"M11 3H9\"></path></svg> Drag to select </span></div>", 1))
8651
8657
  ]),
8652
- __props.showSidebar ? (openBlock(), createElementBlock("div", _hoisted_4$29, [createElementVNode("div", _hoisted_5$27, [
8658
+ __props.showSidebar ? (openBlock(), createElementBlock("div", _hoisted_4$30, [createElementVNode("div", _hoisted_5$28, [
8653
8659
  _cache[11] || (_cache[11] = createElementVNode("h3", { class: "mint-plate-editor__sidebar-title" }, "Sample Types", -1)),
8654
8660
  createVNode(SampleLegend_default, {
8655
8661
  "model-value": unref(editor).activeSampleId.value,
@@ -8774,17 +8780,17 @@ function getReagentRowClasses(reagent, options) {
8774
8780
  }
8775
8781
  //#endregion
8776
8782
  //#region src/components/ReagentList.vue?vue&type=script&setup=true&lang.ts
8777
- var _hoisted_1$36 = { class: "mint-reagent-list" };
8778
- var _hoisted_2$32 = { class: "mint-reagent-list__header" };
8779
- var _hoisted_3$29 = {
8783
+ var _hoisted_1$37 = { class: "mint-reagent-list" };
8784
+ var _hoisted_2$33 = { class: "mint-reagent-list__header" };
8785
+ var _hoisted_3$30 = {
8780
8786
  key: 0,
8781
8787
  class: "mint-reagent-list__search"
8782
8788
  };
8783
- var _hoisted_4$28 = {
8789
+ var _hoisted_4$29 = {
8784
8790
  key: 0,
8785
8791
  class: "mint-reagent-list__table"
8786
8792
  };
8787
- var _hoisted_5$26 = {
8793
+ var _hoisted_5$27 = {
8788
8794
  key: 0,
8789
8795
  style: { "width": "24px" }
8790
8796
  };
@@ -8861,30 +8867,30 @@ var _hoisted_25$7 = {
8861
8867
  key: 6,
8862
8868
  class: "mint-reagent-list__cell mint-reagent-list__cell--muted"
8863
8869
  };
8864
- var _hoisted_26$7 = {
8870
+ var _hoisted_26$6 = {
8865
8871
  key: 7,
8866
8872
  class: "mint-reagent-list__cell"
8867
8873
  };
8868
- var _hoisted_27$6 = {
8874
+ var _hoisted_27$5 = {
8869
8875
  key: 0,
8870
8876
  class: "mint-reagent-list__stock"
8871
8877
  };
8872
- var _hoisted_28$5 = { class: "mint-reagent-list__stock-bar" };
8873
- var _hoisted_29$4 = { class: "mint-reagent-list__stock-text" };
8874
- var _hoisted_30$4 = {
8878
+ var _hoisted_28$4 = { class: "mint-reagent-list__stock-bar" };
8879
+ var _hoisted_29$3 = { class: "mint-reagent-list__stock-text" };
8880
+ var _hoisted_30$3 = {
8875
8881
  key: 1,
8876
8882
  class: "mint-reagent-list__cell--muted"
8877
8883
  };
8878
- var _hoisted_31$4 = {
8884
+ var _hoisted_31$3 = {
8879
8885
  key: 8,
8880
8886
  class: "mint-reagent-list__cell mint-reagent-list__cell--muted"
8881
8887
  };
8882
- var _hoisted_32$4 = {
8888
+ var _hoisted_32$3 = {
8883
8889
  key: 9,
8884
8890
  class: "mint-reagent-list__cell mint-reagent-list__cell--actions"
8885
8891
  };
8886
- var _hoisted_33$4 = ["onClick"];
8887
- var _hoisted_34$4 = ["onClick"];
8892
+ var _hoisted_33$3 = ["onClick"];
8893
+ var _hoisted_34$3 = ["onClick"];
8888
8894
  var _hoisted_35$3 = {
8889
8895
  key: 1,
8890
8896
  class: "mint-reagent-list__empty"
@@ -9025,7 +9031,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9025
9031
  dragOverId.value = null;
9026
9032
  }
9027
9033
  return (_ctx, _cache) => {
9028
- return openBlock(), createElementBlock("div", _hoisted_1$36, [createElementVNode("div", _hoisted_2$32, [__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_3$29, [_cache[1] || (_cache[1] = createElementVNode("svg", {
9034
+ return openBlock(), createElementBlock("div", _hoisted_1$37, [createElementVNode("div", _hoisted_2$33, [__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_3$30, [_cache[1] || (_cache[1] = createElementVNode("svg", {
9029
9035
  class: "mint-reagent-list__search-icon",
9030
9036
  fill: "none",
9031
9037
  stroke: "currentColor",
@@ -9054,8 +9060,8 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9054
9060
  "stroke-linejoin": "round",
9055
9061
  "stroke-width": "2",
9056
9062
  d: "M12 4v16m8-8H4"
9057
- })], -1), createTextVNode(" Add ", -1)])])) : createCommentVNode("", true)]), unref(filteredReagents).length > 0 ? (openBlock(), createElementBlock("table", _hoisted_4$28, [createElementVNode("thead", null, [createElementVNode("tr", null, [
9058
- __props.sortable && !__props.readonly ? (openBlock(), createElementBlock("th", _hoisted_5$26)) : createCommentVNode("", true),
9063
+ })], -1), createTextVNode(" Add ", -1)])])) : createCommentVNode("", true)]), unref(filteredReagents).length > 0 ? (openBlock(), createElementBlock("table", _hoisted_4$29, [createElementVNode("thead", null, [createElementVNode("tr", null, [
9064
+ __props.sortable && !__props.readonly ? (openBlock(), createElementBlock("th", _hoisted_5$27)) : createCommentVNode("", true),
9059
9065
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
9060
9066
  return openBlock(), createElementBlock("th", {
9061
9067
  key: col,
@@ -9127,12 +9133,12 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9127
9133
  class: normalizeClass(["mint-reagent-list__storage", `mint-reagent-list__storage--${reagent.storageCondition}`])
9128
9134
  }, toDisplayString(reagent.storageCondition), 3)) : (openBlock(), createElementBlock("span", _hoisted_24$7, "-"))])) : createCommentVNode("", true),
9129
9135
  __props.columns.includes("location") ? (openBlock(), createElementBlock("td", _hoisted_25$7, toDisplayString(reagent.location || "-"), 1)) : createCommentVNode("", true),
9130
- __props.columns.includes("stock") && __props.showStockLevel ? (openBlock(), createElementBlock("td", _hoisted_26$7, [reagent.stockLevel !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_27$6, [createElementVNode("div", _hoisted_28$5, [createElementVNode("div", {
9136
+ __props.columns.includes("stock") && __props.showStockLevel ? (openBlock(), createElementBlock("td", _hoisted_26$6, [reagent.stockLevel !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_27$5, [createElementVNode("div", _hoisted_28$4, [createElementVNode("div", {
9131
9137
  class: normalizeClass(["mint-reagent-list__stock-fill", unref(getReagentStockFillClass)(unref(getReagentStockLevel)(reagent))]),
9132
9138
  style: normalizeStyle({ width: `${Math.min(100, unref(getReagentStockLevel)(reagent))}%` })
9133
- }, null, 6)]), createElementVNode("span", _hoisted_29$4, toDisplayString(unref(getReagentStockLevel)(reagent)) + "% ", 1)])) : (openBlock(), createElementBlock("span", _hoisted_30$4, "-"))])) : createCommentVNode("", true),
9134
- __props.columns.includes("supplier") ? (openBlock(), createElementBlock("td", _hoisted_31$4, toDisplayString(reagent.supplier || "-"), 1)) : createCommentVNode("", true),
9135
- !__props.readonly ? (openBlock(), createElementBlock("td", _hoisted_32$4, [createElementVNode("button", {
9139
+ }, null, 6)]), createElementVNode("span", _hoisted_29$3, toDisplayString(unref(getReagentStockLevel)(reagent)) + "% ", 1)])) : (openBlock(), createElementBlock("span", _hoisted_30$3, "-"))])) : createCommentVNode("", true),
9140
+ __props.columns.includes("supplier") ? (openBlock(), createElementBlock("td", _hoisted_31$3, toDisplayString(reagent.supplier || "-"), 1)) : createCommentVNode("", true),
9141
+ !__props.readonly ? (openBlock(), createElementBlock("td", _hoisted_32$3, [createElementVNode("button", {
9136
9142
  type: "button",
9137
9143
  class: "mint-reagent-list__action-btn",
9138
9144
  "aria-label": "Edit",
@@ -9146,7 +9152,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9146
9152
  "stroke-linejoin": "round",
9147
9153
  "stroke-width": "2",
9148
9154
  d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
9149
- })], -1)])], 8, _hoisted_33$4), createElementVNode("button", {
9155
+ })], -1)])], 8, _hoisted_33$3), createElementVNode("button", {
9150
9156
  type: "button",
9151
9157
  class: "mint-reagent-list__action-btn mint-reagent-list__action-btn--danger",
9152
9158
  "aria-label": "Remove",
@@ -9160,7 +9166,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9160
9166
  "stroke-linejoin": "round",
9161
9167
  "stroke-width": "2",
9162
9168
  d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
9163
- })], -1)])], 8, _hoisted_34$4)])) : createCommentVNode("", true)
9169
+ })], -1)])], 8, _hoisted_34$3)])) : createCommentVNode("", true)
9164
9170
  ], 42, _hoisted_10$18);
9165
9171
  }), 128))])])) : (openBlock(), createElementBlock("div", _hoisted_35$3, [
9166
9172
  _cache[8] || (_cache[8] = createElementVNode("svg", {
@@ -9189,10 +9195,11 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9189
9195
  //#region src/components/SmartGroupFieldRecipe.groups.ts
9190
9196
  /**
9191
9197
  * Build the ordered group list from whichever fields are switched on.
9192
- * Returns an empty list when no field is active.
9198
+ * Returns an empty list when no field is active. `layerOrder` (field indices
9199
+ * in layer order) overrides the default field-order joining of the group name.
9193
9200
  */
9194
- function computeFieldGroups(samples, fields, on, palette) {
9195
- const keys = fields.filter((_, i) => on[i]).map((field) => field.key);
9201
+ function computeFieldGroups(samples, fields, on, palette, layerOrder) {
9202
+ const keys = layerOrder ? layerOrder.filter((i) => on[i]).map((i) => fields[i].key) : fields.filter((_, i) => on[i]).map((field) => field.key);
9196
9203
  if (keys.length === 0) return [];
9197
9204
  const order = [];
9198
9205
  const counts = /* @__PURE__ */ new Map();
@@ -9244,11 +9251,11 @@ function fieldRecipeSummary(input) {
9244
9251
  }
9245
9252
  //#endregion
9246
9253
  //#region src/components/SmartGroupFieldRecipe.vue?vue&type=script&setup=true&lang.ts
9247
- var _hoisted_1$35 = { class: "sg-modal fr" };
9248
- var _hoisted_2$31 = { class: "sg-head" };
9249
- var _hoisted_3$28 = { class: "sg-head__sub" };
9250
- var _hoisted_4$27 = ["aria-expanded"];
9251
- var _hoisted_5$25 = {
9254
+ var _hoisted_1$36 = { class: "sg-modal fr" };
9255
+ var _hoisted_2$32 = { class: "sg-head" };
9256
+ var _hoisted_3$29 = { class: "sg-head__sub" };
9257
+ var _hoisted_4$28 = ["aria-expanded"];
9258
+ var _hoisted_5$26 = {
9252
9259
  key: 0,
9253
9260
  class: "fr-csv-menu",
9254
9261
  role: "menu"
@@ -9285,37 +9292,52 @@ var _hoisted_15$11 = [
9285
9292
  "aria-label",
9286
9293
  "onClick"
9287
9294
  ];
9288
- var _hoisted_16$10 = { class: "sg-field__vals" };
9289
- var _hoisted_17$10 = {
9295
+ var _hoisted_16$10 = {
9296
+ key: 0,
9297
+ class: "sg-field__order"
9298
+ };
9299
+ var _hoisted_17$10 = { class: "sg-field__layer" };
9300
+ var _hoisted_18$10 = [
9301
+ "disabled",
9302
+ "aria-label",
9303
+ "onClick"
9304
+ ];
9305
+ var _hoisted_19$10 = [
9306
+ "disabled",
9307
+ "aria-label",
9308
+ "onClick"
9309
+ ];
9310
+ var _hoisted_20$9 = { class: "sg-field__vals" };
9311
+ var _hoisted_21$8 = {
9290
9312
  key: 2,
9291
9313
  class: "sg-summary fr-summary--mute"
9292
9314
  };
9293
- var _hoisted_18$10 = { class: "sg-summary__icon" };
9294
- var _hoisted_19$10 = {
9315
+ var _hoisted_22$7 = { class: "sg-summary__icon" };
9316
+ var _hoisted_23$6 = {
9295
9317
  key: 3,
9296
9318
  class: "sg-summary sg-summary--warn"
9297
9319
  };
9298
- var _hoisted_20$9 = { class: "sg-summary__icon" };
9299
- var _hoisted_21$8 = {
9320
+ var _hoisted_24$6 = { class: "sg-summary__icon" };
9321
+ var _hoisted_25$6 = {
9300
9322
  key: 4,
9301
9323
  class: "sg-summary"
9302
9324
  };
9303
- var _hoisted_22$7 = { class: "sg-summary__icon" };
9304
- var _hoisted_23$6 = { class: "sg-body__side" };
9305
- var _hoisted_24$6 = { class: "sg-preview__head" };
9306
- var _hoisted_25$6 = { class: "sg-preview__count" };
9307
- var _hoisted_26$6 = { class: "sg-grouplist" };
9308
- var _hoisted_27$5 = {
9325
+ var _hoisted_26$5 = { class: "sg-summary__icon" };
9326
+ var _hoisted_27$4 = { class: "sg-body__side" };
9327
+ var _hoisted_28$3 = { class: "sg-preview__head" };
9328
+ var _hoisted_29$2 = { class: "sg-preview__count" };
9329
+ var _hoisted_30$2 = { class: "sg-grouplist" };
9330
+ var _hoisted_31$2 = {
9309
9331
  key: 0,
9310
9332
  class: "fr-empty"
9311
9333
  };
9312
- var _hoisted_28$4 = { class: "sg-group__name" };
9313
- var _hoisted_29$3 = { class: "sg-group__count" };
9314
- var _hoisted_30$3 = { class: "sg-qc" };
9315
- var _hoisted_31$3 = { class: "sg-qc__head" };
9316
- var _hoisted_32$3 = ["value"];
9317
- var _hoisted_33$3 = { class: "sg-foot" };
9318
- var _hoisted_34$3 = { class: "sg-foot__hint" };
9334
+ var _hoisted_32$2 = { class: "sg-group__name" };
9335
+ var _hoisted_33$2 = { class: "sg-group__count" };
9336
+ var _hoisted_34$2 = { class: "sg-qc" };
9337
+ var _hoisted_35$2 = { class: "sg-qc__head" };
9338
+ var _hoisted_36$2 = ["value"];
9339
+ var _hoisted_37$2 = { class: "sg-foot" };
9340
+ var _hoisted_38$2 = { class: "sg-foot__hint" };
9319
9341
  var DEFAULT_SAMPLES = [
9320
9342
  {
9321
9343
  Condition: "Control",
@@ -9378,6 +9400,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9378
9400
  palette: { default: () => DEFAULT_PALETTE$1 },
9379
9401
  qcColor: { default: "var(--grp-qc)" },
9380
9402
  enabled: {},
9403
+ layers: {},
9381
9404
  groups: {},
9382
9405
  qcChip: {},
9383
9406
  route: {},
@@ -9397,6 +9420,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9397
9420
  "manual",
9398
9421
  "close",
9399
9422
  "toggle",
9423
+ "move",
9400
9424
  "update:route",
9401
9425
  "csv-file",
9402
9426
  "download-template",
@@ -9424,7 +9448,8 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9424
9448
  close: "M6 18L18 6M6 6l12 12",
9425
9449
  upload: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12",
9426
9450
  download: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3",
9427
- chev: "M6 9l6 6 6-6"
9451
+ chev: "M6 9l6 6 6-6",
9452
+ chevUp: "M18 15l-6-6-6 6"
9428
9453
  };
9429
9454
  const MAX_BAR = 44;
9430
9455
  const fileInput = ref(null);
@@ -9472,15 +9497,31 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9472
9497
  emit("download-prefilled");
9473
9498
  }
9474
9499
  const onInner = ref(props.initialOn ? [...props.initialOn] : props.fields.map((field) => !field.rep));
9500
+ const orderInner = ref(onInner.value.flatMap((isOn, i) => isOn ? [i] : []));
9475
9501
  const routeInner = ref(props.initialRoute);
9476
9502
  const controlledEnabled = computed(() => props.enabled !== void 0);
9477
9503
  const controlledRoute = computed(() => props.route !== void 0);
9478
9504
  const on = computed(() => props.enabled ?? onInner.value);
9479
9505
  const currentRoute = computed(() => props.route ?? routeInner.value);
9480
- const computedBase = computed(() => computeFieldGroups(props.samples, props.fields, on.value, props.palette));
9506
+ const layers = computed(() => {
9507
+ if (props.layers !== void 0) return props.layers;
9508
+ if (controlledEnabled.value) {
9509
+ let layer = 0;
9510
+ return props.fields.map((_, i) => on.value[i] ? ++layer : null);
9511
+ }
9512
+ return props.fields.map((_, i) => {
9513
+ const pos = orderInner.value.indexOf(i);
9514
+ return pos === -1 ? null : pos + 1;
9515
+ });
9516
+ });
9517
+ const layerOrder = computed(() => layers.value.flatMap((layer, i) => layer === null ? [] : [{
9518
+ layer,
9519
+ i
9520
+ }]).sort((a, b) => a.layer - b.layer).map((entry) => entry.i));
9521
+ const computedBase = computed(() => computeFieldGroups(props.samples, props.fields, on.value, props.palette, layerOrder.value));
9481
9522
  const baseGroups = computed(() => props.groups ?? computedBase.value);
9482
9523
  const groups = computed(() => props.groups ?? appendQcGroup(computedBase.value, currentRoute.value, props.qcColor));
9483
- const activeFactors = computed(() => props.fields.filter((_, i) => on.value[i]).map((field) => field.key));
9524
+ const activeFactors = computed(() => layerOrder.value.map((i) => props.fields[i].key));
9484
9525
  const counts = computed(() => baseGroups.value.map((group) => group.count));
9485
9526
  const uniform = computed(() => counts.value.length > 0 && counts.value.every((count) => count === counts.value[0]));
9486
9527
  const repField = computed(() => props.fields.find((field) => field.rep));
@@ -9510,7 +9551,22 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9510
9551
  emit("toggle", index);
9511
9552
  return;
9512
9553
  }
9554
+ const wasOn = onInner.value[index];
9513
9555
  onInner.value = onInner.value.map((value, i) => i === index ? !value : value);
9556
+ orderInner.value = wasOn ? orderInner.value.filter((i) => i !== index) : [...orderInner.value, index];
9557
+ }
9558
+ function moveLayer(index, direction) {
9559
+ if (controlledEnabled.value) {
9560
+ emit("move", index, direction);
9561
+ return;
9562
+ }
9563
+ const from = orderInner.value.indexOf(index);
9564
+ if (from === -1) return;
9565
+ const to = direction === "up" ? from - 1 : from + 1;
9566
+ if (to < 0 || to >= orderInner.value.length) return;
9567
+ const next = [...orderInner.value];
9568
+ [next[from], next[to]] = [next[to], next[from]];
9569
+ orderInner.value = next;
9514
9570
  }
9515
9571
  function onRouteChange(value) {
9516
9572
  if (controlledRoute.value) {
@@ -9529,14 +9585,14 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9529
9585
  });
9530
9586
  }
9531
9587
  return (_ctx, _cache) => {
9532
- return openBlock(), createElementBlock("div", _hoisted_1$35, [
9533
- createElementVNode("div", _hoisted_2$31, [
9588
+ return openBlock(), createElementBlock("div", _hoisted_1$36, [
9589
+ createElementVNode("div", _hoisted_2$32, [
9534
9590
  createVNode(Icon, {
9535
9591
  d: ICON.bolt,
9536
9592
  size: 18
9537
9593
  }, null, 8, ["d"]),
9538
9594
  _cache[11] || (_cache[11] = createElementVNode("span", { class: "sg-head__title" }, "Group samples", -1)),
9539
- createElementVNode("span", _hoisted_3$28, [createTextVNode("· " + toDisplayString(__props.headerCount) + " samples", 1), __props.experimentLabel ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" from " + toDisplayString(__props.experimentLabel), 1)], 64)) : createCommentVNode("", true)]),
9595
+ createElementVNode("span", _hoisted_3$29, [createTextVNode("· " + toDisplayString(__props.headerCount) + " samples", 1), __props.experimentLabel ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" from " + toDisplayString(__props.experimentLabel), 1)], 64)) : createCommentVNode("", true)]),
9540
9596
  _cache[12] || (_cache[12] = createElementVNode("div", { class: "sg-head__spacer" }, null, -1)),
9541
9597
  createElementVNode("div", {
9542
9598
  ref_key: "csvMenuRoot",
@@ -9559,8 +9615,8 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9559
9615
  d: ICON.chev,
9560
9616
  size: 13
9561
9617
  }, null, 8, ["d"])
9562
- ], 8, _hoisted_4$27),
9563
- unref(csvMenuOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$25, [
9618
+ ], 8, _hoisted_4$28),
9619
+ unref(csvMenuOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$26, [
9564
9620
  createElementVNode("button", {
9565
9621
  type: "button",
9566
9622
  class: "fr-csv-item",
@@ -9657,13 +9713,38 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9657
9713
  "aria-label": "Group by " + field.key,
9658
9714
  onClick: ($event) => toggle(i)
9659
9715
  }, null, 10, _hoisted_15$11),
9660
- createElementVNode("div", _hoisted_16$10, toDisplayString(field.vals), 1)
9716
+ on.value[i] && layers.value[i] !== null ? (openBlock(), createElementBlock("div", _hoisted_16$10, [
9717
+ createElementVNode("span", _hoisted_17$10, "Layer " + toDisplayString(layers.value[i]), 1),
9718
+ createElementVNode("button", {
9719
+ type: "button",
9720
+ class: "sg-field__order-btn",
9721
+ disabled: layers.value[i] === 1,
9722
+ "aria-label": "Move " + field.key + " up a layer",
9723
+ title: "Move up a layer",
9724
+ onClick: withModifiers(($event) => moveLayer(i, "up"), ["stop"])
9725
+ }, [createVNode(Icon, {
9726
+ d: ICON.chevUp,
9727
+ size: 12
9728
+ }, null, 8, ["d"])], 8, _hoisted_18$10),
9729
+ createElementVNode("button", {
9730
+ type: "button",
9731
+ class: "sg-field__order-btn",
9732
+ disabled: layers.value[i] === layerOrder.value.length,
9733
+ "aria-label": "Move " + field.key + " down a layer",
9734
+ title: "Move down a layer",
9735
+ onClick: withModifiers(($event) => moveLayer(i, "down"), ["stop"])
9736
+ }, [createVNode(Icon, {
9737
+ d: ICON.chev,
9738
+ size: 12
9739
+ }, null, 8, ["d"])], 8, _hoisted_19$10)
9740
+ ])) : createCommentVNode("", true),
9741
+ createElementVNode("div", _hoisted_20$9, toDisplayString(field.vals), 1)
9661
9742
  ], 2);
9662
9743
  }), 128))]),
9663
- summary.value.kind === "mute" ? (openBlock(), createElementBlock("div", _hoisted_17$10, [createElementVNode("span", _hoisted_18$10, [createVNode(Icon, {
9744
+ summary.value.kind === "mute" ? (openBlock(), createElementBlock("div", _hoisted_21$8, [createElementVNode("span", _hoisted_22$7, [createVNode(Icon, {
9664
9745
  d: ICON.info,
9665
9746
  size: 16
9666
- }, null, 8, ["d"])]), _cache[15] || (_cache[15] = createElementVNode("span", null, "Turn on at least one field to form groups.", -1))])) : summary.value.kind === "warn" ? (openBlock(), createElementBlock("div", _hoisted_19$10, [createElementVNode("span", _hoisted_20$9, [createVNode(Icon, {
9747
+ }, null, 8, ["d"])]), _cache[15] || (_cache[15] = createElementVNode("span", null, "Turn on at least one field to form groups.", -1))])) : summary.value.kind === "warn" ? (openBlock(), createElementBlock("div", _hoisted_23$6, [createElementVNode("span", _hoisted_24$6, [createVNode(Icon, {
9667
9748
  d: ICON.warn,
9668
9749
  size: 16
9669
9750
  }, null, 8, ["d"])]), createElementVNode("span", null, [
@@ -9674,7 +9755,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9674
9755
  _cache[18] || (_cache[18] = createTextVNode(". Turn it off to keep ", -1)),
9675
9756
  createElementVNode("code", null, toDisplayString(repRange.value), 1),
9676
9757
  _cache[19] || (_cache[19] = createTextVNode(" together. ", -1))
9677
- ])])) : (openBlock(), createElementBlock("div", _hoisted_21$8, [createElementVNode("span", _hoisted_22$7, [createVNode(Icon, {
9758
+ ])])) : (openBlock(), createElementBlock("div", _hoisted_25$6, [createElementVNode("span", _hoisted_26$5, [createVNode(Icon, {
9678
9759
  d: ICON.info,
9679
9760
  size: 16
9680
9761
  }, null, 8, ["d"])]), createElementVNode("span", null, [
@@ -9684,9 +9765,9 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9684
9765
  createElementVNode("b", null, [createTextVNode(toDisplayString(baseGroups.value.length) + " groups", 1), uniform.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" of " + toDisplayString(counts.value[0]), 1)], 64)) : createCommentVNode("", true)]),
9685
9766
  _cache[22] || (_cache[22] = createTextVNode(". Replicates kept together. ", -1))
9686
9767
  ])]))
9687
- ], 32), createElementVNode("div", _hoisted_23$6, [
9688
- createElementVNode("div", _hoisted_24$6, [_cache[24] || (_cache[24] = createTextVNode(" Resulting groups ", -1)), createElementVNode("span", _hoisted_25$6, toDisplayString(groups.value.length) + " groups · " + toDisplayString(groupedSampleTotal.value) + " samples", 1)]),
9689
- createElementVNode("div", _hoisted_26$6, [groups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_27$5, "No groups yet — pick a field to start.")) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(groups.value, (group) => {
9768
+ ], 32), createElementVNode("div", _hoisted_27$4, [
9769
+ createElementVNode("div", _hoisted_28$3, [_cache[24] || (_cache[24] = createTextVNode(" Resulting groups ", -1)), createElementVNode("span", _hoisted_29$2, toDisplayString(groups.value.length) + " groups · " + toDisplayString(groupedSampleTotal.value) + " samples", 1)]),
9770
+ createElementVNode("div", _hoisted_30$2, [groups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_31$2, "No groups yet — pick a field to start.")) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(groups.value, (group) => {
9690
9771
  return openBlock(), createElementBlock("div", {
9691
9772
  key: group.name,
9692
9773
  class: "sg-group"
@@ -9695,7 +9776,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9695
9776
  class: "sg-dot",
9696
9777
  style: normalizeStyle({ background: group.color })
9697
9778
  }, null, 4),
9698
- createElementVNode("span", _hoisted_28$4, toDisplayString(group.name), 1),
9779
+ createElementVNode("span", _hoisted_32$2, toDisplayString(group.name), 1),
9699
9780
  createElementVNode("span", {
9700
9781
  class: "sg-group__bar",
9701
9782
  style: normalizeStyle({
@@ -9703,10 +9784,10 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9703
9784
  "--g": group.color
9704
9785
  })
9705
9786
  }, null, 4),
9706
- createElementVNode("span", _hoisted_29$3, toDisplayString(group.count), 1)
9787
+ createElementVNode("span", _hoisted_33$2, toDisplayString(group.count), 1)
9707
9788
  ]);
9708
9789
  }), 128))]),
9709
- createElementVNode("div", _hoisted_30$3, [createElementVNode("div", _hoisted_31$3, [_cache[26] || (_cache[26] = createElementVNode("span", { class: "sg-qc__title" }, "Quality control", -1)), createElementVNode("select", {
9790
+ createElementVNode("div", _hoisted_34$2, [createElementVNode("div", _hoisted_35$2, [_cache[26] || (_cache[26] = createElementVNode("span", { class: "sg-qc__title" }, "Quality control", -1)), createElementVNode("select", {
9710
9791
  class: "sg-qc__route",
9711
9792
  value: currentRoute.value,
9712
9793
  onChange: _cache[4] || (_cache[4] = ($event) => onRouteChange($event.target.value))
@@ -9714,7 +9795,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9714
9795
  createElementVNode("option", null, "Overlay only", -1),
9715
9796
  createElementVNode("option", null, "Exclude", -1),
9716
9797
  createElementVNode("option", null, "Mix into groups", -1)
9717
- ])], 40, _hoisted_32$3)]), qcChip.value ? (openBlock(), createElementBlock("span", {
9798
+ ])], 40, _hoisted_36$2)]), qcChip.value ? (openBlock(), createElementBlock("span", {
9718
9799
  key: 0,
9719
9800
  class: normalizeClass(["sg-qc__chip", { "fr-qc__chip--off": currentRoute.value === "Exclude" }])
9720
9801
  }, [createElementVNode("span", {
@@ -9722,8 +9803,8 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9722
9803
  style: normalizeStyle({ background: __props.qcColor })
9723
9804
  }, null, 4), createTextVNode(toDisplayString(qcChip.value.name) + " ×" + toDisplayString(qcChip.value.count), 1)], 2)) : createCommentVNode("", true)])
9724
9805
  ])]),
9725
- createElementVNode("div", _hoisted_33$3, [
9726
- createElementVNode("span", _hoisted_34$3, "Applies to " + toDisplayString(sampleTotal.value) + " samples" + toDisplayString(footHint.value), 1),
9806
+ createElementVNode("div", _hoisted_37$2, [
9807
+ createElementVNode("span", _hoisted_38$2, "Applies to " + toDisplayString(sampleTotal.value) + " samples" + toDisplayString(footHint.value), 1),
9727
9808
  _cache[29] || (_cache[29] = createElementVNode("div", { class: "sg-foot__spacer" }, null, -1)),
9728
9809
  createVNode(BaseButton_default, {
9729
9810
  variant: "ghost",
@@ -9808,15 +9889,15 @@ function assignSamples(samples, selected, assignment) {
9808
9889
  }
9809
9890
  //#endregion
9810
9891
  //#region src/components/SmartGroupManual.vue?vue&type=script&setup=true&lang.ts
9811
- var _hoisted_1$34 = { class: "sg-modal mg2" };
9812
- var _hoisted_2$30 = { class: "sg-head" };
9813
- var _hoisted_3$27 = {
9892
+ var _hoisted_1$35 = { class: "sg-modal mg2" };
9893
+ var _hoisted_2$31 = { class: "sg-head" };
9894
+ var _hoisted_3$28 = {
9814
9895
  class: "sg-mode",
9815
9896
  role: "tablist",
9816
9897
  "aria-label": "Grouping mode"
9817
9898
  };
9818
- var _hoisted_4$26 = { class: "mg2-body" };
9819
- var _hoisted_5$24 = { class: "mg2-find" };
9899
+ var _hoisted_4$27 = { class: "mg2-body" };
9900
+ var _hoisted_5$25 = { class: "mg2-find" };
9820
9901
  var _hoisted_6$24 = { class: "mg2-search" };
9821
9902
  var _hoisted_7$21 = { class: "mg2-chips" };
9822
9903
  var _hoisted_8$18 = ["onClick"];
@@ -9846,25 +9927,25 @@ var _hoisted_22$6 = { class: "mg2-cohorts__head" };
9846
9927
  var _hoisted_23$5 = { class: "mg2-cohorts__n" };
9847
9928
  var _hoisted_24$5 = { class: "mg2-progress" };
9848
9929
  var _hoisted_25$5 = { class: "mg2-progress__top" };
9849
- var _hoisted_26$5 = { class: "mg2-progress__pct" };
9850
- var _hoisted_27$4 = { class: "mg2-progress__track" };
9851
- var _hoisted_28$3 = { class: "mg2-tree" };
9852
- var _hoisted_29$2 = {
9930
+ var _hoisted_26$4 = { class: "mg2-progress__pct" };
9931
+ var _hoisted_27$3 = { class: "mg2-progress__track" };
9932
+ var _hoisted_28$2 = { class: "mg2-tree" };
9933
+ var _hoisted_29$1 = {
9853
9934
  key: 0,
9854
9935
  class: "mg2-tree__empty"
9855
9936
  };
9856
- var _hoisted_30$2 = { class: "mg2-grp__row" };
9857
- var _hoisted_31$2 = { class: "mg2-grp__name" };
9858
- var _hoisted_32$2 = { class: "mg2-grp__n" };
9859
- var _hoisted_33$2 = { class: "mg2-sub" };
9860
- var _hoisted_34$2 = { class: "mg2-sub__name" };
9861
- var _hoisted_35$2 = { class: "mg2-sub__n" };
9862
- var _hoisted_36$2 = { class: "mg2-sub2__name" };
9863
- var _hoisted_37$2 = { class: "mg2-sub2__n" };
9864
- var _hoisted_38$2 = { class: "mg2-unassigned__act" };
9865
- var _hoisted_39$2 = { class: "mg2-bar__inner" };
9866
- var _hoisted_40$2 = { class: "mg2-bar__count" };
9867
- var _hoisted_41$2 = { class: "mg2-field mg2-field--grow" };
9937
+ var _hoisted_30$1 = { class: "mg2-grp__row" };
9938
+ var _hoisted_31$1 = { class: "mg2-grp__name" };
9939
+ var _hoisted_32$1 = { class: "mg2-grp__n" };
9940
+ var _hoisted_33$1 = { class: "mg2-sub" };
9941
+ var _hoisted_34$1 = { class: "mg2-sub__name" };
9942
+ var _hoisted_35$1 = { class: "mg2-sub__n" };
9943
+ var _hoisted_36$1 = { class: "mg2-sub2__name" };
9944
+ var _hoisted_37$1 = { class: "mg2-sub2__n" };
9945
+ var _hoisted_38$1 = { class: "mg2-unassigned__act" };
9946
+ var _hoisted_39$1 = { class: "mg2-bar__inner" };
9947
+ var _hoisted_40$1 = { class: "mg2-bar__count" };
9948
+ var _hoisted_41$1 = { class: "mg2-field mg2-field--grow" };
9868
9949
  var _hoisted_42 = { class: "mg2-combo" };
9869
9950
  var _hoisted_43 = ["value"];
9870
9951
  var _hoisted_44 = { class: "mg2-combo__chev" };
@@ -10078,8 +10159,8 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10078
10159
  emit("done", { samples: samples.value });
10079
10160
  }
10080
10161
  return (_ctx, _cache) => {
10081
- return openBlock(), createElementBlock("div", _hoisted_1$34, [
10082
- createElementVNode("div", _hoisted_2$30, [
10162
+ return openBlock(), createElementBlock("div", _hoisted_1$35, [
10163
+ createElementVNode("div", _hoisted_2$31, [
10083
10164
  createVNode(Icon, {
10084
10165
  d: ICON.layers,
10085
10166
  size: 18
@@ -10087,7 +10168,7 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10087
10168
  _cache[10] || (_cache[10] = createElementVNode("span", { class: "sg-head__title" }, "Group samples", -1)),
10088
10169
  _cache[11] || (_cache[11] = createElementVNode("span", { class: "sg-head__sub" }, "· when names can’t be parsed automatically", -1)),
10089
10170
  _cache[12] || (_cache[12] = createElementVNode("div", { class: "sg-head__spacer" }, null, -1)),
10090
- createElementVNode("div", _hoisted_3$27, [createElementVNode("button", {
10171
+ createElementVNode("div", _hoisted_3$28, [createElementVNode("button", {
10091
10172
  type: "button",
10092
10173
  class: "sg-mode__btn",
10093
10174
  role: "tab",
@@ -10108,7 +10189,7 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10108
10189
  size: 16
10109
10190
  }, null, 8, ["d"])])
10110
10191
  ]),
10111
- createElementVNode("div", _hoisted_4$26, [createElementVNode("div", _hoisted_5$24, [
10192
+ createElementVNode("div", _hoisted_4$27, [createElementVNode("div", _hoisted_5$25, [
10112
10193
  createElementVNode("div", _hoisted_6$24, [
10113
10194
  createVNode(Icon, {
10114
10195
  d: ICON.search,
@@ -10165,27 +10246,27 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10165
10246
  }), 128))])
10166
10247
  ]), createElementVNode("div", _hoisted_21$7, [
10167
10248
  createElementVNode("div", _hoisted_22$6, [_cache[14] || (_cache[14] = createElementVNode("span", { class: "mg2-cohorts__t" }, "Cohorts", -1)), createElementVNode("span", _hoisted_23$5, toDisplayString(tree.value.size) + " groups", 1)]),
10168
- createElementVNode("div", _hoisted_24$5, [createElementVNode("div", _hoisted_25$5, [createElementVNode("span", null, [createElementVNode("b", null, toDisplayString(assignedCount.value), 1), createTextVNode(" of " + toDisplayString(samples.value.length) + " grouped", 1)]), createElementVNode("span", _hoisted_26$5, toDisplayString(pct.value) + "%", 1)]), createElementVNode("div", _hoisted_27$4, [createElementVNode("div", {
10249
+ createElementVNode("div", _hoisted_24$5, [createElementVNode("div", _hoisted_25$5, [createElementVNode("span", null, [createElementVNode("b", null, toDisplayString(assignedCount.value), 1), createTextVNode(" of " + toDisplayString(samples.value.length) + " grouped", 1)]), createElementVNode("span", _hoisted_26$4, toDisplayString(pct.value) + "%", 1)]), createElementVNode("div", _hoisted_27$3, [createElementVNode("div", {
10169
10250
  class: "mg2-progress__fill",
10170
10251
  style: normalizeStyle({ width: pct.value + "%" })
10171
10252
  }, null, 4)])]),
10172
- createElementVNode("div", _hoisted_28$3, [tree.value.size === 0 ? (openBlock(), createElementBlock("div", _hoisted_29$2, " No cohorts yet. Select samples and assign them to start building. ")) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList([...tree.value.entries()], ([name, group]) => {
10253
+ createElementVNode("div", _hoisted_28$2, [tree.value.size === 0 ? (openBlock(), createElementBlock("div", _hoisted_29$1, " No cohorts yet. Select samples and assign them to start building. ")) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList([...tree.value.entries()], ([name, group]) => {
10173
10254
  return openBlock(), createElementBlock("div", {
10174
10255
  key: name,
10175
10256
  class: "mg2-grp"
10176
- }, [createElementVNode("div", _hoisted_30$2, [
10257
+ }, [createElementVNode("div", _hoisted_30$1, [
10177
10258
  createElementVNode("span", {
10178
10259
  class: "sg-dot",
10179
10260
  style: normalizeStyle({ background: group.color ?? void 0 })
10180
10261
  }, null, 4),
10181
- createElementVNode("span", _hoisted_31$2, toDisplayString(name), 1),
10182
- createElementVNode("span", _hoisted_32$2, toDisplayString(group.total), 1)
10262
+ createElementVNode("span", _hoisted_31$1, toDisplayString(name), 1),
10263
+ createElementVNode("span", _hoisted_32$1, toDisplayString(group.total), 1)
10183
10264
  ]), (openBlock(true), createElementBlock(Fragment, null, renderList([...group.subs.entries()], ([subName, subNode]) => {
10184
- return openBlock(), createElementBlock(Fragment, { key: subName }, [createElementVNode("div", _hoisted_33$2, [createElementVNode("span", _hoisted_34$2, toDisplayString(subName), 1), createElementVNode("span", _hoisted_35$2, toDisplayString(subNode.total), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(subsWithout(subNode), ([s2, count]) => {
10265
+ return openBlock(), createElementBlock(Fragment, { key: subName }, [createElementVNode("div", _hoisted_33$1, [createElementVNode("span", _hoisted_34$1, toDisplayString(subName), 1), createElementVNode("span", _hoisted_35$1, toDisplayString(subNode.total), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(subsWithout(subNode), ([s2, count]) => {
10185
10266
  return openBlock(), createElementBlock("div", {
10186
10267
  key: s2,
10187
10268
  class: "mg2-sub2"
10188
- }, [createElementVNode("span", _hoisted_36$2, toDisplayString(s2), 1), createElementVNode("span", _hoisted_37$2, toDisplayString(count), 1)]);
10269
+ }, [createElementVNode("span", _hoisted_36$1, toDisplayString(s2), 1), createElementVNode("span", _hoisted_37$1, toDisplayString(count), 1)]);
10189
10270
  }), 128))], 64);
10190
10271
  }), 128))]);
10191
10272
  }), 128))]),
@@ -10203,16 +10284,16 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10203
10284
  }, null, -1)),
10204
10285
  createElementVNode("b", null, toDisplayString(unassignedCount.value), 1),
10205
10286
  _cache[16] || (_cache[16] = createTextVNode(" still unassigned ", -1)),
10206
- createElementVNode("span", _hoisted_38$2, toDisplayString(filter.value === "unassigned" ? "showing" : "show"), 1)
10287
+ createElementVNode("span", _hoisted_38$1, toDisplayString(filter.value === "unassigned" ? "showing" : "show"), 1)
10207
10288
  ], 2)) : createCommentVNode("", true)
10208
10289
  ])]),
10209
- createElementVNode("div", { class: normalizeClass(["mg2-bar", { "mg2-bar--open": sel.value.size > 0 }]) }, [createElementVNode("div", _hoisted_39$2, [
10210
- createElementVNode("span", _hoisted_40$2, [createElementVNode("b", null, toDisplayString(sel.value.size), 1), _cache[17] || (_cache[17] = createTextVNode("\xA0selected", -1))]),
10290
+ createElementVNode("div", { class: normalizeClass(["mg2-bar", { "mg2-bar--open": sel.value.size > 0 }]) }, [createElementVNode("div", _hoisted_39$1, [
10291
+ createElementVNode("span", _hoisted_40$1, [createElementVNode("b", null, toDisplayString(sel.value.size), 1), _cache[17] || (_cache[17] = createTextVNode("\xA0selected", -1))]),
10211
10292
  createVNode(Icon, {
10212
10293
  d: ICON.arrow,
10213
10294
  size: 16
10214
10295
  }, null, 8, ["d"]),
10215
- createElementVNode("div", _hoisted_41$2, [_cache[18] || (_cache[18] = createElementVNode("span", { class: "mg2-field__l" }, "Group", -1)), createElementVNode("div", _hoisted_42, [
10296
+ createElementVNode("div", _hoisted_41$1, [_cache[18] || (_cache[18] = createElementVNode("span", { class: "mg2-field__l" }, "Group", -1)), createElementVNode("div", _hoisted_42, [
10216
10297
  createElementVNode("span", {
10217
10298
  class: "sg-dot",
10218
10299
  style: normalizeStyle({ background: color.value })
@@ -10319,18 +10400,20 @@ function roleLabel(role) {
10319
10400
  /**
10320
10401
  * Columns worth offering as grouping toggles: factors and replicates, plus any
10321
10402
  * column already enabled in `groupBy` (so a manual group-by choice still shows).
10322
- * Preserves the engine's column order.
10403
+ * Preserves the engine's column order. `groupBy` is the schema's ORDERED layer
10404
+ * list — entry N is hierarchy layer N of the composed group names.
10323
10405
  */
10324
- function candidateColumns(columns, enabled) {
10406
+ function candidateColumns(columns, groupBy) {
10407
+ const enabled = new Set(groupBy);
10325
10408
  return columns.filter((c) => c.role === "factor" || c.role === "replicate" || enabled.has(c.index));
10326
10409
  }
10327
- /** The candidate column indices in display order, so card index → engine column. */
10328
- function candidateColumnIndices(columns, enabled) {
10329
- return candidateColumns(columns, enabled).map((c) => c.index);
10330
- }
10331
- /** Map engine columns to Field Recipe cards + their on/off state (same order). */
10332
- function engineFieldsToCards(columns, enabled) {
10333
- const candidates = candidateColumns(columns, enabled);
10410
+ /**
10411
+ * Map engine columns to Field Recipe cards + their on/off state (same order).
10412
+ * `layers` aligns with the cards: the column's 1-based position in the
10413
+ * `groupBy` layer order, or `null` when the column is not grouped by.
10414
+ */
10415
+ function engineFieldsToCards(columns, groupBy) {
10416
+ const candidates = candidateColumns(columns, groupBy);
10334
10417
  return {
10335
10418
  fields: candidates.map((c) => ({
10336
10419
  key: c.displayName ?? c.name,
@@ -10338,7 +10421,11 @@ function engineFieldsToCards(columns, enabled) {
10338
10421
  vals: c.uniqueValues.join(", "),
10339
10422
  rep: c.role === "replicate"
10340
10423
  })),
10341
- enabled: candidates.map((c) => enabled.has(c.index))
10424
+ enabled: candidates.map((c) => groupBy.includes(c.index)),
10425
+ layers: candidates.map((c) => {
10426
+ const pos = groupBy.indexOf(c.index);
10427
+ return pos === -1 ? null : pos + 1;
10428
+ })
10342
10429
  };
10343
10430
  }
10344
10431
  /** Map engine sample groups to the live preview rail shape. */
@@ -10513,8 +10600,8 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10513
10600
  excludeQc.value = value === "exclude";
10514
10601
  autoGroup.setClassDispositions((c) => c.kind !== "biological" && c.kind !== "unknown", value === "exclude" ? "exclude" : value === "overlay" ? "overlay" : "group");
10515
10602
  }
10516
- const fieldCards = computed(() => engineFieldsToCards(autoGroup.fields.value, autoGroup.enabledFields.value));
10517
- const cardColumnIndices = computed(() => candidateColumnIndices(autoGroup.fields.value, autoGroup.enabledFields.value));
10603
+ const groupByOrder = computed(() => autoGroup.activeSchema.value?.groupBy ?? []);
10604
+ const fieldCards = computed(() => engineFieldsToCards(autoGroup.fields.value, groupByOrder.value));
10518
10605
  const railGroups = computed(() => engineGroupsToRail(autoGroup.result.value.experimentalGroups ?? autoGroup.groups.value));
10519
10606
  const qcSampleCount = computed(() => autoGroup.classes.value.filter((c) => c.kind !== "biological" && c.kind !== "unknown").reduce((acc, c) => acc + c.members.length, 0));
10520
10607
  const qcChip = computed(() => qcRouting.value !== "mix" && qcSampleCount.value > 0 ? {
@@ -10524,9 +10611,14 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10524
10611
  const fieldRecipeRoute = computed(() => engineToQcRoute(qcRouting.value));
10525
10612
  const headerCount = computed(() => autoGroup.samples.value.length);
10526
10613
  function onToggleField(cardIndex) {
10527
- const columnIndex = cardColumnIndices.value[cardIndex];
10528
- if (columnIndex === void 0) return;
10529
- autoGroup.toggleGroupBy(autoGroup.activeClassKey.value, columnIndex);
10614
+ const field = fieldCards.value.fields[cardIndex];
10615
+ if (!field) return;
10616
+ autoGroup.toggleGroupByField(field.key);
10617
+ }
10618
+ function onMoveField(cardIndex, direction) {
10619
+ const field = fieldCards.value.fields[cardIndex];
10620
+ if (!field) return;
10621
+ autoGroup.moveGroupByField(field.key, direction);
10530
10622
  }
10531
10623
  function onRouteChange(route) {
10532
10624
  setQcRouting(qcRouteToEngine(route));
@@ -10634,6 +10726,7 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10634
10726
  key: 1,
10635
10727
  fields: fieldCards.value.fields,
10636
10728
  enabled: fieldCards.value.enabled,
10729
+ layers: fieldCards.value.layers,
10637
10730
  groups: railGroups.value,
10638
10731
  "qc-chip": qcChip.value,
10639
10732
  route: fieldRecipeRoute.value,
@@ -10643,6 +10736,7 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10643
10736
  loading: experimentLoading.value,
10644
10737
  "experiment-label": "",
10645
10738
  onToggle: onToggleField,
10739
+ onMove: onMoveField,
10646
10740
  "onUpdate:route": onRouteChange,
10647
10741
  onCsvFile,
10648
10742
  onDownloadTemplate,
@@ -10654,6 +10748,7 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10654
10748
  }, null, 8, [
10655
10749
  "fields",
10656
10750
  "enabled",
10751
+ "layers",
10657
10752
  "groups",
10658
10753
  "qc-chip",
10659
10754
  "route",
@@ -10682,9 +10777,9 @@ var AutoGroupModal_default = /* @__PURE__ */ defineComponent({
10682
10777
  });
10683
10778
  //#endregion
10684
10779
  //#region src/components/SampleSelectorSampleRow.vue?vue&type=script&setup=true&lang.ts
10685
- var _hoisted_1$33 = ["title", "aria-label"];
10686
- var _hoisted_2$29 = ["checked", "aria-label"];
10687
- var _hoisted_3$26 = { class: "mint-sample-selector__sample-name" };
10780
+ var _hoisted_1$34 = ["title", "aria-label"];
10781
+ var _hoisted_2$30 = ["checked", "aria-label"];
10782
+ var _hoisted_3$27 = { class: "mint-sample-selector__sample-name" };
10688
10783
  //#endregion
10689
10784
  //#region src/components/SampleSelectorSampleRow.vue
10690
10785
  var SampleSelectorSampleRow_default = /* @__PURE__ */ defineComponent({
@@ -10735,8 +10830,8 @@ var SampleSelectorSampleRow_default = /* @__PURE__ */ defineComponent({
10735
10830
  style: normalizeStyle(__props.accentColor ? { accentColor: __props.accentColor } : void 0),
10736
10831
  "aria-label": `Select sample ${__props.sample}`,
10737
10832
  onChange: _cache[0] || (_cache[0] = ($event) => emit("toggle"))
10738
- }, null, 46, _hoisted_2$29),
10739
- createElementVNode("span", _hoisted_3$26, toDisplayString(__props.sample), 1),
10833
+ }, null, 46, _hoisted_2$30),
10834
+ createElementVNode("span", _hoisted_3$27, toDisplayString(__props.sample), 1),
10740
10835
  __props.removable ? (openBlock(), createElementBlock("button", {
10741
10836
  key: 0,
10742
10837
  type: "button",
@@ -10755,7 +10850,211 @@ var SampleSelectorSampleRow_default = /* @__PURE__ */ defineComponent({
10755
10850
  "stroke-width": "2",
10756
10851
  d: "M20 12H4"
10757
10852
  })], -1)])])) : createCommentVNode("", true)
10758
- ], 10, _hoisted_1$33);
10853
+ ], 10, _hoisted_1$34);
10854
+ };
10855
+ }
10856
+ });
10857
+ //#endregion
10858
+ //#region src/components/SampleSelector.tree.ts
10859
+ /** Every concrete group name beneath a node, in tree order. */
10860
+ function collectLeafGroupNames(node) {
10861
+ if (node.group) return [node.group.name];
10862
+ return node.children.flatMap(collectLeafGroupNames);
10863
+ }
10864
+ /** Expansion keys for a whole tree, used by "expand all". */
10865
+ function collectNodeKeys(nodes) {
10866
+ return nodes.flatMap((node) => [node.key, ...collectNodeKeys(node.children)]);
10867
+ }
10868
+ //#endregion
10869
+ //#region src/components/SampleSelectorGroupNode.vue?vue&type=script&setup=true&lang.ts
10870
+ var _hoisted_1$33 = ["draggable"];
10871
+ var _hoisted_2$29 = [
10872
+ "checked",
10873
+ "indeterminate",
10874
+ "aria-label"
10875
+ ];
10876
+ var _hoisted_3$26 = ["title", "aria-label"];
10877
+ var _hoisted_4$26 = ["title"];
10878
+ var _hoisted_5$24 = ["title", "aria-label"];
10879
+ //#endregion
10880
+ //#region src/components/SampleSelectorGroupNode.vue
10881
+ var SampleSelectorGroupNode_default = /* @__PURE__ */ defineComponent({
10882
+ __name: "SampleSelectorGroupNode",
10883
+ props: {
10884
+ node: {},
10885
+ depth: {},
10886
+ ctx: {}
10887
+ },
10888
+ setup(__props) {
10889
+ /**
10890
+ * One row of the sample-selector group hierarchy, rendered recursively so a
10891
+ * grouping of any depth (Tissue → Dose → Timepoint → samples) nests properly.
10892
+ *
10893
+ * Roots carry the family affordances (large dot, colour-family picker) and
10894
+ * leaves carry the group affordances (sample drop target, sample rows); the
10895
+ * levels in between are pure path nodes that aggregate their descendants.
10896
+ */
10897
+ const props = __props;
10898
+ const isRoot = computed(() => props.depth === 0);
10899
+ const isLeaf = computed(() => props.node.children.length === 0);
10900
+ const expanded = computed(() => props.ctx.isExpanded(props.node.key));
10901
+ const leafGroupNames = computed(() => collectLeafGroupNames(props.node));
10902
+ /** Roots reorder as a family, leaves as individual groups; path nodes stay put. */
10903
+ const dragKind = computed(() => isRoot.value ? "major" : isLeaf.value ? "sub" : null);
10904
+ /** Reorder drags address a family by its label but a group by its full name. */
10905
+ const dragName = computed(() => isRoot.value ? props.node.label : props.node.group?.name ?? props.node.label);
10906
+ const isDragging = computed(() => dragKind.value !== null && props.ctx.draggingGroup() === dragName.value && props.ctx.draggingGroupKind() === dragKind.value);
10907
+ const reorderEdge = computed(() => {
10908
+ if (dragKind.value === null) return null;
10909
+ if (props.ctx.reorderTarget() !== dragName.value) return null;
10910
+ if (props.ctx.draggingGroupKind() !== dragKind.value) return null;
10911
+ return props.ctx.reorderPosition();
10912
+ });
10913
+ function onHeaderDragStart(event) {
10914
+ if (dragKind.value === null) return;
10915
+ props.ctx.onGroupDragStart(dragName.value, dragKind.value, event);
10916
+ }
10917
+ function onHeaderDragOver(event) {
10918
+ if (dragKind.value === null) return;
10919
+ props.ctx.onGroupDragOver(dragName.value, dragKind.value, event);
10920
+ }
10921
+ function onHeaderDrop(event) {
10922
+ if (dragKind.value === null) return;
10923
+ props.ctx.onGroupDrop(dragName.value, dragKind.value, event);
10924
+ }
10925
+ return (_ctx, _cache) => {
10926
+ const _component_SampleSelectorGroupNode = resolveComponent("SampleSelectorGroupNode", true);
10927
+ return openBlock(), createElementBlock("div", mergeProps({ class: [isRoot.value ? "mint-sample-selector__major-group" : "mint-sample-selector__sub-group", isLeaf.value && __props.ctx.dragOverGroup() === __props.node.group?.name ? "mint-sample-selector__sub-group--drag-over" : ""] }, toHandlers(isLeaf.value && __props.node.group ? {
10928
+ dragover: (e) => __props.ctx.onSampleDragOver(__props.node.group.name, e),
10929
+ dragleave: __props.ctx.onSampleDragLeave,
10930
+ drop: (e) => __props.ctx.onSampleDrop(__props.node.group.name, e)
10931
+ } : {}, true)), [createElementVNode("div", {
10932
+ class: normalizeClass([
10933
+ isRoot.value ? "mint-sample-selector__major-header" : "mint-sample-selector__sub-header",
10934
+ isDragging.value ? "mint-sample-selector__header--dragging" : "",
10935
+ reorderEdge.value === "before" ? "mint-sample-selector__header--drag-over-before" : "",
10936
+ reorderEdge.value === "after" ? "mint-sample-selector__header--drag-over-after" : ""
10937
+ ]),
10938
+ draggable: dragKind.value !== null,
10939
+ onClick: _cache[4] || (_cache[4] = ($event) => __props.ctx.toggleExpanded(__props.node.key)),
10940
+ onDragstart: onHeaderDragStart,
10941
+ onDragend: _cache[5] || (_cache[5] = (...args) => __props.ctx.onGroupDragEnd && __props.ctx.onGroupDragEnd(...args)),
10942
+ onDragover: onHeaderDragOver,
10943
+ onDragleave: _cache[6] || (_cache[6] = ($event) => __props.ctx.onGroupDragLeave($event)),
10944
+ onDrop: onHeaderDrop
10945
+ }, [
10946
+ (openBlock(), createElementBlock("svg", {
10947
+ class: normalizeClass([
10948
+ "mint-sample-selector__chevron",
10949
+ isRoot.value ? "" : "mint-sample-selector__chevron--small",
10950
+ expanded.value ? "mint-sample-selector__chevron--open" : ""
10951
+ ]),
10952
+ fill: "none",
10953
+ stroke: "currentColor",
10954
+ viewBox: "0 0 24 24"
10955
+ }, [..._cache[7] || (_cache[7] = [createElementVNode("path", {
10956
+ "stroke-linecap": "round",
10957
+ "stroke-linejoin": "round",
10958
+ "stroke-width": "2",
10959
+ d: "M9 5l7 7-7 7"
10960
+ }, null, -1)])], 2)),
10961
+ createElementVNode("input", {
10962
+ type: "checkbox",
10963
+ checked: __props.ctx.isFullySelected(__props.node.allSamples),
10964
+ indeterminate: __props.ctx.isPartiallySelected(__props.node.allSamples),
10965
+ class: normalizeClass(["mint-sample-selector__checkbox", isRoot.value ? "" : "mint-sample-selector__checkbox--small"]),
10966
+ style: normalizeStyle({ accentColor: __props.node.color }),
10967
+ "aria-label": `Select ${__props.node.label}`,
10968
+ onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"])),
10969
+ onChange: _cache[1] || (_cache[1] = ($event) => __props.ctx.toggleSamples(__props.node.allSamples))
10970
+ }, null, 46, _hoisted_2$29),
10971
+ isRoot.value ? (openBlock(), createElementBlock("button", {
10972
+ key: 0,
10973
+ type: "button",
10974
+ class: "mint-sample-selector__color-dot mint-sample-selector__color-dot--large mint-sample-selector__color-dot--clickable",
10975
+ style: normalizeStyle({ backgroundColor: __props.node.color }),
10976
+ title: `Change ${__props.node.label} color family`,
10977
+ "aria-label": `Change ${__props.node.label} color family`,
10978
+ onClick: _cache[2] || (_cache[2] = withModifiers(($event) => __props.ctx.openColorPicker(leafGroupNames.value, $event), ["stop"]))
10979
+ }, null, 12, _hoisted_3$26)) : (openBlock(), createElementBlock("div", {
10980
+ key: 1,
10981
+ class: "mint-sample-selector__color-dot",
10982
+ style: normalizeStyle({ backgroundColor: __props.node.color }),
10983
+ "aria-hidden": "true"
10984
+ }, null, 4)),
10985
+ createElementVNode("span", {
10986
+ class: normalizeClass(isRoot.value ? "mint-sample-selector__major-name" : "mint-sample-selector__sub-name"),
10987
+ title: __props.node.group?.name ?? __props.node.label
10988
+ }, toDisplayString(__props.node.label), 11, _hoisted_4$26),
10989
+ createElementVNode("span", {
10990
+ class: normalizeClass(["mint-sample-selector__count-badge", isRoot.value ? "" : "mint-sample-selector__count-badge--small"]),
10991
+ style: normalizeStyle({
10992
+ backgroundColor: __props.node.displayBg,
10993
+ color: __props.node.color
10994
+ })
10995
+ }, toDisplayString(__props.node.allSamples.length), 7),
10996
+ createElementVNode("button", {
10997
+ type: "button",
10998
+ class: "mint-sample-selector__delete-btn mint-sample-selector__delete-btn--hidden",
10999
+ title: `Remove ${__props.node.label}`,
11000
+ "aria-label": `Remove ${__props.node.label}`,
11001
+ onClick: _cache[3] || (_cache[3] = withModifiers(($event) => __props.ctx.removeGroups(leafGroupNames.value), ["stop"]))
11002
+ }, [..._cache[8] || (_cache[8] = [createElementVNode("svg", {
11003
+ fill: "none",
11004
+ stroke: "currentColor",
11005
+ viewBox: "0 0 24 24"
11006
+ }, [createElementVNode("path", {
11007
+ "stroke-linecap": "round",
11008
+ "stroke-linejoin": "round",
11009
+ "stroke-width": "2",
11010
+ d: "M6 18L18 6M6 6l12 12"
11011
+ })], -1)])], 8, _hoisted_5$24)
11012
+ ], 42, _hoisted_1$33), createVNode(Transition, { name: "mint-collapse" }, {
11013
+ default: withCtx(() => [expanded.value && !isLeaf.value ? (openBlock(), createElementBlock("div", {
11014
+ key: 0,
11015
+ class: "mint-sample-selector__sub-groups",
11016
+ style: normalizeStyle({ borderColor: __props.node.displayBorder })
11017
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.node.children, (child) => {
11018
+ return openBlock(), createBlock(_component_SampleSelectorGroupNode, {
11019
+ key: child.key,
11020
+ node: child,
11021
+ depth: __props.depth + 1,
11022
+ ctx: __props.ctx
11023
+ }, null, 8, [
11024
+ "node",
11025
+ "depth",
11026
+ "ctx"
11027
+ ]);
11028
+ }), 128))], 4)) : expanded.value && __props.node.group ? (openBlock(), createElementBlock("div", {
11029
+ key: 1,
11030
+ class: "mint-sample-selector__samples",
11031
+ style: normalizeStyle({ borderColor: __props.node.displayBorder })
11032
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.node.group.samples, (sample) => {
11033
+ return openBlock(), createBlock(SampleSelectorSampleRow_default, {
11034
+ key: sample,
11035
+ sample,
11036
+ selected: __props.ctx.isSampleSelected(sample),
11037
+ dragging: __props.ctx.draggingSample() === sample,
11038
+ "accent-color": __props.node.color,
11039
+ "checkbox-size": "tiny",
11040
+ removable: "",
11041
+ onDragstart: (e) => __props.ctx.onSampleDragStart(sample, __props.node.group.name, e),
11042
+ onDragend: __props.ctx.onSampleDragEnd,
11043
+ onToggle: ($event) => __props.ctx.toggleSample(sample),
11044
+ onRemove: ($event) => __props.ctx.removeSampleFromGroup(sample, __props.node.group.name)
11045
+ }, null, 8, [
11046
+ "sample",
11047
+ "selected",
11048
+ "dragging",
11049
+ "accent-color",
11050
+ "onDragstart",
11051
+ "onDragend",
11052
+ "onToggle",
11053
+ "onRemove"
11054
+ ]);
11055
+ }), 128))], 4)) : createCommentVNode("", true)]),
11056
+ _: 1
11057
+ })], 16);
10759
11058
  };
10760
11059
  }
10761
11060
  });
@@ -10764,10 +11063,6 @@ var SampleSelectorSampleRow_default = /* @__PURE__ */ defineComponent({
10764
11063
  function detectSampleGroupSeparator(groups) {
10765
11064
  return groups.some((group) => group.name.includes("/")) ? "/" : "_";
10766
11065
  }
10767
- function getSampleGroupMajorPrefix(groupName, separator) {
10768
- const parts = groupName.split(separator);
10769
- return parts.length > 1 ? parts[0] : groupName;
10770
- }
10771
11066
  function moveSampleToGroup(groups, sample, sourceGroup, targetGroup) {
10772
11067
  if (sourceGroup === targetGroup) return groups;
10773
11068
  return groups.map((group) => {
@@ -10782,12 +11077,14 @@ function moveSampleToGroup(groups, sample, sourceGroup, targetGroup) {
10782
11077
  return group;
10783
11078
  });
10784
11079
  }
10785
- function removeSampleGroup(groups, groupName) {
10786
- return groups.filter((group) => group.name !== groupName);
10787
- }
10788
- function removeSampleMajorGroup(groups, majorGroup) {
10789
- const groupNames = new Set(majorGroup.subGroups.map((group) => group.name));
10790
- return groups.filter((group) => !groupNames.has(group.name));
11080
+ /**
11081
+ * Drop every named group. Callers pass the concrete group names beneath the
11082
+ * node being removed, so one helper covers a single group, a whole family, or
11083
+ * any intermediate hierarchy level.
11084
+ */
11085
+ function removeSampleGroups(groups, groupNames) {
11086
+ const removing = new Set(groupNames);
11087
+ return groups.filter((group) => !removing.has(group.name));
10791
11088
  }
10792
11089
  function removeSampleFromGroup(groups, sample, groupName) {
10793
11090
  return groups.map((group) => group.name === groupName ? {
@@ -10893,7 +11190,7 @@ function useSampleSelectorDrag(groups) {
10893
11190
  if (draggingGroup.value === name) return;
10894
11191
  if (kind === "sub") {
10895
11192
  const separator = detectSampleGroupSeparator(groups.value);
10896
- if (getSampleGroupMajorPrefix(draggingGroup.value, separator) !== getSampleGroupMajorPrefix(name, separator)) return;
11193
+ if (getSampleGroupParentPath(draggingGroup.value, separator) !== getSampleGroupParentPath(name, separator)) return;
10897
11194
  }
10898
11195
  event.preventDefault();
10899
11196
  if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
@@ -10949,6 +11246,11 @@ function useSampleSelectorDrag(groups) {
10949
11246
  }
10950
11247
  //#endregion
10951
11248
  //#region src/components/SampleSelector.selection.ts
11249
+ /**
11250
+ * Selection state for the sample selector. Works on plain sample arrays rather
11251
+ * than group names, so any level of the group hierarchy can drive it by handing
11252
+ * over the samples beneath that node.
11253
+ */
10952
11254
  function useSampleSelectorSelection(options) {
10953
11255
  const sampleSelection = useListSelection({
10954
11256
  selected: options.selected,
@@ -10966,46 +11268,19 @@ function useSampleSelectorSelection(options) {
10966
11268
  function toggleSamplesSelection(samples) {
10967
11269
  emitSelection(sampleSelection.toggleValues(samples));
10968
11270
  }
10969
- function toggleGroupSamples(groupName) {
10970
- const group = options.findGroup(groupName);
10971
- if (!group) return;
10972
- toggleSamplesSelection(group.samples);
10973
- }
10974
- function toggleMajorGroupSamples(majorGroup) {
10975
- toggleSamplesSelection(majorGroup.allSamples);
10976
- }
10977
11271
  function isFullySelected(samples) {
10978
11272
  return sampleSelection.isFullySelected(samples);
10979
11273
  }
10980
11274
  function isPartiallySelected(samples) {
10981
11275
  return sampleSelection.isPartiallySelected(samples);
10982
11276
  }
10983
- function isGroupFullySelected(groupName) {
10984
- const group = options.findGroup(groupName);
10985
- return group ? isFullySelected(group.samples) : false;
10986
- }
10987
- function isGroupPartiallySelected(groupName) {
10988
- const group = options.findGroup(groupName);
10989
- return group ? isPartiallySelected(group.samples) : false;
10990
- }
10991
- function isMajorGroupFullySelected(majorGroup) {
10992
- return isFullySelected(majorGroup.allSamples);
10993
- }
10994
- function isMajorGroupPartiallySelected(majorGroup) {
10995
- return isPartiallySelected(majorGroup.allSamples);
10996
- }
10997
11277
  return {
10998
11278
  isAllSelected: sampleSelection.isAllSelected,
10999
11279
  toggleSelectAll,
11000
11280
  toggleSample,
11001
- toggleGroupSamples,
11002
- toggleMajorGroupSamples,
11281
+ toggleSamplesSelection,
11003
11282
  isFullySelected,
11004
- isPartiallySelected,
11005
- isGroupFullySelected,
11006
- isGroupPartiallySelected,
11007
- isMajorGroupFullySelected,
11008
- isMajorGroupPartiallySelected
11283
+ isPartiallySelected
11009
11284
  };
11010
11285
  }
11011
11286
  //#endregion
@@ -11040,78 +11315,35 @@ var _hoisted_9$15 = {
11040
11315
  var _hoisted_10$15 = { class: "mint-sample-selector__groups-header" };
11041
11316
  var _hoisted_11$13 = { class: "mint-sample-selector__groups-title" };
11042
11317
  var _hoisted_12$12 = { class: "mint-sample-selector__tree" };
11043
- var _hoisted_13$12 = [
11044
- "onClick",
11045
- "onDragstart",
11046
- "onDragover",
11047
- "onDrop"
11048
- ];
11049
- var _hoisted_14$10 = [
11050
- "checked",
11051
- "indeterminate",
11052
- "onChange"
11053
- ];
11054
- var _hoisted_15$9 = ["onClick"];
11055
- var _hoisted_16$8 = { class: "mint-sample-selector__major-name" };
11056
- var _hoisted_17$8 = ["onClick"];
11057
- var _hoisted_18$8 = ["onDragover", "onDrop"];
11058
- var _hoisted_19$8 = [
11059
- "onClick",
11060
- "onDragstart",
11061
- "onDragover",
11062
- "onDrop"
11063
- ];
11064
- var _hoisted_20$7 = [
11065
- "checked",
11066
- "indeterminate",
11067
- "onChange"
11068
- ];
11069
- var _hoisted_21$6 = { class: "mint-sample-selector__sub-name" };
11070
- var _hoisted_22$5 = ["onClick"];
11071
- var _hoisted_23$4 = ["onDragover", "onDrop"];
11072
- var _hoisted_24$4 = [
11073
- "onClick",
11074
- "onDragstart",
11075
- "onDragover",
11076
- "onDrop"
11077
- ];
11078
- var _hoisted_25$4 = [
11079
- "checked",
11080
- "indeterminate",
11081
- "onChange"
11082
- ];
11083
- var _hoisted_26$4 = ["onClick"];
11084
- var _hoisted_27$3 = { class: "mint-sample-selector__major-name" };
11085
- var _hoisted_28$2 = ["onClick"];
11086
- var _hoisted_29$1 = {
11087
- key: 2,
11318
+ var _hoisted_13$12 = {
11319
+ key: 0,
11088
11320
  class: "mint-sample-selector__empty"
11089
11321
  };
11090
- var _hoisted_30$1 = {
11322
+ var _hoisted_14$10 = {
11091
11323
  key: 0,
11092
11324
  class: "mint-sample-selector__ungrouped"
11093
11325
  };
11094
- var _hoisted_31$1 = { class: "mint-sample-selector__ungrouped-count" };
11095
- var _hoisted_32$1 = {
11326
+ var _hoisted_15$9 = { class: "mint-sample-selector__ungrouped-count" };
11327
+ var _hoisted_16$8 = {
11096
11328
  key: 0,
11097
11329
  class: "mint-sample-selector__ungrouped-list"
11098
11330
  };
11099
- var _hoisted_33$1 = { class: "mint-sample-selector__new-group" };
11100
- var _hoisted_34$1 = ["value"];
11101
- var _hoisted_35$1 = {
11331
+ var _hoisted_17$8 = { class: "mint-sample-selector__new-group" };
11332
+ var _hoisted_18$8 = ["value"];
11333
+ var _hoisted_19$8 = {
11102
11334
  key: 2,
11103
11335
  class: "mint-sample-selector__flat"
11104
11336
  };
11105
- var _hoisted_36$1 = { class: "mint-sample-selector__search" };
11106
- var _hoisted_37$1 = { class: "mint-sample-selector__flat-list" };
11107
- var _hoisted_38$1 = ["title", "aria-label"];
11108
- var _hoisted_39$1 = [
11337
+ var _hoisted_20$7 = { class: "mint-sample-selector__search" };
11338
+ var _hoisted_21$6 = { class: "mint-sample-selector__flat-list" };
11339
+ var _hoisted_22$5 = ["title", "aria-label"];
11340
+ var _hoisted_23$4 = [
11109
11341
  "checked",
11110
11342
  "aria-label",
11111
11343
  "onChange"
11112
11344
  ];
11113
- var _hoisted_40$1 = { class: "mint-sample-selector__flat-name" };
11114
- var _hoisted_41$1 = {
11345
+ var _hoisted_24$4 = { class: "mint-sample-selector__flat-name" };
11346
+ var _hoisted_25$4 = {
11115
11347
  key: 0,
11116
11348
  class: "mint-sample-selector__empty"
11117
11349
  };
@@ -11172,8 +11404,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11172
11404
  samples: () => resolvedSamples.value,
11173
11405
  groups: internalGroups
11174
11406
  });
11175
- const hierarchicalGroups = sampleGroups.hierarchicalGroups;
11176
- const showHierarchy = sampleGroups.showHierarchy;
11407
+ const groupTree = sampleGroups.groupTree;
11177
11408
  const groupingEnabled = computed(() => internalGroups.value.length > 0);
11178
11409
  const ungroupedSamples = sampleGroups.ungroupedSamples;
11179
11410
  const groupingActionMode = computed(() => props.enableSmartGroup ? "auto" : "manual");
@@ -11182,10 +11413,9 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11182
11413
  query: searchQuery,
11183
11414
  getText: (sample) => sample
11184
11415
  }).filteredItems;
11185
- const { isAllSelected, toggleSelectAll, toggleSample, toggleGroupSamples, toggleMajorGroupSamples, isGroupFullySelected, isGroupPartiallySelected, isMajorGroupFullySelected, isMajorGroupPartiallySelected } = useSampleSelectorSelection({
11416
+ const { isAllSelected, toggleSelectAll, toggleSample, toggleSamplesSelection, isFullySelected, isPartiallySelected } = useSampleSelectorSelection({
11186
11417
  selected: () => props.modelValue,
11187
11418
  samples: () => resolvedSamples.value,
11188
- findGroup: sampleGroups.findGroup,
11189
11419
  emitSelected: (samples) => emit("update:modelValue", samples)
11190
11420
  });
11191
11421
  function toggleGroupExpanded(groupName) {
@@ -11195,13 +11425,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11195
11425
  return groupExpansion.isExpanded(groupName);
11196
11426
  }
11197
11427
  function expandAllGroups() {
11198
- const expanded = [];
11199
- for (const major of hierarchicalGroups.value) {
11200
- expanded.push(`major:${major.name}`);
11201
- for (const sub of major.subGroups) expanded.push(sub.name);
11202
- }
11203
- expanded.push("__ungrouped__");
11204
- groupExpansion.setExpanded(expanded);
11428
+ groupExpansion.setExpanded([...collectNodeKeys(groupTree.value), "__ungrouped__"]);
11205
11429
  }
11206
11430
  function collapseAllGroups() {
11207
11431
  groupExpansion.collapseAll();
@@ -11217,28 +11441,20 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11217
11441
  function clearGroups() {
11218
11442
  internalGroups.value = [];
11219
11443
  }
11220
- function deleteMajorGroup(majorGroup) {
11221
- internalGroups.value = removeSampleMajorGroup(internalGroups.value, majorGroup);
11222
- }
11223
- function deleteGroup(groupName) {
11224
- internalGroups.value = removeSampleGroup(internalGroups.value, groupName);
11444
+ function deleteGroups(groupNames) {
11445
+ internalGroups.value = removeSampleGroups(internalGroups.value, groupNames);
11225
11446
  }
11226
11447
  function removeSampleFromGroup$1(sample, groupName) {
11227
11448
  internalGroups.value = removeSampleFromGroup(internalGroups.value, sample, groupName);
11228
11449
  }
11229
- function openColorPicker(groupName, event) {
11450
+ function openColorPicker(groupNames, event) {
11230
11451
  event.stopPropagation();
11231
- editingColor.value = {
11452
+ editingColor.value = groupNames.length === 1 ? {
11232
11453
  kind: "single",
11233
- name: groupName
11234
- };
11235
- colorPickerInput.value?.click();
11236
- }
11237
- function openMajorGroupColorPicker(majorGroup, event) {
11238
- event.stopPropagation();
11239
- editingColor.value = {
11454
+ name: groupNames[0]
11455
+ } : {
11240
11456
  kind: "family",
11241
- names: majorGroup.subGroups.map((sg) => sg.name)
11457
+ names: groupNames
11242
11458
  };
11243
11459
  colorPickerInput.value?.click();
11244
11460
  }
@@ -11255,6 +11471,34 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11255
11471
  const colorPickerSeed = computed(() => {
11256
11472
  return getSampleGroupColorEditSeed(editingColor.value, getGroupColor);
11257
11473
  });
11474
+ const treeContext = computed(() => ({
11475
+ isExpanded: isGroupExpanded,
11476
+ toggleExpanded: toggleGroupExpanded,
11477
+ isSampleSelected: (sample) => props.modelValue.includes(sample),
11478
+ isFullySelected,
11479
+ isPartiallySelected,
11480
+ toggleSamples: toggleSamplesSelection,
11481
+ toggleSample,
11482
+ removeGroups: deleteGroups,
11483
+ removeSampleFromGroup: removeSampleFromGroup$1,
11484
+ openColorPicker,
11485
+ draggingSample: () => draggingSample.value,
11486
+ dragOverGroup: () => dragOverGroup.value,
11487
+ draggingGroup: () => draggingGroup.value,
11488
+ draggingGroupKind: () => draggingGroupKind.value,
11489
+ reorderTarget: () => reorderTarget.value,
11490
+ reorderPosition: () => reorderPosition.value,
11491
+ onSampleDragStart: handleDragStart,
11492
+ onSampleDragEnd: handleDragEnd,
11493
+ onSampleDragOver: handleDragOver,
11494
+ onSampleDragLeave: handleDragLeave,
11495
+ onSampleDrop: handleDrop,
11496
+ onGroupDragStart: handleGroupDragStart,
11497
+ onGroupDragEnd: handleGroupDragEnd,
11498
+ onGroupDragOver: handleGroupDragOver,
11499
+ onGroupDragLeave: handleGroupDragLeave,
11500
+ onGroupDrop: handleGroupDrop
11501
+ }));
11258
11502
  function addNewGroup() {
11259
11503
  const newGroup = createSampleGroup(newGroupName.value, internalGroups.value);
11260
11504
  if (!newGroup) return;
@@ -11271,7 +11515,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11271
11515
  onChange: _cache[0] || (_cache[0] = (...args) => unref(toggleSelectAll) && unref(toggleSelectAll)(...args)),
11272
11516
  class: "mint-sample-selector__checkbox"
11273
11517
  }, null, 40, _hoisted_3$25),
11274
- _cache[17] || (_cache[17] = createElementVNode("span", { class: "mint-sample-selector__select-all-label" }, "Select All", -1)),
11518
+ _cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-sample-selector__select-all-label" }, "Select All", -1)),
11275
11519
  createElementVNode("span", _hoisted_4$25, toDisplayString(resolvedSamples.value.length) + " samples", 1)
11276
11520
  ]),
11277
11521
  __props.enableGrouping ? (openBlock(), createElementBlock("div", _hoisted_5$23, [createElementVNode("div", _hoisted_6$23, [createVNode(BaseButton_default, {
@@ -11281,17 +11525,17 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11281
11525
  class: "mint-sample-selector__action-btn",
11282
11526
  onClick: _cache[1] || (_cache[1] = ($event) => openGroupingModal(groupingActionMode.value))
11283
11527
  }, {
11284
- default: withCtx(() => [__props.enableSmartGroup ? (openBlock(), createElementBlock("svg", _hoisted_7$20, [..._cache[18] || (_cache[18] = [createElementVNode("path", {
11528
+ default: withCtx(() => [__props.enableSmartGroup ? (openBlock(), createElementBlock("svg", _hoisted_7$20, [..._cache[7] || (_cache[7] = [createElementVNode("path", {
11285
11529
  "stroke-linecap": "round",
11286
11530
  "stroke-linejoin": "round",
11287
11531
  "stroke-width": "2",
11288
11532
  d: "M13 10V3L4 14h7v7l9-11h-7z"
11289
- }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$17, [..._cache[19] || (_cache[19] = [createElementVNode("path", {
11533
+ }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$17, [..._cache[8] || (_cache[8] = [createElementVNode("path", {
11290
11534
  "stroke-linecap": "round",
11291
11535
  "stroke-linejoin": "round",
11292
11536
  "stroke-width": "2",
11293
11537
  d: "M12 3 3 7.5l9 4.5 9-4.5L12 3ZM3 12l9 4.5 9-4.5M3 16.5l9 4.5 9-4.5"
11294
- }, null, -1)])])), _cache[20] || (_cache[20] = createElementVNode("span", { class: "mint-sample-selector__action-label" }, "Grouping", -1))]),
11538
+ }, null, -1)])])), _cache[9] || (_cache[9] = createElementVNode("span", { class: "mint-sample-selector__action-label" }, "Grouping", -1))]),
11295
11539
  _: 1
11296
11540
  }, 8, ["variant", "disabled"]), createVNode(BaseButton_default, {
11297
11541
  variant: "ghost",
@@ -11301,7 +11545,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11301
11545
  onClick: clearGroups,
11302
11546
  title: "Clear all groups"
11303
11547
  }, {
11304
- default: withCtx(() => [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
11548
+ default: withCtx(() => [..._cache[10] || (_cache[10] = [createElementVNode("svg", {
11305
11549
  class: "mint-sample-selector__action-icon",
11306
11550
  fill: "none",
11307
11551
  stroke: "currentColor",
@@ -11321,7 +11565,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11321
11565
  onClick: expandAllGroups,
11322
11566
  title: "Expand all",
11323
11567
  "aria-label": "Expand all groups"
11324
- }, [..._cache[22] || (_cache[22] = [createElementVNode("svg", {
11568
+ }, [..._cache[11] || (_cache[11] = [createElementVNode("svg", {
11325
11569
  class: "mint-sample-selector__expand-icon",
11326
11570
  fill: "none",
11327
11571
  stroke: "currentColor",
@@ -11337,7 +11581,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11337
11581
  onClick: collapseAllGroups,
11338
11582
  title: "Collapse all",
11339
11583
  "aria-label": "Collapse all groups"
11340
- }, [..._cache[23] || (_cache[23] = [createElementVNode("svg", {
11584
+ }, [..._cache[12] || (_cache[12] = [createElementVNode("svg", {
11341
11585
  class: "mint-sample-selector__expand-icon",
11342
11586
  fill: "none",
11343
11587
  stroke: "currentColor",
@@ -11348,307 +11592,33 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11348
11592
  "stroke-width": "2",
11349
11593
  d: "M9 5l7 7-7 7"
11350
11594
  })], -1)])])])]),
11351
- createElementVNode("div", _hoisted_12$12, [unref(showHierarchy) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(hierarchicalGroups), (majorGroup) => {
11352
- return openBlock(), createElementBlock("div", {
11353
- key: majorGroup.name,
11354
- class: "mint-sample-selector__major-group"
11355
- }, [createElementVNode("div", {
11356
- class: normalizeClass([
11357
- "mint-sample-selector__major-header",
11358
- unref(draggingGroup) === majorGroup.name && unref(draggingGroupKind) === "major" ? "mint-sample-selector__header--dragging" : "",
11359
- unref(reorderTarget) === majorGroup.name && unref(draggingGroupKind) === "major" && unref(reorderPosition) === "before" ? "mint-sample-selector__header--drag-over-before" : "",
11360
- unref(reorderTarget) === majorGroup.name && unref(draggingGroupKind) === "major" && unref(reorderPosition) === "after" ? "mint-sample-selector__header--drag-over-after" : ""
11361
- ]),
11362
- draggable: "true",
11363
- onClick: ($event) => toggleGroupExpanded(`major:${majorGroup.name}`),
11364
- onDragstart: ($event) => unref(handleGroupDragStart)(majorGroup.name, "major", $event),
11365
- onDragend: _cache[3] || (_cache[3] = (...args) => unref(handleGroupDragEnd) && unref(handleGroupDragEnd)(...args)),
11366
- onDragover: ($event) => unref(handleGroupDragOver)(majorGroup.name, "major", $event),
11367
- onDragleave: _cache[4] || (_cache[4] = ($event) => unref(handleGroupDragLeave)($event)),
11368
- onDrop: ($event) => unref(handleGroupDrop)(majorGroup.name, "major", $event)
11369
- }, [
11370
- (openBlock(), createElementBlock("svg", {
11371
- class: normalizeClass(["mint-sample-selector__chevron", isGroupExpanded(`major:${majorGroup.name}`) ? "mint-sample-selector__chevron--open" : ""]),
11372
- fill: "none",
11373
- stroke: "currentColor",
11374
- viewBox: "0 0 24 24"
11375
- }, [..._cache[24] || (_cache[24] = [createElementVNode("path", {
11376
- "stroke-linecap": "round",
11377
- "stroke-linejoin": "round",
11378
- "stroke-width": "2",
11379
- d: "M9 5l7 7-7 7"
11380
- }, null, -1)])], 2)),
11381
- createElementVNode("input", {
11382
- type: "checkbox",
11383
- checked: unref(isMajorGroupFullySelected)(majorGroup),
11384
- indeterminate: unref(isMajorGroupPartiallySelected)(majorGroup),
11385
- class: "mint-sample-selector__checkbox",
11386
- style: normalizeStyle({ accentColor: majorGroup.color }),
11387
- onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
11388
- onChange: ($event) => unref(toggleMajorGroupSamples)(majorGroup)
11389
- }, null, 44, _hoisted_14$10),
11390
- createElementVNode("button", {
11391
- type: "button",
11392
- class: "mint-sample-selector__color-dot mint-sample-selector__color-dot--large mint-sample-selector__color-dot--clickable",
11393
- style: normalizeStyle({ backgroundColor: majorGroup.color }),
11394
- onClick: withModifiers(($event) => openMajorGroupColorPicker(majorGroup, $event), ["stop"]),
11395
- title: "Click to change color family"
11396
- }, null, 12, _hoisted_15$9),
11397
- createElementVNode("span", _hoisted_16$8, toDisplayString(majorGroup.name), 1),
11398
- createElementVNode("span", {
11399
- class: "mint-sample-selector__count-badge",
11400
- style: normalizeStyle({
11401
- backgroundColor: majorGroup.color + "20",
11402
- color: majorGroup.color
11403
- })
11404
- }, toDisplayString(majorGroup.allSamples.length), 5),
11405
- createElementVNode("button", {
11406
- type: "button",
11407
- class: "mint-sample-selector__delete-btn mint-sample-selector__delete-btn--hidden",
11408
- onClick: withModifiers(($event) => deleteMajorGroup(majorGroup), ["stop"]),
11409
- title: "Remove major group"
11410
- }, [..._cache[25] || (_cache[25] = [createElementVNode("svg", {
11411
- fill: "none",
11412
- stroke: "currentColor",
11413
- viewBox: "0 0 24 24"
11414
- }, [createElementVNode("path", {
11415
- "stroke-linecap": "round",
11416
- "stroke-linejoin": "round",
11417
- "stroke-width": "2",
11418
- d: "M6 18L18 6M6 6l12 12"
11419
- })], -1)])], 8, _hoisted_17$8)
11420
- ], 42, _hoisted_13$12), createVNode(Transition, { name: "mint-collapse" }, {
11421
- default: withCtx(() => [isGroupExpanded(`major:${majorGroup.name}`) ? (openBlock(), createElementBlock("div", {
11422
- key: 0,
11423
- class: "mint-sample-selector__sub-groups",
11424
- style: normalizeStyle({ borderColor: majorGroup.color + "30" })
11425
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(majorGroup.subGroups, (subGroup) => {
11426
- return openBlock(), createElementBlock("div", {
11427
- key: subGroup.name,
11428
- class: normalizeClass(["mint-sample-selector__sub-group", unref(dragOverGroup) === subGroup.name ? "mint-sample-selector__sub-group--drag-over" : ""]),
11429
- onDragover: ($event) => unref(handleDragOver)(subGroup.name, $event),
11430
- onDragleave: _cache[8] || (_cache[8] = (...args) => unref(handleDragLeave) && unref(handleDragLeave)(...args)),
11431
- onDrop: ($event) => unref(handleDrop)(subGroup.name, $event)
11432
- }, [createElementVNode("div", {
11433
- class: normalizeClass([
11434
- "mint-sample-selector__sub-header",
11435
- unref(draggingGroup) === subGroup.name && unref(draggingGroupKind) === "sub" ? "mint-sample-selector__header--dragging" : "",
11436
- unref(reorderTarget) === subGroup.name && unref(draggingGroupKind) === "sub" && unref(reorderPosition) === "before" ? "mint-sample-selector__header--drag-over-before" : "",
11437
- unref(reorderTarget) === subGroup.name && unref(draggingGroupKind) === "sub" && unref(reorderPosition) === "after" ? "mint-sample-selector__header--drag-over-after" : ""
11438
- ]),
11439
- draggable: "true",
11440
- onClick: ($event) => toggleGroupExpanded(subGroup.name),
11441
- onDragstart: ($event) => unref(handleGroupDragStart)(subGroup.name, "sub", $event),
11442
- onDragend: _cache[6] || (_cache[6] = (...args) => unref(handleGroupDragEnd) && unref(handleGroupDragEnd)(...args)),
11443
- onDragover: ($event) => unref(handleGroupDragOver)(subGroup.name, "sub", $event),
11444
- onDragleave: _cache[7] || (_cache[7] = ($event) => unref(handleGroupDragLeave)($event)),
11445
- onDrop: ($event) => unref(handleGroupDrop)(subGroup.name, "sub", $event)
11446
- }, [
11447
- (openBlock(), createElementBlock("svg", {
11448
- class: normalizeClass(["mint-sample-selector__chevron mint-sample-selector__chevron--small", isGroupExpanded(subGroup.name) ? "mint-sample-selector__chevron--open" : ""]),
11449
- fill: "none",
11450
- stroke: "currentColor",
11451
- viewBox: "0 0 24 24"
11452
- }, [..._cache[26] || (_cache[26] = [createElementVNode("path", {
11453
- "stroke-linecap": "round",
11454
- "stroke-linejoin": "round",
11455
- "stroke-width": "2",
11456
- d: "M9 5l7 7-7 7"
11457
- }, null, -1)])], 2)),
11458
- createElementVNode("input", {
11459
- type: "checkbox",
11460
- checked: unref(isGroupFullySelected)(subGroup.name),
11461
- indeterminate: unref(isGroupPartiallySelected)(subGroup.name),
11462
- class: "mint-sample-selector__checkbox mint-sample-selector__checkbox--small",
11463
- style: normalizeStyle({ accentColor: subGroup.displayColor }),
11464
- onClick: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop"])),
11465
- onChange: ($event) => unref(toggleGroupSamples)(subGroup.name)
11466
- }, null, 44, _hoisted_20$7),
11467
- createElementVNode("div", {
11468
- class: "mint-sample-selector__color-dot",
11469
- style: normalizeStyle({ backgroundColor: subGroup.displayColor }),
11470
- "aria-hidden": "true"
11471
- }, null, 4),
11472
- createElementVNode("span", _hoisted_21$6, toDisplayString(subGroup.name), 1),
11473
- createElementVNode("span", {
11474
- class: "mint-sample-selector__count-badge mint-sample-selector__count-badge--small",
11475
- style: normalizeStyle({
11476
- backgroundColor: subGroup.displayBg,
11477
- color: subGroup.displayColor
11478
- })
11479
- }, toDisplayString(subGroup.samples.length), 5),
11480
- createElementVNode("button", {
11481
- type: "button",
11482
- class: "mint-sample-selector__delete-btn mint-sample-selector__delete-btn--hidden",
11483
- onClick: withModifiers(($event) => deleteGroup(subGroup.name), ["stop"]),
11484
- title: "Remove sub group"
11485
- }, [..._cache[27] || (_cache[27] = [createElementVNode("svg", {
11486
- fill: "none",
11487
- stroke: "currentColor",
11488
- viewBox: "0 0 24 24"
11489
- }, [createElementVNode("path", {
11490
- "stroke-linecap": "round",
11491
- "stroke-linejoin": "round",
11492
- "stroke-width": "2",
11493
- d: "M6 18L18 6M6 6l12 12"
11494
- })], -1)])], 8, _hoisted_22$5)
11495
- ], 42, _hoisted_19$8), createVNode(Transition, { name: "mint-collapse" }, {
11496
- default: withCtx(() => [isGroupExpanded(subGroup.name) ? (openBlock(), createElementBlock("div", {
11497
- key: 0,
11498
- class: "mint-sample-selector__samples",
11499
- style: normalizeStyle({ borderColor: subGroup.displayBorder })
11500
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(subGroup.samples, (sample) => {
11501
- return openBlock(), createBlock(SampleSelectorSampleRow_default, {
11502
- key: sample,
11503
- sample,
11504
- selected: __props.modelValue.includes(sample),
11505
- dragging: unref(draggingSample) === sample,
11506
- "accent-color": subGroup.displayColor,
11507
- "checkbox-size": "tiny",
11508
- removable: "",
11509
- onDragstart: ($event) => unref(handleDragStart)(sample, subGroup.name, $event),
11510
- onDragend: unref(handleDragEnd),
11511
- onToggle: ($event) => unref(toggleSample)(sample),
11512
- onRemove: ($event) => removeSampleFromGroup$1(sample, subGroup.name)
11513
- }, null, 8, [
11514
- "sample",
11515
- "selected",
11516
- "dragging",
11517
- "accent-color",
11518
- "onDragstart",
11519
- "onDragend",
11520
- "onToggle",
11521
- "onRemove"
11522
- ]);
11523
- }), 128))], 4)) : createCommentVNode("", true)]),
11524
- _: 2
11525
- }, 1024)], 42, _hoisted_18$8);
11526
- }), 128))], 4)) : createCommentVNode("", true)]),
11527
- _: 2
11528
- }, 1024)]);
11529
- }), 128)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(internalGroups.value, (group) => {
11530
- return openBlock(), createElementBlock("div", {
11531
- key: group.name,
11532
- class: normalizeClass(["mint-sample-selector__sub-group", unref(dragOverGroup) === group.name ? "mint-sample-selector__sub-group--drag-over" : ""]),
11533
- onDragover: ($event) => unref(handleDragOver)(group.name, $event),
11534
- onDragleave: _cache[12] || (_cache[12] = (...args) => unref(handleDragLeave) && unref(handleDragLeave)(...args)),
11535
- onDrop: ($event) => unref(handleDrop)(group.name, $event)
11536
- }, [createElementVNode("div", {
11537
- class: normalizeClass([
11538
- "mint-sample-selector__major-header",
11539
- unref(draggingGroup) === group.name && unref(draggingGroupKind) === "flat" ? "mint-sample-selector__header--dragging" : "",
11540
- unref(reorderTarget) === group.name && unref(draggingGroupKind) === "flat" && unref(reorderPosition) === "before" ? "mint-sample-selector__header--drag-over-before" : "",
11541
- unref(reorderTarget) === group.name && unref(draggingGroupKind) === "flat" && unref(reorderPosition) === "after" ? "mint-sample-selector__header--drag-over-after" : ""
11542
- ]),
11543
- draggable: "true",
11544
- onClick: ($event) => toggleGroupExpanded(group.name),
11545
- onDragstart: ($event) => unref(handleGroupDragStart)(group.name, "flat", $event),
11546
- onDragend: _cache[10] || (_cache[10] = (...args) => unref(handleGroupDragEnd) && unref(handleGroupDragEnd)(...args)),
11547
- onDragover: ($event) => unref(handleGroupDragOver)(group.name, "flat", $event),
11548
- onDragleave: _cache[11] || (_cache[11] = ($event) => unref(handleGroupDragLeave)($event)),
11549
- onDrop: ($event) => unref(handleGroupDrop)(group.name, "flat", $event)
11550
- }, [
11551
- (openBlock(), createElementBlock("svg", {
11552
- class: normalizeClass(["mint-sample-selector__chevron", isGroupExpanded(group.name) ? "mint-sample-selector__chevron--open" : ""]),
11553
- fill: "none",
11554
- stroke: "currentColor",
11555
- viewBox: "0 0 24 24"
11556
- }, [..._cache[28] || (_cache[28] = [createElementVNode("path", {
11557
- "stroke-linecap": "round",
11558
- "stroke-linejoin": "round",
11559
- "stroke-width": "2",
11560
- d: "M9 5l7 7-7 7"
11561
- }, null, -1)])], 2)),
11562
- createElementVNode("input", {
11563
- type: "checkbox",
11564
- checked: unref(isGroupFullySelected)(group.name),
11565
- indeterminate: unref(isGroupPartiallySelected)(group.name),
11566
- class: "mint-sample-selector__checkbox",
11567
- style: normalizeStyle({ accentColor: group.color }),
11568
- onClick: _cache[9] || (_cache[9] = withModifiers(() => {}, ["stop"])),
11569
- onChange: ($event) => unref(toggleGroupSamples)(group.name)
11570
- }, null, 44, _hoisted_25$4),
11571
- createElementVNode("button", {
11572
- type: "button",
11573
- class: "mint-sample-selector__color-dot mint-sample-selector__color-dot--large mint-sample-selector__color-dot--clickable",
11574
- style: normalizeStyle({ backgroundColor: group.color }),
11575
- onClick: withModifiers(($event) => openColorPicker(group.name, $event), ["stop"]),
11576
- title: "Click to change color"
11577
- }, null, 12, _hoisted_26$4),
11578
- createElementVNode("span", _hoisted_27$3, toDisplayString(group.name), 1),
11579
- createElementVNode("span", {
11580
- class: "mint-sample-selector__count-badge",
11581
- style: normalizeStyle({
11582
- backgroundColor: group.color + "20",
11583
- color: group.color
11584
- })
11585
- }, toDisplayString(group.samples.length), 5),
11586
- createElementVNode("button", {
11587
- type: "button",
11588
- class: "mint-sample-selector__delete-btn mint-sample-selector__delete-btn--hidden",
11589
- onClick: withModifiers(($event) => deleteGroup(group.name), ["stop"]),
11590
- title: "Remove group"
11591
- }, [..._cache[29] || (_cache[29] = [createElementVNode("svg", {
11592
- fill: "none",
11593
- stroke: "currentColor",
11594
- viewBox: "0 0 24 24"
11595
- }, [createElementVNode("path", {
11596
- "stroke-linecap": "round",
11597
- "stroke-linejoin": "round",
11598
- "stroke-width": "2",
11599
- d: "M6 18L18 6M6 6l12 12"
11600
- })], -1)])], 8, _hoisted_28$2)
11601
- ], 42, _hoisted_24$4), createVNode(Transition, { name: "mint-collapse" }, {
11602
- default: withCtx(() => [isGroupExpanded(group.name) ? (openBlock(), createElementBlock("div", {
11603
- key: 0,
11604
- class: "mint-sample-selector__samples",
11605
- style: normalizeStyle({ borderColor: group.color + "40" })
11606
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(group.samples, (sample) => {
11607
- return openBlock(), createBlock(SampleSelectorSampleRow_default, {
11608
- key: sample,
11609
- sample,
11610
- selected: __props.modelValue.includes(sample),
11611
- dragging: unref(draggingSample) === sample,
11612
- "accent-color": group.color,
11613
- "checkbox-size": "tiny",
11614
- removable: "",
11615
- onDragstart: ($event) => unref(handleDragStart)(sample, group.name, $event),
11616
- onDragend: unref(handleDragEnd),
11617
- onToggle: ($event) => unref(toggleSample)(sample),
11618
- onRemove: ($event) => removeSampleFromGroup$1(sample, group.name)
11619
- }, null, 8, [
11620
- "sample",
11621
- "selected",
11622
- "dragging",
11623
- "accent-color",
11624
- "onDragstart",
11625
- "onDragend",
11626
- "onToggle",
11627
- "onRemove"
11628
- ]);
11629
- }), 128))], 4)) : createCommentVNode("", true)]),
11630
- _: 2
11631
- }, 1024)], 42, _hoisted_23$4);
11632
- }), 128)), internalGroups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_29$1, " Click Smart to auto-group samples ")) : createCommentVNode("", true)]),
11633
- unref(ungroupedSamples).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_30$1, [createElementVNode("div", {
11595
+ createElementVNode("div", _hoisted_12$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(groupTree), (node) => {
11596
+ return openBlock(), createBlock(SampleSelectorGroupNode_default, {
11597
+ key: node.key,
11598
+ node,
11599
+ depth: 0,
11600
+ ctx: treeContext.value
11601
+ }, null, 8, ["node", "ctx"]);
11602
+ }), 128)), internalGroups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_13$12, " Click Smart to auto-group samples ")) : createCommentVNode("", true)]),
11603
+ unref(ungroupedSamples).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_14$10, [createElementVNode("div", {
11634
11604
  class: "mint-sample-selector__ungrouped-header",
11635
- onClick: _cache[13] || (_cache[13] = ($event) => toggleGroupExpanded("__ungrouped__"))
11605
+ onClick: _cache[2] || (_cache[2] = ($event) => toggleGroupExpanded("__ungrouped__"))
11636
11606
  }, [
11637
11607
  (openBlock(), createElementBlock("svg", {
11638
11608
  class: normalizeClass(["mint-sample-selector__chevron", isGroupExpanded("__ungrouped__") ? "mint-sample-selector__chevron--open" : ""]),
11639
11609
  fill: "none",
11640
11610
  stroke: "currentColor",
11641
11611
  viewBox: "0 0 24 24"
11642
- }, [..._cache[30] || (_cache[30] = [createElementVNode("path", {
11612
+ }, [..._cache[13] || (_cache[13] = [createElementVNode("path", {
11643
11613
  "stroke-linecap": "round",
11644
11614
  "stroke-linejoin": "round",
11645
11615
  "stroke-width": "2",
11646
11616
  d: "M9 5l7 7-7 7"
11647
11617
  }, null, -1)])], 2)),
11648
- _cache[31] || (_cache[31] = createElementVNode("span", { class: "mint-sample-selector__ungrouped-label" }, "Ungrouped", -1)),
11649
- createElementVNode("span", _hoisted_31$1, toDisplayString(unref(ungroupedSamples).length), 1)
11618
+ _cache[14] || (_cache[14] = createElementVNode("span", { class: "mint-sample-selector__ungrouped-label" }, "Ungrouped", -1)),
11619
+ createElementVNode("span", _hoisted_15$9, toDisplayString(unref(ungroupedSamples).length), 1)
11650
11620
  ]), createVNode(Transition, { name: "mint-collapse" }, {
11651
- default: withCtx(() => [isGroupExpanded("__ungrouped__") ? (openBlock(), createElementBlock("div", _hoisted_32$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ungroupedSamples), (sample) => {
11621
+ default: withCtx(() => [isGroupExpanded("__ungrouped__") ? (openBlock(), createElementBlock("div", _hoisted_16$8, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ungroupedSamples), (sample) => {
11652
11622
  return openBlock(), createBlock(SampleSelectorSampleRow_default, {
11653
11623
  key: sample,
11654
11624
  sample,
@@ -11669,9 +11639,9 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11669
11639
  }), 128))])) : createCommentVNode("", true)]),
11670
11640
  _: 1
11671
11641
  })])) : createCommentVNode("", true),
11672
- createElementVNode("div", _hoisted_33$1, [createVNode(BaseInput_default, {
11642
+ createElementVNode("div", _hoisted_17$8, [createVNode(BaseInput_default, {
11673
11643
  modelValue: newGroupName.value,
11674
- "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => newGroupName.value = $event),
11644
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => newGroupName.value = $event),
11675
11645
  placeholder: "New group name...",
11676
11646
  class: "mint-sample-selector__new-group-input",
11677
11647
  onKeyup: withKeys(addNewGroup, ["enter"])
@@ -11682,7 +11652,7 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11682
11652
  class: "mint-sample-selector__new-group-btn",
11683
11653
  onClick: addNewGroup
11684
11654
  }, {
11685
- default: withCtx(() => [..._cache[32] || (_cache[32] = [createTextVNode(" Add ", -1)])]),
11655
+ default: withCtx(() => [..._cache[15] || (_cache[15] = [createTextVNode(" Add ", -1)])]),
11686
11656
  _: 1
11687
11657
  }, 8, ["disabled"])]),
11688
11658
  createElementVNode("input", {
@@ -11692,9 +11662,9 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11692
11662
  class: "mint-sample-selector__color-input",
11693
11663
  value: colorPickerSeed.value,
11694
11664
  onChange: handleColorChange
11695
- }, null, 40, _hoisted_34$1)
11665
+ }, null, 40, _hoisted_18$8)
11696
11666
  ])) : createCommentVNode("", true),
11697
- !groupingEnabled.value ? (openBlock(), createElementBlock("div", _hoisted_35$1, [createElementVNode("div", _hoisted_36$1, [_cache[33] || (_cache[33] = createElementVNode("svg", {
11667
+ !groupingEnabled.value ? (openBlock(), createElementBlock("div", _hoisted_19$8, [createElementVNode("div", _hoisted_20$7, [_cache[16] || (_cache[16] = createElementVNode("svg", {
11698
11668
  class: "mint-sample-selector__search-icon",
11699
11669
  fill: "none",
11700
11670
  stroke: "currentColor",
@@ -11705,11 +11675,11 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11705
11675
  "stroke-width": "2",
11706
11676
  d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
11707
11677
  })], -1)), withDirectives(createElementVNode("input", {
11708
- "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => searchQuery.value = $event),
11678
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => searchQuery.value = $event),
11709
11679
  type: "text",
11710
11680
  placeholder: "Search samples...",
11711
11681
  class: "mint-sample-selector__search-input"
11712
- }, null, 512), [[vModelText, searchQuery.value]])]), createElementVNode("div", _hoisted_37$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(filteredSamples), (sample) => {
11682
+ }, null, 512), [[vModelText, searchQuery.value]])]), createElementVNode("div", _hoisted_21$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(filteredSamples), (sample) => {
11713
11683
  return openBlock(), createElementBlock("div", {
11714
11684
  key: sample,
11715
11685
  class: "mint-sample-selector__flat-item",
@@ -11721,11 +11691,11 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11721
11691
  class: "mint-sample-selector__checkbox",
11722
11692
  "aria-label": `Select ${sample}`,
11723
11693
  onChange: ($event) => unref(toggleSample)(sample)
11724
- }, null, 40, _hoisted_39$1), createElementVNode("span", _hoisted_40$1, toDisplayString(sample), 1)], 8, _hoisted_38$1);
11725
- }), 128)), unref(filteredSamples).length === 0 && searchQuery.value.trim() ? (openBlock(), createElementBlock("div", _hoisted_41$1, " No samples match \"" + toDisplayString(searchQuery.value) + "\" ", 1)) : createCommentVNode("", true)])])) : createCommentVNode("", true),
11694
+ }, null, 40, _hoisted_23$4), createElementVNode("span", _hoisted_24$4, toDisplayString(sample), 1)], 8, _hoisted_22$5);
11695
+ }), 128)), unref(filteredSamples).length === 0 && searchQuery.value.trim() ? (openBlock(), createElementBlock("div", _hoisted_25$4, " No samples match \"" + toDisplayString(searchQuery.value) + "\" ", 1)) : createCommentVNode("", true)])])) : createCommentVNode("", true),
11726
11696
  createVNode(AutoGroupModal_default, {
11727
11697
  modelValue: showSmartGroupModal.value,
11728
- "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => showSmartGroupModal.value = $event),
11698
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => showSmartGroupModal.value = $event),
11729
11699
  samples: resolvedSamples.value,
11730
11700
  groups: internalGroups.value,
11731
11701
  "initial-mode": groupingModalMode.value,
@@ -18278,4 +18248,4 @@ var components_exports = /* @__PURE__ */ __exportAll({
18278
18248
  //#endregion
18279
18249
  export { SmartGroupFieldRecipe_default as $, ProtocolStepEditor_default as A, AppToastContainer_default as At, Breadcrumb_default as B, estimateSequenceRemainingSeconds as C, AppPluginSwitcher_default as Ct, sequenceSamplesRemaining as D, ThemeToggle_default as Dt, sequenceProgressPercent as E, CollapsibleCard_default as Et, RackEditor_default as F, BaseTabs_default as Ft, AppContainer_default as G, ProgressBar_default as H, BioTemplatePresetWorkspaceView_default as I, ColorSlider_default as It, ComponentBindingRenderer_default as J, DoseDesignWorkspaceView_default as K, BioTemplatePackWorkspaceView_default as L, ReagentEditor_default as M, Calendar_default as Mt, SmartGroupModal_default as N, DropdownButton_default as Nt, ChemicalFormula_default as O, ActionMenu_default as Ot, GroupAssigner_default as P, SegmentedControl_default as Pt, SmartGroupManual_default as Q, BioTemplateExperimentWorkspaceView_default as R, estimateSequenceFinishDate as S, AppTopBar_default as St, formatSequenceRemaining as T, PluginIcon_default as Tt, StatusIndicator_default as U, Avatar_default as V, Divider_default as W, SampleSelector_default as X, ScheduleCalendar_default as Y, AutoGroupModal_default as Z, reconstructLcmsPlateCellsFromSequenceItems as _, AppLayout_default as _t, ResourceCard_default as a, DoseCalculator_default as at, InstrumentAlertLog_default as b, FormActions_default as bt, BatchProgressList_default as c, GeneratedResultRenderer_default as ct, DEFAULT_LCMS_SEQUENCE_COLUMNS as d, LoadingSpinner_default as dt, ReagentList_default as et, basenameFromWindowsPath as f, generatedJobDefaults as ft, lcmsWellIdFromPosition as g, MobileSupportGate_default as gt, inferLcmsPlateTypeFromWellIds as h, PluginWorkspaceView_default as ht, SectionCard_default as i, ExperimentTimeline_default as it, SampleHierarchyTree_default as j, DataFrame_default as jt, ScientificNumber_default as k, IconButton_default as kt, AuditTrail_default as l, GeneratedPlotlyResult_default as lt, extractLcmsSampleName as m, normalizeGeneratedJobInput as mt, FitPanel_default as n, SampleLegend_default as nt, TimeRangeInput_default as o, GeneratedPluginView_default as ot, extractLcmsCommonPrefix as p, generatedJobFormSchema as pt, ControlWorkspaceView_default as q, ArtifactSaveDialog_default as r, WellPlate_default as rt, ExperimentDataViewer_default as s, JobsStatusTray_default as st, components_exports as t, PlateMapEditor_default as tt, LcmsSequenceTable_default as u, ChartContainer_default as ut, InstrumentStatusCard_default as v, AppSidebar_default as vt, formatSequenceEta as w, AppAvatarMenu_default as wt, SequenceProgressBar_default as x, StepWizard_default as xt, InstrumentStateBadge_default as y, FormBuilder_default as yt, BioTemplateRenderer_default as z };
18280
18250
 
18281
- //# sourceMappingURL=components-CDomhGSj.js.map
18251
+ //# sourceMappingURL=components-BbtUpCTv.js.map