@morscherlab/mint-sdk 1.2.0-beta.15 → 1.2.0-beta.16

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 (108) hide show
  1. package/README.md +30 -0
  2. package/dist/{ExperimentPopover-BIZKoRTT.js → ExperimentPopover-CJdNlCZb.js} +3 -3
  3. package/dist/{ExperimentPopover-BIZKoRTT.js.map → ExperimentPopover-CJdNlCZb.js.map} +1 -1
  4. package/dist/{ExperimentSelectorModal-BeEOomw_.js → ExperimentSelectorModal-CZ1f_K9I.js} +5 -5
  5. package/dist/{ExperimentSelectorModal-BeEOomw_.js.map → ExperimentSelectorModal-CZ1f_K9I.js.map} +1 -1
  6. package/dist/{SettingsModal-Dphh3RrI.js → SettingsModal-DQUcpT4T.js} +5 -5
  7. package/dist/{SettingsModal-Dphh3RrI.js.map → SettingsModal-DQUcpT4T.js.map} +1 -1
  8. package/dist/{Skeleton-DxtwJ5gt.js → Skeleton-JaDtC8-9.js} +3 -3
  9. package/dist/{Skeleton-DxtwJ5gt.js.map → Skeleton-JaDtC8-9.js.map} +1 -1
  10. package/dist/__tests__/apiErrors.test.d.ts +1 -0
  11. package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
  12. package/dist/apiErrors.d.ts +26 -0
  13. package/dist/components/BaseInput.vue.d.ts +1 -1
  14. package/dist/components/BaseSelect.vue.d.ts +1 -1
  15. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  16. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  17. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  18. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  19. package/dist/components/DatePicker.vue.d.ts +1 -1
  20. package/dist/components/DateTimePicker.vue.d.ts +1 -1
  21. package/dist/components/FileBrowserModal.vue.d.ts +1 -1
  22. package/dist/components/FilePicker.vue.d.ts +3 -3
  23. package/dist/components/FileUploader.vue.d.ts +5 -2
  24. package/dist/components/FormulaInput.vue.d.ts +1 -1
  25. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  26. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  27. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  28. package/dist/components/NumberInput.vue.d.ts +1 -1
  29. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  30. package/dist/components/ResourceCard.vue.d.ts +1 -1
  31. package/dist/components/SecretInput.vue.d.ts +1 -1
  32. package/dist/components/SequenceInput.vue.d.ts +1 -1
  33. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  34. package/dist/components/TagsInput.vue.d.ts +1 -1
  35. package/dist/components/TimePicker.vue.d.ts +1 -1
  36. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  37. package/dist/components/UnitInput.vue.d.ts +1 -1
  38. package/dist/components/WellPlate.vue.d.ts +1 -1
  39. package/dist/components/index.d.ts +1 -0
  40. package/dist/components/index.js +8 -8
  41. package/dist/{components-6IIxCSI8.js → components-DT6ggNrt.js} +580 -366
  42. package/dist/components-DT6ggNrt.js.map +1 -0
  43. package/dist/composables/filePicker/localFiles.d.ts +1 -1
  44. package/dist/composables/filePicker/usePickerNavigation.d.ts +4 -3
  45. package/dist/composables/index.js +9 -9
  46. package/dist/composables/useApi.d.ts +2 -0
  47. package/dist/composables/useFilePicker.d.ts +5 -6
  48. package/dist/{composables-hY2Q2xPI.js → composables-DmF_8iyX.js} +13 -10
  49. package/dist/{composables-hY2Q2xPI.js.map → composables-DmF_8iyX.js.map} +1 -1
  50. package/dist/{errors-_W0-LbA6.js → errors-DZDb1cIb.js} +66 -5
  51. package/dist/errors-DZDb1cIb.js.map +1 -0
  52. package/dist/{experiment-Cwl9AYxw.js → experiment-CHm_TwJy.js} +2 -2
  53. package/dist/{experiment-Cwl9AYxw.js.map → experiment-CHm_TwJy.js.map} +1 -1
  54. package/dist/{experiment-utils-DV3DrvE_.js → experiment-utils-CV2Wza3z.js} +1 -1
  55. package/dist/{experiment-utils-DV3DrvE_.js.map → experiment-utils-CV2Wza3z.js.map} +1 -1
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.js +15 -15
  58. package/dist/install.js +2 -2
  59. package/dist/stores/index.js +2 -2
  60. package/dist/styles.css +29 -18
  61. package/dist/templates/index.js +2 -2
  62. package/dist/{templates-Qq113pyZ.js → templates-CXARYr6_.js} +2 -2
  63. package/dist/{templates-Qq113pyZ.js.map → templates-CXARYr6_.js.map} +1 -1
  64. package/dist/types/filePicker.d.ts +9 -1
  65. package/dist/{useControlSchema-aMZlb4Sc.js → useControlSchema-BAzmP1_y.js} +42 -37
  66. package/dist/useControlSchema-BAzmP1_y.js.map +1 -0
  67. package/dist/{useDropdownState-DitCtrTT.js → useDropdownState-C7hRiVQf.js} +2 -2
  68. package/dist/{useDropdownState-DitCtrTT.js.map → useDropdownState-C7hRiVQf.js.map} +1 -1
  69. package/dist/{useExperimentSelector-I8HC8hUu.js → useExperimentSelector-D_vobhnW.js} +4 -4
  70. package/dist/{useExperimentSelector-I8HC8hUu.js.map → useExperimentSelector-D_vobhnW.js.map} +1 -1
  71. package/dist/{useFormBuilder-TCxNnqeb.js → useFormBuilder-DEHejpiL.js} +2 -2
  72. package/dist/{useFormBuilder-TCxNnqeb.js.map → useFormBuilder-DEHejpiL.js.map} +1 -1
  73. package/dist/{validation-nBbSn1TI.js → validation-OuEr0iAS.js} +9 -8
  74. package/dist/{validation-nBbSn1TI.js.map → validation-OuEr0iAS.js.map} +1 -1
  75. package/package.json +1 -1
  76. package/src/__tests__/apiErrors.test.ts +81 -0
  77. package/src/__tests__/components/FilePicker.state.test.ts +128 -1
  78. package/src/__tests__/components/FilePicker.test.ts +146 -1
  79. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  80. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  81. package/src/__tests__/components/SegmentedControl.test.ts +19 -0
  82. package/src/__tests__/composables/useApi.test.ts +82 -9
  83. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  84. package/src/__tests__/composables/usePluginClient.test.ts +3 -0
  85. package/src/apiErrors.ts +85 -0
  86. package/src/components/FilePicker.story.vue +44 -0
  87. package/src/components/FilePicker.vue +23 -40
  88. package/src/components/FileUploader.vue +32 -14
  89. package/src/components/GeneratedPlotlyResult.vue +34 -69
  90. package/src/components/GeneratedResultRenderer.vue +0 -5
  91. package/src/components/PlotlyChart.story.vue +61 -0
  92. package/src/components/PlotlyChart.vue +233 -0
  93. package/src/components/SegmentedControl.vue +2 -2
  94. package/src/components/index.ts +1 -0
  95. package/src/composables/filePicker/localFiles.ts +6 -3
  96. package/src/composables/filePicker/usePickerNavigation.ts +29 -8
  97. package/src/composables/filePicker/usePickerSelection.ts +17 -4
  98. package/src/composables/filePicker/validation.ts +1 -0
  99. package/src/composables/useApi.ts +33 -4
  100. package/src/composables/useFilePicker.ts +41 -22
  101. package/src/composables/useGeneratedAnalysis.ts +10 -17
  102. package/src/composables/usePluginClient.ts +3 -0
  103. package/src/index.ts +3 -0
  104. package/src/styles/components/file-picker.css +6 -5
  105. package/src/types/filePicker.ts +9 -2
  106. package/dist/components-6IIxCSI8.js.map +0 -1
  107. package/dist/errors-_W0-LbA6.js.map +0 -1
  108. package/dist/useControlSchema-aMZlb4Sc.js.map +0 -1
@@ -1,22 +1,22 @@
1
1
  import { n as __exportAll, r as __toESM } from "./chunk-BoAXSpZd.js";
2
- import { f as BaseModal_default, h as BaseButton_default, m as useEventListener, p as useFocusTrap } from "./experiment-utils-DV3DrvE_.js";
3
- import { a as BaseSelect_default, i as BasePill_default, n as useRequestSyncState, o as normalizeOptionInput, r as EmptyState_default, s as BaseInput_default, t as Skeleton_default } from "./Skeleton-DxtwJ5gt.js";
4
- import { A as useConcentrationUnits, Bt as MultiSelect_default, Gt as BaseToggle_default, I as useChemicalFormula, Jt as BaseTextarea_default, K as useGeneratedAnalysis, Kt as BaseCheckbox_default, L as GeneratedPathInput_default, M as SequenceInput_default, O as ConcentrationInput_default, Ot as formatDuration, P as FormulaInput_default, R as ArtifactSelectorModal_default, St as TimePicker_default, Tt as durationMinutes, U as resolveCurrentExperimentId, Ut as BaseSlider_default, V as getInjectedPlatformContext, Vt as useListSelection, Wt as BaseRadioGroup_default, X as jobStatusLabel, Z as normalizeJobPercent, _ as controlsToFormSchema, at as AlertBox_default, ct as SecretInput_default, f as resolveControlModel, g as mergeControlWorkspaceOptions, it as _plugin_vue_export_helper_default, j as MoleculeInput_default, k as UnitInput_default, kt as formatTime, o as defineDoseDesignControlModel, ot as FileUploader_default, qt as Tooltip_default, r as getControlDefaults, rt as isRecord, st as NumberInput_default, tt as DateTimePicker_default, u as useControlWorkspace, wt as compareTime, x as controlsToSidebarPanels, xt as TagsInput_default, y as controlsToSectionFormSchemas, zt as DatePicker_default } from "./useControlSchema-aMZlb4Sc.js";
5
- import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-Dphh3RrI.js";
6
- import { $ as getInjectedFrontendRevision, C as useExpansionSet, E as getSampleGroupParentPath, H as useListReorder, J as usePluginWorkspace, N as useAutoGroup, P as parseCSV, Q as useAppExperiment, R as DEFAULT_COLORS, S as useExperimentData, T as getSampleGroupMajorPrefix, U as useReorderAnnouncer, W as useDoseCalculator, X as useMobileSupportGate, Y as DEFAULT_MOBILE_VIEWPORT_QUERY, Z as APP_EXPERIMENT_KEY, a as DEFAULT_PRESETS, b as useScheduleDrag, c as useReagentSeries, d as useBioTemplatePresetWorkspace, dt as useRovingFocus, et as useRuntimeAlignment, f as useBioTemplatePackWorkspace, i as useProtocolTemplates, it as useToast, k as readFileAsText, l as useGroupAssignment, lt as useSortedItems, n as pickerFormat, nt as usePresenceHeartbeat, o as DEFAULT_UNITS, q as usePluginJobCenter, r as pickerReason, rt as useTheme, st as useTextSearch, t as pickerExclusion, u as useRackEditor, ut as useMenuKeyboard, w as useSampleGroups, x as useExperimentSamples, z as useWellPlateEditor } from "./validation-nBbSn1TI.js";
7
- import { t as useDropdownState } from "./useDropdownState-DitCtrTT.js";
8
- import { i as useApi, l as tableDensityToSize, u as tryUseSettingsStore } from "./errors-_W0-LbA6.js";
9
- import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-TCxNnqeb.js";
2
+ import { i as useApi, l as tableDensityToSize, u as tryUseSettingsStore } from "./errors-DZDb1cIb.js";
3
+ import { f as BaseModal_default, h as BaseButton_default, m as useEventListener, p as useFocusTrap } from "./experiment-utils-CV2Wza3z.js";
4
+ import { a as BaseSelect_default, i as BasePill_default, n as useRequestSyncState, o as normalizeOptionInput, r as EmptyState_default, s as BaseInput_default, t as Skeleton_default } from "./Skeleton-JaDtC8-9.js";
5
+ import { A as useConcentrationUnits, Bt as MultiSelect_default, Gt as BaseToggle_default, I as useChemicalFormula, Jt as BaseTextarea_default, K as useGeneratedAnalysis, Kt as BaseCheckbox_default, L as GeneratedPathInput_default, M as SequenceInput_default, O as ConcentrationInput_default, Ot as formatDuration, P as FormulaInput_default, R as ArtifactSelectorModal_default, St as TimePicker_default, Tt as durationMinutes, U as resolveCurrentExperimentId, Ut as BaseSlider_default, V as getInjectedPlatformContext, Vt as useListSelection, Wt as BaseRadioGroup_default, X as jobStatusLabel, Z as normalizeJobPercent, _ as controlsToFormSchema, at as AlertBox_default, ct as SecretInput_default, f as resolveControlModel, g as mergeControlWorkspaceOptions, it as _plugin_vue_export_helper_default, j as MoleculeInput_default, k as UnitInput_default, kt as formatTime, o as defineDoseDesignControlModel, ot as FileUploader_default, qt as Tooltip_default, r as getControlDefaults, rt as isRecord, st as NumberInput_default, tt as DateTimePicker_default, u as useControlWorkspace, wt as compareTime, x as controlsToSidebarPanels, xt as TagsInput_default, y as controlsToSectionFormSchemas, zt as DatePicker_default } from "./useControlSchema-BAzmP1_y.js";
6
+ import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-DQUcpT4T.js";
7
+ import { $ as getInjectedFrontendRevision, C as useExpansionSet, E as getSampleGroupParentPath, H as useListReorder, J as usePluginWorkspace, N as useAutoGroup, P as parseCSV, Q as useAppExperiment, R as DEFAULT_COLORS, S as useExperimentData, T as getSampleGroupMajorPrefix, U as useReorderAnnouncer, W as useDoseCalculator, X as useMobileSupportGate, Y as DEFAULT_MOBILE_VIEWPORT_QUERY, Z as APP_EXPERIMENT_KEY, a as DEFAULT_PRESETS, b as useScheduleDrag, c as useReagentSeries, d as useBioTemplatePresetWorkspace, dt as useRovingFocus, et as useRuntimeAlignment, f as useBioTemplatePackWorkspace, i as useProtocolTemplates, it as useToast, k as readFileAsText, l as useGroupAssignment, lt as useSortedItems, n as pickerFormat, nt as usePresenceHeartbeat, o as DEFAULT_UNITS, q as usePluginJobCenter, r as pickerReason, rt as useTheme, st as useTextSearch, t as pickerExclusion, u as useRackEditor, ut as useMenuKeyboard, w as useSampleGroups, x as useExperimentSamples, z as useWellPlateEditor } from "./validation-OuEr0iAS.js";
8
+ import { t as useDropdownState } from "./useDropdownState-C7hRiVQf.js";
9
+ import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-DEHejpiL.js";
10
10
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-DQ0MjwHZ.js";
11
- import { B as toBioTemplateComponentProps, Cn as SLOT_ORDER, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, Sn as SLOT_COLORS, V as toBioTemplateComponentPropsByComponent, _n as createWellGrid, dn as extractTemplateCollection, gn as createPlateRowLabels, hn as createPlateColumnLabels, mn as WELL_PLATE_SIZE_CONFIGS, pn as PLATE_CONFIGS, vn as getRectangleWellIds, xn as SAMPLE_COLOR_SCALE } from "./templates-Qq113pyZ.js";
12
- import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-BIZKoRTT.js";
13
- import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-BeEOomw_.js";
11
+ import { B as toBioTemplateComponentProps, Cn as SLOT_ORDER, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, Sn as SLOT_COLORS, V as toBioTemplateComponentPropsByComponent, _n as createWellGrid, dn as extractTemplateCollection, gn as createPlateRowLabels, hn as createPlateColumnLabels, mn as WELL_PLATE_SIZE_CONFIGS, pn as PLATE_CONFIGS, vn as getRectangleWellIds, xn as SAMPLE_COLOR_SCALE } from "./templates-CXARYr6_.js";
12
+ import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-CJdNlCZb.js";
13
+ import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-CZ1f_K9I.js";
14
14
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRaw, toRef, unref, useId, useModel, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
15
15
  import { computePosition, flip, offset, shift } from "@floating-ui/dom";
16
16
  import { Ellipsis, RefreshCw } from "lucide-vue-next";
17
17
  //#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
18
- var _hoisted_1$85 = { class: "mint-color-slider__row" };
19
- var _hoisted_2$77 = { class: "mint-color-slider__track" };
18
+ var _hoisted_1$86 = { class: "mint-color-slider__row" };
19
+ var _hoisted_2$76 = { class: "mint-color-slider__track" };
20
20
  var _hoisted_3$69 = [
21
21
  "value",
22
22
  "min",
@@ -132,7 +132,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
132
132
  emit("update:modelValue", Number(target.value));
133
133
  }
134
134
  return (_ctx, _cache) => {
135
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$85, [createElementVNode("div", _hoisted_2$77, [createElementVNode("input", {
135
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$86, [createElementVNode("div", _hoisted_2$76, [createElementVNode("input", {
136
136
  type: "range",
137
137
  value: currentValue.value,
138
138
  min: __props.min,
@@ -168,7 +168,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
168
168
  });
169
169
  //#endregion
170
170
  //#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
171
- var _hoisted_1$84 = [
171
+ var _hoisted_1$85 = [
172
172
  "id",
173
173
  "aria-selected",
174
174
  "aria-disabled",
@@ -176,7 +176,7 @@ var _hoisted_1$84 = [
176
176
  "tabindex",
177
177
  "onClick"
178
178
  ];
179
- var _hoisted_2$76 = { class: "mint-tab__content" };
179
+ var _hoisted_2$75 = { class: "mint-tab__content" };
180
180
  var _hoisted_3$68 = {
181
181
  key: 0,
182
182
  class: "mint-tab__icon mint-tab__icon--svg",
@@ -256,7 +256,7 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
256
256
  ]),
257
257
  onClick: ($event) => selectTab(tab.id),
258
258
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeydown) && unref(handleKeydown)(...args))
259
- }, [createElementVNode("span", _hoisted_2$76, [
259
+ }, [createElementVNode("span", _hoisted_2$75, [
260
260
  isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$68, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
261
261
  return openBlock(), createElementBlock("path", {
262
262
  key: index,
@@ -268,21 +268,21 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
268
268
  }, null, 8, _hoisted_5$60))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$56, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
269
269
  createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
270
270
  tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$50, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
271
- ])], 42, _hoisted_1$84);
271
+ ])], 42, _hoisted_1$85);
272
272
  }), 128))], 2);
273
273
  };
274
274
  }
275
275
  });
276
276
  //#endregion
277
277
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
278
- var _hoisted_1$83 = [
278
+ var _hoisted_1$84 = [
279
279
  "aria-checked",
280
280
  "tabindex",
281
281
  "disabled",
282
282
  "onClick",
283
283
  "onKeydown"
284
284
  ];
285
- var _hoisted_2$75 = { class: "mint-segmented-control__label" };
285
+ var _hoisted_2$74 = { class: "mint-segmented-control__label" };
286
286
  var _hoisted_3$67 = {
287
287
  key: 0,
288
288
  class: "mint-segmented-control__description"
@@ -294,7 +294,7 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
294
294
  props: {
295
295
  modelValue: {},
296
296
  options: {},
297
- variant: { default: "simple" },
297
+ variant: { default: "card" },
298
298
  size: { default: "md" },
299
299
  fullWidth: {
300
300
  type: Boolean,
@@ -308,7 +308,7 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
308
308
  },
309
309
  emits: ["update:modelValue"],
310
310
  setup(__props, { emit: __emit }) {
311
- /** Renders a segmented button group for single-option selection, with simple or solid variants. */
311
+ /** Renders a segmented button group for single-option selection, defaulting to the card variant. */
312
312
  const props = __props;
313
313
  const emit = __emit;
314
314
  const normalizedOptions = computed(() => props.options.map(normalizeOptionInput));
@@ -387,15 +387,15 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
387
387
  ]),
388
388
  onClick: ($event) => handleSelect(option),
389
389
  onKeydown: ($event) => handleKeydown($event, option)
390
- }, [createElementVNode("span", _hoisted_2$75, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$67, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$83);
390
+ }, [createElementVNode("span", _hoisted_2$74, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$67, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$84);
391
391
  }), 128))], 2);
392
392
  };
393
393
  }
394
394
  });
395
395
  //#endregion
396
396
  //#region src/components/DropdownButton.vue?vue&type=script&setup=true&lang.ts
397
- var _hoisted_1$82 = ["disabled", "aria-expanded"];
398
- var _hoisted_2$74 = {
397
+ var _hoisted_1$83 = ["disabled", "aria-expanded"];
398
+ var _hoisted_2$73 = {
399
399
  key: 0,
400
400
  class: "mint-dropdown-button__spinner",
401
401
  viewBox: "0 0 24 24",
@@ -505,7 +505,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
505
505
  onClick: toggle,
506
506
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleTriggerKeydown) && unref(handleTriggerKeydown)(...args))
507
507
  }, [
508
- __props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$74, [..._cache[2] || (_cache[2] = [createElementVNode("circle", {
508
+ __props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$73, [..._cache[2] || (_cache[2] = [createElementVNode("circle", {
509
509
  cx: "12",
510
510
  cy: "12",
511
511
  r: "10",
@@ -528,7 +528,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
528
528
  "stroke-linecap": "round",
529
529
  "stroke-linejoin": "round"
530
530
  }, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
531
- ], 42, _hoisted_1$82), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
531
+ ], 42, _hoisted_1$83), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
532
532
  default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("ul", {
533
533
  key: 0,
534
534
  ref_key: "panelRef",
@@ -564,8 +564,8 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
564
564
  });
565
565
  //#endregion
566
566
  //#region src/components/Calendar.vue?vue&type=script&setup=true&lang.ts
567
- var _hoisted_1$81 = { class: "mint-calendar" };
568
- var _hoisted_2$73 = {
567
+ var _hoisted_1$82 = { class: "mint-calendar" };
568
+ var _hoisted_2$72 = {
569
569
  key: 0,
570
570
  class: "mint-calendar__header"
571
571
  };
@@ -798,8 +798,8 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
798
798
  emit("navigate", "next", currentMonth.value, currentYear.value);
799
799
  }
800
800
  return (_ctx, _cache) => {
801
- return openBlock(), createElementBlock("div", _hoisted_1$81, [
802
- __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$73, [
801
+ return openBlock(), createElementBlock("div", _hoisted_1$82, [
802
+ __props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$72, [
803
803
  createElementVNode("button", {
804
804
  type: "button",
805
805
  class: "mint-calendar__nav-btn",
@@ -872,7 +872,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
872
872
  });
873
873
  //#endregion
874
874
  //#region src/components/LoadingSpinner.vue?vue&type=script&setup=true&lang.ts
875
- var _hoisted_1$80 = { class: "mint-spinner__label" };
875
+ var _hoisted_1$81 = { class: "mint-spinner__label" };
876
876
  //#endregion
877
877
  //#region src/components/LoadingSpinner.vue
878
878
  var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
@@ -907,14 +907,14 @@ var LoadingSpinner_default = /* @__PURE__ */ defineComponent({
907
907
  style: { "opacity": "0.75" },
908
908
  fill: "currentColor",
909
909
  d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
910
- })], -1)), createElementVNode("span", _hoisted_1$80, toDisplayString(__props.label), 1)], 2);
910
+ })], -1)), createElementVNode("span", _hoisted_1$81, toDisplayString(__props.label), 1)], 2);
911
911
  };
912
912
  }
913
913
  });
914
914
  //#endregion
915
915
  //#region src/components/internal/DataStateInternal.vue?vue&type=script&setup=true&lang.ts
916
- var _hoisted_1$79 = ["data-state"];
917
- var _hoisted_2$72 = {
916
+ var _hoisted_1$80 = ["data-state"];
917
+ var _hoisted_2$71 = {
918
918
  class: "mint-data-state__loading-text",
919
919
  "aria-hidden": "true"
920
920
  };
@@ -957,7 +957,7 @@ var DataStateInternal_default = /* @__PURE__ */ defineComponent({
957
957
  }, [__props.state === "loading" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(LoadingSpinner_default, {
958
958
  size: spinnerSize.value,
959
959
  label: __props.loadingLabel
960
- }, null, 8, ["size", "label"]), createElementVNode("p", _hoisted_2$72, toDisplayString(__props.loadingLabel), 1)], 64)) : (openBlock(), createBlock(EmptyState_default, {
960
+ }, null, 8, ["size", "label"]), createElementVNode("p", _hoisted_2$71, toDisplayString(__props.loadingLabel), 1)], 64)) : (openBlock(), createBlock(EmptyState_default, {
961
961
  key: 1,
962
962
  title: __props.title,
963
963
  description: __props.description,
@@ -978,17 +978,17 @@ var DataStateInternal_default = /* @__PURE__ */ defineComponent({
978
978
  "size",
979
979
  "variant",
980
980
  "action-label"
981
- ]))], 10, _hoisted_1$79);
981
+ ]))], 10, _hoisted_1$80);
982
982
  };
983
983
  }
984
984
  });
985
985
  //#endregion
986
986
  //#region src/components/DataFrame.vue?vue&type=script&setup=true&lang.ts
987
- var _hoisted_1$78 = {
987
+ var _hoisted_1$79 = {
988
988
  key: 0,
989
989
  class: "mint-dataframe__header"
990
990
  };
991
- var _hoisted_2$71 = { class: "mint-dataframe__search-wrapper" };
991
+ var _hoisted_2$70 = { class: "mint-dataframe__search-wrapper" };
992
992
  var _hoisted_3$64 = ["placeholder"];
993
993
  var _hoisted_4$60 = { class: "mint-dataframe__table" };
994
994
  var _hoisted_5$57 = {
@@ -1026,11 +1026,11 @@ var _hoisted_15$28 = {
1026
1026
  key: 0,
1027
1027
  class: "mint-dataframe__state"
1028
1028
  };
1029
- var _hoisted_16$24 = {
1029
+ var _hoisted_16$25 = {
1030
1030
  key: 1,
1031
1031
  class: "mint-dataframe__state"
1032
1032
  };
1033
- var _hoisted_17$22 = {
1033
+ var _hoisted_17$23 = {
1034
1034
  key: 2,
1035
1035
  class: "mint-dataframe__loading"
1036
1036
  };
@@ -1325,7 +1325,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1325
1325
  });
1326
1326
  return (_ctx, _cache) => {
1327
1327
  return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dataframe", { "mint-dataframe--bordered": __props.bordered }]) }, [
1328
- __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$78, [createElementVNode("div", _hoisted_2$71, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1328
+ __props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$79, [createElementVNode("div", _hoisted_2$70, [_cache[5] || (_cache[5] = createElementVNode("svg", {
1329
1329
  class: "mint-dataframe__search-icon",
1330
1330
  viewBox: "0 0 24 24",
1331
1331
  fill: "none",
@@ -1478,12 +1478,12 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1478
1478
  __props.error ? (openBlock(), createElementBlock("div", _hoisted_15$28, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
1479
1479
  state: "error",
1480
1480
  title: __props.error
1481
- }, null, 8, ["title"])])])) : paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_16$24, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
1481
+ }, null, 8, ["title"])])])) : paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_16$25, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
1482
1482
  state: "empty",
1483
1483
  title: __props.emptyText,
1484
1484
  "icon-path": EMPTY_ICON_PATH$2
1485
1485
  }, null, 8, ["title"])])])) : createCommentVNode("", true),
1486
- __props.loading ? (openBlock(), createElementBlock("div", _hoisted_17$22, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(LoadingSpinner_default, { size: "lg" })])])) : createCommentVNode("", true)
1486
+ __props.loading ? (openBlock(), createElementBlock("div", _hoisted_17$23, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(LoadingSpinner_default, { size: "lg" })])])) : createCommentVNode("", true)
1487
1487
  ], 4),
1488
1488
  __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_18$20, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_19$17, toDisplayString((__props.pagination.page - 1) * __props.pagination.pageSize + 1) + "–" + toDisplayString(Math.min(__props.pagination.page * __props.pagination.pageSize, unref(sortedData).length)) + " of " + toDisplayString(unref(sortedData).length), 1), createElementVNode("div", _hoisted_20$16, [
1489
1489
  createElementVNode("button", {
@@ -1520,8 +1520,8 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1520
1520
  });
1521
1521
  //#endregion
1522
1522
  //#region src/components/AppToastContainer.vue?vue&type=script&setup=true&lang.ts
1523
- var _hoisted_1$77 = { class: "mint-toast__container" };
1524
- var _hoisted_2$70 = ["onClick"];
1523
+ var _hoisted_1$78 = { class: "mint-toast__container" };
1524
+ var _hoisted_2$69 = ["onClick"];
1525
1525
  var _hoisted_3$63 = { class: "mint-toast__message" };
1526
1526
  //#endregion
1527
1527
  //#region src/components/AppToastContainer.vue
@@ -1537,7 +1537,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1537
1537
  info: "var(--mint-info)"
1538
1538
  };
1539
1539
  return (_ctx, _cache) => {
1540
- return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$77, [createVNode(TransitionGroup, { name: "toast" }, {
1540
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$78, [createVNode(TransitionGroup, { name: "toast" }, {
1541
1541
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(toasts), (toast) => {
1542
1542
  return openBlock(), createElementBlock("div", {
1543
1543
  key: toast.id,
@@ -1619,7 +1619,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1619
1619
  animationDuration: `${toast.duration ?? 3500}ms`
1620
1620
  })
1621
1621
  }, null, 4)
1622
- ], 14, _hoisted_2$70);
1622
+ ], 14, _hoisted_2$69);
1623
1623
  }), 128))]),
1624
1624
  _: 1
1625
1625
  })])]);
@@ -1628,7 +1628,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
1628
1628
  });
1629
1629
  //#endregion
1630
1630
  //#region src/components/RuntimeUpdateNotice.vue?vue&type=script&setup=true&lang.ts
1631
- var _hoisted_1$76 = {
1631
+ var _hoisted_1$77 = {
1632
1632
  key: 0,
1633
1633
  class: "mint-runtime-update",
1634
1634
  role: "status"
@@ -1642,7 +1642,7 @@ var RuntimeUpdateNotice_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
1642
1642
  setup(__props, { emit: __emit }) {
1643
1643
  const emit = __emit;
1644
1644
  return (_ctx, _cache) => {
1645
- return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$76, [
1645
+ return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$77, [
1646
1646
  createVNode(unref(RefreshCw), {
1647
1647
  size: 16,
1648
1648
  "aria-hidden": "true"
@@ -1658,7 +1658,7 @@ var RuntimeUpdateNotice_default = /* @__PURE__ */ _plugin_vue_export_helper_defa
1658
1658
  }), [["__scopeId", "data-v-9ca77e18"]]);
1659
1659
  //#endregion
1660
1660
  //#region src/components/IconButton.vue?vue&type=script&setup=true&lang.ts
1661
- var _hoisted_1$75 = [
1661
+ var _hoisted_1$76 = [
1662
1662
  "disabled",
1663
1663
  "aria-label",
1664
1664
  "title"
@@ -1720,19 +1720,19 @@ var IconButton_default = /* @__PURE__ */ defineComponent({
1720
1720
  }, null, -1)])], 2)) : (openBlock(), createElementBlock("span", {
1721
1721
  key: 1,
1722
1722
  class: normalizeClass(`mint-icon-button__icon--${__props.size}`)
1723
- }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$75);
1723
+ }, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$76);
1724
1724
  };
1725
1725
  }
1726
1726
  });
1727
1727
  //#endregion
1728
1728
  //#region src/components/ActionMenu.vue?vue&type=script&setup=true&lang.ts
1729
- var _hoisted_1$74 = [
1729
+ var _hoisted_1$75 = [
1730
1730
  "href",
1731
1731
  "target",
1732
1732
  "rel",
1733
1733
  "onClick"
1734
1734
  ];
1735
- var _hoisted_2$69 = ["disabled", "onClick"];
1735
+ var _hoisted_2$68 = ["disabled", "onClick"];
1736
1736
  //#endregion
1737
1737
  //#region src/components/ActionMenu.vue
1738
1738
  var ActionMenu_default = /* @__PURE__ */ defineComponent({
@@ -1862,21 +1862,21 @@ var ActionMenu_default = /* @__PURE__ */ defineComponent({
1862
1862
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
1863
1863
  role: "menuitem",
1864
1864
  onClick: ($event) => handleSelect(item)
1865
- }, toDisplayString(item.label), 11, _hoisted_1$74)) : (openBlock(), createElementBlock("button", {
1865
+ }, toDisplayString(item.label), 11, _hoisted_1$75)) : (openBlock(), createElementBlock("button", {
1866
1866
  key: 1,
1867
1867
  type: "button",
1868
1868
  class: normalizeClass(["mint-action-menu__item", { "mint-action-menu__item--danger": item.danger }]),
1869
1869
  role: "menuitem",
1870
1870
  disabled: item.disabled,
1871
1871
  onClick: ($event) => handleSelect(item)
1872
- }, toDisplayString(item.label), 11, _hoisted_2$69))], 64);
1872
+ }, toDisplayString(item.label), 11, _hoisted_2$68))], 64);
1873
1873
  }), 128))], 36)) : createCommentVNode("", true)]))], 64);
1874
1874
  };
1875
1875
  }
1876
1876
  });
1877
1877
  //#endregion
1878
1878
  //#region src/components/ThemeToggle.vue?vue&type=script&setup=true&lang.ts
1879
- var _hoisted_1$73 = {
1879
+ var _hoisted_1$74 = {
1880
1880
  key: 0,
1881
1881
  class: "mint-theme-toggle__icon",
1882
1882
  viewBox: "0 0 24 24",
@@ -1886,7 +1886,7 @@ var _hoisted_1$73 = {
1886
1886
  "stroke-linecap": "round",
1887
1887
  "stroke-linejoin": "round"
1888
1888
  };
1889
- var _hoisted_2$68 = {
1889
+ var _hoisted_2$67 = {
1890
1890
  key: 1,
1891
1891
  class: "mint-theme-toggle__icon",
1892
1892
  viewBox: "0 0 24 24",
@@ -1912,7 +1912,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1912
1912
  label: unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
1913
1913
  onClick: unref(toggleTheme)
1914
1914
  }, {
1915
- default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$73, [..._cache[0] || (_cache[0] = [
1915
+ default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$74, [..._cache[0] || (_cache[0] = [
1916
1916
  createElementVNode("circle", {
1917
1917
  cx: "12",
1918
1918
  cy: "12",
@@ -1926,7 +1926,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1926
1926
  createElementVNode("path", { d: "M20 12h2" }, null, -1),
1927
1927
  createElementVNode("path", { d: "m6.34 17.66-1.41 1.41" }, null, -1),
1928
1928
  createElementVNode("path", { d: "m19.07 4.93-1.41 1.41" }, null, -1)
1929
- ])])) : (openBlock(), createElementBlock("svg", _hoisted_2$68, [..._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)])]))]),
1929
+ ])])) : (openBlock(), createElementBlock("svg", _hoisted_2$67, [..._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)])]))]),
1930
1930
  _: 1
1931
1931
  }, 8, [
1932
1932
  "size",
@@ -1938,8 +1938,8 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
1938
1938
  });
1939
1939
  //#endregion
1940
1940
  //#region src/components/CollapsibleCard.vue?vue&type=script&setup=true&lang.ts
1941
- var _hoisted_1$72 = { class: "mint-collapsible-card__header-shell" };
1942
- var _hoisted_2$67 = ["disabled", "aria-expanded"];
1941
+ var _hoisted_1$73 = { class: "mint-collapsible-card__header-shell" };
1942
+ var _hoisted_2$66 = ["disabled", "aria-expanded"];
1943
1943
  var _hoisted_3$62 = { class: "mint-collapsible-card__title-section" };
1944
1944
  var _hoisted_4$59 = ["d"];
1945
1945
  var _hoisted_5$56 = ["d"];
@@ -1974,12 +1974,12 @@ var _hoisted_14$27 = {
1974
1974
  class: "mint-collapsible-card__action-text-icon"
1975
1975
  };
1976
1976
  var _hoisted_15$27 = ["aria-checked", "onKeydown"];
1977
- var _hoisted_16$23 = [
1977
+ var _hoisted_16$24 = [
1978
1978
  "disabled",
1979
1979
  "aria-label",
1980
1980
  "aria-expanded"
1981
1981
  ];
1982
- var _hoisted_17$21 = { class: "mint-collapsible-card__body" };
1982
+ var _hoisted_17$22 = { class: "mint-collapsible-card__body" };
1983
1983
  var _hoisted_18$19 = { class: "mint-collapsible-card__content" };
1984
1984
  //#endregion
1985
1985
  //#region src/components/CollapsibleCard.vue
@@ -2060,7 +2060,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2060
2060
  emit("action", action.id);
2061
2061
  }
2062
2062
  return (_ctx, _cache) => {
2063
- return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$72, [createElementVNode("button", {
2063
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$73, [createElementVNode("button", {
2064
2064
  type: "button",
2065
2065
  class: normalizeClass(headerClasses.value),
2066
2066
  disabled: __props.disabled,
@@ -2092,7 +2092,7 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2092
2092
  key: 1,
2093
2093
  class: "mint-collapsible-card__icon-text",
2094
2094
  style: normalizeStyle(iconColorStyle.value)
2095
- }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$52, [createElementVNode("h3", _hoisted_7$46, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$41, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$67), createElementVNode("div", _hoisted_9$39, [
2095
+ }, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$52, [createElementVNode("h3", _hoisted_7$46, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$41, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$66), createElementVNode("div", _hoisted_9$39, [
2096
2096
  __props.badge !== void 0 ? (openBlock(), createElementBlock("span", {
2097
2097
  key: 0,
2098
2098
  class: normalizeClass(badgeClasses.value)
@@ -2145,9 +2145,9 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
2145
2145
  "stroke-linejoin": "round",
2146
2146
  viewBox: "0 0 24 24",
2147
2147
  "aria-hidden": "true"
2148
- }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$23)
2148
+ }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$24)
2149
2149
  ])]), createVNode(Transition, { name: "collapse" }, {
2150
- default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$21, [createElementVNode("div", _hoisted_18$19, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2150
+ default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$22, [createElementVNode("div", _hoisted_18$19, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
2151
2151
  _: 3
2152
2152
  })], 2);
2153
2153
  };
@@ -2285,12 +2285,12 @@ function isFiniteNumber(value, min, max) {
2285
2285
  }
2286
2286
  //#endregion
2287
2287
  //#region src/components/internal/ActionItemInternal.vue?vue&type=script&setup=true&lang.ts
2288
- var _hoisted_1$71 = [
2288
+ var _hoisted_1$72 = [
2289
2289
  "href",
2290
2290
  "aria-disabled",
2291
2291
  "tabindex"
2292
2292
  ];
2293
- var _hoisted_2$66 = [
2293
+ var _hoisted_2$65 = [
2294
2294
  "href",
2295
2295
  "aria-disabled",
2296
2296
  "tabindex",
@@ -2342,7 +2342,7 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2342
2342
  "aria-disabled": __props.disabled || void 0,
2343
2343
  tabindex: __props.disabled ? -1 : void 0,
2344
2344
  onClick: handleClick
2345
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$71)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2345
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$72)) : __props.to ? (openBlock(), createBlock(_component_router_link, {
2346
2346
  key: 1,
2347
2347
  to: __props.to,
2348
2348
  custom: ""
@@ -2352,7 +2352,7 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2352
2352
  "aria-disabled": __props.disabled || void 0,
2353
2353
  tabindex: __props.disabled ? -1 : void 0,
2354
2354
  onClick: ($event) => handleRouterClick($event, navigate)
2355
- }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$66)]),
2355
+ }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_2$65)]),
2356
2356
  _: 3
2357
2357
  }, 8, ["to"])) : (openBlock(), createElementBlock("button", mergeProps({ key: 2 }, _ctx.$attrs, {
2358
2358
  type: __props.type,
@@ -2364,8 +2364,8 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
2364
2364
  });
2365
2365
  //#endregion
2366
2366
  //#region src/components/PluginIcon.vue?vue&type=script&setup=true&lang.ts
2367
- var _hoisted_1$70 = ["viewBox"];
2368
- var _hoisted_2$65 = { key: 0 };
2367
+ var _hoisted_1$71 = ["viewBox"];
2368
+ var _hoisted_2$64 = { key: 0 };
2369
2369
  var _hoisted_3$60 = [
2370
2370
  "id",
2371
2371
  "x1",
@@ -2479,7 +2479,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2479
2479
  viewBox: structuredIcon.value.viewBox,
2480
2480
  "aria-hidden": "true"
2481
2481
  }, [
2482
- structuredIcon.value.gradient ? (openBlock(), createElementBlock("defs", _hoisted_2$65, [createElementVNode("linearGradient", {
2482
+ structuredIcon.value.gradient ? (openBlock(), createElementBlock("defs", _hoisted_2$64, [createElementVNode("linearGradient", {
2483
2483
  id: gradientId.value,
2484
2484
  x1: gradientCoords.value.x1,
2485
2485
  y1: gradientCoords.value.y1,
@@ -2514,7 +2514,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2514
2514
  "stroke-linejoin": "round"
2515
2515
  }, null, 8, _hoisted_6$51);
2516
2516
  }), 128))
2517
- ], 8, _hoisted_1$70)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$45, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$40)])) : (openBlock(), createElementBlock("img", {
2517
+ ], 8, _hoisted_1$71)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$45, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$40)])) : (openBlock(), createElementBlock("img", {
2518
2518
  key: 2,
2519
2519
  class: "mint-plugin-icon__img",
2520
2520
  src: iconValue.value,
@@ -2527,8 +2527,8 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
2527
2527
  });
2528
2528
  //#endregion
2529
2529
  //#region src/components/internal/AppTopBarPageSelectorInternal.vue?vue&type=script&setup=true&lang.ts
2530
- var _hoisted_1$69 = ["aria-expanded"];
2531
- var _hoisted_2$64 = {
2530
+ var _hoisted_1$70 = ["aria-expanded"];
2531
+ var _hoisted_2$63 = {
2532
2532
  key: 1,
2533
2533
  class: "mint-page-selector__icon-fallback"
2534
2534
  };
@@ -2598,7 +2598,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2598
2598
  icon: current.value.icon,
2599
2599
  size: "sm",
2600
2600
  variant: "solid"
2601
- }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_2$64, toDisplayString(current.value.label.charAt(0)), 1))])], 2)) : createCommentVNode("", true),
2601
+ }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_2$63, toDisplayString(current.value.label.charAt(0)), 1))])], 2)) : createCommentVNode("", true),
2602
2602
  createElementVNode("span", _hoisted_3$59, toDisplayString(current.value?.label ?? __props.placeholder), 1),
2603
2603
  createElementVNode("span", _hoisted_4$57, [(openBlock(), createElementBlock("svg", {
2604
2604
  class: normalizeClass(["mint-page-selector__chevron", { "mint-page-selector__chevron--open": unref(isOpen) }]),
@@ -2609,7 +2609,7 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2609
2609
  "stroke-linecap": "round",
2610
2610
  "stroke-linejoin": "round"
2611
2611
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
2612
- ], 10, _hoisted_1$69), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$54, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2612
+ ], 10, _hoisted_1$70), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$54, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2613
2613
  return openBlock(), createBlock(ActionItemInternal_default, {
2614
2614
  key: page.id,
2615
2615
  href: page.href,
@@ -2644,11 +2644,11 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2644
2644
  });
2645
2645
  //#endregion
2646
2646
  //#region src/components/internal/AppTopBarPillNavInternal.vue?vue&type=script&setup=true&lang.ts
2647
- var _hoisted_1$68 = {
2647
+ var _hoisted_1$69 = {
2648
2648
  class: "mint-pill-nav",
2649
2649
  "aria-label": "Primary"
2650
2650
  };
2651
- var _hoisted_2$63 = [
2651
+ var _hoisted_2$62 = [
2652
2652
  "disabled",
2653
2653
  "aria-expanded",
2654
2654
  "onClick"
@@ -2744,7 +2744,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2744
2744
  }
2745
2745
  useEventListener(() => document, "click", handleClickOutside);
2746
2746
  return (_ctx, _cache) => {
2747
- return openBlock(), createElementBlock("nav", _hoisted_1$68, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
2747
+ return openBlock(), createElementBlock("nav", _hoisted_1$69, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedItems.value, (item) => {
2748
2748
  return openBlock(), createElementBlock("div", {
2749
2749
  key: item.id,
2750
2750
  ref_for: true,
@@ -2783,7 +2783,7 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2783
2783
  "stroke-linejoin": "round",
2784
2784
  "aria-hidden": "true"
2785
2785
  }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
2786
- ], 10, _hoisted_2$63)) : (openBlock(), createBlock(ActionItemInternal_default, {
2786
+ ], 10, _hoisted_2$62)) : (openBlock(), createBlock(ActionItemInternal_default, {
2787
2787
  key: 1,
2788
2788
  href: item.href,
2789
2789
  to: item.to,
@@ -2841,8 +2841,8 @@ var AppTopBarPillNavInternal_default = /* @__PURE__ */ defineComponent({
2841
2841
  });
2842
2842
  //#endregion
2843
2843
  //#region src/components/AppAvatarMenu.vue?vue&type=script&setup=true&lang.ts
2844
- var _hoisted_1$67 = ["aria-expanded", "title"];
2845
- var _hoisted_2$62 = { class: "mint-avatar-menu__avatar" };
2844
+ var _hoisted_1$68 = ["aria-expanded", "title"];
2845
+ var _hoisted_2$61 = { class: "mint-avatar-menu__avatar" };
2846
2846
  var _hoisted_3$57 = {
2847
2847
  key: 0,
2848
2848
  class: "mint-avatar-menu__name"
@@ -2953,7 +2953,7 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2953
2953
  title: __props.userName ? `${__props.userName} · Account menu` : "Account menu",
2954
2954
  onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"])),
2955
2955
  onKeydown: _cache[1] || (_cache[1] = (...args) => unref(handleTriggerKeydown) && unref(handleTriggerKeydown)(...args))
2956
- }, [createElementVNode("span", _hoisted_2$62, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$57, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 42, _hoisted_1$67), unref(isOpen) ? (openBlock(), createElementBlock("div", {
2956
+ }, [createElementVNode("span", _hoisted_2$61, [renderSlot(_ctx.$slots, "avatar", { initials: initials.value }, () => [createTextVNode(toDisplayString(initials.value), 1)])]), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_3$57, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)], 42, _hoisted_1$68), unref(isOpen) ? (openBlock(), createElementBlock("div", {
2957
2957
  key: 0,
2958
2958
  ref_key: "panelRef",
2959
2959
  ref: panelRef,
@@ -2999,8 +2999,8 @@ var AppAvatarMenu_default = /* @__PURE__ */ defineComponent({
2999
2999
  });
3000
3000
  //#endregion
3001
3001
  //#region src/components/AppPluginSwitcher.vue?vue&type=script&setup=true&lang.ts
3002
- var _hoisted_1$66 = ["aria-expanded"];
3003
- var _hoisted_2$61 = { class: "mint-plugin-switcher__label" };
3002
+ var _hoisted_1$67 = ["aria-expanded"];
3003
+ var _hoisted_2$60 = { class: "mint-plugin-switcher__label" };
3004
3004
  var _hoisted_3$56 = {
3005
3005
  key: 0,
3006
3006
  class: "mint-plugin-switcher__version"
@@ -3081,7 +3081,7 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
3081
3081
  "aria-haspopup": "menu",
3082
3082
  onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"]))
3083
3083
  }, [
3084
- createElementVNode("span", _hoisted_2$61, toDisplayString(__props.current.label), 1),
3084
+ createElementVNode("span", _hoisted_2$60, toDisplayString(__props.current.label), 1),
3085
3085
  __props.current.version ? (openBlock(), createElementBlock("span", _hoisted_3$56, "v" + toDisplayString(__props.current.version), 1)) : createCommentVNode("", true),
3086
3086
  createElementVNode("span", _hoisted_4$54, [(openBlock(), createElementBlock("svg", {
3087
3087
  class: normalizeClass(["mint-plugin-switcher__chevron", { "mint-plugin-switcher__chevron--open": unref(isOpen) }]),
@@ -3092,7 +3092,7 @@ var AppPluginSwitcher_default = /* @__PURE__ */ defineComponent({
3092
3092
  "stroke-linecap": "round",
3093
3093
  "stroke-linejoin": "round"
3094
3094
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
3095
- ], 10, _hoisted_1$66), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$51, [
3095
+ ], 10, _hoisted_1$67), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$51, [
3096
3096
  _cache[4] || (_cache[4] = createElementVNode("div", { class: "mint-plugin-switcher__menu-title" }, "Switch plugin", -1)),
3097
3097
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.plugins, (plugin) => {
3098
3098
  return openBlock(), createBlock(ActionItemInternal_default, {
@@ -3189,8 +3189,8 @@ function currentItemIdFromLocation(pages, pathname, routePrefix) {
3189
3189
  }
3190
3190
  //#endregion
3191
3191
  //#region src/components/AppTopBar.vue?vue&type=script&setup=true&lang.ts
3192
- var _hoisted_1$65 = { class: "mint-topbar__container" };
3193
- var _hoisted_2$60 = { class: "mint-topbar__brand" };
3192
+ var _hoisted_1$66 = { class: "mint-topbar__container" };
3193
+ var _hoisted_2$59 = { class: "mint-topbar__brand" };
3194
3194
  var _hoisted_3$55 = ["href"];
3195
3195
  var _hoisted_4$53 = {
3196
3196
  key: 0,
@@ -3231,11 +3231,11 @@ var _hoisted_14$26 = {
3231
3231
  class: "mint-topbar__center"
3232
3232
  };
3233
3233
  var _hoisted_15$26 = { class: "mint-topbar__right" };
3234
- var _hoisted_16$22 = {
3234
+ var _hoisted_16$23 = {
3235
3235
  key: 0,
3236
3236
  class: "mint-topbar__standalone-badge"
3237
3237
  };
3238
- var _hoisted_17$20 = {
3238
+ var _hoisted_17$21 = {
3239
3239
  key: 2,
3240
3240
  class: "mint-topbar__standalone-badge"
3241
3241
  };
@@ -3309,9 +3309,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3309
3309
  setup(__props, { emit: __emit }) {
3310
3310
  /** Full application top bar with brand logo, page selector or plugin switcher, centered pill nav, experiment popover, and avatar menu. */
3311
3311
  const props = __props;
3312
- const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-Dphh3RrI.js").then((n) => n.n));
3313
- const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-BIZKoRTT.js").then((n) => n.n));
3314
- const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-BeEOomw_.js").then((n) => n.n));
3312
+ const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-DQUcpT4T.js").then((n) => n.n));
3313
+ const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-CJdNlCZb.js").then((n) => n.n));
3314
+ const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-CZ1f_K9I.js").then((n) => n.n));
3315
3315
  const emit = __emit;
3316
3316
  const settingsOpen = ref(false);
3317
3317
  const { isIntegrated, plugin } = usePlatformContext();
@@ -3347,8 +3347,8 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3347
3347
  return (_ctx, _cache) => {
3348
3348
  const _component_router_link = resolveComponent("router-link");
3349
3349
  return openBlock(), createElementBlock(Fragment, null, [
3350
- createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$65, [
3351
- createElementVNode("div", _hoisted_2$60, [__props.homePath && (__props.homePath.startsWith("http") || __props.homePath.startsWith("/")) ? (openBlock(), createElementBlock("a", {
3350
+ createElementVNode("header", { class: normalizeClass(["mint-topbar", `mint-topbar--${props.variant}`]) }, [createElementVNode("div", _hoisted_1$66, [
3351
+ createElementVNode("div", _hoisted_2$59, [__props.homePath && (__props.homePath.startsWith("http") || __props.homePath.startsWith("/")) ? (openBlock(), createElementBlock("a", {
3352
3352
  key: 0,
3353
3353
  href: __props.homePath,
3354
3354
  class: "mint-topbar-home-link"
@@ -3439,13 +3439,13 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3439
3439
  onOptionSelect: _cache[4] || (_cache[4] = (option, item) => emit("pill-option-select", option, item))
3440
3440
  }, null, 8, ["items", "current-item-id"])) : createCommentVNode("", true)])])) : createCommentVNode("", true),
3441
3441
  createElementVNode("div", _hoisted_15$26, [
3442
- __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_16$22, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3442
+ __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_16$23, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3443
3443
  unref(appExperiment) && !isStandalone.value && canBindExperiment.value ? (openBlock(), createBlock(unref(ExperimentPopover), mergeProps({ key: 1 }, unref(appExperiment).popover.value, {
3444
3444
  onSelect: _cache[5] || (_cache[5] = ($event) => unref(appExperiment).openModal()),
3445
3445
  onSave: _cache[6] || (_cache[6] = ($event) => unref(appExperiment).handleSave()),
3446
3446
  onDetach: _cache[7] || (_cache[7] = ($event) => unref(appExperiment).handleDetach())
3447
3447
  }), null, 16)) : createCommentVNode("", true),
3448
- unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_17$20, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3448
+ unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_17$21, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3449
3449
  renderSlot(_ctx.$slots, "actions"),
3450
3450
  __props.showNotifications ? (openBlock(), createElementBlock("button", {
3451
3451
  key: 3,
@@ -3578,11 +3578,11 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3578
3578
  });
3579
3579
  //#endregion
3580
3580
  //#region src/components/StepWizard.vue?vue&type=script&setup=true&lang.ts
3581
- var _hoisted_1$64 = {
3581
+ var _hoisted_1$65 = {
3582
3582
  key: 0,
3583
3583
  class: "mint-wizard__progress"
3584
3584
  };
3585
- var _hoisted_2$59 = { class: "mint-wizard__steps-indicator" };
3585
+ var _hoisted_2$58 = { class: "mint-wizard__steps-indicator" };
3586
3586
  var _hoisted_3$54 = ["onClick"];
3587
3587
  var _hoisted_4$52 = { class: "mint-wizard__step-dot" };
3588
3588
  var _hoisted_5$49 = {
@@ -3694,11 +3694,11 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3694
3694
  tabindex: "0",
3695
3695
  onKeydown: handleKeydown
3696
3696
  }, [
3697
- props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$64, [renderSlot(_ctx.$slots, "progress", {
3697
+ props.showProgress ? (openBlock(), createElementBlock("div", _hoisted_1$65, [renderSlot(_ctx.$slots, "progress", {
3698
3698
  steps: props.steps,
3699
3699
  current: props.modelValue,
3700
3700
  states: stepStates.value
3701
- }, () => [createElementVNode("div", _hoisted_2$59, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3701
+ }, () => [createElementVNode("div", _hoisted_2$58, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.steps, (step, index) => {
3702
3702
  return openBlock(), createElementBlock(Fragment, { key: step.id }, [index > 0 ? (openBlock(), createElementBlock("div", {
3703
3703
  key: 0,
3704
3704
  class: normalizeClass(["mint-wizard__step-connector", stepStates.value[index - 1] === "completed" ? "mint-wizard__step-connector--completed" : ""])
@@ -3757,11 +3757,11 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
3757
3757
  });
3758
3758
  //#endregion
3759
3759
  //#region src/components/internal/FormSectionRenderer.vue?vue&type=script&setup=true&lang.ts
3760
- var _hoisted_1$63 = {
3760
+ var _hoisted_1$64 = {
3761
3761
  key: 0,
3762
3762
  class: "mint-form-section"
3763
3763
  };
3764
- var _hoisted_2$58 = {
3764
+ var _hoisted_2$57 = {
3765
3765
  key: 1,
3766
3766
  class: "mint-form-section--static"
3767
3767
  };
@@ -3790,7 +3790,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3790
3790
  const visibleFields = computed(() => props.section.fields.filter((f) => props.builder.isFieldVisible(f.name)));
3791
3791
  const gridStyle = computed(() => ({ gridTemplateColumns: `repeat(${props.section.columns ?? 1}, 1fr)` }));
3792
3792
  return (_ctx, _cache) => {
3793
- return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$63, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
3793
+ return visibleFields.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_1$64, [renderSlot(_ctx.$slots, `section:${__props.section.id}`, {
3794
3794
  section: __props.section,
3795
3795
  form: __props.builder.form
3796
3796
  }, () => [__props.section.collapsible ? (openBlock(), createBlock(CollapsibleCard_default, {
@@ -3825,7 +3825,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3825
3825
  "title",
3826
3826
  "subtitle",
3827
3827
  "default-open"
3828
- ])) : (openBlock(), createElementBlock("div", _hoisted_2$58, [__props.section.title || __props.section.description ? (openBlock(), createElementBlock("div", _hoisted_3$53, [__props.section.title ? (openBlock(), createElementBlock("h3", _hoisted_4$51, toDisplayString(__props.section.title), 1)) : createCommentVNode("", true), __props.section.description ? (openBlock(), createElementBlock("p", _hoisted_5$48, toDisplayString(__props.section.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
3828
+ ])) : (openBlock(), createElementBlock("div", _hoisted_2$57, [__props.section.title || __props.section.description ? (openBlock(), createElementBlock("div", _hoisted_3$53, [__props.section.title ? (openBlock(), createElementBlock("h3", _hoisted_4$51, toDisplayString(__props.section.title), 1)) : createCommentVNode("", true), __props.section.description ? (openBlock(), createElementBlock("p", _hoisted_5$48, toDisplayString(__props.section.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
3829
3829
  class: "mint-form-section__grid",
3830
3830
  style: normalizeStyle(gridStyle.value)
3831
3831
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleFields.value, (field) => {
@@ -3851,7 +3851,7 @@ var FormSectionRenderer_default = /* @__PURE__ */ defineComponent({
3851
3851
  });
3852
3852
  //#endregion
3853
3853
  //#region src/components/FormActions.vue?vue&type=script&setup=true&lang.ts
3854
- var _hoisted_1$62 = { class: "mint-form-actions" };
3854
+ var _hoisted_1$63 = { class: "mint-form-actions" };
3855
3855
  //#endregion
3856
3856
  //#region src/components/FormActions.vue
3857
3857
  var FormActions_default = /* @__PURE__ */ defineComponent({
@@ -3908,7 +3908,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3908
3908
  */
3909
3909
  const emit = __emit;
3910
3910
  return (_ctx, _cache) => {
3911
- return openBlock(), createElementBlock("div", _hoisted_1$62, [
3911
+ return openBlock(), createElementBlock("div", _hoisted_1$63, [
3912
3912
  __props.showCancel ? (openBlock(), createBlock(BaseButton_default, {
3913
3913
  key: 0,
3914
3914
  variant: "ghost",
@@ -3953,7 +3953,7 @@ var FormActions_default = /* @__PURE__ */ defineComponent({
3953
3953
  });
3954
3954
  //#endregion
3955
3955
  //#region src/components/FormBuilder.vue?vue&type=script&setup=true&lang.ts
3956
- var _hoisted_1$61 = { class: "mint-form-builder__step" };
3956
+ var _hoisted_1$62 = { class: "mint-form-builder__step" };
3957
3957
  //#endregion
3958
3958
  //#region src/components/FormBuilder.vue
3959
3959
  var FormBuilder_default = /* @__PURE__ */ defineComponent({
@@ -4102,7 +4102,7 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
4102
4102
  }, createSlots({ _: 2 }, [renderList(resolvedSchema.value.steps, (step) => {
4103
4103
  return {
4104
4104
  name: `step-${step.id}`,
4105
- fn: withCtx(() => [createElementVNode("div", _hoisted_1$61, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
4105
+ fn: withCtx(() => [createElementVNode("div", _hoisted_1$62, [(openBlock(true), createElementBlock(Fragment, null, renderList(step.sections, (section) => {
4106
4106
  return openBlock(), createElementBlock(Fragment, { key: section.id }, [unref(builder).isSectionVisible(section.id) ? (openBlock(), createBlock(FormSectionRenderer_default, {
4107
4107
  key: 0,
4108
4108
  section,
@@ -4189,11 +4189,11 @@ var FormBuilder_default = /* @__PURE__ */ defineComponent({
4189
4189
  });
4190
4190
  //#endregion
4191
4191
  //#region src/components/AppSidebar.vue?vue&type=script&setup=true&lang.ts
4192
- var _hoisted_1$60 = {
4192
+ var _hoisted_1$61 = {
4193
4193
  key: 0,
4194
4194
  class: "mint-sidebar__header"
4195
4195
  };
4196
- var _hoisted_2$57 = {
4196
+ var _hoisted_2$56 = {
4197
4197
  key: 0,
4198
4198
  class: "mint-sidebar__heading"
4199
4199
  };
@@ -4238,11 +4238,11 @@ var _hoisted_15$25 = {
4238
4238
  key: 1,
4239
4239
  class: "mint-sidebar__rail-text-icon"
4240
4240
  };
4241
- var _hoisted_16$21 = {
4241
+ var _hoisted_16$22 = {
4242
4242
  key: 4,
4243
4243
  class: "mint-sidebar__footer"
4244
4244
  };
4245
- var _hoisted_17$19 = {
4245
+ var _hoisted_17$20 = {
4246
4246
  key: 5,
4247
4247
  class: "mint-sidebar__footer mint-sidebar__footer--collapsed"
4248
4248
  };
@@ -4465,10 +4465,10 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4465
4465
  class: normalizeClass(sidebarClasses.value),
4466
4466
  style: normalizeStyle(sidebarStyle.value)
4467
4467
  }, [
4468
- _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || resolvedCollapsible.value ? (openBlock(), createElementBlock("div", _hoisted_1$60, [renderSlot(_ctx.$slots, "header", {
4468
+ _ctx.$slots.header || __props.title || __props.subtitle || __props.badge !== void 0 || resolvedCollapsible.value ? (openBlock(), createElementBlock("div", _hoisted_1$61, [renderSlot(_ctx.$slots, "header", {
4469
4469
  collapsed: collapsedModel.value,
4470
4470
  toggleCollapsed
4471
- }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$57, [createElementVNode("div", _hoisted_3$52, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$50, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$47, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$44, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), resolvedCollapsible.value ? (openBlock(), createElementBlock("button", {
4471
+ }, () => [!collapsedModel.value ? (openBlock(), createElementBlock("div", _hoisted_2$56, [createElementVNode("div", _hoisted_3$52, [__props.title ? (openBlock(), createElementBlock("h2", _hoisted_4$50, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$47, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_6$44, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), resolvedCollapsible.value ? (openBlock(), createElementBlock("button", {
4472
4472
  key: 1,
4473
4473
  type: "button",
4474
4474
  class: "mint-sidebar__collapse-button",
@@ -4580,18 +4580,18 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4580
4580
  class: normalizeClass(["mint-sidebar__rail-badge", badgeToneClass(section)])
4581
4581
  }, toDisplayString(section.badge), 3)) : createCommentVNode("", true)], 8, _hoisted_11$28);
4582
4582
  }), 128))])),
4583
- !collapsedModel.value && _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_16$21, [renderSlot(_ctx.$slots, "footer")])) : collapsedModel.value && _ctx.$slots["collapsed-footer"] ? (openBlock(), createElementBlock("div", _hoisted_17$19, [renderSlot(_ctx.$slots, "collapsed-footer")])) : createCommentVNode("", true)
4583
+ !collapsedModel.value && _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_16$22, [renderSlot(_ctx.$slots, "footer")])) : collapsedModel.value && _ctx.$slots["collapsed-footer"] ? (openBlock(), createElementBlock("div", _hoisted_17$20, [renderSlot(_ctx.$slots, "collapsed-footer")])) : createCommentVNode("", true)
4584
4584
  ], 6);
4585
4585
  };
4586
4586
  }
4587
4587
  });
4588
4588
  //#endregion
4589
4589
  //#region src/components/AppLayout.vue?vue&type=script&setup=true&lang.ts
4590
- var _hoisted_1$59 = {
4590
+ var _hoisted_1$60 = {
4591
4591
  key: 0,
4592
4592
  class: "mint-layout__topbar"
4593
4593
  };
4594
- var _hoisted_2$56 = { class: "mint-layout__body" };
4594
+ var _hoisted_2$55 = { class: "mint-layout__body" };
4595
4595
  var _hoisted_3$51 = ["aria-label", "aria-expanded"];
4596
4596
  var _hoisted_4$49 = {
4597
4597
  key: 0,
@@ -4693,7 +4693,7 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4693
4693
  sidebarOpenModel.value = false;
4694
4694
  }
4695
4695
  return (_ctx, _cache) => {
4696
- return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$59, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$56, [
4696
+ return openBlock(), createElementBlock("div", { class: normalizeClass(layoutClasses.value) }, [_ctx.$slots.topbar ? (openBlock(), createElementBlock("div", _hoisted_1$60, [renderSlot(_ctx.$slots, "topbar")])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$55, [
4697
4697
  __props.responsiveSidebar && _ctx.$slots.sidebar ? (openBlock(), createElementBlock("button", {
4698
4698
  key: 0,
4699
4699
  type: "button",
@@ -4719,8 +4719,8 @@ var AppLayout_default = /* @__PURE__ */ defineComponent({
4719
4719
  });
4720
4720
  //#endregion
4721
4721
  //#region src/components/MobileSupportGate.vue?vue&type=script&setup=true&lang.ts
4722
- var _hoisted_1$58 = { class: "mint-mobile-support-gate__panel" };
4723
- var _hoisted_2$55 = { class: "mint-mobile-support-gate__copy" };
4722
+ var _hoisted_1$59 = { class: "mint-mobile-support-gate__panel" };
4723
+ var _hoisted_2$54 = { class: "mint-mobile-support-gate__copy" };
4724
4724
  var _hoisted_3$50 = { class: "mint-mobile-support-gate__eyebrow" };
4725
4725
  var _hoisted_4$48 = { class: "mint-mobile-support-gate__message" };
4726
4726
  var _hoisted_5$45 = { class: "mint-mobile-support-gate__hint" };
@@ -4757,9 +4757,9 @@ var MobileSupportGate_default = /* @__PURE__ */ defineComponent({
4757
4757
  }, [renderSlot(_ctx.$slots, "unsupported", {
4758
4758
  isMobileViewport: unref(isMobileViewport),
4759
4759
  isSupported: unref(isSupported)
4760
- }, () => [createElementVNode("section", _hoisted_1$58, [
4760
+ }, () => [createElementVNode("section", _hoisted_1$59, [
4761
4761
  _cache[1] || (_cache[1] = createStaticVNode("<div class=\"mint-mobile-support-gate__mark\" aria-hidden=\"true\"><svg class=\"mint-mobile-support-gate__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\"></rect><path d=\"M8 20h8\"></path><path d=\"M12 16v4\"></path></svg></div>", 1)),
4762
- createElementVNode("div", _hoisted_2$55, [
4762
+ createElementVNode("div", _hoisted_2$54, [
4763
4763
  createElementVNode("p", _hoisted_3$50, toDisplayString(__props.appName), 1),
4764
4764
  createElementVNode("h1", {
4765
4765
  id: titleId,
@@ -5358,8 +5358,8 @@ function humanize(value) {
5358
5358
  }
5359
5359
  //#endregion
5360
5360
  //#region src/components/ChartContainer.vue?vue&type=script&setup=true&lang.ts
5361
- var _hoisted_1$57 = { class: "mint-chart" };
5362
- var _hoisted_2$54 = {
5361
+ var _hoisted_1$58 = { class: "mint-chart" };
5362
+ var _hoisted_2$53 = {
5363
5363
  key: 0,
5364
5364
  class: "mint-chart__header"
5365
5365
  };
@@ -5408,8 +5408,8 @@ var ChartContainer_default = /* @__PURE__ */ defineComponent({
5408
5408
  setup(__props) {
5409
5409
  /** Wraps a chart with header, toolbar slot, loading overlay, empty state, and legend slot. */
5410
5410
  return (_ctx, _cache) => {
5411
- return openBlock(), createElementBlock("div", _hoisted_1$57, [
5412
- __props.title || __props.description || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2$54, [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_3$49, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$47, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$44, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_6$42, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5411
+ return openBlock(), createElementBlock("div", _hoisted_1$58, [
5412
+ __props.title || __props.description || _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2$53, [__props.title || __props.description ? (openBlock(), createElementBlock("div", _hoisted_3$49, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$47, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$44, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_6$42, [renderSlot(_ctx.$slots, "toolbar")])) : createCommentVNode("", true)])) : createCommentVNode("", true),
5413
5413
  createElementVNode("div", _hoisted_7$37, [__props.loading ? (openBlock(), createElementBlock("div", _hoisted_8$33, [createVNode(LoadingSpinner_default, { size: "lg" })])) : __props.empty ? renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createVNode(EmptyState_default, {
5414
5414
  title: __props.emptyMessage,
5415
5415
  size: "sm",
@@ -5421,74 +5421,252 @@ var ChartContainer_default = /* @__PURE__ */ defineComponent({
5421
5421
  }
5422
5422
  });
5423
5423
  //#endregion
5424
- //#region src/components/GeneratedPlotlyResult.vue?vue&type=script&setup=true&lang.ts
5425
- var _hoisted_1$56 = ["src"];
5426
- var _hoisted_2$53 = {
5427
- key: 1,
5428
- class: "mint-generated-result__plotly-error",
5429
- role: "alert"
5430
- };
5424
+ //#region src/components/PlotlyChart.vue?vue&type=script&setup=true&lang.ts
5425
+ var _hoisted_1$57 = ["aria-label"];
5431
5426
  //#endregion
5432
- //#region src/components/GeneratedPlotlyResult.vue
5433
- var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
5434
- __name: "GeneratedPlotlyResult",
5427
+ //#region src/components/PlotlyChart.vue
5428
+ var PlotlyChart_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
5429
+ __name: "PlotlyChart",
5435
5430
  props: {
5436
- spec: {},
5437
- fallback: {}
5431
+ data: {},
5432
+ layout: { default: () => ({}) },
5433
+ config: { default: () => ({}) },
5434
+ title: {},
5435
+ description: {},
5436
+ loading: {
5437
+ type: Boolean,
5438
+ default: false
5439
+ },
5440
+ empty: {
5441
+ type: Boolean,
5442
+ default: false
5443
+ },
5444
+ emptyMessage: { default: "No data available" },
5445
+ ariaLabel: { default: "Interactive Plotly chart" }
5438
5446
  },
5439
5447
  setup(__props) {
5448
+ /**
5449
+ * Render native Plotly data with MINT loading, empty, theme, and error states.
5450
+ *
5451
+ * Plotly is loaded only when the component is mounted, so importing the SDK does
5452
+ * not add Plotly to the application's initial bundle.
5453
+ *
5454
+ * @example
5455
+ * ```vue
5456
+ * <PlotlyChart
5457
+ * title="QC overview"
5458
+ * :data="traces"
5459
+ * :layout="{ xaxis: { title: { text: 'Sample' } } }"
5460
+ * :config="{ toImageButtonOptions: { filename: 'qc-overview' } }"
5461
+ * />
5462
+ * ```
5463
+ */
5440
5464
  const props = __props;
5441
5465
  const chartElement = ref(null);
5442
5466
  const failed = ref(false);
5443
5467
  let plotly = null;
5468
+ let resizeObserver = null;
5469
+ let themeObserver = null;
5470
+ let renderedElement = null;
5471
+ let rendering = false;
5472
+ let disposed = false;
5473
+ let revision = 0;
5444
5474
  async function loadPlotly() {
5445
5475
  const module = await import("./plotly.min-c2Sez60c.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
5446
5476
  return "default" in module ? module.default : module;
5447
5477
  }
5478
+ function cssValue(name, fallback) {
5479
+ return getComputedStyle(chartElement.value ?? document.documentElement).getPropertyValue(name).trim() || getComputedStyle(document.documentElement).getPropertyValue(name).trim() || fallback;
5480
+ }
5481
+ function clonePlotlyInput(value) {
5482
+ const raw = toRaw(value);
5483
+ if (Array.isArray(raw)) return raw.map(clonePlotlyInput);
5484
+ if (raw !== null && typeof raw === "object") {
5485
+ if (Object.getPrototypeOf(raw) === Object.prototype) return Object.fromEntries(Object.entries(raw).map(([key, item]) => [key, clonePlotlyInput(item)]));
5486
+ return structuredClone(raw);
5487
+ }
5488
+ return raw;
5489
+ }
5490
+ function themedLayout() {
5491
+ const textColor = cssValue("--text-primary", "#1E293B");
5492
+ const gridColor = cssValue("--border-color", "#E5E7EB");
5493
+ const layout = clonePlotlyInput(props.layout);
5494
+ return {
5495
+ autosize: true,
5496
+ paper_bgcolor: "rgba(0,0,0,0)",
5497
+ plot_bgcolor: "rgba(0,0,0,0)",
5498
+ ...layout,
5499
+ font: {
5500
+ color: textColor,
5501
+ family: cssValue("--font-sans", "Arial, sans-serif"),
5502
+ ...layout.font
5503
+ },
5504
+ xaxis: {
5505
+ gridcolor: gridColor,
5506
+ ...layout.xaxis
5507
+ },
5508
+ yaxis: {
5509
+ gridcolor: gridColor,
5510
+ ...layout.yaxis
5511
+ }
5512
+ };
5513
+ }
5514
+ function purgeChart() {
5515
+ resizeObserver?.disconnect();
5516
+ if (renderedElement) plotly?.purge(renderedElement);
5517
+ renderedElement = null;
5518
+ }
5448
5519
  async function renderChart() {
5449
- if (!chartElement.value) return;
5450
- failed.value = false;
5451
- await nextTick();
5520
+ revision++;
5521
+ if (rendering || disposed || props.loading || props.empty) return;
5522
+ rendering = true;
5452
5523
  try {
5453
- const renderer = plotly ?? await loadPlotly();
5454
- plotly = renderer;
5455
- const data = Array.isArray(props.spec.data) ? props.spec.data : [];
5456
- const layout = props.spec.layout && typeof props.spec.layout === "object" ? props.spec.layout : {};
5457
- await renderer.react(chartElement.value, data, layout, {
5458
- responsive: true,
5459
- displaylogo: false
5460
- });
5461
- failed.value = false;
5462
- } catch {
5463
- failed.value = true;
5524
+ while (!disposed && !props.loading && !props.empty) {
5525
+ const currentRevision = revision;
5526
+ failed.value = false;
5527
+ await nextTick();
5528
+ if (disposed || props.loading || props.empty) break;
5529
+ try {
5530
+ plotly ??= await loadPlotly();
5531
+ if (disposed || props.loading || props.empty) break;
5532
+ if (currentRevision !== revision) continue;
5533
+ const element = chartElement.value;
5534
+ if (!element) break;
5535
+ renderedElement = element;
5536
+ await plotly.react(element, clonePlotlyInput(props.data), themedLayout(), {
5537
+ responsive: true,
5538
+ displaylogo: false,
5539
+ ...props.config
5540
+ });
5541
+ if (disposed || props.loading || props.empty || element !== chartElement.value) purgeChart();
5542
+ else resizeObserver?.observe(element);
5543
+ } catch {
5544
+ purgeChart();
5545
+ if (!disposed && currentRevision === revision) failed.value = true;
5546
+ }
5547
+ if (currentRevision === revision) break;
5548
+ }
5549
+ } finally {
5550
+ rendering = false;
5551
+ if (disposed || props.loading || props.empty) purgeChart();
5464
5552
  }
5465
5553
  }
5466
- onMounted(renderChart);
5467
- watch(() => props.spec, async () => {
5468
- await nextTick();
5469
- await renderChart();
5554
+ onMounted(() => {
5555
+ if (typeof ResizeObserver !== "undefined") resizeObserver = new ResizeObserver(() => {
5556
+ if (rendering || !plotly || !renderedElement) return;
5557
+ Promise.resolve(plotly.Plots.resize(renderedElement)).catch(() => {});
5558
+ });
5559
+ if (typeof MutationObserver !== "undefined") {
5560
+ themeObserver = new MutationObserver(() => void renderChart());
5561
+ themeObserver.observe(document.documentElement, {
5562
+ attributes: true,
5563
+ attributeFilter: ["class", "style"]
5564
+ });
5565
+ }
5566
+ renderChart();
5567
+ });
5568
+ watch([
5569
+ () => props.data,
5570
+ () => props.layout,
5571
+ () => props.config,
5572
+ () => props.loading,
5573
+ () => props.empty
5574
+ ], () => {
5575
+ if (props.loading || props.empty) {
5576
+ resizeObserver?.disconnect();
5577
+ if (!rendering) purgeChart();
5578
+ }
5579
+ renderChart();
5470
5580
  });
5471
5581
  onBeforeUnmount(() => {
5472
- if (plotly && chartElement.value) plotly.purge(chartElement.value);
5582
+ disposed = true;
5583
+ resizeObserver?.disconnect();
5584
+ themeObserver?.disconnect();
5585
+ if (!rendering) purgeChart();
5473
5586
  });
5474
5587
  return (_ctx, _cache) => {
5475
- return openBlock(), createBlock(ChartContainer_default, { title: "Interactive chart" }, {
5476
- default: withCtx(() => [failed.value && __props.fallback ? (openBlock(), createElementBlock("img", {
5477
- key: 0,
5588
+ return openBlock(), createBlock(ChartContainer_default, {
5589
+ title: __props.title,
5590
+ description: __props.description,
5591
+ loading: __props.loading,
5592
+ empty: __props.empty,
5593
+ "empty-message": __props.emptyMessage
5594
+ }, createSlots({
5595
+ default: withCtx(() => [failed.value ? renderSlot(_ctx.$slots, "error", { key: 0 }, () => [_cache[0] || (_cache[0] = createElementVNode("div", { class: "mint-plotly-chart__error" }, [createElementVNode("p", { role: "alert" }, "Unable to display this chart.")], -1))], true) : createCommentVNode("", true), withDirectives(createElementVNode("div", {
5596
+ ref_key: "chartElement",
5597
+ ref: chartElement,
5598
+ class: "mint-plotly-chart__plot",
5599
+ role: "group",
5600
+ "aria-label": __props.ariaLabel
5601
+ }, null, 8, _hoisted_1$57), [[vShow, !failed.value]])]),
5602
+ _: 2
5603
+ }, [
5604
+ _ctx.$slots.toolbar ? {
5605
+ name: "toolbar",
5606
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "toolbar", {}, void 0, true)]),
5607
+ key: "0"
5608
+ } : void 0,
5609
+ _ctx.$slots.empty ? {
5610
+ name: "empty",
5611
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "empty", {}, void 0, true)]),
5612
+ key: "1"
5613
+ } : void 0,
5614
+ _ctx.$slots.legend ? {
5615
+ name: "legend",
5616
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "legend", {}, void 0, true)]),
5617
+ key: "2"
5618
+ } : void 0
5619
+ ]), 1032, [
5620
+ "title",
5621
+ "description",
5622
+ "loading",
5623
+ "empty",
5624
+ "empty-message"
5625
+ ]);
5626
+ };
5627
+ }
5628
+ }), [["__scopeId", "data-v-ee2f733a"]]);
5629
+ //#endregion
5630
+ //#region src/components/GeneratedPlotlyResult.vue?vue&type=script&setup=true&lang.ts
5631
+ var _hoisted_1$56 = ["src"];
5632
+ //#endregion
5633
+ //#region src/components/GeneratedPlotlyResult.vue
5634
+ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
5635
+ __name: "GeneratedPlotlyResult",
5636
+ props: {
5637
+ spec: {},
5638
+ fallback: {}
5639
+ },
5640
+ setup(__props) {
5641
+ const props = __props;
5642
+ const data = computed(() => {
5643
+ const traces = toRaw(props.spec).data;
5644
+ return Array.isArray(traces) ? [...toRaw(traces)] : [];
5645
+ });
5646
+ const layout = computed(() => props.spec.layout && typeof props.spec.layout === "object" ? props.spec.layout : {});
5647
+ const config = computed(() => props.spec.config && typeof props.spec.config === "object" ? props.spec.config : {});
5648
+ return (_ctx, _cache) => {
5649
+ return openBlock(), createBlock(PlotlyChart_default, {
5650
+ title: "Interactive chart",
5651
+ data: data.value,
5652
+ layout: layout.value,
5653
+ config: config.value
5654
+ }, createSlots({ _: 2 }, [__props.fallback ? {
5655
+ name: "error",
5656
+ fn: withCtx(() => [createElementVNode("img", {
5478
5657
  class: "mint-generated-result__image",
5479
5658
  src: `data:${__props.fallback.media_type};base64,${__props.fallback.data}`,
5480
5659
  alt: "Static Plotly chart fallback"
5481
- }, null, 8, _hoisted_1$56)) : failed.value ? (openBlock(), createElementBlock("p", _hoisted_2$53, " Unable to display this chart. ")) : createCommentVNode("", true), withDirectives(createElementVNode("div", {
5482
- ref_key: "chartElement",
5483
- ref: chartElement,
5484
- class: "mint-generated-result__plotly",
5485
- "aria-label": "Interactive Plotly chart"
5486
- }, null, 512), [[vShow, !failed.value]])]),
5487
- _: 1
5488
- });
5660
+ }, null, 8, _hoisted_1$56)]),
5661
+ key: "0"
5662
+ } : void 0]), 1032, [
5663
+ "data",
5664
+ "layout",
5665
+ "config"
5666
+ ]);
5489
5667
  };
5490
5668
  }
5491
- }), [["__scopeId", "data-v-a604514a"]]);
5669
+ }), [["__scopeId", "data-v-4a6d15d5"]]);
5492
5670
  //#endregion
5493
5671
  //#region src/components/GeneratedResultRenderer.vue?vue&type=script&setup=true&lang.ts
5494
5672
  var _hoisted_1$55 = {
@@ -5568,7 +5746,7 @@ var GeneratedResultRenderer_default = /* @__PURE__ */ _plugin_vue_export_helper_
5568
5746
  }, [createElementVNode("span", null, toDisplayString(__props.result.name), 1), createElementVNode("small", null, toDisplayString(__props.result.media_type), 1)], 8, _hoisted_5$43))]);
5569
5747
  };
5570
5748
  }
5571
- }), [["__scopeId", "data-v-78edbbbd"]]);
5749
+ }), [["__scopeId", "data-v-7500041f"]]);
5572
5750
  //#endregion
5573
5751
  //#region src/components/JobsStatusTray.vue?vue&type=script&setup=true&lang.ts
5574
5752
  var _hoisted_1$54 = { class: "mint-jobs-tray" };
@@ -5598,11 +5776,11 @@ var _hoisted_14$24 = {
5598
5776
  role: "alert"
5599
5777
  };
5600
5778
  var _hoisted_15$24 = { class: "mint-jobs-tray__body" };
5601
- var _hoisted_16$20 = {
5779
+ var _hoisted_16$21 = {
5602
5780
  key: 0,
5603
5781
  class: "mint-jobs-tray__empty"
5604
5782
  };
5605
- var _hoisted_17$18 = { class: "mint-jobs-tray__job-heading" };
5783
+ var _hoisted_17$19 = { class: "mint-jobs-tray__job-heading" };
5606
5784
  var _hoisted_18$17 = { class: "mint-jobs-tray__job-identity" };
5607
5785
  var _hoisted_19$16 = ["onClick"];
5608
5786
  var _hoisted_20$15 = { class: "mint-jobs-tray__kind" };
@@ -5825,12 +6003,12 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
5825
6003
  onClick: _cache[2] || (_cache[2] = ($event) => unref(tray).activeTab.value = "history")
5826
6004
  }, [_cache[7] || (_cache[7] = createTextVNode(" History ", -1)), createElementVNode("span", _hoisted_13$26, toDisplayString(unref(tray).historyJobs.value.length), 1)], 10, _hoisted_12$26)]),
5827
6005
  unref(tray).error.value ? (openBlock(), createElementBlock("p", _hoisted_14$24, toDisplayString(unref(tray).error.value), 1)) : createCommentVNode("", true),
5828
- createElementVNode("div", _hoisted_15$24, [unref(tray).activeTab.value === "active" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [unref(tray).activeJobs.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_16$20, " No active jobs ")) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(tray).activeJobs.value, (job) => {
6006
+ createElementVNode("div", _hoisted_15$24, [unref(tray).activeTab.value === "active" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [unref(tray).activeJobs.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_16$21, " No active jobs ")) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(tray).activeJobs.value, (job) => {
5829
6007
  return openBlock(), createElementBlock("article", {
5830
6008
  key: job.job_id,
5831
6009
  class: "mint-jobs-tray__job mint-jobs-tray__job--active"
5832
6010
  }, [
5833
- createElementVNode("div", _hoisted_17$18, [createElementVNode("div", _hoisted_18$17, [createElementVNode("button", {
6011
+ createElementVNode("div", _hoisted_17$19, [createElementVNode("div", _hoisted_18$17, [createElementVNode("button", {
5834
6012
  type: "button",
5835
6013
  class: "mint-jobs-tray__job-select",
5836
6014
  onClick: ($event) => emit("select", job)
@@ -6158,12 +6336,12 @@ var _hoisted_15$23 = {
6158
6336
  key: 1,
6159
6337
  class: "mint-dose-calculator__error"
6160
6338
  };
6161
- var _hoisted_16$19 = {
6339
+ var _hoisted_16$20 = {
6162
6340
  key: 2,
6163
6341
  class: "mint-dose-calculator__form",
6164
6342
  role: "tabpanel"
6165
6343
  };
6166
- var _hoisted_17$17 = { class: "mint-dose-calculator__field" };
6344
+ var _hoisted_17$18 = { class: "mint-dose-calculator__field" };
6167
6345
  var _hoisted_18$16 = { class: "mint-dose-calculator__field-row" };
6168
6346
  var _hoisted_19$15 = { class: "mint-dose-calculator__field" };
6169
6347
  var _hoisted_20$14 = { class: "mint-dose-calculator__input-wrapper" };
@@ -6378,8 +6556,8 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
6378
6556
  createElementVNode("div", _hoisted_11$26, [_cache[13] || (_cache[13] = createElementVNode("span", { class: "mint-dose-calculator__result-label" }, "Diluent volume", -1)), createElementVNode("span", _hoisted_12$25, toDisplayString(unref(formatVolume)(dilutionResult.value.diluentVolume)), 1)]),
6379
6557
  createElementVNode("div", _hoisted_13$25, [_cache[14] || (_cache[14] = createElementVNode("span", { class: "mint-dose-calculator__result-label" }, "Dilution factor", -1)), createElementVNode("span", _hoisted_14$23, toDisplayString(dilutionResult.value.dilutionFactor.toFixed(1)) + "× ", 1)])
6380
6558
  ])) : dilutionResult.value?.error ? (openBlock(), createElementBlock("div", _hoisted_15$23, toDisplayString(dilutionResult.value.error), 1)) : createCommentVNode("", true)
6381
- ])) : activeMode.value === "serial" ? (openBlock(), createElementBlock("div", _hoisted_16$19, [
6382
- createElementVNode("div", _hoisted_17$17, [_cache[17] || (_cache[17] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Starting Concentration", -1)), createVNode(ConcentrationInput_default, {
6559
+ ])) : activeMode.value === "serial" ? (openBlock(), createElementBlock("div", _hoisted_16$20, [
6560
+ createElementVNode("div", _hoisted_17$18, [_cache[17] || (_cache[17] = createElementVNode("label", { class: "mint-dose-calculator__field-label" }, "Starting Concentration", -1)), createVNode(ConcentrationInput_default, {
6383
6561
  modelValue: serialStartConcentration.value,
6384
6562
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => serialStartConcentration.value = $event),
6385
6563
  disabled: __props.disabled,
@@ -6519,8 +6697,8 @@ var _hoisted_14$22 = {
6519
6697
  class: "mint-timeline__status-controls"
6520
6698
  };
6521
6699
  var _hoisted_15$22 = ["onClick"];
6522
- var _hoisted_16$18 = ["aria-label", "onClick"];
6523
- var _hoisted_17$16 = {
6700
+ var _hoisted_16$19 = ["aria-label", "onClick"];
6701
+ var _hoisted_17$17 = {
6524
6702
  key: 2,
6525
6703
  class: "mint-timeline__spacer--vertical"
6526
6704
  };
@@ -6807,8 +6985,8 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
6807
6985
  "stroke-linejoin": "round",
6808
6986
  "stroke-width": "2",
6809
6987
  d: "M12 4v16m8-8H4"
6810
- })], -1)])], 8, _hoisted_16$18)) : createCommentVNode("", true),
6811
- __props.orientation === "vertical" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_17$16)) : createCommentVNode("", true),
6988
+ })], -1)])], 8, _hoisted_16$19)) : createCommentVNode("", true),
6989
+ __props.orientation === "vertical" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_17$17)) : createCommentVNode("", true),
6812
6990
  __props.orientation === "horizontal" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_18$15)) : createCommentVNode("", true)
6813
6991
  ], 40, _hoisted_2$47);
6814
6992
  }), 128)),
@@ -7658,11 +7836,11 @@ var _hoisted_15$20 = {
7658
7836
  key: 0,
7659
7837
  class: "mint-well-plate__label"
7660
7838
  };
7661
- var _hoisted_16$17 = {
7839
+ var _hoisted_16$18 = {
7662
7840
  key: 1,
7663
7841
  class: "mint-well-plate__indicator"
7664
7842
  };
7665
- var _hoisted_17$15 = {
7843
+ var _hoisted_17$16 = {
7666
7844
  key: 2,
7667
7845
  class: "mint-well-plate__well-id"
7668
7846
  };
@@ -7997,7 +8175,7 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
7997
8175
  withKeys(withModifiers(($event) => unref(handleWellClick)(well, $event), ["exact"]), ["enter"]),
7998
8176
  withKeys(withModifiers(($event) => unref(handleWellClick)(well, $event), ["exact", "prevent"]), ["space"])
7999
8177
  ]
8000
- }, [getWellLabel(well) ? (openBlock(), createElementBlock("span", _hoisted_15$20, toDisplayString(getWellLabel(well)), 1)) : getSampleTypeIndicator(well) ? (openBlock(), createElementBlock("span", _hoisted_16$17, toDisplayString(getSampleTypeIndicator(well)), 1)) : props.showWellIds ? (openBlock(), createElementBlock("span", _hoisted_17$15, toDisplayString(well.id), 1)) : createCommentVNode("", true), getWellBadge(well) ? (openBlock(), createElementBlock("span", {
8178
+ }, [getWellLabel(well) ? (openBlock(), createElementBlock("span", _hoisted_15$20, toDisplayString(getWellLabel(well)), 1)) : getSampleTypeIndicator(well) ? (openBlock(), createElementBlock("span", _hoisted_16$18, toDisplayString(getSampleTypeIndicator(well)), 1)) : props.showWellIds ? (openBlock(), createElementBlock("span", _hoisted_17$16, toDisplayString(well.id), 1)) : createCommentVNode("", true), getWellBadge(well) ? (openBlock(), createElementBlock("span", {
8001
8179
  key: 3,
8002
8180
  class: "mint-well-plate__badge",
8003
8181
  style: normalizeStyle({ backgroundColor: getWellBadge(well)?.color }),
@@ -8764,11 +8942,11 @@ var _hoisted_13$20 = {
8764
8942
  };
8765
8943
  var _hoisted_14$19 = ["href"];
8766
8944
  var _hoisted_15$19 = { key: 1 };
8767
- var _hoisted_16$16 = {
8945
+ var _hoisted_16$17 = {
8768
8946
  key: 2,
8769
8947
  class: "mint-reagent-list__cell mint-reagent-list__cell--muted"
8770
8948
  };
8771
- var _hoisted_17$14 = {
8949
+ var _hoisted_17$15 = {
8772
8950
  key: 3,
8773
8951
  class: "mint-reagent-list__cell mint-reagent-list__cell--muted"
8774
8952
  };
@@ -9067,8 +9245,8 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
9067
9245
  rel: "noopener noreferrer",
9068
9246
  class: "mint-reagent-list__link"
9069
9247
  }, toDisplayString(reagent.name), 9, _hoisted_14$19)) : (openBlock(), createElementBlock("span", _hoisted_15$19, toDisplayString(reagent.name), 1))])) : createCommentVNode("", true),
9070
- __props.columns.includes("catalog") ? (openBlock(), createElementBlock("td", _hoisted_16$16, toDisplayString(reagent.catalogNumber || "-"), 1)) : createCommentVNode("", true),
9071
- __props.columns.includes("lot") ? (openBlock(), createElementBlock("td", _hoisted_17$14, toDisplayString(reagent.lotNumber || "-"), 1)) : createCommentVNode("", true),
9248
+ __props.columns.includes("catalog") ? (openBlock(), createElementBlock("td", _hoisted_16$17, toDisplayString(reagent.catalogNumber || "-"), 1)) : createCommentVNode("", true),
9249
+ __props.columns.includes("lot") ? (openBlock(), createElementBlock("td", _hoisted_17$15, toDisplayString(reagent.lotNumber || "-"), 1)) : createCommentVNode("", true),
9072
9250
  __props.columns.includes("expiry") ? (openBlock(), createElementBlock("td", _hoisted_18$13, [unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_19$12, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)) : unref(isReagentExpiringSoon)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_20$11, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)) : (openBlock(), createElementBlock("span", _hoisted_21$10, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)), unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_22$10, [..._cache[6] || (_cache[6] = [createElementVNode("svg", {
9073
9251
  class: "mint-reagent-list__badge-icon",
9074
9252
  fill: "none",
@@ -9253,11 +9431,11 @@ var _hoisted_15$18 = [
9253
9431
  "aria-label",
9254
9432
  "onClick"
9255
9433
  ];
9256
- var _hoisted_16$15 = {
9434
+ var _hoisted_16$16 = {
9257
9435
  key: 0,
9258
9436
  class: "sg-field__order"
9259
9437
  };
9260
- var _hoisted_17$13 = { class: "sg-field__layer" };
9438
+ var _hoisted_17$14 = { class: "sg-field__layer" };
9261
9439
  var _hoisted_18$12 = [
9262
9440
  "disabled",
9263
9441
  "aria-label",
@@ -9676,8 +9854,8 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
9676
9854
  "aria-label": "Group by " + field.key,
9677
9855
  onClick: ($event) => toggle(i)
9678
9856
  }, null, 10, _hoisted_15$18),
9679
- on.value[i] && layers.value[i] !== null ? (openBlock(), createElementBlock("div", _hoisted_16$15, [
9680
- createElementVNode("span", _hoisted_17$13, "Layer " + toDisplayString(layers.value[i]), 1),
9857
+ on.value[i] && layers.value[i] !== null ? (openBlock(), createElementBlock("div", _hoisted_16$16, [
9858
+ createElementVNode("span", _hoisted_17$14, "Layer " + toDisplayString(layers.value[i]), 1),
9681
9859
  createElementVNode("button", {
9682
9860
  type: "button",
9683
9861
  class: "sg-field__order-btn",
@@ -9874,8 +10052,8 @@ var _hoisted_15$17 = {
9874
10052
  key: 0,
9875
10053
  class: "mg2-list__empty"
9876
10054
  };
9877
- var _hoisted_16$14 = ["onClick"];
9878
- var _hoisted_17$12 = ["checked"];
10055
+ var _hoisted_16$15 = ["onClick"];
10056
+ var _hoisted_17$13 = ["checked"];
9879
10057
  var _hoisted_18$11 = { class: "mg2-row__name" };
9880
10058
  var _hoisted_19$10 = {
9881
10059
  key: 0,
@@ -10195,7 +10373,7 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10195
10373
  class: "mg2-cb",
10196
10374
  checked: sel.value.has(match.index),
10197
10375
  readonly: ""
10198
- }, null, 8, _hoisted_17$12),
10376
+ }, null, 8, _hoisted_17$13),
10199
10377
  createElementVNode("span", _hoisted_18$11, toDisplayString(match.sample.name), 1),
10200
10378
  match.sample.group ? (openBlock(), createElementBlock("span", _hoisted_19$10, [
10201
10379
  createElementVNode("span", {
@@ -10205,7 +10383,7 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
10205
10383
  createTextVNode(toDisplayString(match.sample.group), 1),
10206
10384
  match.sample.sub ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" · " + toDisplayString(match.sample.sub), 1)], 64)) : createCommentVNode("", true)
10207
10385
  ])) : (openBlock(), createElementBlock("span", _hoisted_20$9, "unassigned"))
10208
- ], 10, _hoisted_16$14);
10386
+ ], 10, _hoisted_16$15);
10209
10387
  }), 128))])
10210
10388
  ]), createElementVNode("div", _hoisted_21$8, [
10211
10389
  createElementVNode("div", _hoisted_22$8, [_cache[14] || (_cache[14] = createElementVNode("span", { class: "mg2-cohorts__t" }, "Cohorts", -1)), createElementVNode("span", _hoisted_23$7, toDisplayString(tree.value.size) + " groups", 1)]),
@@ -11369,11 +11547,11 @@ var _hoisted_12$17 = {
11369
11547
  var _hoisted_13$17 = { class: "mint-sample-selector__groups-header" };
11370
11548
  var _hoisted_14$16 = { class: "mint-sample-selector__groups-title" };
11371
11549
  var _hoisted_15$16 = { class: "mint-sample-selector__tree" };
11372
- var _hoisted_16$13 = {
11550
+ var _hoisted_16$14 = {
11373
11551
  key: 0,
11374
11552
  class: "mint-sample-selector__hint"
11375
11553
  };
11376
- var _hoisted_17$11 = {
11554
+ var _hoisted_17$12 = {
11377
11555
  key: 0,
11378
11556
  class: "mint-sample-selector__ungrouped"
11379
11557
  };
@@ -11675,8 +11853,8 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
11675
11853
  depth: 0,
11676
11854
  ctx: treeContext.value
11677
11855
  }, null, 8, ["node", "ctx"]);
11678
- }), 128)), internalGroups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_16$13, " Click Smart to auto-group samples ")) : createCommentVNode("", true)]),
11679
- unref(ungroupedSamples).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_17$11, [createElementVNode("div", {
11856
+ }), 128)), internalGroups.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_16$14, " Click Smart to auto-group samples ")) : createCommentVNode("", true)]),
11857
+ unref(ungroupedSamples).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_17$12, [createElementVNode("div", {
11680
11858
  class: "mint-sample-selector__ungrouped-header",
11681
11859
  onClick: _cache[2] || (_cache[2] = ($event) => toggleGroupExpanded("__ungrouped__"))
11682
11860
  }, [
@@ -12032,8 +12210,8 @@ var _hoisted_15$15 = [
12032
12210
  "onKeydown",
12033
12211
  "onPointerdown"
12034
12212
  ];
12035
- var _hoisted_16$12 = ["onPointerdown"];
12036
- var _hoisted_17$10 = { class: "mint-schedule__event-title" };
12213
+ var _hoisted_16$13 = ["onPointerdown"];
12214
+ var _hoisted_17$11 = { class: "mint-schedule__event-title" };
12037
12215
  var _hoisted_18$9 = { class: "mint-schedule__event-time" };
12038
12216
  var _hoisted_19$8 = ["onPointerdown"];
12039
12217
  var _hoisted_20$7 = {
@@ -12373,8 +12551,8 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
12373
12551
  key: 0,
12374
12552
  class: "mint-schedule__event-resize-handle mint-schedule__event-resize-handle--top",
12375
12553
  onPointerdown: ($event) => onResizePointerDown(event, "top", dayIdx, $event)
12376
- }, null, 40, _hoisted_16$12)) : createCommentVNode("", true),
12377
- createElementVNode("div", _hoisted_17$10, toDisplayString(event.title), 1),
12554
+ }, null, 40, _hoisted_16$13)) : createCommentVNode("", true),
12555
+ createElementVNode("div", _hoisted_17$11, toDisplayString(event.title), 1),
12378
12556
  createElementVNode("div", _hoisted_18$9, toDisplayString(unref(formatEventTime)(event)), 1),
12379
12557
  !__props.readonly && event.resizable !== false ? (openBlock(), createElementBlock("div", {
12380
12558
  key: 1,
@@ -14420,12 +14598,12 @@ var _hoisted_12$14 = { class: "mint-group-assigner__zone-header" };
14420
14598
  var _hoisted_13$14 = { class: "mint-group-assigner__zone-label" };
14421
14599
  var _hoisted_14$14 = { class: "mint-group-assigner__zone-count" };
14422
14600
  var _hoisted_15$14 = { class: "mint-group-assigner__zone-content" };
14423
- var _hoisted_16$11 = [
14601
+ var _hoisted_16$12 = [
14424
14602
  "aria-label",
14425
14603
  "onDragstart",
14426
14604
  "onKeydown"
14427
14605
  ];
14428
- var _hoisted_17$9 = { class: "mint-group-assigner__pill-name" };
14606
+ var _hoisted_17$10 = { class: "mint-group-assigner__pill-name" };
14429
14607
  var _hoisted_18$8 = { class: "mint-group-assigner__pill-count" };
14430
14608
  var _hoisted_19$7 = ["onClick"];
14431
14609
  var _hoisted_20$6 = {
@@ -14628,7 +14806,7 @@ var GroupAssigner_default = /* @__PURE__ */ defineComponent({
14628
14806
  class: "mint-group-assigner__pill-color",
14629
14807
  style: normalizeStyle({ backgroundColor: group.color })
14630
14808
  }, null, 4),
14631
- createElementVNode("span", _hoisted_17$9, toDisplayString(group.name), 1),
14809
+ createElementVNode("span", _hoisted_17$10, toDisplayString(group.name), 1),
14632
14810
  createElementVNode("span", _hoisted_18$8, toDisplayString(group.count), 1),
14633
14811
  createElementVNode("button", {
14634
14812
  type: "button",
@@ -14642,7 +14820,7 @@ var GroupAssigner_default = /* @__PURE__ */ defineComponent({
14642
14820
  stroke: "currentColor",
14643
14821
  "stroke-width": "2"
14644
14822
  }, [createElementVNode("path", { d: "M6 18L18 6M6 6l12 12" })], -1)])], 8, _hoisted_19$7)
14645
- ], 40, _hoisted_16$11);
14823
+ ], 40, _hoisted_16$12);
14646
14824
  }), 128)), unref(zone2Groups).length === 0 ? (openBlock(), createElementBlock("div", _hoisted_20$6, " Drag groups here ")) : createCommentVNode("", true)])], 38)]),
14647
14825
  unref(unassignedGroups).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_21$5, [createElementVNode("div", _hoisted_22$5, [_cache[6] || (_cache[6] = createElementVNode("span", { class: "mint-group-assigner__unassigned-title" }, "Available Groups", -1)), __props.group1.length > 0 || __props.group2.length > 0 ? (openBlock(), createElementBlock("button", {
14648
14826
  key: 0,
@@ -14779,8 +14957,8 @@ var _hoisted_12$13 = { class: "mint-reagent-editor__section" };
14779
14957
  var _hoisted_13$13 = { class: "mint-reagent-editor__section-header" };
14780
14958
  var _hoisted_14$13 = ["value"];
14781
14959
  var _hoisted_15$13 = ["value"];
14782
- var _hoisted_16$10 = { class: "mint-reagent-editor__generator" };
14783
- var _hoisted_17$8 = { class: "mint-reagent-editor__generator-inputs" };
14960
+ var _hoisted_16$11 = { class: "mint-reagent-editor__generator" };
14961
+ var _hoisted_17$9 = { class: "mint-reagent-editor__generator-inputs" };
14784
14962
  var _hoisted_18$7 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
14785
14963
  var _hoisted_19$6 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
14786
14964
  var _hoisted_20$5 = { class: "mint-reagent-editor__presets" };
@@ -15025,7 +15203,7 @@ var ReagentEditor_default = /* @__PURE__ */ defineComponent({
15025
15203
  }, toDisplayString(u), 9, _hoisted_15$13);
15026
15204
  }), 128))], 40, _hoisted_14$13)
15027
15205
  ]),
15028
- createElementVNode("div", _hoisted_16$10, [createElementVNode("div", _hoisted_17$8, [createElementVNode("div", _hoisted_18$7, [_cache[9] || (_cache[9] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Start", -1)), createVNode(NumberInput_default, {
15206
+ createElementVNode("div", _hoisted_16$11, [createElementVNode("div", _hoisted_17$9, [createElementVNode("div", _hoisted_18$7, [_cache[9] || (_cache[9] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Start", -1)), createVNode(NumberInput_default, {
15029
15207
  modelValue: generatorStart.value,
15030
15208
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => generatorStart.value = $event),
15031
15209
  min: 0,
@@ -15654,11 +15832,11 @@ var _hoisted_14$12 = {
15654
15832
  class: "mint-protocol-editor__template-option-desc"
15655
15833
  };
15656
15834
  var _hoisted_15$12 = { class: "mint-protocol-editor__field" };
15657
- var _hoisted_16$9 = {
15835
+ var _hoisted_16$10 = {
15658
15836
  key: 0,
15659
15837
  class: "mint-protocol-editor__field-error"
15660
15838
  };
15661
- var _hoisted_17$7 = { class: "mint-protocol-editor__field" };
15839
+ var _hoisted_17$8 = { class: "mint-protocol-editor__field" };
15662
15840
  var _hoisted_18$6 = {
15663
15841
  key: 0,
15664
15842
  class: "mint-protocol-editor__preview"
@@ -15839,7 +16017,7 @@ var ProtocolStepEditor_default = /* @__PURE__ */ defineComponent({
15839
16017
  class: normalizeClass(["mint-protocol-editor__input", validationErrors.value.name ? "mint-protocol-editor__input--error" : ""]),
15840
16018
  placeholder: "Enter step name"
15841
16019
  }, null, 2), [[vModelText, stepName.value]]),
15842
- validationErrors.value.name ? (openBlock(), createElementBlock("span", _hoisted_16$9, toDisplayString(validationErrors.value.name), 1)) : createCommentVNode("", true)
16020
+ validationErrors.value.name ? (openBlock(), createElementBlock("span", _hoisted_16$10, toDisplayString(validationErrors.value.name), 1)) : createCommentVNode("", true)
15843
16021
  ]),
15844
16022
  selectedTemplate.value ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(selectedTemplate.value.parameters, (param) => {
15845
16023
  return openBlock(), createBlock(ProtocolStepParameterField_default, {
@@ -15855,7 +16033,7 @@ var ProtocolStepEditor_default = /* @__PURE__ */ defineComponent({
15855
16033
  "onUpdate:modelValue"
15856
16034
  ]);
15857
16035
  }), 128)) : createCommentVNode("", true),
15858
- createElementVNode("div", _hoisted_17$7, [_cache[6] || (_cache[6] = createElementVNode("label", { class: "mint-protocol-editor__field-label" }, "Description", -1)), withDirectives(createElementVNode("textarea", {
16036
+ createElementVNode("div", _hoisted_17$8, [_cache[6] || (_cache[6] = createElementVNode("label", { class: "mint-protocol-editor__field-label" }, "Description", -1)), withDirectives(createElementVNode("textarea", {
15859
16037
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => stepDescription.value = $event),
15860
16038
  class: "mint-protocol-editor__textarea",
15861
16039
  placeholder: "Optional step description",
@@ -16283,11 +16461,11 @@ var _hoisted_13$11 = {
16283
16461
  };
16284
16462
  var _hoisted_14$11 = { class: "mint-instrument-alert__time" };
16285
16463
  var _hoisted_15$11 = { class: "mint-instrument-alert__detail" };
16286
- var _hoisted_16$8 = {
16464
+ var _hoisted_16$9 = {
16287
16465
  key: 0,
16288
16466
  class: "mint-instrument-alert__footer"
16289
16467
  };
16290
- var _hoisted_17$6 = {
16468
+ var _hoisted_17$7 = {
16291
16469
  key: 0,
16292
16470
  class: "mint-instrument-alert__code"
16293
16471
  };
@@ -16441,7 +16619,7 @@ var InstrumentAlertLog_default = /* @__PURE__ */ defineComponent({
16441
16619
  createElementVNode("span", _hoisted_14$11, toDisplayString(timeAgo(alert.timestamp)), 1)
16442
16620
  ]),
16443
16621
  createElementVNode("div", _hoisted_15$11, toDisplayString(alertDetail(alert)), 1),
16444
- alert.body?.code != null || __props.acknowledgeable && !alert.acknowledged && alert.level !== "info" ? (openBlock(), createElementBlock("div", _hoisted_16$8, [alert.body?.code != null ? (openBlock(), createElementBlock("span", _hoisted_17$6, " Code " + toDisplayString(alert.body.code), 1)) : createCommentVNode("", true), __props.acknowledgeable && !alert.acknowledged && alert.level !== "info" ? (openBlock(), createElementBlock("button", {
16622
+ alert.body?.code != null || __props.acknowledgeable && !alert.acknowledged && alert.level !== "info" ? (openBlock(), createElementBlock("div", _hoisted_16$9, [alert.body?.code != null ? (openBlock(), createElementBlock("span", _hoisted_17$7, " Code " + toDisplayString(alert.body.code), 1)) : createCommentVNode("", true), __props.acknowledgeable && !alert.acknowledged && alert.level !== "info" ? (openBlock(), createElementBlock("button", {
16445
16623
  key: 1,
16446
16624
  type: "button",
16447
16625
  class: "mint-instrument-alert__ack",
@@ -16819,7 +16997,7 @@ var _hoisted_15$9 = {
16819
16997
  key: 3,
16820
16998
  class: "mint-lcms-sequence-table__state"
16821
16999
  };
16822
- var _hoisted_16$7 = {
17000
+ var _hoisted_16$8 = {
16823
17001
  key: 4,
16824
17002
  class: "mint-lcms-sequence-table__more"
16825
17003
  };
@@ -16960,7 +17138,7 @@ var LcmsSequenceTable_default = /* @__PURE__ */ defineComponent({
16960
17138
  size: "sm",
16961
17139
  title: __props.emptyMessage
16962
17140
  }, null, 8, ["title"])])])),
16963
- hasMore.value && __props.showMoreLabel ? (openBlock(), createElementBlock("div", _hoisted_16$7, " Showing first " + toDisplayString(__props.maxRows) + " of " + toDisplayString(__props.items.length) + " items ", 1)) : createCommentVNode("", true),
17141
+ hasMore.value && __props.showMoreLabel ? (openBlock(), createElementBlock("div", _hoisted_16$8, " Showing first " + toDisplayString(__props.maxRows) + " of " + toDisplayString(__props.items.length) + " items ", 1)) : createCommentVNode("", true),
16964
17142
  createElementVNode("div", {
16965
17143
  role: "status",
16966
17144
  "aria-live": "polite",
@@ -17008,7 +17186,7 @@ var _hoisted_15$8 = {
17008
17186
  key: 3,
17009
17187
  class: "mint-audit-trail__state"
17010
17188
  };
17011
- var _hoisted_16$6 = {
17189
+ var _hoisted_16$7 = {
17012
17190
  key: 4,
17013
17191
  class: "mint-audit-trail__state"
17014
17192
  };
@@ -17142,7 +17320,7 @@ var AuditTrail_default = /* @__PURE__ */ defineComponent({
17142
17320
  state: "loading",
17143
17321
  size: "sm",
17144
17322
  "loading-label": "Loading activity"
17145
- })])])) : !sortedEntries.value.length ? (openBlock(), createElementBlock("div", _hoisted_16$6, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
17323
+ })])])) : !sortedEntries.value.length ? (openBlock(), createElementBlock("div", _hoisted_16$7, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
17146
17324
  state: "empty",
17147
17325
  size: "sm",
17148
17326
  title: __props.emptyMessage
@@ -17195,8 +17373,8 @@ var _hoisted_14$7 = {
17195
17373
  class: "mint-batch-progress__state"
17196
17374
  };
17197
17375
  var _hoisted_15$7 = ["data-item-id"];
17198
- var _hoisted_16$5 = { class: "mint-batch-progress__item-row" };
17199
- var _hoisted_17$5 = {
17376
+ var _hoisted_16$6 = { class: "mint-batch-progress__item-row" };
17377
+ var _hoisted_17$6 = {
17200
17378
  key: 0,
17201
17379
  viewBox: "0 0 16 16",
17202
17380
  fill: "none",
@@ -17353,8 +17531,8 @@ var BatchProgressList_default = /* @__PURE__ */ defineComponent({
17353
17531
  key: item.id,
17354
17532
  "data-item-id": item.id,
17355
17533
  class: normalizeClass(["mint-batch-progress__item", `mint-batch-progress__item--${item.status}`])
17356
- }, [renderSlot(_ctx.$slots, "item", { item }, () => [createElementVNode("div", _hoisted_16$5, [
17357
- createElementVNode("div", { class: normalizeClass(["mint-batch-progress__item-icon", `mint-batch-progress__item-icon--${item.status}`]) }, [item.status === "pending" ? (openBlock(), createElementBlock("svg", _hoisted_17$5, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
17534
+ }, [renderSlot(_ctx.$slots, "item", { item }, () => [createElementVNode("div", _hoisted_16$6, [
17535
+ createElementVNode("div", { class: normalizeClass(["mint-batch-progress__item-icon", `mint-batch-progress__item-icon--${item.status}`]) }, [item.status === "pending" ? (openBlock(), createElementBlock("svg", _hoisted_17$6, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
17358
17536
  cx: "8",
17359
17537
  cy: "8",
17360
17538
  r: "6.5"
@@ -17432,11 +17610,11 @@ var _hoisted_12$6 = { class: "mint-summary__pill-value" };
17432
17610
  var _hoisted_13$6 = { class: "mint-summary__group-header" };
17433
17611
  var _hoisted_14$6 = { class: "mint-summary__group-label" };
17434
17612
  var _hoisted_15$6 = { class: "mint-summary__group-count" };
17435
- var _hoisted_16$4 = {
17613
+ var _hoisted_16$5 = {
17436
17614
  key: 0,
17437
17615
  class: "mint-summary__group-meta"
17438
17616
  };
17439
- var _hoisted_17$4 = { class: "mint-summary__pill-key" };
17617
+ var _hoisted_17$5 = { class: "mint-summary__pill-key" };
17440
17618
  var _hoisted_18$3 = { class: "mint-summary__pill-value" };
17441
17619
  var _hoisted_19$2 = { class: "mint-summary__table-header" };
17442
17620
  var _hoisted_20$2 = { class: "mint-summary__section-label" };
@@ -17616,11 +17794,11 @@ var ExperimentDataViewer_default = /* @__PURE__ */ defineComponent({
17616
17794
  class: "mint-summary__group-card"
17617
17795
  }, [
17618
17796
  createElementVNode("div", _hoisted_13$6, [createElementVNode("span", _hoisted_14$6, toDisplayString(item.label), 1), createElementVNode("span", _hoisted_15$6, toDisplayString(item.item_count) + " " + toDisplayString(item.item_key), 1)]),
17619
- item.metadata && Object.keys(item.metadata).length ? (openBlock(), createElementBlock("div", _hoisted_16$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(item.metadata, (val, key) => {
17797
+ item.metadata && Object.keys(item.metadata).length ? (openBlock(), createElementBlock("div", _hoisted_16$5, [(openBlock(true), createElementBlock(Fragment, null, renderList(item.metadata, (val, key) => {
17620
17798
  return openBlock(), createElementBlock("span", {
17621
17799
  key: String(key),
17622
17800
  class: "mint-summary__pill mint-summary__pill--sm"
17623
- }, [createElementVNode("span", _hoisted_17$4, toDisplayString(String(key).replace(/_/g, " ")), 1), createElementVNode("span", _hoisted_18$3, toDisplayString(val), 1)]);
17801
+ }, [createElementVNode("span", _hoisted_17$5, toDisplayString(String(key).replace(/_/g, " ")), 1), createElementVNode("span", _hoisted_18$3, toDisplayString(val), 1)]);
17624
17802
  }), 128))])) : createCommentVNode("", true),
17625
17803
  item.rows.length ? (openBlock(), createBlock(DataFrame_default, {
17626
17804
  key: 1,
@@ -17829,8 +18007,8 @@ var _hoisted_15$5 = {
17829
18007
  key: 0,
17830
18008
  class: "mint-resource-card__specs"
17831
18009
  };
17832
- var _hoisted_16$3 = { class: "mint-resource-card__spec-label" };
17833
- var _hoisted_17$3 = { class: "mint-resource-card__spec-value" };
18010
+ var _hoisted_16$4 = { class: "mint-resource-card__spec-label" };
18011
+ var _hoisted_17$4 = { class: "mint-resource-card__spec-value" };
17834
18012
  var _hoisted_18$2 = {
17835
18013
  key: 1,
17836
18014
  class: "mint-resource-card__footer"
@@ -17928,7 +18106,7 @@ var ResourceCard_default = /* @__PURE__ */ defineComponent({
17928
18106
  return openBlock(), createElementBlock("div", {
17929
18107
  key: spec.label,
17930
18108
  class: "mint-resource-card__spec"
17931
- }, [createElementVNode("span", _hoisted_16$3, toDisplayString(spec.label), 1), createElementVNode("span", _hoisted_17$3, toDisplayString(spec.value), 1)]);
18109
+ }, [createElementVNode("span", _hoisted_16$4, toDisplayString(spec.label), 1), createElementVNode("span", _hoisted_17$4, toDisplayString(spec.value), 1)]);
17932
18110
  }), 128))])])) : createCommentVNode("", true),
17933
18111
  __props.tags.length > 0 || __props.showBookAction || _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_18$2, [createElementVNode("div", _hoisted_19$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tags, (tag) => {
17934
18112
  return openBlock(), createBlock(BasePill_default, {
@@ -18539,8 +18717,8 @@ var _hoisted_12$3 = {
18539
18717
  var _hoisted_13$3 = { class: "mint-file-browser__tray" };
18540
18718
  var _hoisted_14$3 = { class: "mint-file-browser__tray-main" };
18541
18719
  var _hoisted_15$3 = { class: "mint-file-browser__tray-head" };
18542
- var _hoisted_16$2 = { class: "mint-file-browser__tray-count" };
18543
- var _hoisted_17$2 = { class: "mint-file-browser__tray-summary" };
18720
+ var _hoisted_16$3 = { class: "mint-file-browser__tray-count" };
18721
+ var _hoisted_17$3 = { class: "mint-file-browser__tray-summary" };
18544
18722
  var _hoisted_18$1 = {
18545
18723
  key: 0,
18546
18724
  class: "mint-file-browser__chips",
@@ -18723,8 +18901,8 @@ var FileBrowserModal_default = /* @__PURE__ */ defineComponent({
18723
18901
  _: 1
18724
18902
  })) : createCommentVNode("", true)]),
18725
18903
  footer: withCtx(() => [createElementVNode("div", _hoisted_13$3, [createElementVNode("div", _hoisted_14$3, [createElementVNode("div", _hoisted_15$3, [
18726
- createElementVNode("span", _hoisted_16$2, toDisplayString(selectedCount.value) + " selected", 1),
18727
- createElementVNode("span", _hoisted_17$2, toDisplayString(selectionSummary.value), 1),
18904
+ createElementVNode("span", _hoisted_16$3, toDisplayString(selectedCount.value) + " selected", 1),
18905
+ createElementVNode("span", _hoisted_17$3, toDisplayString(selectionSummary.value), 1),
18728
18906
  selectedCount.value ? (openBlock(), createBlock(BaseButton_default, {
18729
18907
  key: 0,
18730
18908
  variant: "ghost",
@@ -19369,11 +19547,11 @@ var _hoisted_13$2 = {
19369
19547
  };
19370
19548
  var _hoisted_14$2 = { class: "mint-picker__row-meta" };
19371
19549
  var _hoisted_15$2 = { key: 1 };
19372
- var _hoisted_16$1 = {
19550
+ var _hoisted_16$2 = {
19373
19551
  key: 2,
19374
19552
  "aria-label": "Unavailable"
19375
19553
  };
19376
- var _hoisted_17$1 = {
19554
+ var _hoisted_17$2 = {
19377
19555
  key: 0,
19378
19556
  class: "mint-picker__branch-error",
19379
19557
  role: "alert"
@@ -19551,7 +19729,7 @@ var FilePickerTreeInternal_default = /* @__PURE__ */ defineComponent({
19551
19729
  class: normalizeClass({ "mint-picker__partial": __props.selected(row.node) && __props.progress(row.node).split(" / ")[0] !== String(row.node.fileCount) })
19552
19730
  }, toDisplayString(__props.progress(row.node)), 3)) : createCommentVNode("", true),
19553
19731
  !__props.reason(row.node) && row.node.bytes != null ? (openBlock(), createElementBlock("span", _hoisted_15$2, toDisplayString(unref(formatBytes)(row.node.bytes)), 1)) : createCommentVNode("", true),
19554
- __props.reason(row.node) ? (openBlock(), createElementBlock("span", _hoisted_16$1, "ⓘ")) : createCommentVNode("", true)
19732
+ __props.reason(row.node) ? (openBlock(), createElementBlock("span", _hoisted_16$2, "ⓘ")) : createCommentVNode("", true)
19555
19733
  ]),
19556
19734
  __props.query && __props.mode === "folder" && row.node.kind === "file" && row.node.parentPath && !__props.reason(row.node) ? (openBlock(), createBlock(BaseButton_default, {
19557
19735
  key: 2,
@@ -19562,7 +19740,7 @@ var FilePickerTreeInternal_default = /* @__PURE__ */ defineComponent({
19562
19740
  default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("Select its folder", -1)])]),
19563
19741
  _: 1
19564
19742
  }, 8, ["onClick"])) : createCommentVNode("", true)
19565
- ], 46, _hoisted_5$2), row.error ? (openBlock(), createElementBlock("div", _hoisted_17$1, [createTextVNode(toDisplayString(row.error), 1), createVNode(BaseButton_default, {
19743
+ ], 46, _hoisted_5$2), row.error ? (openBlock(), createElementBlock("div", _hoisted_17$2, [createTextVNode(toDisplayString(row.error), 1), createVNode(BaseButton_default, {
19566
19744
  variant: "ghost",
19567
19745
  size: "sm",
19568
19746
  onClick: ($event) => emit("expand", row.node)
@@ -19606,12 +19784,12 @@ var _hoisted_12$1 = { key: 0 };
19606
19784
  var _hoisted_13$1 = { key: 0 };
19607
19785
  var _hoisted_14$1 = { key: 1 };
19608
19786
  var _hoisted_15$1 = { key: 0 };
19609
- var _hoisted_16 = {
19787
+ var _hoisted_16$1 = {
19610
19788
  key: 1,
19611
19789
  class: "mint-picker__preview-error",
19612
19790
  role: "alert"
19613
19791
  };
19614
- var _hoisted_17 = {
19792
+ var _hoisted_17$1 = {
19615
19793
  key: 2,
19616
19794
  class: "mint-picker__ready",
19617
19795
  role: "status"
@@ -19672,21 +19850,21 @@ var FilePickerPreviewInternal_default = /* @__PURE__ */ defineComponent({
19672
19850
  default: withCtx(() => [createTextVNode(toDisplayString(__props.exclusions.length) + " skipped · Review", 1)]),
19673
19851
  _: 1
19674
19852
  })) : createCommentVNode("", true),
19675
- __props.error ? (openBlock(), createElementBlock("div", _hoisted_16, [createTextVNode(toDisplayString(__props.error), 1), createVNode(BaseButton_default, {
19853
+ __props.error ? (openBlock(), createElementBlock("div", _hoisted_16$1, [createTextVNode(toDisplayString(__props.error), 1), createVNode(BaseButton_default, {
19676
19854
  variant: "secondary",
19677
19855
  size: "sm",
19678
19856
  onClick: _cache[2] || (_cache[2] = ($event) => emit("retry"))
19679
19857
  }, {
19680
19858
  default: withCtx(() => [..._cache[10] || (_cache[10] = [createTextVNode("Try again", -1)])]),
19681
19859
  _: 1
19682
- })])) : (openBlock(), createElementBlock("span", _hoisted_17, toDisplayString(__props.busy ? "Checking selection…" : "✓ Metadata available"), 1))
19860
+ })])) : (openBlock(), createElementBlock("span", _hoisted_17$1, toDisplayString(__props.busy ? "Checking selection…" : "✓ Metadata available"), 1))
19683
19861
  ])) : (openBlock(), createElementBlock("div", _hoisted_18, " Select a file or folder to preview its details. "))]);
19684
19862
  };
19685
19863
  }
19686
19864
  });
19687
19865
  //#endregion
19688
19866
  //#region src/composables/filePicker/usePickerNavigation.ts
19689
- function usePickerNavigation(adapter, request) {
19867
+ function usePickerNavigation(adapter, request, systemFilter = () => true) {
19690
19868
  const path = shallowRef("");
19691
19869
  const trail = ref([]);
19692
19870
  const entries = shallowRef([]);
@@ -19702,6 +19880,16 @@ function usePickerNavigation(adapter, request) {
19702
19880
  let controller;
19703
19881
  const pending = /* @__PURE__ */ new Map();
19704
19882
  const childControllers = /* @__PURE__ */ new Set();
19883
+ function isAllowed(node) {
19884
+ const seen = /* @__PURE__ */ new Set();
19885
+ let current = node;
19886
+ while (current && !seen.has(current.path)) {
19887
+ if (!systemFilter(current)) return false;
19888
+ seen.add(current.path);
19889
+ current = current.parentPath ? nodes.value.get(current.parentPath) : void 0;
19890
+ }
19891
+ return true;
19892
+ }
19705
19893
  function register(items, parent) {
19706
19894
  for (const item of items) nodes.value.set(item.path, {
19707
19895
  ...item,
@@ -19729,7 +19917,7 @@ function usePickerNavigation(adapter, request) {
19729
19917
  loading.value = false;
19730
19918
  error.value = "";
19731
19919
  }
19732
- async function loadChildren(folder, ancestors = []) {
19920
+ async function loadChildren(folder, ancestors = [], refresh = false) {
19733
19921
  if (ancestors.includes(folder)) throw new Error("The adapter returned a circular folder tree.");
19734
19922
  const cached = children.value.get(folder);
19735
19923
  if (cached) return cached;
@@ -19740,6 +19928,7 @@ function usePickerNavigation(adapter, request) {
19740
19928
  childControllers.add(abort);
19741
19929
  const task = adapter().listChildren(folder, {
19742
19930
  ...request(),
19931
+ ...refresh && { refresh },
19743
19932
  signal: abort.signal
19744
19933
  }).then((items) => {
19745
19934
  if (token !== epoch) throw new DOMException("Cancelled", "AbortError");
@@ -19762,12 +19951,13 @@ function usePickerNavigation(adapter, request) {
19762
19951
  pending.set(folder, task);
19763
19952
  return task;
19764
19953
  }
19765
- async function load(query = "", recursive = false) {
19954
+ async function load(query = "", recursive = false, refresh = false) {
19766
19955
  const token = ++navigation;
19767
19956
  controller?.abort();
19768
19957
  controller = new AbortController();
19769
19958
  const options = {
19770
19959
  ...request(),
19960
+ ...refresh && { refresh },
19771
19961
  signal: controller.signal
19772
19962
  };
19773
19963
  loading.value = true;
@@ -19777,7 +19967,7 @@ function usePickerNavigation(adapter, request) {
19777
19967
  const items = query.trim() ? await adapter().search(query.trim(), {
19778
19968
  path: path.value,
19779
19969
  recursive
19780
- }, options) : path.value ? await loadChildren(path.value) : await adapter().listRoot(options);
19970
+ }, options) : path.value ? await loadChildren(path.value, [], refresh) : await adapter().listRoot(options);
19781
19971
  if (token !== navigation) return;
19782
19972
  register(items, query.trim() ? void 0 : path.value);
19783
19973
  entries.value = items;
@@ -19788,7 +19978,7 @@ function usePickerNavigation(adapter, request) {
19788
19978
  }
19789
19979
  }
19790
19980
  async function expand(node) {
19791
- if (node.kind !== "folder" || node.unavailableReason) return;
19981
+ if (node.kind !== "folder" || node.unavailableReason || !isAllowed(node)) return;
19792
19982
  if (expanded.value.has(node.path)) {
19793
19983
  expanded.value.delete(node.path);
19794
19984
  return;
@@ -19806,7 +19996,7 @@ function usePickerNavigation(adapter, request) {
19806
19996
  }
19807
19997
  }
19808
19998
  function enter(node) {
19809
- if (node.kind !== "folder" || node.unavailableReason) return;
19999
+ if (node.kind !== "folder" || node.unavailableReason || !isAllowed(node)) return;
19810
20000
  const index = trail.value.findIndex((crumb) => crumb.path === node.path);
19811
20001
  trail.value = index >= 0 ? trail.value.slice(0, index + 1) : [...trail.value, {
19812
20002
  path: node.path,
@@ -19825,6 +20015,7 @@ function usePickerNavigation(adapter, request) {
19825
20015
  for (const item of items) {
19826
20016
  if (ancestors.has(item.path) || depth > 30) continue;
19827
20017
  const node = nodes.value.get(item.path) ?? item;
20018
+ if (!isAllowed(node)) continue;
19828
20019
  result.push({
19829
20020
  node,
19830
20021
  depth,
@@ -19851,6 +20042,7 @@ function usePickerNavigation(adapter, request) {
19851
20042
  loading,
19852
20043
  error,
19853
20044
  rows,
20045
+ isAllowed,
19854
20046
  clear,
19855
20047
  invalidate,
19856
20048
  register,
@@ -19882,6 +20074,11 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
19882
20074
  return false;
19883
20075
  }
19884
20076
  function exclusion(node) {
20077
+ if (!nav.isAllowed(node)) return {
20078
+ path: node.path,
20079
+ name: node.name,
20080
+ reason: "forbidden"
20081
+ };
19885
20082
  const own = pickerExclusion(node, capability(), skipBlanks());
19886
20083
  if (own) return own;
19887
20084
  const seen = /* @__PURE__ */ new Set();
@@ -19960,11 +20157,12 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
19960
20157
  selection.excluded.filter((item) => item.reason === "deselected").forEach((item) => dropped.value.add(item.path));
19961
20158
  }
19962
20159
  }
19963
- const roots = computed(() => [...keys.value].map((key) => nav.nodes.value.get(key)).filter((node) => !!node && !ancestorSelected(node)));
20160
+ const roots = computed(() => [...keys.value].map((key) => nav.nodes.value.get(key)).filter((node) => !!node && !ancestorSelected(node) && nav.isAllowed(node)));
19964
20161
  const chosen = computed(() => {
19965
20162
  const files = [];
19966
20163
  const excluded = [];
19967
20164
  for (const node of nav.nodes.value.values()) {
20165
+ if (!nav.isAllowed(node)) continue;
19968
20166
  if (!keys.value.has(node.path) && !ancestorSelected(node)) continue;
19969
20167
  const reason = exclusion(node) ?? (dropped.value.has(node.path) ? {
19970
20168
  path: node.path,
@@ -19994,6 +20192,7 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
19994
20192
  const seen = /* @__PURE__ */ new Set();
19995
20193
  async function walk(node, ancestors = []) {
19996
20194
  if (token !== generation) throw new DOMException("Cancelled", "AbortError");
20195
+ if (!nav.isAllowed(node)) return [];
19997
20196
  if (node.kind === "file") return [node];
19998
20197
  if (node.unavailableReason) return [];
19999
20198
  if (ancestors.includes(node.path)) throw new Error("The adapter returned a circular folder tree.");
@@ -20028,7 +20227,13 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
20028
20227
  if (token === generation) resolving.value = false;
20029
20228
  }
20030
20229
  }
20031
- const focused = computed(() => nav.nodes.value.get(focusPath.value) ?? roots.value[roots.value.length - 1] ?? null);
20230
+ const focused = computed(() => {
20231
+ const node = nav.nodes.value.get(focusPath.value);
20232
+ return node && nav.isAllowed(node) ? node : roots.value[roots.value.length - 1] ?? null;
20233
+ });
20234
+ watch(() => new Map([...nav.nodes.value].map(([path, node]) => [path, nav.isAllowed(node)])), (allowed, previous) => {
20235
+ if (keys.value.size && [...allowed].some(([path, value]) => previous.has(path) && value !== previous.get(path))) resolve();
20236
+ });
20032
20237
  function folderProgress(node) {
20033
20238
  if (node.kind !== "folder" || node.fileCount == null) return "";
20034
20239
  const allowed = chosen.value.files.filter((file) => ancestorSelected(file, new Set([node.path]))).length;
@@ -20056,10 +20261,10 @@ function usePickerSelection(nav, mode, capability, skipBlanks) {
20056
20261
  //#endregion
20057
20262
  //#region src/composables/filePicker/localFiles.ts
20058
20263
  /** Construct metadata only: no FileReader, arrayBuffer or upload. */
20059
- function localFilesAdapter(files) {
20264
+ function localFilesAdapter(files, relativePaths) {
20060
20265
  const nodes = /* @__PURE__ */ new Map();
20061
- for (const file of files) {
20062
- const relative = file.webkitRelativePath || file.name;
20266
+ for (const [index, file] of files.entries()) {
20267
+ const relative = relativePaths?.[index] || file.webkitRelativePath || file.name;
20063
20268
  const parts = relative.split("/");
20064
20269
  let parent = null;
20065
20270
  for (let i = 0; i < parts.length - 1; i++) {
@@ -20122,8 +20327,9 @@ function useFilePicker(props, emit) {
20122
20327
  const skipBlanks = shallowRef(false);
20123
20328
  const reviewing = shallowRef(false);
20124
20329
  const localFiles = shallowRef([]);
20125
- const localAdapter = computed(() => localFilesAdapter(localFiles.value));
20126
- const nav = usePickerNavigation(() => source.value === "localFile" ? localAdapter.value : props.adapter, () => ({ source: source.value }));
20330
+ const localPaths = /* @__PURE__ */ new WeakMap();
20331
+ const localAdapter = computed(() => localFilesAdapter(localFiles.value, localFiles.value.map((file) => localPaths.get(toRaw(file)))));
20332
+ const nav = usePickerNavigation(() => source.value === "localFile" ? localAdapter.value : props.adapter, () => ({ source: source.value }), (node) => props.systemFilter?.(node, source.value) !== false);
20127
20333
  const capability = computed(() => props.capabilities[source.value]);
20128
20334
  const selection = usePickerSelection(nav, () => props.selectionMode, () => capability.value, () => skipBlanks.value);
20129
20335
  const { path, trail, loading, error, rows } = nav;
@@ -20143,10 +20349,7 @@ function useFilePicker(props, emit) {
20143
20349
  formats
20144
20350
  };
20145
20351
  });
20146
- const filesInput = ref(null);
20147
- const folderInput = ref(null);
20148
20352
  const searchArea = ref(null);
20149
- const accept = computed(() => capability.value?.formats.map((format) => `.${format.replace(/^\./, "")}`).join(",") || void 0);
20150
20353
  const confirmLabel = computed(() => ({
20151
20354
  "single-file": "Use file",
20152
20355
  "multi-file": "Use files",
@@ -20174,10 +20377,15 @@ function useFilePicker(props, emit) {
20174
20377
  selection.reset(seed?.source === source.value ? seed : null);
20175
20378
  reviewing.value = false;
20176
20379
  if (!allowedSources.value.includes(source.value)) return;
20177
- if (seed?.source === "localFile" && source.value === "localFile") localFiles.value = seed.files;
20380
+ if (seed?.source === "localFile" && source.value === "localFile") {
20381
+ seed.files.forEach((file, index) => {
20382
+ if (seed.relativePaths?.[index]) localPaths.set(toRaw(file), seed.relativePaths[index]);
20383
+ });
20384
+ localFiles.value = seed.files;
20385
+ }
20178
20386
  await nav.load(query.value, recursive.value);
20179
20387
  if (token !== openGeneration || !props.open) return;
20180
- if (seed?.source === "localFile" && source.value === "localFile") for (const node of nav.entries.value) selection.select(node, { ctrlKey: true });
20388
+ if (seed?.source === "localFile" && source.value === "localFile") await selectLocalFiles();
20181
20389
  if (selection.keys.value.size) await selection.resolve();
20182
20390
  }
20183
20391
  watch(() => props.open, (open) => {
@@ -20270,7 +20478,7 @@ function useFilePicker(props, emit) {
20270
20478
  }
20271
20479
  async function refresh() {
20272
20480
  nav.invalidate();
20273
- await nav.load(query.value, recursive.value);
20481
+ await nav.load(query.value, recursive.value, true);
20274
20482
  if (selection.keys.value.size) await selection.resolve();
20275
20483
  }
20276
20484
  function selectParent(node) {
@@ -20283,12 +20491,14 @@ function useFilePicker(props, emit) {
20283
20491
  nav.register([parent]);
20284
20492
  selection.select(parent);
20285
20493
  }
20286
- async function chooseLocal(event) {
20494
+ async function chooseLocal(files, _rootName, relativePaths) {
20287
20495
  const token = openGeneration;
20288
- const input = event.target;
20289
- if (!input.files?.length) return;
20290
- localFiles.value = Array.from(input.files);
20291
- input.value = "";
20496
+ if (!files.length || !props.open || source.value !== "localFile") return;
20497
+ files.forEach((file, index) => {
20498
+ if (relativePaths?.[index]) localPaths.set(toRaw(file), relativePaths[index]);
20499
+ });
20500
+ localFiles.value = files;
20501
+ clearTimeout(timer);
20292
20502
  nav.clear();
20293
20503
  selection.reset();
20294
20504
  path.value = "";
@@ -20296,7 +20506,17 @@ function useFilePicker(props, emit) {
20296
20506
  query.value = "";
20297
20507
  await nav.load();
20298
20508
  if (token !== openGeneration || !props.open || source.value !== "localFile") return;
20299
- const candidates = nav.entries.value.filter((node) => selection.selectable(node));
20509
+ await selectLocalFiles();
20510
+ }
20511
+ async function selectLocalFiles() {
20512
+ const token = openGeneration;
20513
+ const items = props.selectionMode === "single-file" || props.selectionMode === "multi-file" ? await localAdapter.value.search("", {
20514
+ path: "",
20515
+ recursive: true
20516
+ }) : nav.entries.value;
20517
+ if (token !== openGeneration || !props.open || source.value !== "localFile") return;
20518
+ nav.register(items);
20519
+ const candidates = items.filter((node) => selection.selectable(node));
20300
20520
  for (const node of props.selectionMode === "single-file" || props.selectionMode === "folder" ? candidates.slice(0, 1) : candidates) selection.select(node, { ctrlKey: true });
20301
20521
  }
20302
20522
  function cancel() {
@@ -20307,13 +20527,17 @@ function useFilePicker(props, emit) {
20307
20527
  if (!canConfirm.value) return;
20308
20528
  const result = source.value === "localFile" ? {
20309
20529
  source: "localFile",
20310
- files: chosen.value.files.flatMap((node) => node.file ? [node.file] : [])
20530
+ files: chosen.value.files.flatMap((node) => node.file ? [toRaw(node.file)] : [])
20311
20531
  } : {
20312
20532
  source: "server",
20313
20533
  folders: roots.value.filter((node) => node.kind === "folder").map((node) => node.path),
20314
20534
  files: [...chosen.value.files],
20315
20535
  excluded: [...chosen.value.excluded]
20316
20536
  };
20537
+ if (result.source === "localFile") {
20538
+ const relativePaths = result.files.map((file) => localPaths.get(file) || file.webkitRelativePath || file.name);
20539
+ if (relativePaths.some((path, index) => path !== (result.files[index].webkitRelativePath || result.files[index].name))) result.relativePaths = relativePaths;
20540
+ }
20317
20541
  lastConfirmed = result;
20318
20542
  emit("select", result);
20319
20543
  emit("update:open", false);
@@ -20346,10 +20570,7 @@ function useFilePicker(props, emit) {
20346
20570
  focused,
20347
20571
  resolving,
20348
20572
  resolutionError,
20349
- filesInput,
20350
- folderInput,
20351
20573
  searchArea,
20352
- accept,
20353
20574
  confirmLabel,
20354
20575
  folderCount,
20355
20576
  canConfirm,
@@ -20368,44 +20589,58 @@ function useFilePicker(props, emit) {
20368
20589
  //#endregion
20369
20590
  //#region src/components/FilePicker.vue?vue&type=script&setup=true&lang.ts
20370
20591
  var _hoisted_1 = {
20592
+ key: 1,
20593
+ class: "mint-file-browser__title mint-picker__local-title"
20594
+ };
20595
+ var _hoisted_2 = {
20371
20596
  viewBox: "0 0 24 24",
20372
20597
  fill: "none",
20373
20598
  stroke: "currentColor",
20374
20599
  "stroke-width": "1.8",
20375
20600
  "aria-hidden": "true"
20376
20601
  };
20377
- var _hoisted_2 = ["d"];
20378
- var _hoisted_3 = { class: "mint-picker__pathbar" };
20602
+ var _hoisted_3 = ["d"];
20379
20603
  var _hoisted_4 = {
20604
+ key: 0,
20605
+ class: "mint-picker__pathbar"
20606
+ };
20607
+ var _hoisted_5 = {
20380
20608
  "aria-label": "Breadcrumb",
20381
20609
  class: "mint-picker__breadcrumbs"
20382
20610
  };
20383
- var _hoisted_5 = {
20384
- key: 0,
20611
+ var _hoisted_6 = {
20612
+ key: 1,
20385
20613
  class: "mint-picker__empty"
20386
20614
  };
20387
- var _hoisted_6 = {
20615
+ var _hoisted_7 = {
20616
+ key: 0,
20617
+ class: "mint-picker__local-upload"
20618
+ };
20619
+ var _hoisted_8 = {
20388
20620
  key: 0,
20389
- class: "mint-picker__local-actions"
20621
+ role: "alert"
20622
+ };
20623
+ var _hoisted_9 = {
20624
+ key: 1,
20625
+ class: "mint-picker__workspace"
20390
20626
  };
20391
- var _hoisted_7 = ["multiple", "accept"];
20392
- var _hoisted_8 = { class: "mint-picker__workspace" };
20393
- var _hoisted_9 = { class: "mint-picker__footer" };
20394
- var _hoisted_10 = {
20627
+ var _hoisted_10 = { class: "mint-picker__footer" };
20628
+ var _hoisted_11 = {
20395
20629
  class: "mint-picker__receipt",
20396
20630
  role: "status"
20397
20631
  };
20398
- var _hoisted_11 = {
20632
+ var _hoisted_12 = {
20399
20633
  key: 0,
20400
20634
  class: "mint-picker__badge"
20401
20635
  };
20402
- var _hoisted_12 = {
20636
+ var _hoisted_13 = {
20403
20637
  key: 1,
20404
20638
  class: "mint-picker__badge"
20405
20639
  };
20406
- var _hoisted_13 = { key: 2 };
20407
- var _hoisted_14 = { key: 3 };
20408
- var _hoisted_15 = { class: "mint-picker__actions" };
20640
+ var _hoisted_14 = { key: 2 };
20641
+ var _hoisted_15 = { key: 3 };
20642
+ var _hoisted_16 = { key: 5 };
20643
+ var _hoisted_17 = { class: "mint-picker__actions" };
20409
20644
  //#endregion
20410
20645
  //#region src/components/FilePicker.vue
20411
20646
  var FilePicker_default = /* @__PURE__ */ defineComponent({
@@ -20418,7 +20653,8 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20418
20653
  capabilities: { default: () => ({}) },
20419
20654
  initialPath: { default: "" },
20420
20655
  initialSelection: { default: null },
20421
- title: { default: "Choose data" }
20656
+ title: { default: "Choose data" },
20657
+ systemFilter: {}
20422
20658
  },
20423
20659
  emits: [
20424
20660
  "update:open",
@@ -20426,7 +20662,11 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20426
20662
  "cancel"
20427
20663
  ],
20428
20664
  setup(__props, { emit: __emit }) {
20429
- const { previewNode, sourceNames, sourceIcons, allowedSources, source, query, recursive, skipBlanks, reviewing, nav, selection, capability, path, trail, loading, error, rows, roots, chosen, focused, resolving, resolutionError, filesInput, folderInput, searchArea, accept, confirmLabel, folderCount, canConfirm, switchSource, selectNode, enter, up, refresh, selectParent, chooseLocal, cancel, confirm, keyboard } = useFilePicker(__props, __emit);
20665
+ /** Adapter-driven file picker with Finder-style selection, disclosure and metadata preview. */
20666
+ const props = __props;
20667
+ const emit = __emit;
20668
+ const uploadError = ref("");
20669
+ const { previewNode, sourceNames, sourceIcons, allowedSources, source, query, recursive, skipBlanks, reviewing, nav, selection, capability, path, trail, loading, error, rows, roots, chosen, focused, resolving, resolutionError, searchArea, confirmLabel, folderCount, canConfirm, switchSource, selectNode, enter, up, refresh, selectParent, chooseLocal, cancel, confirm, keyboard } = useFilePicker(props, emit);
20430
20670
  return (_ctx, _cache) => {
20431
20671
  return openBlock(), createBlock(FileBrowserDialogInternal_default, {
20432
20672
  open: __props.open,
@@ -20435,12 +20675,13 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20435
20675
  variant: "picker",
20436
20676
  onClose: unref(cancel)
20437
20677
  }, {
20438
- header: withCtx(() => [createElementVNode("div", {
20678
+ header: withCtx(() => [unref(source) === "server" ? (openBlock(), createElementBlock("div", {
20679
+ key: 0,
20439
20680
  ref_key: "searchArea",
20440
20681
  ref: searchArea,
20441
20682
  class: "mint-picker__search"
20442
20683
  }, [
20443
- _cache[13] || (_cache[13] = createElementVNode("svg", {
20684
+ _cache[11] || (_cache[11] = createElementVNode("svg", {
20444
20685
  viewBox: "0 0 24 24",
20445
20686
  fill: "none",
20446
20687
  stroke: "currentColor",
@@ -20457,14 +20698,14 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20457
20698
  "aria-label": "Search folders and files",
20458
20699
  placeholder: "Search folders and files…"
20459
20700
  }, null, 8, ["modelValue"]),
20460
- _cache[14] || (_cache[14] = createElementVNode("kbd", null, "/", -1))
20461
- ], 512), unref(allowedSources).length > 1 ? (openBlock(), createElementBlock("div", {
20462
- key: 0,
20701
+ _cache[12] || (_cache[12] = createElementVNode("kbd", null, "/", -1))
20702
+ ], 512)) : (openBlock(), createElementBlock("h2", _hoisted_1, toDisplayString(__props.title), 1)), unref(allowedSources).length > 1 ? (openBlock(), createElementBlock("div", {
20703
+ key: 2,
20463
20704
  class: "mint-picker__sources",
20464
20705
  role: "group",
20465
20706
  "aria-label": "Data source",
20466
20707
  style: normalizeStyle({ "--picker-source-index": unref(allowedSources).indexOf(unref(source)) })
20467
- }, [_cache[15] || (_cache[15] = createElementVNode("span", {
20708
+ }, [_cache[13] || (_cache[13] = createElementVNode("span", {
20468
20709
  class: "mint-picker__source-indicator",
20469
20710
  "aria-hidden": "true"
20470
20711
  }, null, -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(allowedSources), (item) => {
@@ -20476,7 +20717,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20476
20717
  "aria-pressed": item === unref(source),
20477
20718
  onClick: ($event) => unref(switchSource)(item)
20478
20719
  }, {
20479
- default: withCtx(() => [(openBlock(), createElementBlock("svg", _hoisted_1, [createElementVNode("path", { d: unref(sourceIcons)[item] }, null, 8, _hoisted_2)]))]),
20720
+ default: withCtx(() => [(openBlock(), createElementBlock("svg", _hoisted_2, [createElementVNode("path", { d: unref(sourceIcons)[item] }, null, 8, _hoisted_3)]))]),
20480
20721
  _: 2
20481
20722
  }, 1032, [
20482
20723
  "label",
@@ -20484,35 +20725,35 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20484
20725
  "onClick"
20485
20726
  ]);
20486
20727
  }), 128))], 4)) : createCommentVNode("", true)]),
20487
- footer: withCtx(() => [createElementVNode("div", _hoisted_9, [createElementVNode("div", _hoisted_10, [
20488
- unref(folderCount) ? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString(unref(folderCount)) + " folder" + toDisplayString(unref(folderCount) === 1 ? "" : "s"), 1)) : createCommentVNode("", true),
20489
- unref(chosen).files.length ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(unref(chosen).files.length) + " " + toDisplayString(unref(chosen).files.length === 1 ? "file" : "files"), 1)) : createCommentVNode("", true),
20490
- unref(roots).length ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(unref(resolving) ? "Checking…" : unref(formatBytes)(unref(chosen).bytes)), 1)) : (openBlock(), createElementBlock("span", _hoisted_14, "No selection")),
20491
- unref(chosen).excluded.length ? (openBlock(), createBlock(BaseButton_default, {
20728
+ footer: withCtx(() => [createElementVNode("div", _hoisted_10, [createElementVNode("div", _hoisted_11, [
20729
+ unref(folderCount) ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(unref(folderCount)) + " folder" + toDisplayString(unref(folderCount) === 1 ? "" : "s"), 1)) : createCommentVNode("", true),
20730
+ unref(chosen).files.length ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(unref(chosen).files.length) + " " + toDisplayString(unref(chosen).files.length === 1 ? "file" : "files"), 1)) : createCommentVNode("", true),
20731
+ unref(roots).length ? (openBlock(), createElementBlock("span", _hoisted_14, toDisplayString(unref(resolving) ? "Checking…" : unref(formatBytes)(unref(chosen).bytes)), 1)) : (openBlock(), createElementBlock("span", _hoisted_15, "No selection")),
20732
+ unref(chosen).excluded.length && unref(source) === "server" ? (openBlock(), createBlock(BaseButton_default, {
20492
20733
  key: 4,
20493
20734
  variant: "ghost",
20494
20735
  size: "sm",
20495
- onClick: _cache[11] || (_cache[11] = ($event) => reviewing.value = !unref(reviewing))
20736
+ onClick: _cache[9] || (_cache[9] = ($event) => reviewing.value = !unref(reviewing))
20496
20737
  }, {
20497
20738
  default: withCtx(() => [createTextVNode(toDisplayString(unref(chosen).excluded.length) + " skipped", 1)]),
20498
20739
  _: 1
20499
- })) : createCommentVNode("", true),
20740
+ })) : unref(chosen).excluded.length ? (openBlock(), createElementBlock("span", _hoisted_16, toDisplayString(unref(chosen).excluded.length) + " skipped", 1)) : createCommentVNode("", true),
20500
20741
  unref(capability)?.isBlank ? (openBlock(), createBlock(BaseButton_default, {
20501
- key: 5,
20742
+ key: 6,
20502
20743
  size: "sm",
20503
20744
  variant: "ghost",
20504
20745
  "aria-pressed": unref(skipBlanks),
20505
- onClick: _cache[12] || (_cache[12] = ($event) => skipBlanks.value = !unref(skipBlanks))
20746
+ onClick: _cache[10] || (_cache[10] = ($event) => skipBlanks.value = !unref(skipBlanks))
20506
20747
  }, {
20507
20748
  default: withCtx(() => [createTextVNode("Skip blanks " + toDisplayString(unref(skipBlanks) ? "on" : "off"), 1)]),
20508
20749
  _: 1
20509
20750
  }, 8, ["aria-pressed"])) : createCommentVNode("", true)
20510
- ]), createElementVNode("div", _hoisted_15, [createVNode(BaseButton_default, {
20751
+ ]), createElementVNode("div", _hoisted_17, [createVNode(BaseButton_default, {
20511
20752
  variant: "ghost",
20512
20753
  size: "sm",
20513
20754
  onClick: unref(cancel)
20514
20755
  }, {
20515
- default: withCtx(() => [..._cache[22] || (_cache[22] = [createTextVNode("Cancel", -1)])]),
20756
+ default: withCtx(() => [..._cache[17] || (_cache[17] = [createTextVNode("Cancel", -1)])]),
20516
20757
  _: 1
20517
20758
  }, 8, ["onClick"]), createVNode(BaseButton_default, {
20518
20759
  size: "sm",
@@ -20525,8 +20766,8 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20525
20766
  default: withCtx(() => [(openBlock(), createElementBlock("div", {
20526
20767
  key: unref(source),
20527
20768
  class: "mint-picker mint-picker__source-panel",
20528
- onKeydown: _cache[10] || (_cache[10] = (...args) => unref(keyboard) && unref(keyboard)(...args))
20529
- }, [createElementVNode("div", _hoisted_3, [
20769
+ onKeydown: _cache[8] || (_cache[8] = (...args) => unref(keyboard) && unref(keyboard)(...args))
20770
+ }, [unref(source) === "server" ? (openBlock(), createElementBlock("div", _hoisted_4, [
20530
20771
  createVNode(IconButton_default, {
20531
20772
  label: "Up one level",
20532
20773
  size: "sm",
@@ -20534,7 +20775,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20534
20775
  disabled: !unref(path),
20535
20776
  onClick: _cache[1] || (_cache[1] = ($event) => unref(up)())
20536
20777
  }, {
20537
- default: withCtx(() => [..._cache[16] || (_cache[16] = [createElementVNode("svg", {
20778
+ default: withCtx(() => [..._cache[14] || (_cache[14] = [createElementVNode("svg", {
20538
20779
  viewBox: "0 0 24 24",
20539
20780
  fill: "none",
20540
20781
  stroke: "currentColor",
@@ -20543,7 +20784,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20543
20784
  }, [createElementVNode("path", { d: "M11 17l-5-5 5-5M6 12h13" })], -1)])]),
20544
20785
  _: 1
20545
20786
  }, 8, ["disabled"]),
20546
- createElementVNode("nav", _hoisted_4, [createVNode(BaseButton_default, {
20787
+ createElementVNode("nav", _hoisted_5, [createVNode(BaseButton_default, {
20547
20788
  variant: "ghost",
20548
20789
  size: "sm",
20549
20790
  onClick: _cache[2] || (_cache[2] = ($event) => unref(up)(""))
@@ -20551,7 +20792,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20551
20792
  default: withCtx(() => [createTextVNode(toDisplayString(unref(sourceNames)[unref(source)]), 1)]),
20552
20793
  _: 1
20553
20794
  }), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(trail), (crumb) => {
20554
- return openBlock(), createElementBlock(Fragment, { key: crumb.path }, [_cache[17] || (_cache[17] = createElementVNode("span", null, "/", -1)), createVNode(BaseButton_default, {
20795
+ return openBlock(), createElementBlock(Fragment, { key: crumb.path }, [_cache[15] || (_cache[15] = createElementVNode("span", null, "/", -1)), createVNode(BaseButton_default, {
20555
20796
  variant: "ghost",
20556
20797
  size: "sm",
20557
20798
  onClick: ($event) => unref(up)(crumb.path)
@@ -20576,7 +20817,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20576
20817
  disabled: unref(loading),
20577
20818
  onClick: _cache[4] || (_cache[4] = ($event) => unref(refresh)())
20578
20819
  }, {
20579
- default: withCtx(() => [..._cache[18] || (_cache[18] = [createElementVNode("svg", {
20820
+ default: withCtx(() => [..._cache[16] || (_cache[16] = [createElementVNode("svg", {
20580
20821
  viewBox: "0 0 24 24",
20581
20822
  fill: "none",
20582
20823
  stroke: "currentColor",
@@ -20585,46 +20826,18 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20585
20826
  }, [createElementVNode("path", { d: "M20 7v5h-5M4 17v-5h5M6 8a7 7 0 0 1 12-2l2 3M4 15l2 3a7 7 0 0 0 12-2" })], -1)])]),
20586
20827
  _: 1
20587
20828
  }, 8, ["disabled"])
20588
- ]), !unref(allowedSources).length ? (openBlock(), createElementBlock("div", _hoisted_5, " No data sources are enabled. ")) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [unref(source) === "localFile" ? (openBlock(), createElementBlock("div", _hoisted_6, [
20589
- createElementVNode("input", {
20590
- ref_key: "filesInput",
20591
- ref: filesInput,
20592
- type: "file",
20593
- multiple: __props.selectionMode !== "single-file",
20594
- accept: unref(accept),
20595
- hidden: "",
20596
- onChange: _cache[5] || (_cache[5] = (...args) => unref(chooseLocal) && unref(chooseLocal)(...args))
20597
- }, null, 40, _hoisted_7),
20598
- createElementVNode("input", {
20599
- ref_key: "folderInput",
20600
- ref: folderInput,
20601
- type: "file",
20602
- webkitdirectory: "",
20603
- multiple: "",
20604
- hidden: "",
20605
- onChange: _cache[6] || (_cache[6] = (...args) => unref(chooseLocal) && unref(chooseLocal)(...args))
20606
- }, null, 544),
20607
- __props.selectionMode !== "folder" ? (openBlock(), createBlock(BaseButton_default, {
20608
- key: 0,
20609
- variant: "secondary",
20610
- size: "sm",
20611
- onClick: _cache[7] || (_cache[7] = ($event) => unref(filesInput)?.click())
20612
- }, {
20613
- default: withCtx(() => [..._cache[19] || (_cache[19] = [createTextVNode("Choose files…", -1)])]),
20614
- _: 1
20615
- })) : createCommentVNode("", true),
20616
- __props.selectionMode !== "single-file" ? (openBlock(), createBlock(BaseButton_default, {
20617
- key: 1,
20618
- variant: "secondary",
20619
- size: "sm",
20620
- onClick: _cache[8] || (_cache[8] = ($event) => unref(folderInput)?.click())
20621
- }, {
20622
- default: withCtx(() => [..._cache[20] || (_cache[20] = [createTextVNode("Choose folder…", -1)])]),
20623
- _: 1
20624
- })) : createCommentVNode("", true),
20625
- _cache[21] || (_cache[21] = createElementVNode("span", null, "Files stay in this browser.", -1))
20626
- ])) : createCommentVNode("", true), createElementVNode("div", _hoisted_8, [createVNode(FilePickerTreeInternal_default, {
20627
- "empty-title": unref(path) ? "No readable files" : unref(source) === "localFile" ? "No files chosen" : "No server locations configured",
20829
+ ])) : createCommentVNode("", true), !unref(allowedSources).length ? (openBlock(), createElementBlock("div", _hoisted_6, " No data sources are enabled. ")) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(source) === "localFile" ? (openBlock(), createElementBlock("div", _hoisted_7, [createVNode(FileUploader_default, {
20830
+ size: "lg",
20831
+ mode: __props.selectionMode === "folder" ? "folder" : __props.selectionMode === "single-file" ? "file" : "file+folder",
20832
+ multiple: __props.selectionMode !== "single-file",
20833
+ "show-files": false,
20834
+ onUpload: _cache[5] || (_cache[5] = (...args) => {
20835
+ uploadError.value = "";
20836
+ unref(chooseLocal)(...args);
20837
+ }),
20838
+ onError: _cache[6] || (_cache[6] = ($event) => uploadError.value = $event)
20839
+ }, null, 8, ["mode", "multiple"]), uploadError.value || unref(error) || unref(resolutionError) ? (openBlock(), createElementBlock("p", _hoisted_8, toDisplayString(uploadError.value || unref(error) || unref(resolutionError)), 1)) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("div", _hoisted_9, [createVNode(FilePickerTreeInternal_default, {
20840
+ "empty-title": unref(path) ? "No readable files" : "No server locations configured",
20628
20841
  rows: unref(rows),
20629
20842
  loading: unref(loading),
20630
20843
  error: unref(error),
@@ -20665,7 +20878,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20665
20878
  busy: unref(resolving),
20666
20879
  error: unref(resolutionError),
20667
20880
  reviewing: unref(reviewing),
20668
- onReview: _cache[9] || (_cache[9] = ($event) => reviewing.value = !unref(reviewing)),
20881
+ onReview: _cache[7] || (_cache[7] = ($event) => reviewing.value = !unref(reviewing)),
20669
20882
  onRetry: unref(selection).resolve
20670
20883
  }, null, 8, [
20671
20884
  "node",
@@ -20676,7 +20889,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
20676
20889
  "error",
20677
20890
  "reviewing",
20678
20891
  "onRetry"
20679
- ])])], 64))], 32))]),
20892
+ ])]))], 64))], 32))]),
20680
20893
  _: 1
20681
20894
  }, 8, [
20682
20895
  "open",
@@ -20767,6 +20980,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
20767
20980
  MultiSelect: () => MultiSelect_default,
20768
20981
  NumberInput: () => NumberInput_default,
20769
20982
  PlateMapEditor: () => PlateMapEditor_default,
20983
+ PlotlyChart: () => PlotlyChart_default,
20770
20984
  PluginIcon: () => PluginIcon_default,
20771
20985
  PluginWorkspaceView: () => PluginWorkspaceView_default,
20772
20986
  ProgressBar: () => ProgressBar_default,
@@ -20802,6 +21016,6 @@ var components_exports = /* @__PURE__ */ __exportAll({
20802
21016
  WellPlate: () => WellPlate_default
20803
21017
  });
20804
21018
  //#endregion
20805
- export { AutoGroupModal_default as $, ChemicalFormula_default as A, IconButton_default as At, BioTemplateExperimentWorkspaceView_default as B, SequenceProgressBar_default as C, AppTopBar_default as Ct, formatSequenceRemaining as D, CollapsibleCard_default as Dt, formatSequenceEta as E, PluginIcon_default as Et, SmartGroupModal_default as F, Calendar_default as Ft, StatusIndicator_default as G, Breadcrumb_default as H, GroupAssigner_default as I, DropdownButton_default as It, DoseDesignWorkspaceView_default as J, Divider_default as K, RackEditor_default as L, SegmentedControl_default as Lt, ProtocolStepEditor_default as M, AppToastContainer_default as Mt, SampleHierarchyTree_default as N, DataFrame_default as Nt, sequenceProgressPercent as O, ThemeToggle_default as Ot, ReagentEditor_default as P, LoadingSpinner_default as Pt, SampleSelector_default as Q, BioTemplatePresetWorkspaceView_default as R, BaseTabs_default as Rt, InstrumentAlertLog_default as S, StepWizard_default as St, estimateSequenceRemainingSeconds as T, AppAvatarMenu_default as Tt, Avatar_default as U, BioTemplateRenderer_default as V, ProgressBar_default as W, ComponentBindingRenderer_default as X, ControlWorkspaceView_default as Y, ScheduleCalendar_default as Z, inferLcmsPlateTypeFromWellIds as _, MobileSupportGate_default as _t, FileBrowserModal_default as a, WellPlate_default as at, InstrumentStatusCard_default as b, FormBuilder_default as bt, TimeRangeInput_default as c, GeneratedPluginView_default as ct, AuditTrail_default as d, GeneratedPlotlyResult_default as dt, SmartGroupManual_default as et, LcmsSequenceTable_default as f, ChartContainer_default as ft, extractLcmsSampleName as g, PluginWorkspaceView_default as gt, extractLcmsCommonPrefix as h, normalizeGeneratedJobInput as ht, ArtifactSaveDialog_default as i, SampleLegend_default as it, ScientificNumber_default as j, RuntimeUpdateNotice_default as jt, sequenceSamplesRemaining as k, ActionMenu_default as kt, ExperimentDataViewer_default as l, JobsStatusTray_default as lt, basenameFromWindowsPath as m, generatedJobFormSchema as mt, FilePicker_default as n, ReagentList_default as nt, SectionCard_default as o, ExperimentTimeline_default as ot, DEFAULT_LCMS_SEQUENCE_COLUMNS as p, generatedJobDefaults as pt, AppContainer_default as q, FitPanel_default as r, PlateMapEditor_default as rt, ResourceCard_default as s, DoseCalculator_default as st, components_exports as t, SmartGroupFieldRecipe_default as tt, BatchProgressList_default as u, GeneratedResultRenderer_default as ut, lcmsWellIdFromPosition as v, AppLayout_default as vt, estimateSequenceFinishDate as w, AppPluginSwitcher_default as wt, InstrumentStateBadge_default as x, FormActions_default as xt, reconstructLcmsPlateCellsFromSequenceItems as y, AppSidebar_default as yt, BioTemplatePackWorkspaceView_default as z, ColorSlider_default as zt };
21019
+ export { AutoGroupModal_default as $, ChemicalFormula_default as A, ActionMenu_default as At, BioTemplateExperimentWorkspaceView_default as B, ColorSlider_default as Bt, SequenceProgressBar_default as C, StepWizard_default as Ct, formatSequenceRemaining as D, PluginIcon_default as Dt, formatSequenceEta as E, AppAvatarMenu_default as Et, SmartGroupModal_default as F, LoadingSpinner_default as Ft, StatusIndicator_default as G, Breadcrumb_default as H, GroupAssigner_default as I, Calendar_default as It, DoseDesignWorkspaceView_default as J, Divider_default as K, RackEditor_default as L, DropdownButton_default as Lt, ProtocolStepEditor_default as M, RuntimeUpdateNotice_default as Mt, SampleHierarchyTree_default as N, AppToastContainer_default as Nt, sequenceProgressPercent as O, CollapsibleCard_default as Ot, ReagentEditor_default as P, DataFrame_default as Pt, SampleSelector_default as Q, BioTemplatePresetWorkspaceView_default as R, SegmentedControl_default as Rt, InstrumentAlertLog_default as S, FormActions_default as St, estimateSequenceRemainingSeconds as T, AppPluginSwitcher_default as Tt, Avatar_default as U, BioTemplateRenderer_default as V, ProgressBar_default as W, ComponentBindingRenderer_default as X, ControlWorkspaceView_default as Y, ScheduleCalendar_default as Z, inferLcmsPlateTypeFromWellIds as _, PluginWorkspaceView_default as _t, FileBrowserModal_default as a, WellPlate_default as at, InstrumentStatusCard_default as b, AppSidebar_default as bt, TimeRangeInput_default as c, GeneratedPluginView_default as ct, AuditTrail_default as d, GeneratedPlotlyResult_default as dt, SmartGroupManual_default as et, LcmsSequenceTable_default as f, PlotlyChart_default as ft, extractLcmsSampleName as g, normalizeGeneratedJobInput as gt, extractLcmsCommonPrefix as h, generatedJobFormSchema as ht, ArtifactSaveDialog_default as i, SampleLegend_default as it, ScientificNumber_default as j, IconButton_default as jt, sequenceSamplesRemaining as k, ThemeToggle_default as kt, ExperimentDataViewer_default as l, JobsStatusTray_default as lt, basenameFromWindowsPath as m, generatedJobDefaults as mt, FilePicker_default as n, ReagentList_default as nt, SectionCard_default as o, ExperimentTimeline_default as ot, DEFAULT_LCMS_SEQUENCE_COLUMNS as p, ChartContainer_default as pt, AppContainer_default as q, FitPanel_default as r, PlateMapEditor_default as rt, ResourceCard_default as s, DoseCalculator_default as st, components_exports as t, SmartGroupFieldRecipe_default as tt, BatchProgressList_default as u, GeneratedResultRenderer_default as ut, lcmsWellIdFromPosition as v, MobileSupportGate_default as vt, estimateSequenceFinishDate as w, AppTopBar_default as wt, InstrumentStateBadge_default as x, FormBuilder_default as xt, reconstructLcmsPlateCellsFromSequenceItems as y, AppLayout_default as yt, BioTemplatePackWorkspaceView_default as z, BaseTabs_default as zt };
20806
21020
 
20807
- //# sourceMappingURL=components-6IIxCSI8.js.map
21021
+ //# sourceMappingURL=components-DT6ggNrt.js.map