@morscherlab/mint-sdk 1.3.0-beta.1 → 1.3.0-beta.11

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 (136) hide show
  1. package/README.md +23 -140
  2. package/dist/{ResourcePickerListInternal-c3IT8PIu.js → ResourcePickerListInternal-CFAw4vTZ.js} +26 -19
  3. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +1 -0
  4. package/dist/components/FilePicker.vue.d.ts +4 -1
  5. package/dist/components/SettingsModal.schema.d.ts +1 -1
  6. package/dist/components/SettingsModal.vue.d.ts +2 -0
  7. package/dist/components/WellPlate.colors.d.ts +1 -5
  8. package/dist/components/WellPlate.rendering.d.ts +5 -2
  9. package/dist/components/index.d.ts +32 -17
  10. package/dist/components/index.js +3 -3
  11. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -0
  12. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +9 -3
  13. package/dist/{components-CvY105kJ.js → components-vHfxV2PB.js} +425 -392
  14. package/dist/components-vHfxV2PB.js.map +1 -0
  15. package/dist/composables/createFilePickerAdapter.d.ts +5 -1
  16. package/dist/composables/filePicker/usePickerNavigation.d.ts +3 -2
  17. package/dist/composables/index.d.ts +0 -3
  18. package/dist/composables/index.js +4 -4
  19. package/dist/composables/useAutoGroup.d.ts +1 -1
  20. package/dist/composables/useBioTemplateComponents.d.ts +15 -3
  21. package/dist/composables/useBioTemplateControls.d.ts +5 -1
  22. package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
  23. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
  24. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
  25. package/dist/composables/useExperimentSave.d.ts +5 -1
  26. package/dist/composables/useFilePicker.d.ts +4 -1
  27. package/dist/composables/useGroupAssignment.d.ts +5 -1
  28. package/dist/composables/usePlatformContext.d.ts +3 -0
  29. package/dist/composables/useTemplateCollection.d.ts +5 -1
  30. package/dist/composables-D6uqp0UF.js +591 -0
  31. package/dist/composables-D6uqp0UF.js.map +1 -0
  32. package/dist/index.js +24 -24
  33. package/dist/index.js.map +1 -1
  34. package/dist/install.js +1 -1
  35. package/dist/lcms.d.ts +11 -11
  36. package/dist/styles.css +228 -214
  37. package/dist/templates/index.js +1 -1
  38. package/dist/{templates-Bj9hZ7iV.js → templates-BU1pet28.js} +31 -44
  39. package/dist/templates-BU1pet28.js.map +1 -0
  40. package/dist/types/auth.d.ts +0 -27
  41. package/dist/types/components.d.ts +8 -0
  42. package/dist/types/fileBrowserTypes.d.ts +13 -0
  43. package/dist/types/filePicker.d.ts +8 -1
  44. package/dist/types/index.d.ts +2 -2
  45. package/dist/types/platform.d.ts +2 -0
  46. package/dist/utils/rack.d.ts +16 -16
  47. package/dist/{validation-B4Y8_eEe.js → validation-Dmp9Q5W0.js} +50 -12
  48. package/dist/validation-Dmp9Q5W0.js.map +1 -0
  49. package/package.json +1 -6
  50. package/src/__tests__/components/ActionMenu.test.ts +10 -0
  51. package/src/__tests__/components/AppTopBar.test.ts +24 -8
  52. package/src/__tests__/components/AppTopBarPageSelector.test.ts +4 -4
  53. package/src/__tests__/components/EmptyState.test.ts +15 -0
  54. package/src/__tests__/components/ExperimentSelectorModal.test.ts +12 -5
  55. package/src/__tests__/components/FilePicker.test.ts +65 -1
  56. package/src/__tests__/components/FileUploader.test.ts +6 -9
  57. package/src/__tests__/components/ResourcePickerListInternal.test.ts +23 -4
  58. package/src/__tests__/components/SettingsModal.test.ts +22 -0
  59. package/src/__tests__/components/WellPlate.decoration.test.ts +4 -28
  60. package/src/__tests__/components/WellPlate.rendering.test.ts +20 -33
  61. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +7 -7
  62. package/src/__tests__/composables/createFilePickerAdapter.test.ts +92 -1
  63. package/src/__tests__/composables/usePickerNavigation.test.ts +61 -1
  64. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +18 -6
  65. package/src/__tests__/docs/frontendDocsCatalog.test.ts +2 -2
  66. package/src/__tests__/styles/controlRefreshRules.test.ts +21 -8
  67. package/src/__tests__/styles/menusShellRefresh.test.ts +20 -5
  68. package/src/__tests__/templates/templatesDeprecation.test.ts +58 -11
  69. package/src/components/ActionMenu.vue +10 -2
  70. package/src/components/AppTopBar.vue +6 -4
  71. package/src/components/EmptyState.vue +3 -1
  72. package/src/components/ExperimentSelectorModal.vue +4 -1
  73. package/src/components/FilePicker.vue +42 -0
  74. package/src/components/FileUploader.vue +30 -46
  75. package/src/components/SettingsModal.schema.ts +4 -2
  76. package/src/components/SettingsModal.vue +4 -2
  77. package/src/components/WellPlate.colors.ts +6 -10
  78. package/src/components/WellPlate.legend.ts +4 -4
  79. package/src/components/WellPlate.rendering.ts +9 -8
  80. package/src/components/WellPlate.vue +5 -22
  81. package/src/components/index.ts +32 -17
  82. package/src/components/internal/AppTopBarPageSelectorInternal.vue +3 -6
  83. package/src/components/internal/FilePickerListInternal.vue +11 -2
  84. package/src/components/internal/ResourcePickerListInternal.vue +21 -27
  85. package/src/composables/autoGroup/index.ts +1 -1
  86. package/src/composables/createFilePickerAdapter.ts +82 -22
  87. package/src/composables/filePicker/usePickerNavigation.ts +29 -2
  88. package/src/composables/index.ts +0 -7
  89. package/src/composables/useAutoGroup.ts +1 -1
  90. package/src/composables/useBioTemplateComponents.ts +15 -3
  91. package/src/composables/useBioTemplateControls.ts +5 -1
  92. package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
  93. package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
  94. package/src/composables/useBioTemplateWorkspace.ts +5 -1
  95. package/src/composables/useExperimentSave.ts +5 -1
  96. package/src/composables/useFilePicker.ts +8 -1
  97. package/src/composables/useGroupAssignment.ts +5 -1
  98. package/src/composables/usePlatformFilePickerAdapter.ts +26 -4
  99. package/src/composables/useTemplateCollection.ts +5 -1
  100. package/src/index.ts +1 -1
  101. package/src/lcms.ts +11 -11
  102. package/src/styles/components/action-menu.css +10 -0
  103. package/src/styles/components/app-page-selector.css +61 -17
  104. package/src/styles/components/app-pill-nav.css +1 -1
  105. package/src/styles/components/app-top-bar.css +18 -38
  106. package/src/styles/components/empty-state.css +3 -2
  107. package/src/styles/components/experiment-selector-modal.css +3 -9
  108. package/src/styles/components/file-picker.css +23 -1
  109. package/src/styles/components/file-uploader.css +22 -55
  110. package/src/styles/components/resource-picker-list.css +70 -36
  111. package/src/styles/components/well-plate.css +18 -55
  112. package/src/types/auth.ts +0 -37
  113. package/src/types/components.ts +8 -0
  114. package/src/types/fileBrowserTypes.ts +15 -0
  115. package/src/types/filePicker.ts +8 -1
  116. package/src/types/index.ts +2 -5
  117. package/src/types/platform.ts +2 -0
  118. package/src/utils/rack.ts +16 -16
  119. package/dist/ResourcePickerListInternal-c3IT8PIu.js.map +0 -1
  120. package/dist/__tests__/composables/useAuth.test.d.ts +0 -1
  121. package/dist/__tests__/composables/usePasskey.test.d.ts +0 -1
  122. package/dist/components-CvY105kJ.js.map +0 -1
  123. package/dist/composables/useAuth.d.ts +0 -47
  124. package/dist/composables/usePasskey.d.ts +0 -10
  125. package/dist/composables/useWellPlateEditor.d.ts +0 -33
  126. package/dist/composables-DL4Vca7L.js +0 -1193
  127. package/dist/composables-DL4Vca7L.js.map +0 -1
  128. package/dist/plotly.min-D6Ge6qgX.js +0 -168582
  129. package/dist/plotly.min-D6Ge6qgX.js.map +0 -1
  130. package/dist/templates-Bj9hZ7iV.js.map +0 -1
  131. package/dist/validation-B4Y8_eEe.js.map +0 -1
  132. package/src/__tests__/composables/useAuth.test.ts +0 -290
  133. package/src/__tests__/composables/usePasskey.test.ts +0 -38
  134. package/src/composables/useAuth.ts +0 -470
  135. package/src/composables/usePasskey.ts +0 -216
  136. package/src/composables/useWellPlateEditor.ts +0 -415
@@ -1,22 +1,16 @@
1
1
  import { a as tryUseSettingsStore, c as mintApiErrorFromResponse, i as tableDensityToSize, n as colorPalettes, o as useSettingsStore } from "./settings-BLr8lzw6.js";
2
- import { a as SORT_OPTIONS, c as formatExperimentDate, f as BaseModal_default, h as BaseButton_default, l as formatExperimentStatus, m as useEventListener, p as useFocusTrap, r as EXPERIMENT_STATUS_OPTIONS, t as DATE_PRESET_OPTIONS } from "./experiment-utils-DTANyVKV.js";
3
- import { a as normalizeOptionInput, i as BaseSelect_default, n as Skeleton_default, o as BaseInput_default, r as EmptyState_default, t as ResourcePickerListInternal_default } from "./ResourcePickerListInternal-c3IT8PIu.js";
4
- import { $n as FormulaInput_default, An as getControlDefaults, B as toBioTemplateComponentProps, Cn as SAMPLE_GROUP_TOKENS, Cr as FileUploader_default, F as getBioTemplateComponentProps, Fn as controlsToSettingsSchema, Gn as getFieldRegistryEntry, H as toBioTemplateComponentPropsById, Hr as durationMinutes, In as controlsToSidebarPanels, Jn as UnitInput_default, Kr as formatTime, L as toBioTemplateComponentBindings, Mn as controlsToFormSchema, Pn as controlsToSectionFormSchemas, R as toBioTemplateComponentBindingsById, Rr as TagsInput_default, Sn as SAMPLE_COLOR_SCALE, Sr as _plugin_vue_export_helper_default, Tr as SecretInput_default, V as toBioTemplateComponentPropsByComponent, Vr as compareTime, Xn as MoleculeInput_default, Yn as useConcentrationUnits, Zn as SequenceInput_default, _n as createPlateRowLabels, ai as useListSelection, ar as getInjectedPlatformContext, br as isRecord, ci as BaseRadioGroup_default, di as Tooltip_default, fi as BaseTextarea_default, fn as extractTemplateCollection, gn as createPlateColumnLabels, hn as WELL_PLATE_SIZE_CONFIGS, hr as normalizeJobPercent, ii as MultiSelect_default, li as BaseToggle_default, lr as createGeneratedAnalysisTransport, mn as PLATE_CONFIGS, mr as jobStatusLabel, ni as DatePicker_default, nr as GeneratedPathInput_default, qn as ConcentrationInput_default, ri as useDropdownState, rr as GENERATED_JOBS_API_KEY, si as BaseSlider_default, sr as resolveCurrentExperimentId, tr as useChemicalFormula, ui as BaseCheckbox_default, ur as useGeneratedAnalysis, vn as createWellGrid, wn as SLOT_ORDER, wr as NumberInput_default, xr as useMenuKeyboard, yn as getRectangleWellIds, yr as DateTimePicker_default, zr as TimePicker_default } from "./templates-Bj9hZ7iV.js";
5
- import { B as useRackEditor, Bt as useRovingFocus, C as useExperimentSamples, D as getSampleGroupMajorPrefix, Dt as useAppExperiment, E as useSampleGroups, Et as APP_EXPERIMENT_KEY, F as useAutoGroup, G as useDoseCalculator, H as reorderList, J as usePluginJobCenter, Lt as useTextSearch, Mt as usePlatformContext, Nt as useTheme, O as getSampleGroupParentPath, Ot as getInjectedFrontendRevision, Pt as useToast, S as useScheduleDrag, T as useExpansionSet, Tt as mergeControlWorkspaceOptions, U as useListReorder, W as useReorderAnnouncer, X as downloadBlob, a as useExperimentSelector, c as DEFAULT_PRESETS, ct as usePluginWorkspace, d as useReagentSeries, dt as useFormBuilder, f as useGroupAssignment, ht as defineDoseDesignControlModel, i as useAnalysisArtifacts, j as readFileAsText, jt as usePresenceHeartbeat, kt as useRuntimeAlignment, l as DEFAULT_UNITS, lt as DEFAULT_MOBILE_VIEWPORT_QUERY, m as useBioTemplatePackWorkspace, n as pickerFormat, p as useBioTemplatePresetWorkspace, r as pickerReason, s as useProtocolTemplates, st as useRequestSyncState, t as pickerExclusion, ut as useMobileSupportGate, w as useExperimentData, xt as resolveControlModel, yt as useControlWorkspace, z as DEFAULT_COLORS, zt as useSortedItems } from "./validation-B4Y8_eEe.js";
2
+ import { a as SORT_OPTIONS, c as formatExperimentDate, f as BaseModal_default, h as BaseButton_default, l as formatExperimentStatus, m as useEventListener, p as useFocusTrap, r as EXPERIMENT_STATUS_OPTIONS, t as DATE_PRESET_OPTIONS, u as getExperimentStatusVariant } from "./experiment-utils-DTANyVKV.js";
3
+ import { a as normalizeOptionInput, i as BaseSelect_default, n as Skeleton_default, o as BaseInput_default, r as EmptyState_default, t as ResourcePickerListInternal_default } from "./ResourcePickerListInternal-CFAw4vTZ.js";
4
+ import { $n as FormulaInput_default, An as getControlDefaults, B as toBioTemplateComponentProps, Cn as SAMPLE_GROUP_TOKENS, Cr as FileUploader_default, F as getBioTemplateComponentProps, Fn as controlsToSettingsSchema, Gn as getFieldRegistryEntry, H as toBioTemplateComponentPropsById, Hr as durationMinutes, In as controlsToSidebarPanels, Jn as UnitInput_default, Kr as formatTime, L as toBioTemplateComponentBindings, Mn as controlsToFormSchema, Pn as controlsToSectionFormSchemas, R as toBioTemplateComponentBindingsById, Rr as TagsInput_default, Sn as SAMPLE_COLOR_SCALE, Sr as _plugin_vue_export_helper_default, Tr as SecretInput_default, V as toBioTemplateComponentPropsByComponent, Vr as compareTime, Xn as MoleculeInput_default, Yn as useConcentrationUnits, Zn as SequenceInput_default, _n as createPlateRowLabels, ai as useListSelection, ar as getInjectedPlatformContext, br as isRecord, ci as BaseRadioGroup_default, di as Tooltip_default, fi as BaseTextarea_default, fn as extractTemplateCollection, gn as createPlateColumnLabels, hn as WELL_PLATE_SIZE_CONFIGS, hr as normalizeJobPercent, ii as MultiSelect_default, li as BaseToggle_default, lr as createGeneratedAnalysisTransport, mn as PLATE_CONFIGS, mr as jobStatusLabel, ni as DatePicker_default, nr as GeneratedPathInput_default, qn as ConcentrationInput_default, ri as useDropdownState, rr as GENERATED_JOBS_API_KEY, si as BaseSlider_default, sr as resolveCurrentExperimentId, tr as useChemicalFormula, ui as BaseCheckbox_default, ur as useGeneratedAnalysis, vn as createWellGrid, wn as SLOT_ORDER, wr as NumberInput_default, xr as useMenuKeyboard, yn as getRectangleWellIds, yr as DateTimePicker_default, zr as TimePicker_default } from "./templates-BU1pet28.js";
5
+ import { B as useRackEditor, Bt as useRovingFocus, C as useExperimentSamples, D as getSampleGroupMajorPrefix, Dt as useAppExperiment, E as useSampleGroups, Et as APP_EXPERIMENT_KEY, F as useAutoGroup, G as useDoseCalculator, H as reorderList, J as usePluginJobCenter, Lt as useTextSearch, Mt as usePlatformContext, Nt as useTheme, O as getSampleGroupParentPath, Ot as getInjectedFrontendRevision, Pt as useToast, S as useScheduleDrag, T as useExpansionSet, Tt as mergeControlWorkspaceOptions, U as useListReorder, W as useReorderAnnouncer, X as downloadBlob, a as useExperimentSelector, c as DEFAULT_PRESETS, ct as usePluginWorkspace, d as useReagentSeries, dt as useFormBuilder, f as useGroupAssignment, ht as defineDoseDesignControlModel, i as useAnalysisArtifacts, j as readFileAsText, jt as usePresenceHeartbeat, kt as useRuntimeAlignment, l as DEFAULT_UNITS, lt as DEFAULT_MOBILE_VIEWPORT_QUERY, m as useBioTemplatePackWorkspace, n as pickerFormat, p as useBioTemplatePresetWorkspace, r as pickerReason, s as useProtocolTemplates, st as useRequestSyncState, t as pickerExclusion, ut as useMobileSupportGate, w as useExperimentData, xt as resolveControlModel, yt as useControlWorkspace, z as DEFAULT_COLORS, zt as useSortedItems } from "./validation-Dmp9Q5W0.js";
6
6
  import { canAccessByPolicy, hasAllPermissions } from "./permissions.js";
7
7
  import { a as useApi, o as useAuthStore, t as useExperimentStore } from "./experiment-DgllIc3I.js";
8
8
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-Cy3D0Ipg.js";
9
9
  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, provide, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRaw, toRef, unref, useId, useModel, useSlots, useTemplateRef, vModelCheckbox, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
10
10
  import { computePosition, flip, offset, shift } from "@floating-ui/dom";
11
- import { ChevronRight, Download, Ellipsis, Move, Plus, Redo2, RefreshCw, Trash2, Undo2, Upload, X } from "lucide-vue-next";
11
+ import { Check, ChevronRight, Download, Ellipsis, Move, Plus, Redo2, RefreshCw, Trash2, Undo2, Upload, X } from "lucide-vue-next";
12
12
  //#region \0rolldown/runtime.js
13
- var __create = Object.create;
14
13
  var __defProp = Object.defineProperty;
15
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
16
- var __getOwnPropNames = Object.getOwnPropertyNames;
17
- var __getProtoOf = Object.getPrototypeOf;
18
- var __hasOwnProp = Object.prototype.hasOwnProperty;
19
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
20
14
  var __exportAll = (all, no_symbols) => {
21
15
  let target = {};
22
16
  for (var name in all) __defProp(target, name, {
@@ -26,20 +20,6 @@ var __exportAll = (all, no_symbols) => {
26
20
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
27
21
  return target;
28
22
  };
29
- var __copyProps = (to, from, except, desc) => {
30
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
31
- key = keys[i];
32
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
33
- get: ((k) => from[k]).bind(null, key),
34
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
35
- });
36
- }
37
- return to;
38
- };
39
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
40
- value: mod,
41
- enumerable: true
42
- }) : target, mod));
43
23
  //#endregion
44
24
  //#region src/components/SearchableSelect.vue?vue&type=script&setup=true&lang.ts
45
25
  var _hoisted_1$84 = [
@@ -1099,22 +1079,22 @@ var _hoisted_18$22 = {
1099
1079
  key: 0,
1100
1080
  class: "mint-dataframe__state"
1101
1081
  };
1102
- var _hoisted_19$21 = {
1082
+ var _hoisted_19$22 = {
1103
1083
  key: 1,
1104
1084
  class: "mint-dataframe__state"
1105
1085
  };
1106
- var _hoisted_20$20 = {
1086
+ var _hoisted_20$21 = {
1107
1087
  key: 2,
1108
1088
  class: "mint-dataframe__loading"
1109
1089
  };
1110
- var _hoisted_21$18 = {
1090
+ var _hoisted_21$17 = {
1111
1091
  key: 1,
1112
1092
  class: "mint-dataframe__footer"
1113
1093
  };
1114
- var _hoisted_22$18 = { class: "mint-dataframe__page-info" };
1094
+ var _hoisted_22$17 = { class: "mint-dataframe__page-info" };
1115
1095
  var _hoisted_23$15 = { class: "mint-dataframe__page-controls" };
1116
- var _hoisted_24$14 = ["disabled"];
1117
- var _hoisted_25$14 = { class: "mint-dataframe__page-number" };
1096
+ var _hoisted_24$13 = ["disabled"];
1097
+ var _hoisted_25$13 = { class: "mint-dataframe__page-number" };
1118
1098
  var _hoisted_26$11 = ["disabled"];
1119
1099
  /** Inbox glyph kept from the pre-1.2 hand-rolled empty state. */
1120
1100
  var EMPTY_ICON_PATH$2 = "M22 12L16 12L14 15L10 15L8 12L2 12M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z";
@@ -1567,14 +1547,14 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1567
1547
  __props.error ? (openBlock(), createElementBlock("div", _hoisted_18$22, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
1568
1548
  state: "error",
1569
1549
  title: __props.error
1570
- }, null, 8, ["title"])])])) : paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_19$21, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
1550
+ }, null, 8, ["title"])])])) : paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_19$22, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
1571
1551
  state: "empty",
1572
1552
  title: __props.emptyText,
1573
1553
  "icon-path": EMPTY_ICON_PATH$2
1574
1554
  }, null, 8, ["title"])])])) : createCommentVNode("", true),
1575
- __props.loading ? (openBlock(), createElementBlock("div", _hoisted_20$20, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(LoadingSpinner_default, { size: "lg" })])])) : createCommentVNode("", true)
1555
+ __props.loading ? (openBlock(), createElementBlock("div", _hoisted_20$21, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(LoadingSpinner_default, { size: "lg" })])])) : createCommentVNode("", true)
1576
1556
  ], 4),
1577
- __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_21$18, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_22$18, toDisplayString((__props.pagination.page - 1) * __props.pagination.pageSize + 1) + "–" + toDisplayString(Math.min(__props.pagination.page * __props.pagination.pageSize, unref(sortedData).length)) + " of " + toDisplayString(unref(sortedData).length), 1), createElementVNode("div", _hoisted_23$15, [
1557
+ __props.pagination ? (openBlock(), createElementBlock("div", _hoisted_21$17, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_22$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_23$15, [
1578
1558
  createElementVNode("button", {
1579
1559
  type: "button",
1580
1560
  class: "mint-dataframe__page-btn",
@@ -1587,8 +1567,8 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
1587
1567
  "stroke-width": "2",
1588
1568
  "stroke-linecap": "round",
1589
1569
  "stroke-linejoin": "round"
1590
- }, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_24$14),
1591
- createElementVNode("span", _hoisted_25$14, toDisplayString(__props.pagination.page) + " / " + toDisplayString(totalPages.value), 1),
1570
+ }, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_24$13),
1571
+ createElementVNode("span", _hoisted_25$13, toDisplayString(__props.pagination.page) + " / " + toDisplayString(totalPages.value), 1),
1592
1572
  createElementVNode("button", {
1593
1573
  type: "button",
1594
1574
  class: "mint-dataframe__page-btn",
@@ -2077,7 +2057,12 @@ var _hoisted_2$63 = [
2077
2057
  "rel",
2078
2058
  "onClick"
2079
2059
  ];
2080
- var _hoisted_3$55 = ["disabled", "onClick"];
2060
+ var _hoisted_3$55 = [
2061
+ "role",
2062
+ "aria-checked",
2063
+ "disabled",
2064
+ "onClick"
2065
+ ];
2081
2066
  //#endregion
2082
2067
  //#region src/components/ActionMenu.vue
2083
2068
  var ActionMenu_default = /* @__PURE__ */ defineComponent({
@@ -2215,10 +2200,16 @@ var ActionMenu_default = /* @__PURE__ */ defineComponent({
2215
2200
  key: 2,
2216
2201
  type: "button",
2217
2202
  class: normalizeClass(["mint-menu-item mint-action-menu__item", { "mint-menu-item--danger mint-action-menu__item--danger": item.danger }]),
2218
- role: "menuitem",
2203
+ role: item.checked === void 0 ? "menuitem" : "menuitemradio",
2204
+ "aria-checked": item.checked,
2219
2205
  disabled: item.disabled,
2220
2206
  onClick: ($event) => handleSelect(item)
2221
- }, toDisplayString(item.label), 11, _hoisted_3$55))], 64);
2207
+ }, [item.checked !== void 0 ? (openBlock(), createBlock(unref(Check), {
2208
+ key: 0,
2209
+ class: normalizeClass(["mint-action-menu__check", { "mint-action-menu__check--off": !item.checked }]),
2210
+ size: 14,
2211
+ "aria-hidden": "true"
2212
+ }, null, 8, ["class"])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(item.label), 1)], 10, _hoisted_3$55))], 64);
2222
2213
  }), 128))], 36)) : createCommentVNode("", true)]))], 64);
2223
2214
  };
2224
2215
  }
@@ -2875,7 +2866,7 @@ var _hoisted_4$49 = {
2875
2866
  };
2876
2867
  var _hoisted_5$47 = {
2877
2868
  key: 0,
2878
- class: "mint-popover mint-page-selector__menu",
2869
+ class: "mint-page-selector__menu",
2879
2870
  role: "menu"
2880
2871
  };
2881
2872
  var _hoisted_6$42 = {
@@ -2946,40 +2937,27 @@ var AppTopBarPageSelectorInternal_default = /* @__PURE__ */ defineComponent({
2946
2937
  "stroke-linecap": "round",
2947
2938
  "stroke-linejoin": "round"
2948
2939
  }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))])
2949
- ], 10, _hoisted_1$66), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$47, [_cache[3] || (_cache[3] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2940
+ ], 10, _hoisted_1$66), unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_5$47, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-page-selector__menu-title" }, "Go to", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedPages.value, (page) => {
2950
2941
  return openBlock(), createBlock(ActionItemInternal_default, {
2951
2942
  key: page.id,
2952
2943
  href: page.href,
2953
2944
  to: page.to,
2954
2945
  disabled: page.disabled,
2955
2946
  class: normalizeClass([
2956
- "mint-menu-item mint-page-selector__item",
2957
- { "mint-menu-item--selected mint-page-selector__item--active": page.id === current.value?.id },
2947
+ "mint-page-selector__item",
2948
+ { "mint-page-selector__item--active": page.id === current.value?.id },
2958
2949
  { "mint-page-selector__item--disabled": page.disabled }
2959
2950
  ]),
2960
2951
  role: "menuitem",
2961
2952
  onClick: ($event) => handleSelect(page)
2962
2953
  }, {
2963
- default: withCtx(() => [
2964
- createElementVNode("span", { class: normalizeClass(["mint-page-selector__item-icon", { "mint-page-selector__item-icon--metadata": unref(isPluginIconFormat)(page.icon) }]) }, [renderSlot(_ctx.$slots, "item-icon", { page }, () => [unref(isPluginIconFormat)(page.icon) ? (openBlock(), createBlock(PluginIcon_default, {
2965
- key: 0,
2966
- class: "mint-page-selector__metadata-icon",
2967
- icon: page.icon,
2968
- size: "sm",
2969
- variant: "solid"
2970
- }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_6$42, toDisplayString(page.label.charAt(0)), 1))])], 2),
2971
- createElementVNode("span", _hoisted_7$38, toDisplayString(page.label), 1),
2972
- _cache[2] || (_cache[2] = createElementVNode("svg", {
2973
- class: "mint-menu-item__check",
2974
- viewBox: "0 0 16 16",
2975
- fill: "none",
2976
- stroke: "currentColor",
2977
- "stroke-width": "2",
2978
- "stroke-linecap": "round",
2979
- "stroke-linejoin": "round",
2980
- "aria-hidden": "true"
2981
- }, [createElementVNode("path", { d: "M3.5 8.5l3 3 6-7" })], -1))
2982
- ]),
2954
+ default: withCtx(() => [createElementVNode("span", { class: normalizeClass(["mint-page-selector__item-icon", { "mint-page-selector__item-icon--metadata": unref(isPluginIconFormat)(page.icon) }]) }, [renderSlot(_ctx.$slots, "item-icon", { page }, () => [unref(isPluginIconFormat)(page.icon) ? (openBlock(), createBlock(PluginIcon_default, {
2955
+ key: 0,
2956
+ class: "mint-page-selector__metadata-icon",
2957
+ icon: page.icon,
2958
+ size: "sm",
2959
+ variant: "solid"
2960
+ }, null, 8, ["icon"])) : (openBlock(), createElementBlock("span", _hoisted_6$42, toDisplayString(page.label.charAt(0)), 1))])], 2), createElementVNode("span", _hoisted_7$38, toDisplayString(page.label), 1)]),
2983
2961
  _: 2
2984
2962
  }, 1032, [
2985
2963
  "href",
@@ -3490,38 +3468,29 @@ var _hoisted_10$28 = {
3490
3468
  };
3491
3469
  var _hoisted_11$26 = { class: "mint-topbar__plugin-name" };
3492
3470
  var _hoisted_12$24 = {
3493
- key: 0,
3494
- class: "mint-topbar__plugin-version"
3495
- };
3496
- var _hoisted_13$24 = {
3497
- key: 1,
3498
- class: "mint-topbar__divider",
3499
- "aria-hidden": "true"
3500
- };
3501
- var _hoisted_14$24 = {
3502
- key: 3,
3471
+ key: 2,
3503
3472
  class: "mint-topbar-title-group"
3504
3473
  };
3505
- var _hoisted_15$24 = { class: "mint-topbar-title" };
3506
- var _hoisted_16$21 = { class: "mint-topbar-subtitle" };
3507
- var _hoisted_17$21 = {
3508
- key: 4,
3474
+ var _hoisted_13$24 = { class: "mint-topbar-title" };
3475
+ var _hoisted_14$24 = { class: "mint-topbar-subtitle" };
3476
+ var _hoisted_15$24 = {
3477
+ key: 3,
3509
3478
  class: "mint-topbar__title-only"
3510
3479
  };
3511
- var _hoisted_18$21 = {
3512
- key: 5,
3480
+ var _hoisted_16$21 = {
3481
+ key: 4,
3513
3482
  class: "mint-topbar__center"
3514
3483
  };
3515
- var _hoisted_19$20 = { class: "mint-topbar__right" };
3516
- var _hoisted_20$19 = {
3484
+ var _hoisted_17$21 = { class: "mint-topbar__right" };
3485
+ var _hoisted_18$21 = {
3517
3486
  key: 0,
3518
3487
  class: "mint-topbar__standalone-badge"
3519
3488
  };
3520
- var _hoisted_21$17 = {
3489
+ var _hoisted_19$21 = {
3521
3490
  key: 2,
3522
3491
  class: "mint-topbar__standalone-badge"
3523
3492
  };
3524
- var _hoisted_22$17 = {
3493
+ var _hoisted_20$20 = {
3525
3494
  key: 0,
3526
3495
  class: "mint-topbar__icon-btn-dot",
3527
3496
  "aria-hidden": "true"
@@ -3619,8 +3588,8 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3619
3588
  });
3620
3589
  const hasPlatformPageSelector = computed(() => props.pageSelector === void 0 && (plugin.value?.nav_items?.length ?? 0) > 1);
3621
3590
  const hasPageSelector = computed(() => (props.pageSelector?.length ?? 0) > 1 || hasPlatformPageSelector.value);
3622
- /** Integrated plugins show their name + version as a static identity; it stands in for the title. */
3623
- const identityName = computed(() => isIntegrated.value ? plugin.value?.name : void 0);
3591
+ /** Integrated plugins show their name as a static identity in place of the title; the page selector replaces it. */
3592
+ const identityName = computed(() => isIntegrated.value && !hasPageSelector.value ? plugin.value?.display_name || plugin.value?.name : void 0);
3624
3593
  const hasPillNav = computed(() => !!props.pillNav?.length);
3625
3594
  const hasAccountMenu = computed(() => !!props.accountMenu?.length);
3626
3595
  const hasTitleGroup = computed(() => !hasPageSelector.value && !identityName.value && !!props.title && !!props.subtitle);
@@ -3692,10 +3661,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3692
3661
  size: "topbar",
3693
3662
  variant: "solid"
3694
3663
  }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", {}, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_9$30, [..._cache[16] || (_cache[16] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)], void 0, 1)], void 0, 1)])) : createCommentVNode("", true)], 64))]),
3695
- identityName.value ? (openBlock(), createElementBlock("span", _hoisted_10$28, [createElementVNode("span", _hoisted_11$26, toDisplayString(identityName.value), 1), unref(plugin)?.version ? (openBlock(), createElementBlock("span", _hoisted_12$24, "v" + toDisplayString(unref(plugin).version), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3696
- identityName.value && hasPageSelector.value ? (openBlock(), createElementBlock("span", _hoisted_13$24)) : createCommentVNode("", true),
3664
+ identityName.value ? (openBlock(), createElementBlock("span", _hoisted_10$28, [createElementVNode("span", _hoisted_11$26, toDisplayString(identityName.value), 1)])) : createCommentVNode("", true),
3697
3665
  hasPageSelector.value ? (openBlock(), createBlock(AppTopBarPageSelectorInternal_default, {
3698
- key: 2,
3666
+ key: 1,
3699
3667
  pages: normalizedPageSelector.value,
3700
3668
  "current-page-id": effectiveCurrentPageSelectorId.value,
3701
3669
  onSelect: _cache[0] || (_cache[0] = ($event) => emit("page-selector-select", $event))
@@ -3708,23 +3676,23 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3708
3676
  fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "page-selector-item-icon", normalizeProps(guardReactiveProps(slotProps)))]),
3709
3677
  key: "1"
3710
3678
  } : void 0]), 1032, ["pages", "current-page-id"])) : createCommentVNode("", true),
3711
- hasTitleGroup.value ? (openBlock(), createElementBlock("div", _hoisted_14$24, [createElementVNode("span", _hoisted_15$24, toDisplayString(__props.title), 1), createElementVNode("span", _hoisted_16$21, toDisplayString(__props.subtitle), 1)])) : hasTitleOnly.value ? (openBlock(), createElementBlock("span", _hoisted_17$21, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
3679
+ hasTitleGroup.value ? (openBlock(), createElementBlock("div", _hoisted_12$24, [createElementVNode("span", _hoisted_13$24, toDisplayString(__props.title), 1), createElementVNode("span", _hoisted_14$24, toDisplayString(__props.subtitle), 1)])) : hasTitleOnly.value ? (openBlock(), createElementBlock("span", _hoisted_15$24, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
3712
3680
  renderSlot(_ctx.$slots, "nav"),
3713
- hasPillNav.value || _ctx.$slots.center ? (openBlock(), createElementBlock("div", _hoisted_18$21, [renderSlot(_ctx.$slots, "center", {}, () => [hasPillNav.value && __props.pillNav ? (openBlock(), createBlock(AppTopBarPillNavInternal_default, {
3681
+ hasPillNav.value || _ctx.$slots.center ? (openBlock(), createElementBlock("div", _hoisted_16$21, [renderSlot(_ctx.$slots, "center", {}, () => [hasPillNav.value && __props.pillNav ? (openBlock(), createBlock(AppTopBarPillNavInternal_default, {
3714
3682
  key: 0,
3715
3683
  items: normalizedPillNav.value,
3716
3684
  "current-item-id": __props.currentPillId,
3717
3685
  onSelect: _cache[1] || (_cache[1] = ($event) => emit("pill-select", $event)),
3718
3686
  onOptionSelect: _cache[2] || (_cache[2] = (option, item) => emit("pill-option-select", option, item))
3719
3687
  }, null, 8, ["items", "current-item-id"])) : createCommentVNode("", true)])])) : createCommentVNode("", true),
3720
- createElementVNode("div", _hoisted_19$20, [
3721
- __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_20$19, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3688
+ createElementVNode("div", _hoisted_17$21, [
3689
+ __props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_18$21, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3722
3690
  unref(appExperiment) && !isStandalone.value && canBindExperiment.value ? (openBlock(), createBlock(unref(ExperimentPopover), mergeProps({ key: 1 }, unref(appExperiment).popover.value, {
3723
3691
  onSelect: _cache[3] || (_cache[3] = ($event) => unref(appExperiment).openModal()),
3724
3692
  onSave: _cache[4] || (_cache[4] = ($event) => unref(appExperiment).handleSave()),
3725
3693
  onDetach: _cache[5] || (_cache[5] = ($event) => unref(appExperiment).handleDetach())
3726
3694
  }), null, 16)) : createCommentVNode("", true),
3727
- unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_21$17, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3695
+ unref(appExperiment) && isStandalone.value ? (openBlock(), createElementBlock("span", _hoisted_19$21, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
3728
3696
  renderSlot(_ctx.$slots, "actions"),
3729
3697
  __props.showNotifications ? (openBlock(), createElementBlock("button", {
3730
3698
  key: 3,
@@ -3740,7 +3708,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3740
3708
  "stroke-width": "2",
3741
3709
  "stroke-linecap": "round",
3742
3710
  "stroke-linejoin": "round"
3743
- }, [createElementVNode("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }), createElementVNode("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })], -1)), __props.hasNotificationDot ? (openBlock(), createElementBlock("span", _hoisted_22$17)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3711
+ }, [createElementVNode("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }), createElementVNode("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })], -1)), __props.hasNotificationDot ? (openBlock(), createElementBlock("span", _hoisted_20$20)) : createCommentVNode("", true)])) : createCommentVNode("", true),
3744
3712
  __props.showThemeToggle ? (openBlock(), createBlock(ThemeToggle_default, {
3745
3713
  key: 4,
3746
3714
  size: "sm"
@@ -3817,6 +3785,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3817
3785
  title: __props.settingsConfig?.title,
3818
3786
  tabs: normalizedSettingsTabs.value,
3819
3787
  "show-appearance": __props.settingsConfig?.showAppearance ?? true,
3788
+ "appearance-first": __props.settingsConfig?.appearanceFirst,
3820
3789
  size: __props.settingsConfig?.size,
3821
3790
  layout: __props.settingsConfig?.layout,
3822
3791
  schema: __props.settingsConfig?.schema,
@@ -3840,6 +3809,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3840
3809
  "title",
3841
3810
  "tabs",
3842
3811
  "show-appearance",
3812
+ "appearance-first",
3843
3813
  "size",
3844
3814
  "layout",
3845
3815
  "schema",
@@ -4619,13 +4589,13 @@ var _hoisted_17$20 = {
4619
4589
  class: "mint-sidebar__group-subtitle"
4620
4590
  };
4621
4591
  var _hoisted_18$20 = { class: "mint-sidebar__group-tail" };
4622
- var _hoisted_19$19 = [
4592
+ var _hoisted_19$20 = [
4623
4593
  "disabled",
4624
4594
  "aria-label",
4625
4595
  "title",
4626
4596
  "onClick"
4627
4597
  ];
4628
- var _hoisted_20$18 = {
4598
+ var _hoisted_20$19 = {
4629
4599
  key: 0,
4630
4600
  class: "mint-sidebar__group-action-icon",
4631
4601
  viewBox: "0 0 24 24",
@@ -4639,12 +4609,12 @@ var _hoisted_20$18 = {
4639
4609
  var _hoisted_21$16 = ["d"];
4640
4610
  var _hoisted_22$16 = ["d"];
4641
4611
  var _hoisted_23$14 = { key: 1 };
4642
- var _hoisted_24$13 = [
4612
+ var _hoisted_24$12 = [
4643
4613
  "aria-checked",
4644
4614
  "aria-label",
4645
4615
  "onClick"
4646
4616
  ];
4647
- var _hoisted_25$13 = [
4617
+ var _hoisted_25$12 = [
4648
4618
  "aria-label",
4649
4619
  "aria-expanded",
4650
4620
  "onClick"
@@ -4973,7 +4943,7 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4973
4943
  "aria-label": action.label,
4974
4944
  title: action.label,
4975
4945
  onClick: ($event) => handleSectionAction(section.id, action.id)
4976
- }, [action.icon && isSvgIcon(action.icon) ? (openBlock(), createElementBlock("svg", _hoisted_20$18, [Array.isArray(action.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(action.icon, (d, i) => {
4946
+ }, [action.icon && isSvgIcon(action.icon) ? (openBlock(), createElementBlock("svg", _hoisted_20$19, [Array.isArray(action.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(action.icon, (d, i) => {
4977
4947
  return openBlock(), createElementBlock("path", {
4978
4948
  key: i,
4979
4949
  d
@@ -4981,7 +4951,7 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4981
4951
  }), 128)) : (openBlock(), createElementBlock("path", {
4982
4952
  key: 1,
4983
4953
  d: action.icon
4984
- }, null, 8, _hoisted_22$16))])) : action.icon ? (openBlock(), createElementBlock("span", _hoisted_23$14, toDisplayString(action.icon), 1)) : createCommentVNode("", true)], 14, _hoisted_19$19);
4954
+ }, null, 8, _hoisted_22$16))])) : action.icon ? (openBlock(), createElementBlock("span", _hoisted_23$14, toDisplayString(action.icon), 1)) : createCommentVNode("", true)], 14, _hoisted_19$20);
4985
4955
  }), 128)),
4986
4956
  section.showToggle ? (openBlock(), createElementBlock("button", {
4987
4957
  key: 1,
@@ -4991,7 +4961,7 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
4991
4961
  "aria-label": `Enable ${section.label}`,
4992
4962
  class: normalizeClass(["mint-sidebar__switch", __props.toggleState[section.id] ?? false ? "mint-sidebar__switch--on" : ""]),
4993
4963
  onClick: ($event) => emit("update:toggle", section.id, !(__props.toggleState[section.id] ?? false))
4994
- }, [..._cache[1] || (_cache[1] = [createElementVNode("span", { class: "mint-sidebar__switch-knob" }, null, -1)])], 10, _hoisted_24$13)) : createCommentVNode("", true),
4964
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("span", { class: "mint-sidebar__switch-knob" }, null, -1)])], 10, _hoisted_24$12)) : createCommentVNode("", true),
4995
4965
  createElementVNode("button", {
4996
4966
  type: "button",
4997
4967
  class: "mint-sidebar__chevron-button",
@@ -5007,7 +4977,7 @@ var AppSidebar_default = /* @__PURE__ */ defineComponent({
5007
4977
  "stroke-linecap": "round",
5008
4978
  "stroke-linejoin": "round",
5009
4979
  "aria-hidden": "true"
5010
- }, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_25$13)
4980
+ }, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_25$12)
5011
4981
  ])]), createVNode(Transition, { name: "collapse" }, {
5012
4982
  default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_26$10, [renderSlot(_ctx.$slots, `section-${section.id}`, {}, () => [resolvedForms.value[section.id] ? (openBlock(), createBlock(FormBuilder_default, {
5013
4983
  key: 0,
@@ -6068,7 +6038,7 @@ var PlotlyChart_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
6068
6038
  let revision = 0;
6069
6039
  async function loadPlotly() {
6070
6040
  if (props.plotly) return props.plotly;
6071
- const module = await import("./plotly.min-D6Ge6qgX.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
6041
+ const module = await import("plotly.js-dist-min");
6072
6042
  return "default" in module ? module.default : module;
6073
6043
  }
6074
6044
  function bindEvents(element) {
@@ -6476,16 +6446,16 @@ var _hoisted_16$19 = {
6476
6446
  };
6477
6447
  var _hoisted_17$19 = { class: "mint-jobs-tray__job-heading" };
6478
6448
  var _hoisted_18$19 = { class: "mint-jobs-tray__job-identity" };
6479
- var _hoisted_19$18 = ["onClick"];
6480
- var _hoisted_20$17 = { class: "mint-jobs-tray__kind" };
6449
+ var _hoisted_19$19 = ["onClick"];
6450
+ var _hoisted_20$18 = { class: "mint-jobs-tray__kind" };
6481
6451
  var _hoisted_21$15 = {
6482
6452
  key: 0,
6483
6453
  class: "mint-jobs-tray__percent"
6484
6454
  };
6485
6455
  var _hoisted_22$15 = ["aria-valuenow"];
6486
6456
  var _hoisted_23$13 = { class: "mint-jobs-tray__job-footer" };
6487
- var _hoisted_24$12 = { class: "mint-jobs-tray__job-actions" };
6488
- var _hoisted_25$12 = ["disabled", "onClick"];
6457
+ var _hoisted_24$11 = { class: "mint-jobs-tray__job-actions" };
6458
+ var _hoisted_25$11 = ["disabled", "onClick"];
6489
6459
  var _hoisted_26$9 = ["disabled", "onClick"];
6490
6460
  var _hoisted_27$8 = {
6491
6461
  key: 0,
@@ -6724,7 +6694,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
6724
6694
  type: "button",
6725
6695
  class: "mint-jobs-tray__job-select",
6726
6696
  onClick: ($event) => emit("select", job)
6727
- }, toDisplayString(job.name), 9, _hoisted_19$18), createElementVNode("span", _hoisted_20$17, toDisplayString(job.kind), 1)]),
6697
+ }, toDisplayString(job.name), 9, _hoisted_19$19), createElementVNode("span", _hoisted_20$18, toDisplayString(job.kind), 1)]),
6728
6698
  createElementVNode("span", { class: normalizeClass(["mint-jobs-tray__status", statusClass(job)]) }, [_cache[8] || (_cache[8] = createElementVNode("span", {
6729
6699
  class: "mint-jobs-tray__status-dot",
6730
6700
  "aria-hidden": "true"
@@ -6740,7 +6710,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
6740
6710
  "aria-valuemax": "100",
6741
6711
  "aria-valuenow": jobPercent(job)
6742
6712
  }, [createElementVNode("span", { style: normalizeStyle({ width: `${jobPercent(job)}%` }) }, null, 4)], 8, _hoisted_22$15)) : createCommentVNode("", true),
6743
- createElementVNode("div", _hoisted_23$13, [createElementVNode("span", null, toDisplayString(progressText(job)), 1), createElementVNode("div", _hoisted_24$12, [
6713
+ createElementVNode("div", _hoisted_23$13, [createElementVNode("span", null, toDisplayString(progressText(job)), 1), createElementVNode("div", _hoisted_24$11, [
6744
6714
  renderSlot(_ctx.$slots, "job-actions", { job }),
6745
6715
  job.can_cancel && unref(tray).canCancel.value ? (openBlock(), createElementBlock("button", {
6746
6716
  key: 0,
@@ -6749,7 +6719,7 @@ var JobsStatusTray_default = /* @__PURE__ */ defineComponent({
6749
6719
  "aria-label": "Cancel job",
6750
6720
  disabled: unref(tray).isPending(job),
6751
6721
  onClick: ($event) => cancelJob(job)
6752
- }, " Cancel ", 8, _hoisted_25$12)) : createCommentVNode("", true),
6722
+ }, " Cancel ", 8, _hoisted_25$11)) : createCommentVNode("", true),
6753
6723
  job.can_delete && unref(tray).canDelete.value ? (openBlock(), createElementBlock("button", {
6754
6724
  key: 1,
6755
6725
  type: "button",
@@ -7066,8 +7036,8 @@ var _hoisted_15$21 = {
7066
7036
  var _hoisted_16$18 = { class: "mint-dose-calculator__preview-steps" };
7067
7037
  var _hoisted_17$18 = { class: "mint-dose-calculator__preview-step" };
7068
7038
  var _hoisted_18$18 = { class: "mint-dose-calculator__preview-step-num" };
7069
- var _hoisted_19$17 = { class: "mint-dose-calculator__preview-step-conc" };
7070
- var _hoisted_20$16 = {
7039
+ var _hoisted_19$18 = { class: "mint-dose-calculator__preview-step-conc" };
7040
+ var _hoisted_20$17 = {
7071
7041
  key: 0,
7072
7042
  class: "mint-dose-calculator__preview-arrow"
7073
7043
  };
@@ -7084,11 +7054,11 @@ var _hoisted_23$12 = {
7084
7054
  key: 0,
7085
7055
  class: "mint-dose-calculator__error"
7086
7056
  };
7087
- var _hoisted_24$11 = {
7057
+ var _hoisted_24$10 = {
7088
7058
  key: 4,
7089
7059
  class: "mint-dose-calculator__mw-section"
7090
7060
  };
7091
- var _hoisted_25$11 = { class: "mint-dose-calculator__mw-label" };
7061
+ var _hoisted_25$10 = { class: "mint-dose-calculator__mw-label" };
7092
7062
  var _hoisted_26$8 = {
7093
7063
  key: 5,
7094
7064
  class: "mint-dose-calculator__form"
@@ -7334,7 +7304,7 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
7334
7304
  ]),
7335
7305
  _cache[17] || (_cache[17] = createElementVNode("div", { class: "mint-dose-calculator__divider" }, null, -1)),
7336
7306
  serialResult.value?.valid ? (openBlock(), createElementBlock("div", _hoisted_15$21, [_cache[16] || (_cache[16] = createElementVNode("div", { class: "mint-dose-calculator__preview-title" }, "Preview", -1)), createElementVNode("div", _hoisted_16$18, [(openBlock(true), createElementBlock(Fragment, null, renderList(serialResult.value.steps, (step, index) => {
7337
- return openBlock(), createElementBlock(Fragment, { key: step.stepNumber }, [createElementVNode("div", _hoisted_17$18, [createElementVNode("span", _hoisted_18$18, toDisplayString(step.stepNumber) + ":", 1), createElementVNode("span", _hoisted_19$17, toDisplayString(unref(formatWithUnit)(step.concentration, 3)), 1)]), index < serialResult.value.steps.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_20$16, " → ")) : createCommentVNode("", true)], 64);
7307
+ return openBlock(), createElementBlock(Fragment, { key: step.stepNumber }, [createElementVNode("div", _hoisted_17$18, [createElementVNode("span", _hoisted_18$18, toDisplayString(step.stepNumber) + ":", 1), createElementVNode("span", _hoisted_19$18, toDisplayString(unref(formatWithUnit)(step.concentration, 3)), 1)]), index < serialResult.value.steps.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_20$17, " → ")) : createCommentVNode("", true)], 64);
7338
7308
  }), 128))])])) : serialResult.value?.error ? (openBlock(), createElementBlock("div", _hoisted_21$14, toDisplayString(serialResult.value.error), 1)) : createCommentVNode("", true)
7339
7309
  ])) : activeMode.value === "conversion" ? (openBlock(), createElementBlock("div", _hoisted_22$14, [createVNode(FormField_default, { label: "Input Concentration" }, {
7340
7310
  default: withCtx(() => [createVNode(ConcentrationInput_default, {
@@ -7345,7 +7315,7 @@ var DoseCalculator_default = /* @__PURE__ */ defineComponent({
7345
7315
  }, null, 8, ["disabled", "molecular-weight"])]),
7346
7316
  _: 1
7347
7317
  }), !__props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_23$12, " Provide molecular weight for mass ↔ molarity conversion ")) : createCommentVNode("", true)])) : createCommentVNode("", true),
7348
- __props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_24$11, [createElementVNode("span", _hoisted_25$11, " Molecular Weight: " + toDisplayString(__props.molecularWeight) + " g/mol ", 1)])) : createCommentVNode("", true),
7318
+ __props.molecularWeight ? (openBlock(), createElementBlock("div", _hoisted_24$10, [createElementVNode("span", _hoisted_25$10, " Molecular Weight: " + toDisplayString(__props.molecularWeight) + " g/mol ", 1)])) : createCommentVNode("", true),
7349
7319
  hasTargetWells.value ? (openBlock(), createElementBlock("div", _hoisted_26$8, [createVNode(BaseButton_default, {
7350
7320
  variant: "primary",
7351
7321
  "full-width": "",
@@ -7432,11 +7402,11 @@ var _hoisted_16$17 = {
7432
7402
  };
7433
7403
  var _hoisted_17$17 = ["onClick"];
7434
7404
  var _hoisted_18$17 = ["aria-label", "onClick"];
7435
- var _hoisted_19$16 = {
7405
+ var _hoisted_19$17 = {
7436
7406
  key: 2,
7437
7407
  class: "mint-timeline__spacer--vertical"
7438
7408
  };
7439
- var _hoisted_20$15 = {
7409
+ var _hoisted_20$16 = {
7440
7410
  key: 3,
7441
7411
  class: "mint-timeline__spacer--horizontal"
7442
7412
  };
@@ -7744,8 +7714,8 @@ var ExperimentTimeline_default = /* @__PURE__ */ defineComponent({
7744
7714
  "stroke-width": "2",
7745
7715
  d: "M12 4v16m8-8H4"
7746
7716
  })], -1)])], 8, _hoisted_18$17)) : createCommentVNode("", true),
7747
- __props.orientation === "vertical" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_19$16)) : createCommentVNode("", true),
7748
- __props.orientation === "horizontal" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_20$15)) : createCommentVNode("", true)
7717
+ __props.orientation === "vertical" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_19$17)) : createCommentVNode("", true),
7718
+ __props.orientation === "horizontal" && index < sortedSteps.value.length - 1 ? (openBlock(), createElementBlock("div", _hoisted_20$16)) : createCommentVNode("", true)
7749
7719
  ], 40, _hoisted_2$44);
7750
7720
  }), 128)),
7751
7721
  __props.error ? (openBlock(), createElementBlock("div", _hoisted_21$13, [renderSlot(_ctx.$slots, "error", { error: __props.error }, () => [createVNode(DataStateInternal_default, {
@@ -7850,22 +7820,22 @@ var DEFAULT_WELL_LEGEND_ITEMS = [
7850
7820
  {
7851
7821
  type: "sample",
7852
7822
  label: "Sample",
7853
- color: "var(--mint-sample-1)"
7823
+ color: "#10b981"
7854
7824
  },
7855
7825
  {
7856
7826
  type: "blank",
7857
7827
  label: "Blank",
7858
- color: "var(--mint-sample-1)"
7828
+ color: "#f97316"
7859
7829
  },
7860
7830
  {
7861
7831
  type: "qc",
7862
7832
  label: "QC",
7863
- color: "var(--mint-sample-1)"
7833
+ color: "#8b5cf6"
7864
7834
  },
7865
7835
  {
7866
7836
  type: "iqc",
7867
7837
  label: "IQC",
7868
- color: "var(--mint-sample-1)"
7838
+ color: "#ec4899"
7869
7839
  }
7870
7840
  ];
7871
7841
  //#endregion
@@ -7906,17 +7876,13 @@ function sampleTypeMarker(type, groupColor) {
7906
7876
  }
7907
7877
  //#endregion
7908
7878
  //#region src/components/WellPlate.colors.ts
7909
- /**
7910
- * Group color for the built-in sample types when `sampleColors` has no entry.
7911
- * Color encodes the group and shape encodes the type (3a): blank and QC render
7912
- * neutral markers and ignore it; iQC takes it like a sample.
7913
- */
7879
+ /** Color for the built-in sample types when `sampleColors` has no entry. */
7914
7880
  var DEFAULT_SAMPLE_TYPE_COLORS = {
7915
- sample: "var(--mint-sample-1)",
7916
- control: "var(--mint-sample-2)",
7917
- blank: "var(--mint-sample-1)",
7918
- qc: "var(--mint-sample-1)",
7919
- iqc: "var(--mint-sample-1)"
7881
+ sample: "#10b981",
7882
+ control: "#3b82f6",
7883
+ blank: "#f97316",
7884
+ qc: "#8b5cf6",
7885
+ iqc: "#ec4899"
7920
7886
  };
7921
7887
  var HEATMAP_COLORS = {
7922
7888
  viridis: [
@@ -8719,16 +8685,15 @@ function wellStyle(well, state) {
8719
8685
  };
8720
8686
  const groupColor = well.sampleType && ((well.group ? state.sampleColors[well.group] : void 0) ?? state.sampleColors[well.sampleType] ?? DEFAULT_SAMPLE_TYPE_COLORS[well.sampleType]);
8721
8687
  if (!groupColor) return {};
8722
- const { background, border } = sampleTypeMarker(well.sampleType, groupColor).style;
8688
+ return sampleTint(groupColor);
8689
+ }
8690
+ /** 15% fill and 40% outline of a sample color; color-mix accepts hex and `var()` tokens alike. */
8691
+ function sampleTint(color) {
8723
8692
  return {
8724
- backgroundColor: background,
8725
- border
8693
+ backgroundColor: `color-mix(in srgb, ${color} 15%, transparent)`,
8694
+ border: `1px solid color-mix(in srgb, ${color} 40%, transparent)`
8726
8695
  };
8727
8696
  }
8728
- /** In-well glyph of the 3a sample-type marker: `Q` for QC, `i` for iQC. */
8729
- function sampleTypeGlyph(well) {
8730
- return well.sampleType ? sampleTypeMarker(well.sampleType, "").glyph : null;
8731
- }
8732
8697
  var sampleTypeIndicatorWarned = false;
8733
8698
  /** One dev-only warning per page for the no-op `showSampleTypeIndicator` prop. */
8734
8699
  function warnSampleTypeIndicatorDeprecated() {
@@ -8746,11 +8711,11 @@ function wellBadge(well, showBadges) {
8746
8711
  const count = well.metadata.injectionCount;
8747
8712
  if (count && count > 1) return {
8748
8713
  text: String(count),
8749
- color: "var(--text-primary)"
8714
+ color: "#6366f1"
8750
8715
  };
8751
8716
  if (well.metadata.customMethod) return {
8752
- text: "",
8753
- color: "var(--color-purple)"
8717
+ text: "+",
8718
+ color: "#ec4899"
8754
8719
  };
8755
8720
  return null;
8756
8721
  }
@@ -8807,27 +8772,19 @@ var _hoisted_16$16 = {
8807
8772
  key: 1,
8808
8773
  class: "mint-well-plate__well-id"
8809
8774
  };
8810
- var _hoisted_17$16 = {
8811
- key: 2,
8812
- class: "mint-well-plate__indicator"
8813
- };
8775
+ var _hoisted_17$16 = ["title"];
8814
8776
  var _hoisted_18$16 = {
8815
- key: 3,
8816
- class: "mint-well-plate__corner-glyph"
8817
- };
8818
- var _hoisted_19$15 = ["title"];
8819
- var _hoisted_20$14 = {
8820
8777
  key: 0,
8821
8778
  class: "mint-well-plate__legend"
8822
8779
  };
8780
+ var _hoisted_19$16 = { class: "mint-well-plate__legend-label" };
8781
+ var _hoisted_20$15 = { class: "mint-well-plate__legend-bar" };
8823
8782
  var _hoisted_21$12 = { class: "mint-well-plate__legend-label" };
8824
- var _hoisted_22$12 = { class: "mint-well-plate__legend-bar" };
8825
- var _hoisted_23$10 = { class: "mint-well-plate__legend-label" };
8826
- var _hoisted_24$10 = {
8783
+ var _hoisted_22$12 = {
8827
8784
  key: 1,
8828
8785
  class: "mint-well-plate__sample-legend"
8829
8786
  };
8830
- var _hoisted_25$10 = { class: "mint-well-plate__sample-legend-text" };
8787
+ var _hoisted_23$10 = { class: "mint-well-plate__sample-legend-text" };
8831
8788
  //#endregion
8832
8789
  //#region src/components/WellPlate.vue
8833
8790
  var WellPlate_default = /* @__PURE__ */ defineComponent({
@@ -9159,42 +9116,35 @@ var WellPlate_default = /* @__PURE__ */ defineComponent({
9159
9116
  "prevent"
9160
9117
  ]), ["space"])
9161
9118
  ]
9162
- }, [
9163
- getWellLabel(well) ? (openBlock(), createElementBlock("span", _hoisted_15$19, toDisplayString(getWellLabel(well)), 1)) : props.showWellIds ? (openBlock(), createElementBlock("span", _hoisted_16$16, toDisplayString(well.id), 1)) : unref(sampleTypeGlyph)(well) ? (openBlock(), createElementBlock("span", _hoisted_17$16, toDisplayString(unref(sampleTypeGlyph)(well)), 1)) : createCommentVNode("", true),
9164
- unref(sampleTypeGlyph)(well) && (getWellLabel(well) || props.showWellIds) ? (openBlock(), createElementBlock("span", _hoisted_18$16, toDisplayString(unref(sampleTypeGlyph)(well)), 1)) : createCommentVNode("", true),
9165
- getWellBadge(well) ? (openBlock(), createElementBlock("span", {
9166
- key: 4,
9167
- class: normalizeClass(["mint-well-plate__badge", { "mint-well-plate__badge--dot": !getWellBadge(well)?.text }]),
9168
- style: normalizeStyle({ backgroundColor: getWellBadge(well)?.color }),
9169
- title: getWellBadge(well)?.text ? `${getWellBadge(well)?.text}x injections` : "Custom method"
9170
- }, toDisplayString(getWellBadge(well)?.text), 15, _hoisted_19$15)) : createCommentVNode("", true)
9171
- ], 46, _hoisted_14$19)]);
9119
+ }, [getWellLabel(well) ? (openBlock(), createElementBlock("span", _hoisted_15$19, toDisplayString(getWellLabel(well)), 1)) : props.showWellIds ? (openBlock(), createElementBlock("span", _hoisted_16$16, toDisplayString(well.id), 1)) : createCommentVNode("", true), getWellBadge(well) ? (openBlock(), createElementBlock("span", {
9120
+ key: 2,
9121
+ class: "mint-well-plate__badge",
9122
+ style: normalizeStyle({ backgroundColor: getWellBadge(well)?.color }),
9123
+ title: getWellBadge(well)?.text === "+" ? "Custom method" : `${getWellBadge(well)?.text ?? ""}x injections`
9124
+ }, toDisplayString(getWellBadge(well)?.text), 13, _hoisted_17$16)) : createCommentVNode("", true)], 46, _hoisted_14$19)]);
9172
9125
  }), 128))
9173
9126
  ]);
9174
9127
  }), 128))])
9175
9128
  ], 12, _hoisted_6$29),
9176
- props.heatmap?.enabled && props.heatmap.showLegend ? (openBlock(), createElementBlock("div", _hoisted_20$14, [
9177
- createElementVNode("span", _hoisted_21$12, toDisplayString(props.heatmap.min ?? 0), 1),
9178
- createElementVNode("div", _hoisted_22$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.heatmap.colorScale === "custom" && props.heatmap.customColors?.length ? props.heatmap.customColors : unref(HEATMAP_COLORS)[props.heatmap.colorScale || "viridis"], (color, index) => {
9129
+ props.heatmap?.enabled && props.heatmap.showLegend ? (openBlock(), createElementBlock("div", _hoisted_18$16, [
9130
+ createElementVNode("span", _hoisted_19$16, toDisplayString(props.heatmap.min ?? 0), 1),
9131
+ createElementVNode("div", _hoisted_20$15, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.heatmap.colorScale === "custom" && props.heatmap.customColors?.length ? props.heatmap.customColors : unref(HEATMAP_COLORS)[props.heatmap.colorScale || "viridis"], (color, index) => {
9179
9132
  return openBlock(), createElementBlock("div", {
9180
9133
  key: index,
9181
9134
  class: "mint-well-plate__legend-segment",
9182
9135
  style: normalizeStyle({ backgroundColor: color })
9183
9136
  }, null, 4);
9184
9137
  }), 128))]),
9185
- createElementVNode("span", _hoisted_23$10, toDisplayString(props.heatmap.max ?? 1), 1)
9138
+ createElementVNode("span", _hoisted_21$12, toDisplayString(props.heatmap.max ?? 1), 1)
9186
9139
  ])) : createCommentVNode("", true),
9187
- props.showLegend ? (openBlock(), createElementBlock("div", _hoisted_24$10, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeLegendItems.value, (item) => {
9140
+ props.showLegend ? (openBlock(), createElementBlock("div", _hoisted_22$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeLegendItems.value, (item) => {
9188
9141
  return openBlock(), createElementBlock("div", {
9189
9142
  key: item.type,
9190
9143
  class: "mint-well-plate__sample-legend-item"
9191
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList([unref(sampleTypeMarker)(item.type, item.color)], (marker) => {
9192
- return openBlock(), createElementBlock("span", {
9193
- key: item.type,
9194
- class: "mint-well-plate__sample-legend-dot",
9195
- style: normalizeStyle(marker.style)
9196
- }, toDisplayString(marker.glyph), 5);
9197
- }), 128)), createElementVNode("span", _hoisted_25$10, toDisplayString(item.label), 1)]);
9144
+ }, [createElementVNode("span", {
9145
+ class: "mint-well-plate__sample-legend-dot",
9146
+ style: normalizeStyle(unref(sampleTint)(item.color))
9147
+ }, null, 4), createElementVNode("span", _hoisted_23$10, toDisplayString(item.label), 1)]);
9198
9148
  }), 128))])) : createCommentVNode("", true)
9199
9149
  ])])),
9200
9150
  __props.editable && unref(editingWellId) ? renderSlot(_ctx.$slots, "well-editor", {
@@ -9391,11 +9341,11 @@ var _hoisted_15$18 = { class: "mint-plate-editor__toolbar-end" };
9391
9341
  var _hoisted_16$15 = ["disabled", "title"];
9392
9342
  var _hoisted_17$15 = ["aria-pressed"];
9393
9343
  var _hoisted_18$15 = ["disabled"];
9394
- var _hoisted_19$14 = {
9344
+ var _hoisted_19$15 = {
9395
9345
  key: 1,
9396
9346
  class: "mint-plate-editor__body"
9397
9347
  };
9398
- var _hoisted_20$13 = { class: "mint-plate-editor__main" };
9348
+ var _hoisted_20$14 = { class: "mint-plate-editor__main" };
9399
9349
  var _hoisted_21$11 = {
9400
9350
  key: 0,
9401
9351
  class: "mint-plate-editor__footer"
@@ -9974,7 +9924,7 @@ var PlateEditor_default = /* @__PURE__ */ defineComponent({
9974
9924
  renderSlot(_ctx.$slots, "toolbar-extra")
9975
9925
  ])
9976
9926
  ])) : createCommentVNode("", true),
9977
- activeRack.value ? (openBlock(), createElementBlock("div", _hoisted_19$14, [createElementVNode("div", _hoisted_20$13, [(openBlock(), createBlock(WellPlate_default, {
9927
+ activeRack.value ? (openBlock(), createElementBlock("div", _hoisted_19$15, [createElementVNode("div", _hoisted_20$14, [(openBlock(), createBlock(WellPlate_default, {
9978
9928
  key: activeRack.value.id,
9979
9929
  "model-value": selection.value,
9980
9930
  format: activeRack.value.format,
@@ -10339,11 +10289,11 @@ var _hoisted_18$14 = {
10339
10289
  key: 4,
10340
10290
  class: "mint-reagent-list__cell"
10341
10291
  };
10342
- var _hoisted_19$13 = {
10292
+ var _hoisted_19$14 = {
10343
10293
  key: 0,
10344
10294
  class: "mint-reagent-list__expired-text"
10345
10295
  };
10346
- var _hoisted_20$12 = { key: 1 };
10296
+ var _hoisted_20$13 = { key: 1 };
10347
10297
  var _hoisted_21$10 = {
10348
10298
  key: 2,
10349
10299
  class: "mint-reagent-list__badge mint-reagent-list__badge--error"
@@ -10639,7 +10589,7 @@ var ReagentList_default = /* @__PURE__ */ defineComponent({
10639
10589
  }, toDisplayString(reagent.name), 9, _hoisted_14$17)) : (openBlock(), createElementBlock("span", _hoisted_15$17, toDisplayString(reagent.name), 1))])) : createCommentVNode("", true),
10640
10590
  __props.columns.includes("catalog") ? (openBlock(), createElementBlock("td", _hoisted_16$14, toDisplayString(reagent.catalogNumber || "-"), 1)) : createCommentVNode("", true),
10641
10591
  __props.columns.includes("lot") ? (openBlock(), createElementBlock("td", _hoisted_17$14, toDisplayString(reagent.lotNumber || "-"), 1)) : createCommentVNode("", true),
10642
- __props.columns.includes("expiry") ? (openBlock(), createElementBlock("td", _hoisted_18$14, [unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_19$13, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)) : (openBlock(), createElementBlock("span", _hoisted_20$12, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)), unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_21$10, " Expired ")) : unref(isReagentExpiringSoon)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_22$10, [_cache[6] || (_cache[6] = createElementVNode("svg", {
10592
+ __props.columns.includes("expiry") ? (openBlock(), createElementBlock("td", _hoisted_18$14, [unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_19$14, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)) : (openBlock(), createElementBlock("span", _hoisted_20$13, toDisplayString(unref(formatReagentExpiryDate)(reagent.expiryDate)), 1)), unref(isReagentExpired)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_21$10, " Expired ")) : unref(isReagentExpiringSoon)(reagent) ? (openBlock(), createElementBlock("span", _hoisted_22$10, [_cache[6] || (_cache[6] = createElementVNode("svg", {
10643
10593
  class: "mint-reagent-list__badge-icon",
10644
10594
  fill: "none",
10645
10595
  stroke: "currentColor",
@@ -10832,12 +10782,12 @@ var _hoisted_17$13 = {
10832
10782
  class: "sg-field__order"
10833
10783
  };
10834
10784
  var _hoisted_18$13 = { class: "sg-field__layer" };
10835
- var _hoisted_19$12 = [
10785
+ var _hoisted_19$13 = [
10836
10786
  "disabled",
10837
10787
  "aria-label",
10838
10788
  "onClick"
10839
10789
  ];
10840
- var _hoisted_20$11 = [
10790
+ var _hoisted_20$12 = [
10841
10791
  "disabled",
10842
10792
  "aria-label",
10843
10793
  "onClick"
@@ -11256,7 +11206,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
11256
11206
  }, [createVNode(Icon, {
11257
11207
  d: ICON.chevUp,
11258
11208
  size: 12
11259
- }, null, 8, ["d"])], 8, _hoisted_19$12),
11209
+ }, null, 8, ["d"])], 8, _hoisted_19$13),
11260
11210
  createElementVNode("button", {
11261
11211
  type: "button",
11262
11212
  class: "sg-field__order-btn",
@@ -11267,7 +11217,7 @@ var SmartGroupFieldRecipe_default = /* @__PURE__ */ defineComponent({
11267
11217
  }, [createVNode(Icon, {
11268
11218
  d: ICON.chev,
11269
11219
  size: 12
11270
- }, null, 8, ["d"])], 8, _hoisted_20$11)
11220
+ }, null, 8, ["d"])], 8, _hoisted_20$12)
11271
11221
  ])) : createCommentVNode("", true),
11272
11222
  createElementVNode("div", _hoisted_21$9, toDisplayString(field.vals), 1)
11273
11223
  ], 2);
@@ -11445,11 +11395,11 @@ var _hoisted_15$15 = {
11445
11395
  var _hoisted_16$12 = ["onClick"];
11446
11396
  var _hoisted_17$12 = ["checked"];
11447
11397
  var _hoisted_18$12 = { class: "mg2-row__name" };
11448
- var _hoisted_19$11 = {
11398
+ var _hoisted_19$12 = {
11449
11399
  key: 0,
11450
11400
  class: "mg2-row__tag"
11451
11401
  };
11452
- var _hoisted_20$10 = {
11402
+ var _hoisted_20$11 = {
11453
11403
  key: 1,
11454
11404
  class: "mg2-row__tag mg2-row__tag--none"
11455
11405
  };
@@ -11777,14 +11727,14 @@ var SmartGroupManual_default = /* @__PURE__ */ defineComponent({
11777
11727
  readonly: ""
11778
11728
  }, null, 8, _hoisted_17$12),
11779
11729
  createElementVNode("span", _hoisted_18$12, toDisplayString(match.sample.name), 1),
11780
- match.sample.group ? (openBlock(), createElementBlock("span", _hoisted_19$11, [
11730
+ match.sample.group ? (openBlock(), createElementBlock("span", _hoisted_19$12, [
11781
11731
  createElementVNode("span", {
11782
11732
  class: "sg-dot",
11783
11733
  style: normalizeStyle({ background: match.sample.color ?? void 0 })
11784
11734
  }, null, 4),
11785
11735
  createTextVNode(toDisplayString(match.sample.group), 1),
11786
11736
  match.sample.sub ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" · " + toDisplayString(match.sample.sub), 1)], 64)) : createCommentVNode("", true)
11787
- ])) : (openBlock(), createElementBlock("span", _hoisted_20$10, "unassigned"))
11737
+ ])) : (openBlock(), createElementBlock("span", _hoisted_20$11, "unassigned"))
11788
11738
  ], 10, _hoisted_16$12);
11789
11739
  }), 128))])
11790
11740
  ]), createElementVNode("div", _hoisted_21$8, [
@@ -12995,8 +12945,8 @@ var _hoisted_17$11 = {
12995
12945
  class: "mint-sample-selector__ungrouped-list"
12996
12946
  };
12997
12947
  var _hoisted_18$11 = { class: "mint-sample-selector__new-group" };
12998
- var _hoisted_19$10 = ["value"];
12999
- var _hoisted_20$9 = {
12948
+ var _hoisted_19$11 = ["value"];
12949
+ var _hoisted_20$10 = {
13000
12950
  key: 6,
13001
12951
  class: "mint-sample-selector__flat"
13002
12952
  };
@@ -13358,9 +13308,9 @@ var SampleSelector_default = /* @__PURE__ */ defineComponent({
13358
13308
  class: "mint-sample-selector__color-input",
13359
13309
  value: colorPickerSeed.value,
13360
13310
  onChange: handleColorChange
13361
- }, null, 40, _hoisted_19$10)
13311
+ }, null, 40, _hoisted_19$11)
13362
13312
  ])) : createCommentVNode("", true),
13363
- !isPlaceholderState.value && !groupingEnabled.value ? (openBlock(), createElementBlock("div", _hoisted_20$9, [createElementVNode("div", _hoisted_21$7, [_cache[17] || (_cache[17] = createElementVNode("svg", {
13313
+ !isPlaceholderState.value && !groupingEnabled.value ? (openBlock(), createElementBlock("div", _hoisted_20$10, [createElementVNode("div", _hoisted_21$7, [_cache[17] || (_cache[17] = createElementVNode("svg", {
13364
13314
  class: "mint-sample-selector__search-icon",
13365
13315
  fill: "none",
13366
13316
  stroke: "currentColor",
@@ -13659,8 +13609,8 @@ var _hoisted_15$13 = [
13659
13609
  var _hoisted_16$10 = ["onPointerdown"];
13660
13610
  var _hoisted_17$10 = { class: "mint-schedule__event-title" };
13661
13611
  var _hoisted_18$10 = { class: "mint-schedule__event-time" };
13662
- var _hoisted_19$9 = ["onPointerdown"];
13663
- var _hoisted_20$8 = {
13612
+ var _hoisted_19$10 = ["onPointerdown"];
13613
+ var _hoisted_20$9 = {
13664
13614
  key: 0,
13665
13615
  class: "mint-schedule__blocked-label"
13666
13616
  };
@@ -14015,7 +13965,7 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
14015
13965
  key: 1,
14016
13966
  class: "mint-schedule__event-resize-handle mint-schedule__event-resize-handle--bottom",
14017
13967
  onPointerdown: ($event) => onResizePointerDown(event, "bottom", dayIdx, $event)
14018
- }, null, 40, _hoisted_19$9)) : createCommentVNode("", true)
13968
+ }, null, 40, _hoisted_19$10)) : createCommentVNode("", true)
14019
13969
  ])], 46, _hoisted_15$13);
14020
13970
  }), 128)),
14021
13971
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getBlockedForDay)(day), (blocked, bIdx) => {
@@ -14023,7 +13973,7 @@ var ScheduleCalendar_default = /* @__PURE__ */ defineComponent({
14023
13973
  key: `b-${bIdx}`,
14024
13974
  class: "mint-schedule__blocked",
14025
13975
  style: normalizeStyle(unref(getBlockedStyle)(blocked))
14026
- }, [blocked.label ? (openBlock(), createElementBlock("span", _hoisted_20$8, toDisplayString(blocked.label), 1)) : createCommentVNode("", true)], 4);
13976
+ }, [blocked.label ? (openBlock(), createElementBlock("span", _hoisted_20$9, toDisplayString(blocked.label), 1)) : createCommentVNode("", true)], 4);
14027
13977
  }), 128)),
14028
13978
  __props.showNowIndicator && unref(isToday)(day) && unref(getNowIndicatorStyle)() ? (openBlock(), createElementBlock("div", {
14029
13979
  key: 0,
@@ -15287,8 +15237,9 @@ function settingsGroupToTab(group) {
15287
15237
  function normalizeVisibleSettingsTabs(tabs, canShow) {
15288
15238
  return tabs.map(normalizeItemInput).filter(canShow);
15289
15239
  }
15290
- function buildSettingsTabs(baseTabs, showAppearance) {
15291
- return showAppearance ? [...baseTabs, APPEARANCE_TAB] : baseTabs;
15240
+ function buildSettingsTabs(baseTabs, showAppearance, appearanceFirst = false) {
15241
+ if (!showAppearance) return baseTabs;
15242
+ return appearanceFirst ? [APPEARANCE_TAB, ...baseTabs] : [...baseTabs, APPEARANCE_TAB];
15292
15243
  }
15293
15244
  //#endregion
15294
15245
  //#region src/components/SettingsModal.vue?vue&type=script&setup=true&lang.ts
@@ -15331,8 +15282,8 @@ var _hoisted_18$9 = {
15331
15282
  class: "mint-settings-modal__swatches",
15332
15283
  "aria-hidden": "true"
15333
15284
  };
15334
- var _hoisted_19$8 = { class: "mint-settings-modal__palette-name" };
15335
- var _hoisted_20$7 = { class: "mint-settings-modal__setting mint-settings-modal__setting--inline" };
15285
+ var _hoisted_19$9 = { class: "mint-settings-modal__palette-name" };
15286
+ var _hoisted_20$8 = { class: "mint-settings-modal__setting mint-settings-modal__setting--inline" };
15336
15287
  var _hoisted_21$5 = {
15337
15288
  class: "mint-settings-modal__status",
15338
15289
  role: "status"
@@ -15359,6 +15310,7 @@ var SettingsModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
15359
15310
  type: Boolean,
15360
15311
  default: true
15361
15312
  },
15313
+ appearanceFirst: { type: Boolean },
15362
15314
  size: { default: "lg" },
15363
15315
  layout: { default: void 0 },
15364
15316
  schema: {},
@@ -15462,7 +15414,7 @@ var SettingsModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
15462
15414
  const visibleSchemaGroups = computed(() => settingsSchema.value ? settingsSchema.value.groups.filter((g) => builder.isSectionVisible(g.id)) : []);
15463
15415
  const manualTabs = computed(() => normalizeVisibleSettingsTabs(props.tabs, canShowForCurrentUser));
15464
15416
  const allTabs = computed(() => {
15465
- return buildSettingsTabs(settingsSchema.value ? visibleSchemaGroups.value.map(settingsGroupToTab) : manualTabs.value, props.showAppearance);
15417
+ return buildSettingsTabs(settingsSchema.value ? visibleSchemaGroups.value.map(settingsGroupToTab) : manualTabs.value, props.showAppearance, props.appearanceFirst);
15466
15418
  });
15467
15419
  const activeTab = ref(allTabs.value[0]?.id || "appearance");
15468
15420
  /** Above this many plugin groups the default layout switches from one stacked page to the rail. */
@@ -15485,7 +15437,7 @@ var SettingsModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
15485
15437
  icon: tab.icon,
15486
15438
  description: tab.description,
15487
15439
  meta: group ? modified ? String(modified) : void 0 : tab.meta,
15488
- section: props.showAppearance ? tab.id === "appearance" ? "Personal" : "Plugin" : void 0
15440
+ section: props.showAppearance ? tab.id === "appearance" ? "Personal" : tab.section ?? "Plugin" : void 0
15489
15441
  };
15490
15442
  }));
15491
15443
  function selectTab(id) {
@@ -15786,7 +15738,7 @@ var SettingsModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
15786
15738
  style: normalizeStyle({ backgroundColor: color })
15787
15739
  }, null, 4);
15788
15740
  }), 128))]),
15789
- createElementVNode("span", _hoisted_19$8, toDisplayString(palette.name), 1),
15741
+ createElementVNode("span", _hoisted_19$9, toDisplayString(palette.name), 1),
15790
15742
  _cache[9] || (_cache[9] = createElementVNode("svg", {
15791
15743
  class: "mint-settings-modal__palette-check",
15792
15744
  viewBox: "0 0 16 16",
@@ -15799,7 +15751,7 @@ var SettingsModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
15799
15751
  }, [createElementVNode("path", { d: "M3.5 8.5l3 3 6-7" })], -1))
15800
15752
  ], 10, _hoisted_17$9);
15801
15753
  }), 128))])]),
15802
- createElementVNode("div", _hoisted_20$7, [
15754
+ createElementVNode("div", _hoisted_20$8, [
15803
15755
  _cache[12] || (_cache[12] = createElementVNode("div", { class: "mint-settings-modal__setting-text" }, [createElementVNode("span", { class: "mint-settings-modal__setting-label" }, "Table density"), createElementVNode("span", { class: "mint-settings-modal__setting-hint" }, "Adjusts row height in data tables")], -1)),
15804
15756
  createVNode(SegmentedControl_default, {
15805
15757
  "model-value": unref(settings).tableDensity,
@@ -16601,8 +16553,8 @@ var _hoisted_16$8 = [
16601
16553
  ];
16602
16554
  var _hoisted_17$8 = { class: "mint-group-assigner__pill-name" };
16603
16555
  var _hoisted_18$8 = { class: "mint-group-assigner__pill-count" };
16604
- var _hoisted_19$7 = ["onClick"];
16605
- var _hoisted_20$6 = {
16556
+ var _hoisted_19$8 = ["onClick"];
16557
+ var _hoisted_20$7 = {
16606
16558
  key: 0,
16607
16559
  class: "mint-group-assigner__zone-empty"
16608
16560
  };
@@ -16815,9 +16767,9 @@ var GroupAssigner_default = /* @__PURE__ */ defineComponent({
16815
16767
  fill: "none",
16816
16768
  stroke: "currentColor",
16817
16769
  "stroke-width": "2"
16818
- }, [createElementVNode("path", { d: "M6 18L18 6M6 6l12 12" })], -1)])], 8, _hoisted_19$7)
16770
+ }, [createElementVNode("path", { d: "M6 18L18 6M6 6l12 12" })], -1)])], 8, _hoisted_19$8)
16819
16771
  ], 40, _hoisted_16$8);
16820
- }), 128)), unref(zone2Groups).length === 0 ? (openBlock(), createElementBlock("div", _hoisted_20$6, " Drag groups here ")) : createCommentVNode("", true)])], 38)]),
16772
+ }), 128)), unref(zone2Groups).length === 0 ? (openBlock(), createElementBlock("div", _hoisted_20$7, " Drag groups here ")) : createCommentVNode("", true)])], 38)]),
16821
16773
  unref(unassignedGroups).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_21$4, [createElementVNode("div", _hoisted_22$4, [_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", {
16822
16774
  key: 0,
16823
16775
  type: "button",
@@ -16956,8 +16908,8 @@ var _hoisted_15$10 = ["value"];
16956
16908
  var _hoisted_16$7 = { class: "mint-reagent-editor__generator" };
16957
16909
  var _hoisted_17$7 = { class: "mint-reagent-editor__generator-inputs" };
16958
16910
  var _hoisted_18$7 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
16959
- var _hoisted_19$6 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
16960
- var _hoisted_20$5 = { class: "mint-reagent-editor__presets" };
16911
+ var _hoisted_19$7 = { class: "mint-reagent-editor__field mint-reagent-editor__field--flex" };
16912
+ var _hoisted_20$6 = { class: "mint-reagent-editor__presets" };
16961
16913
  var _hoisted_21$3 = ["onClick"];
16962
16914
  var _hoisted_22$3 = ["disabled"];
16963
16915
  var _hoisted_23$2 = {
@@ -17205,14 +17157,14 @@ var ReagentEditor_default = /* @__PURE__ */ defineComponent({
17205
17157
  min: 0,
17206
17158
  step: 10,
17207
17159
  size: "sm"
17208
- }, null, 8, ["modelValue"])]), createElementVNode("div", _hoisted_19$6, [_cache[10] || (_cache[10] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Doses", -1)), createVNode(NumberInput_default, {
17160
+ }, null, 8, ["modelValue"])]), createElementVNode("div", _hoisted_19$7, [_cache[10] || (_cache[10] = createElementVNode("label", { class: "mint-reagent-editor__label" }, "Doses", -1)), createVNode(NumberInput_default, {
17209
17161
  modelValue: generatorCount.value,
17210
17162
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => generatorCount.value = $event),
17211
17163
  min: 2,
17212
17164
  max: __props.maxLevels,
17213
17165
  step: 1,
17214
17166
  size: "sm"
17215
- }, null, 8, ["modelValue", "max"])])]), createElementVNode("div", _hoisted_20$5, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.presets, (preset) => {
17167
+ }, null, 8, ["modelValue", "max"])])]), createElementVNode("div", _hoisted_20$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.presets, (preset) => {
17216
17168
  return openBlock(), createElementBlock("button", {
17217
17169
  key: preset.label,
17218
17170
  type: "button",
@@ -18805,11 +18757,11 @@ var _hoisted_18$6 = {
18805
18757
  key: 2,
18806
18758
  class: "mint-batch-progress__state"
18807
18759
  };
18808
- var _hoisted_19$5 = {
18760
+ var _hoisted_19$6 = {
18809
18761
  key: 3,
18810
18762
  class: "mint-batch-progress__state"
18811
18763
  };
18812
- var _hoisted_20$4 = {
18764
+ var _hoisted_20$5 = {
18813
18765
  key: 4,
18814
18766
  class: "mint-batch-progress__state"
18815
18767
  };
@@ -18987,11 +18939,11 @@ var BatchProgressList_default = /* @__PURE__ */ defineComponent({
18987
18939
  state: "error",
18988
18940
  size: "sm",
18989
18941
  title: __props.error
18990
- }, null, 8, ["title"])])])) : __props.loading ? (openBlock(), createElementBlock("div", _hoisted_19$5, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(DataStateInternal_default, {
18942
+ }, null, 8, ["title"])])])) : __props.loading ? (openBlock(), createElementBlock("div", _hoisted_19$6, [renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(DataStateInternal_default, {
18991
18943
  state: "loading",
18992
18944
  size: "sm",
18993
18945
  "loading-label": "Loading batch"
18994
- })])])) : __props.items.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_20$4, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
18946
+ })])])) : __props.items.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_20$5, [renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(DataStateInternal_default, {
18995
18947
  state: "empty",
18996
18948
  size: "sm",
18997
18949
  title: __props.emptyMessage
@@ -19101,8 +19053,8 @@ var _hoisted_16$5 = {
19101
19053
  };
19102
19054
  var _hoisted_17$5 = { class: "mint-summary__pill-key" };
19103
19055
  var _hoisted_18$5 = { class: "mint-summary__pill-value" };
19104
- var _hoisted_19$4 = { class: "mint-summary__table-header" };
19105
- var _hoisted_20$3 = { class: "mint-summary__section-label" };
19056
+ var _hoisted_19$5 = { class: "mint-summary__table-header" };
19057
+ var _hoisted_20$4 = { class: "mint-summary__section-label" };
19106
19058
  var _hoisted_21$1 = { class: "mint-summary__section-count" };
19107
19059
  var _hoisted_22$1 = {
19108
19060
  key: 3,
@@ -19300,7 +19252,7 @@ var ExperimentDataViewer_default = /* @__PURE__ */ defineComponent({
19300
19252
  "searchable"
19301
19253
  ])) : createCommentVNode("", true)
19302
19254
  ]);
19303
- }), 128)) : section.type === "table" && section.rows ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("div", _hoisted_19$4, [createElementVNode("span", _hoisted_20$3, toDisplayString(section.label), 1), createElementVNode("span", _hoisted_21$1, toDisplayString(section.row_count) + " rows", 1)]), createVNode(DataFrame_default, {
19255
+ }), 128)) : section.type === "table" && section.rows ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("div", _hoisted_19$5, [createElementVNode("span", _hoisted_20$4, toDisplayString(section.label), 1), createElementVNode("span", _hoisted_21$1, toDisplayString(section.row_count) + " rows", 1)]), createVNode(DataFrame_default, {
19304
19256
  data: section.rows,
19305
19257
  columns: columnsForSection(section.columns || []),
19306
19258
  searchable: (section.rows?.length || 0) > 10,
@@ -19583,8 +19535,8 @@ var _hoisted_18$4 = {
19583
19535
  key: 1,
19584
19536
  class: "mint-resource-card__footer"
19585
19537
  };
19586
- var _hoisted_19$3 = { class: "mint-resource-card__tags" };
19587
- var _hoisted_20$2 = { class: "mint-resource-card__action" };
19538
+ var _hoisted_19$4 = { class: "mint-resource-card__tags" };
19539
+ var _hoisted_20$3 = { class: "mint-resource-card__action" };
19588
19540
  //#endregion
19589
19541
  //#region src/components/ResourceCard.vue
19590
19542
  var ResourceCard_default = /* @__PURE__ */ defineComponent({
@@ -19678,7 +19630,7 @@ var ResourceCard_default = /* @__PURE__ */ defineComponent({
19678
19630
  class: "mint-resource-card__spec"
19679
19631
  }, [createElementVNode("span", _hoisted_16$4, toDisplayString(spec.label), 1), createElementVNode("span", _hoisted_17$4, toDisplayString(spec.value), 1)]);
19680
19632
  }), 128))])])) : createCommentVNode("", true),
19681
- __props.tags.length > 0 || __props.showBookAction || _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_18$4, [createElementVNode("div", _hoisted_19$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tags, (tag) => {
19633
+ __props.tags.length > 0 || __props.showBookAction || _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_18$4, [createElementVNode("div", _hoisted_19$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tags, (tag) => {
19682
19634
  return openBlock(), createBlock(BasePill_default, {
19683
19635
  key: tag,
19684
19636
  size: "sm"
@@ -19686,7 +19638,7 @@ var ResourceCard_default = /* @__PURE__ */ defineComponent({
19686
19638
  default: withCtx(() => [createTextVNode(toDisplayString(tag), 1)]),
19687
19639
  _: 2
19688
19640
  }, 1024);
19689
- }), 128))]), createElementVNode("div", _hoisted_20$2, [renderSlot(_ctx.$slots, "action", {}, () => [__props.showBookAction ? (openBlock(), createElementBlock("button", {
19641
+ }), 128))]), createElementVNode("div", _hoisted_20$3, [renderSlot(_ctx.$slots, "action", {}, () => [__props.showBookAction ? (openBlock(), createElementBlock("button", {
19690
19642
  key: 0,
19691
19643
  type: "button",
19692
19644
  class: "mint-resource-card__book-btn",
@@ -19872,11 +19824,11 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
19872
19824
  return {
19873
19825
  code: experiment.experiment_code,
19874
19826
  title: experiment.name,
19875
- meta: [
19876
- ...groupToggle.value ? [] : [experiment.project_name || experiment.project || ""],
19877
- owner ? [owner.first_name, owner.last_name].filter(Boolean).join(" ") || owner.username : "",
19878
- formatExperimentStatus(experiment.status)
19879
- ].filter(Boolean),
19827
+ meta: [...groupToggle.value ? [] : [experiment.project_name || experiment.project || ""], owner ? [owner.first_name, owner.last_name].filter(Boolean).join(" ") || owner.username : ""].filter(Boolean),
19828
+ status: experiment.status ? {
19829
+ label: formatExperimentStatus(experiment.status),
19830
+ variant: getExperimentStatusVariant(experiment.status)
19831
+ } : void 0,
19880
19832
  date: formatExperimentDate(experiment.created_at)
19881
19833
  };
19882
19834
  }
@@ -20656,8 +20608,8 @@ var _hoisted_18$3 = {
20656
20608
  class: "mint-experiment-popover__card mint-experiment-popover__card--error",
20657
20609
  role: "alert"
20658
20610
  };
20659
- var _hoisted_19$2 = { class: "mint-experiment-popover__card-info" };
20660
- var _hoisted_20$1 = { class: "mint-experiment-popover__card-message" };
20611
+ var _hoisted_19$3 = { class: "mint-experiment-popover__card-info" };
20612
+ var _hoisted_20$2 = { class: "mint-experiment-popover__card-message" };
20661
20613
  var _hoisted_21 = { class: "mint-experiment-popover__card-actions" };
20662
20614
  var _hoisted_22 = {
20663
20615
  key: 2,
@@ -20864,7 +20816,7 @@ var ExperimentPopover_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
20864
20816
  "stroke-linejoin": "round",
20865
20817
  "stroke-width": "1.75",
20866
20818
  d: "M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"
20867
- })])], -1)), createElementVNode("div", _hoisted_19$2, [_cache[7] || (_cache[7] = createElementVNode("div", { class: "mint-experiment-popover__card-name" }, "Experiment unavailable", -1)), createElementVNode("div", _hoisted_20$1, toDisplayString(__props.error), 1)])]), createElementVNode("div", _hoisted_21, [createElementVNode("button", {
20819
+ })])], -1)), createElementVNode("div", _hoisted_19$3, [_cache[7] || (_cache[7] = createElementVNode("div", { class: "mint-experiment-popover__card-name" }, "Experiment unavailable", -1)), createElementVNode("div", _hoisted_20$2, toDisplayString(__props.error), 1)])]), createElementVNode("div", _hoisted_21, [createElementVNode("button", {
20868
20820
  type: "button",
20869
20821
  class: "mint-experiment-popover__change-btn",
20870
20822
  onClick: handleSelect
@@ -20994,12 +20946,12 @@ var _hoisted_17$2 = {
20994
20946
  d: "M3.5 8.5l3 3 6-7"
20995
20947
  };
20996
20948
  var _hoisted_18$2 = { key: 1 };
20997
- var _hoisted_19$1 = {
20949
+ var _hoisted_19$2 = {
20998
20950
  key: 0,
20999
20951
  class: "mint-fit-panel__check-shape",
21000
20952
  d: "M8 1.5l7 12.5H1z"
21001
20953
  };
21002
- var _hoisted_20 = {
20954
+ var _hoisted_20$1 = {
21003
20955
  key: 1,
21004
20956
  class: "mint-fit-panel__check-shape",
21005
20957
  cx: "8",
@@ -21119,7 +21071,7 @@ var FitPanel_default = /* @__PURE__ */ defineComponent({
21119
21071
  return openBlock(), createElementBlock("span", {
21120
21072
  key: idx,
21121
21073
  class: normalizeClass(["mint-fit-panel__check", `mint-fit-panel__check--${item.variant ?? "default"}`])
21122
- }, [(openBlock(), createElementBlock("svg", _hoisted_16$2, [item.variant === "success" ? (openBlock(), createElementBlock("path", _hoisted_17$2)) : (openBlock(), createElementBlock("g", _hoisted_18$2, [item.variant === "warning" ? (openBlock(), createElementBlock("path", _hoisted_19$1)) : (openBlock(), createElementBlock("circle", _hoisted_20)), _cache[3] || (_cache[3] = createElementVNode("path", {
21074
+ }, [(openBlock(), createElementBlock("svg", _hoisted_16$2, [item.variant === "success" ? (openBlock(), createElementBlock("path", _hoisted_17$2)) : (openBlock(), createElementBlock("g", _hoisted_18$2, [item.variant === "warning" ? (openBlock(), createElementBlock("path", _hoisted_19$2)) : (openBlock(), createElementBlock("circle", _hoisted_20$1)), _cache[3] || (_cache[3] = createElementVNode("path", {
21123
21075
  class: "mint-fit-panel__check-mark",
21124
21076
  d: "M8 6v3M8 11.5v.01"
21125
21077
  }, null, -1))]))])), createTextVNode(" " + toDisplayString(item.label) + " " + toDisplayString(item.value), 1)], 2);
@@ -21178,19 +21130,24 @@ var _hoisted_1$2 = [
21178
21130
  ];
21179
21131
  var _hoisted_2$2 = {
21180
21132
  key: 0,
21181
- class: "mint-picker__skeleton"
21133
+ class: "mint-picker__truncated",
21134
+ role: "status"
21182
21135
  };
21183
21136
  var _hoisted_3$2 = {
21184
21137
  key: 1,
21185
- role: "alert",
21186
- class: "mint-picker__empty"
21138
+ class: "mint-picker__skeleton"
21187
21139
  };
21188
21140
  var _hoisted_4$2 = {
21189
21141
  key: 2,
21142
+ role: "alert",
21143
+ class: "mint-picker__empty"
21144
+ };
21145
+ var _hoisted_5$2 = {
21146
+ key: 3,
21190
21147
  class: "mint-picker__empty",
21191
21148
  role: "status"
21192
21149
  };
21193
- var _hoisted_5$2 = [
21150
+ var _hoisted_6$2 = [
21194
21151
  "role",
21195
21152
  "data-path",
21196
21153
  "aria-level",
@@ -21203,8 +21160,8 @@ var _hoisted_5$2 = [
21203
21160
  "onDblclick",
21204
21161
  "onKeydown"
21205
21162
  ];
21206
- var _hoisted_6$2 = { class: "mint-picker__cell mint-picker__cell--check" };
21207
- var _hoisted_7$2 = {
21163
+ var _hoisted_7$2 = { class: "mint-picker__cell mint-picker__cell--check" };
21164
+ var _hoisted_8$2 = {
21208
21165
  key: 0,
21209
21166
  class: "mint-picker__lock",
21210
21167
  viewBox: "0 0 24 24",
@@ -21213,13 +21170,13 @@ var _hoisted_7$2 = {
21213
21170
  "stroke-width": "1.8",
21214
21171
  "aria-hidden": "true"
21215
21172
  };
21216
- var _hoisted_8$2 = ["d"];
21217
- var _hoisted_9$2 = { class: "mint-picker__cell mint-picker__cell--name" };
21218
- var _hoisted_10$2 = {
21173
+ var _hoisted_9$2 = ["d"];
21174
+ var _hoisted_10$2 = { class: "mint-picker__cell mint-picker__cell--name" };
21175
+ var _hoisted_11$2 = {
21219
21176
  key: 1,
21220
21177
  class: "mint-picker__disclosure"
21221
21178
  };
21222
- var _hoisted_11$2 = {
21179
+ var _hoisted_12$2 = {
21223
21180
  class: "mint-picker__node-icon",
21224
21181
  viewBox: "0 0 24 24",
21225
21182
  fill: "none",
@@ -21227,19 +21184,19 @@ var _hoisted_11$2 = {
21227
21184
  "stroke-width": "1.7",
21228
21185
  "aria-hidden": "true"
21229
21186
  };
21230
- var _hoisted_12$2 = ["d"];
21231
- var _hoisted_13$2 = { class: "mint-picker__name" };
21232
- var _hoisted_14$2 = { key: 0 };
21233
- var _hoisted_15$2 = {
21187
+ var _hoisted_13$2 = ["d"];
21188
+ var _hoisted_14$2 = { class: "mint-picker__name" };
21189
+ var _hoisted_15$2 = { key: 0 };
21190
+ var _hoisted_16$1 = {
21234
21191
  key: 1,
21235
21192
  class: "mint-picker__reason"
21236
21193
  };
21237
- var _hoisted_16$1 = {
21194
+ var _hoisted_17$1 = {
21238
21195
  key: 2,
21239
21196
  class: "mint-picker__parent-name"
21240
21197
  };
21241
- var _hoisted_17$1 = { class: "mint-picker__cell mint-picker__cell--time" };
21242
- var _hoisted_18$1 = {
21198
+ var _hoisted_18$1 = { class: "mint-picker__cell mint-picker__cell--time" };
21199
+ var _hoisted_19$1 = {
21243
21200
  key: 0,
21244
21201
  class: "mint-picker__branch-error",
21245
21202
  role: "alert"
@@ -21255,6 +21212,7 @@ var FilePickerListInternal_default = /* @__PURE__ */ defineComponent({
21255
21212
  loading: { type: Boolean },
21256
21213
  error: {},
21257
21214
  query: {},
21215
+ truncated: { type: Boolean },
21258
21216
  mode: {},
21259
21217
  selected: { type: Function },
21260
21218
  selectable: { type: Function },
@@ -21382,106 +21340,110 @@ var FilePickerListInternal_default = /* @__PURE__ */ defineComponent({
21382
21340
  "aria-label": "Folders and files",
21383
21341
  "aria-multiselectable": multi.value,
21384
21342
  "aria-busy": __props.loading
21385
- }, [_cache[6] || (_cache[6] = createElementVNode("div", {
21386
- class: "mint-picker__list-head",
21387
- "aria-hidden": "true"
21388
21343
  }, [
21389
- createElementVNode("span"),
21390
- createElementVNode("span", null, "Name"),
21391
- createElementVNode("span", null, "Size"),
21392
- createElementVNode("span", null, "Modified")
21393
- ], -1)), __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2$2, [(openBlock(), createElementBlock(Fragment, null, renderList(6, (n) => {
21394
- return createVNode(Skeleton_default, {
21395
- key: n,
21396
- width: "100%",
21397
- height: "1.25rem"
21398
- });
21399
- }), 64))])) : __props.error ? (openBlock(), createElementBlock("div", _hoisted_3$2, [createElementVNode("span", null, toDisplayString(__props.error), 1), createVNode(BaseButton_default, {
21400
- variant: "secondary",
21401
- size: "sm",
21402
- onClick: _cache[0] || (_cache[0] = ($event) => emit("retry"))
21403
- }, {
21404
- default: withCtx(() => [..._cache[2] || (_cache[2] = [createTextVNode("Try again", -1)])]),
21405
- _: 1
21406
- })])) : !__props.rows.length ? (openBlock(), createElementBlock("div", _hoisted_4$2, [createElementVNode("strong", null, toDisplayString(__props.query ? "No matching folders or files" : __props.emptyTitle || "No readable files"), 1), createElementVNode("span", null, toDisplayString(__props.query ? "Try a different search or include subfolders." : "Choose another location."), 1)])) : (openBlock(true), createElementBlock(Fragment, { key: 3 }, renderList(__props.rows, (row) => {
21407
- return openBlock(), createElementBlock(Fragment, { key: row.node.path }, [createElementVNode("div", {
21408
- role: tree.value ? "treeitem" : "option",
21409
- "data-path": row.node.path,
21410
- "aria-level": tree.value ? row.depth + 1 : void 0,
21411
- "aria-selected": __props.selected(row.node),
21412
- "aria-disabled": !!reason(row.node),
21413
- "aria-expanded": tree.value && row.node.kind === "folder" && !reason(row.node) ? row.expanded : void 0,
21414
- tabindex: !reason(row.node) && row.node.path === focusablePath.value ? 0 : -1,
21415
- class: normalizeClass(["mint-picker__row", {
21416
- "mint-picker__row--selected": __props.selected(row.node),
21417
- "mint-picker__row--unreadable": !!reason(row.node)
21418
- }]),
21419
- style: normalizeStyle({ "--picker-depth": row.depth }),
21420
- title: reason(row.node) || row.node.name,
21421
- onClick: ($event) => !reason(row.node) && emit("select", row.node, $event),
21422
- onDblclick: ($event) => !reason(row.node) && emit("enter", row.node),
21423
- onKeydown: ($event) => keydown($event, row)
21344
+ _cache[6] || (_cache[6] = createElementVNode("div", {
21345
+ class: "mint-picker__list-head",
21346
+ "aria-hidden": "true"
21424
21347
  }, [
21425
- createElementVNode("span", _hoisted_6$2, [locked(row.node) ? (openBlock(), createElementBlock("svg", _hoisted_7$2, [createElementVNode("path", { d: unref(FILE_PICKER_ICONS).lock }, null, 8, _hoisted_8$2)])) : multi.value && __props.selectable(row.node) ? (openBlock(), createBlock(BaseCheckbox_default, {
21426
- key: 1,
21427
- size: "sm",
21428
- inert: "",
21429
- "aria-hidden": "true",
21430
- "model-value": __props.selected(row.node),
21431
- indeterminate: partial(row.node)
21432
- }, null, 8, ["model-value", "indeterminate"])) : createCommentVNode("", true)]),
21433
- createElementVNode("span", _hoisted_9$2, [
21434
- tree.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [row.node.kind === "folder" && row.node.hasChildren !== false && !reason(row.node) ? (openBlock(), createBlock(IconButton_default, {
21435
- key: 0,
21436
- size: "sm",
21437
- variant: "ghost",
21438
- class: "mint-picker__disclosure",
21439
- label: `${row.expanded ? "Collapse" : "Expand"} ${row.node.name}`,
21440
- tabindex: "-1",
21441
- loading: row.loading,
21442
- onClick: withModifiers(($event) => emit("expand", row.node), ["stop"]),
21443
- onDblclick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
21444
- }, {
21445
- default: withCtx(() => [(openBlock(), createElementBlock("svg", {
21446
- viewBox: "0 0 16 16",
21447
- fill: "currentColor",
21448
- "aria-hidden": "true",
21449
- class: normalizeClass({ "mint-picker__chevron--open": row.expanded })
21450
- }, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "m6 3 5 5-5 5z" }, null, -1)])], 2))]),
21451
- _: 2
21452
- }, 1032, [
21453
- "label",
21454
- "loading",
21455
- "onClick"
21456
- ])) : (openBlock(), createElementBlock("span", _hoisted_10$2))], 64)) : createCommentVNode("", true),
21457
- (openBlock(), createElementBlock("svg", _hoisted_11$2, [createElementVNode("path", { d: row.node.kind === "folder" ? unref(FILE_PICKER_ICONS).folder : unref(FILE_PICKER_ICONS).file }, null, 8, _hoisted_12$2)])),
21458
- createElementVNode("span", _hoisted_13$2, [
21459
- createTextVNode(toDisplayString(parts(row.node.name)[0]), 1),
21460
- parts(row.node.name)[1] ? (openBlock(), createElementBlock("mark", _hoisted_14$2, toDisplayString(parts(row.node.name)[1]), 1)) : createCommentVNode("", true),
21461
- createTextVNode(toDisplayString(parts(row.node.name)[2]), 1)
21462
- ]),
21463
- reason(row.node) ? (openBlock(), createElementBlock("span", _hoisted_15$2, toDisplayString(shortReason(row.node)), 1)) : __props.query && row.node.parentName ? (openBlock(), createElementBlock("span", _hoisted_16$1, toDisplayString(row.node.parentName), 1)) : createCommentVNode("", true),
21464
- __props.query && __props.mode === "folder" && row.node.kind === "file" && row.node.parentPath && !reason(row.node) ? (openBlock(), createBlock(BaseButton_default, {
21465
- key: 3,
21466
- variant: "ghost",
21467
- size: "sm",
21468
- onClick: withModifiers(($event) => emit("parent", row.node), ["stop"])
21469
- }, {
21470
- default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("Select its folder", -1)])]),
21471
- _: 1
21472
- }, 8, ["onClick"])) : createCommentVNode("", true)
21473
- ]),
21474
- createElementVNode("span", { class: normalizeClass(["mint-picker__cell mint-picker__cell--size", { "mint-picker__partial": partial(row.node) }]) }, toDisplayString(size(row.node)), 3),
21475
- createElementVNode("span", _hoisted_17$1, toDisplayString(unref(formatModified)(row.node.modifiedAt)), 1)
21476
- ], 46, _hoisted_5$2), row.error ? (openBlock(), createElementBlock("div", _hoisted_18$1, [createTextVNode(toDisplayString(row.error), 1), createVNode(BaseButton_default, {
21477
- variant: "ghost",
21348
+ createElementVNode("span"),
21349
+ createElementVNode("span", null, "Name"),
21350
+ createElementVNode("span", null, "Size"),
21351
+ createElementVNode("span", null, "Modified")
21352
+ ], -1)),
21353
+ __props.truncated && !__props.loading && !__props.error && __props.rows.length ? (openBlock(), createElementBlock("p", _hoisted_2$2, " Showing the first " + toDisplayString(__props.rows.length) + " matches. Search a smaller folder or use a more specific search to see the rest. ", 1)) : createCommentVNode("", true),
21354
+ __props.loading ? (openBlock(), createElementBlock("div", _hoisted_3$2, [(openBlock(), createElementBlock(Fragment, null, renderList(6, (n) => {
21355
+ return createVNode(Skeleton_default, {
21356
+ key: n,
21357
+ width: "100%",
21358
+ height: "1.25rem"
21359
+ });
21360
+ }), 64))])) : __props.error ? (openBlock(), createElementBlock("div", _hoisted_4$2, [createElementVNode("span", null, toDisplayString(__props.error), 1), createVNode(BaseButton_default, {
21361
+ variant: "secondary",
21478
21362
  size: "sm",
21479
- onClick: ($event) => emit("expand", row.node)
21363
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("retry"))
21480
21364
  }, {
21481
- default: withCtx(() => [..._cache[5] || (_cache[5] = [createTextVNode("Close branch", -1)])]),
21365
+ default: withCtx(() => [..._cache[2] || (_cache[2] = [createTextVNode("Try again", -1)])]),
21482
21366
  _: 1
21483
- }, 8, ["onClick"])])) : createCommentVNode("", true)], 64);
21484
- }), 128))], 8, _hoisted_1$2);
21367
+ })])) : !__props.rows.length ? (openBlock(), createElementBlock("div", _hoisted_5$2, [createElementVNode("strong", null, toDisplayString(__props.truncated ? "Search stopped before finding a match" : __props.query ? "No matching folders or files" : __props.emptyTitle || "No readable files"), 1), createElementVNode("span", null, toDisplayString(__props.truncated ? "Search a smaller folder or use a more specific search." : __props.query ? "Try a different search or include subfolders." : "Choose another location."), 1)])) : (openBlock(true), createElementBlock(Fragment, { key: 4 }, renderList(__props.rows, (row) => {
21368
+ return openBlock(), createElementBlock(Fragment, { key: row.node.path }, [createElementVNode("div", {
21369
+ role: tree.value ? "treeitem" : "option",
21370
+ "data-path": row.node.path,
21371
+ "aria-level": tree.value ? row.depth + 1 : void 0,
21372
+ "aria-selected": __props.selected(row.node),
21373
+ "aria-disabled": !!reason(row.node),
21374
+ "aria-expanded": tree.value && row.node.kind === "folder" && !reason(row.node) ? row.expanded : void 0,
21375
+ tabindex: !reason(row.node) && row.node.path === focusablePath.value ? 0 : -1,
21376
+ class: normalizeClass(["mint-picker__row", {
21377
+ "mint-picker__row--selected": __props.selected(row.node),
21378
+ "mint-picker__row--unreadable": !!reason(row.node)
21379
+ }]),
21380
+ style: normalizeStyle({ "--picker-depth": row.depth }),
21381
+ title: reason(row.node) || row.node.name,
21382
+ onClick: ($event) => !reason(row.node) && emit("select", row.node, $event),
21383
+ onDblclick: ($event) => !reason(row.node) && emit("enter", row.node),
21384
+ onKeydown: ($event) => keydown($event, row)
21385
+ }, [
21386
+ createElementVNode("span", _hoisted_7$2, [locked(row.node) ? (openBlock(), createElementBlock("svg", _hoisted_8$2, [createElementVNode("path", { d: unref(FILE_PICKER_ICONS).lock }, null, 8, _hoisted_9$2)])) : multi.value && __props.selectable(row.node) ? (openBlock(), createBlock(BaseCheckbox_default, {
21387
+ key: 1,
21388
+ size: "sm",
21389
+ inert: "",
21390
+ "aria-hidden": "true",
21391
+ "model-value": __props.selected(row.node),
21392
+ indeterminate: partial(row.node)
21393
+ }, null, 8, ["model-value", "indeterminate"])) : createCommentVNode("", true)]),
21394
+ createElementVNode("span", _hoisted_10$2, [
21395
+ tree.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [row.node.kind === "folder" && row.node.hasChildren !== false && !reason(row.node) ? (openBlock(), createBlock(IconButton_default, {
21396
+ key: 0,
21397
+ size: "sm",
21398
+ variant: "ghost",
21399
+ class: "mint-picker__disclosure",
21400
+ label: `${row.expanded ? "Collapse" : "Expand"} ${row.node.name}`,
21401
+ tabindex: "-1",
21402
+ loading: row.loading,
21403
+ onClick: withModifiers(($event) => emit("expand", row.node), ["stop"]),
21404
+ onDblclick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
21405
+ }, {
21406
+ default: withCtx(() => [(openBlock(), createElementBlock("svg", {
21407
+ viewBox: "0 0 16 16",
21408
+ fill: "currentColor",
21409
+ "aria-hidden": "true",
21410
+ class: normalizeClass({ "mint-picker__chevron--open": row.expanded })
21411
+ }, [..._cache[3] || (_cache[3] = [createElementVNode("path", { d: "m6 3 5 5-5 5z" }, null, -1)])], 2))]),
21412
+ _: 2
21413
+ }, 1032, [
21414
+ "label",
21415
+ "loading",
21416
+ "onClick"
21417
+ ])) : (openBlock(), createElementBlock("span", _hoisted_11$2))], 64)) : createCommentVNode("", true),
21418
+ (openBlock(), createElementBlock("svg", _hoisted_12$2, [createElementVNode("path", { d: row.node.kind === "folder" ? unref(FILE_PICKER_ICONS).folder : unref(FILE_PICKER_ICONS).file }, null, 8, _hoisted_13$2)])),
21419
+ createElementVNode("span", _hoisted_14$2, [
21420
+ createTextVNode(toDisplayString(parts(row.node.name)[0]), 1),
21421
+ parts(row.node.name)[1] ? (openBlock(), createElementBlock("mark", _hoisted_15$2, toDisplayString(parts(row.node.name)[1]), 1)) : createCommentVNode("", true),
21422
+ createTextVNode(toDisplayString(parts(row.node.name)[2]), 1)
21423
+ ]),
21424
+ reason(row.node) ? (openBlock(), createElementBlock("span", _hoisted_16$1, toDisplayString(shortReason(row.node)), 1)) : __props.query && row.node.parentName ? (openBlock(), createElementBlock("span", _hoisted_17$1, toDisplayString(row.node.parentName), 1)) : createCommentVNode("", true),
21425
+ __props.query && __props.mode === "folder" && row.node.kind === "file" && row.node.parentPath && !reason(row.node) ? (openBlock(), createBlock(BaseButton_default, {
21426
+ key: 3,
21427
+ variant: "ghost",
21428
+ size: "sm",
21429
+ onClick: withModifiers(($event) => emit("parent", row.node), ["stop"])
21430
+ }, {
21431
+ default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("Select its folder", -1)])]),
21432
+ _: 1
21433
+ }, 8, ["onClick"])) : createCommentVNode("", true)
21434
+ ]),
21435
+ createElementVNode("span", { class: normalizeClass(["mint-picker__cell mint-picker__cell--size", { "mint-picker__partial": partial(row.node) }]) }, toDisplayString(size(row.node)), 3),
21436
+ createElementVNode("span", _hoisted_18$1, toDisplayString(unref(formatModified)(row.node.modifiedAt)), 1)
21437
+ ], 46, _hoisted_6$2), row.error ? (openBlock(), createElementBlock("div", _hoisted_19$1, [createTextVNode(toDisplayString(row.error), 1), createVNode(BaseButton_default, {
21438
+ variant: "ghost",
21439
+ size: "sm",
21440
+ onClick: ($event) => emit("expand", row.node)
21441
+ }, {
21442
+ default: withCtx(() => [..._cache[5] || (_cache[5] = [createTextVNode("Close branch", -1)])]),
21443
+ _: 1
21444
+ }, 8, ["onClick"])])) : createCommentVNode("", true)], 64);
21445
+ }), 128))
21446
+ ], 8, _hoisted_1$2);
21485
21447
  };
21486
21448
  }
21487
21449
  });
@@ -21594,7 +21556,25 @@ var FilePickerPreviewInternal_default = /* @__PURE__ */ defineComponent({
21594
21556
  });
21595
21557
  //#endregion
21596
21558
  //#region src/composables/filePicker/usePickerNavigation.ts
21597
- function usePickerNavigation(adapter, request, systemFilter = () => true) {
21559
+ var byName = new Intl.Collator(void 0, {
21560
+ numeric: true,
21561
+ sensitivity: "base"
21562
+ }).compare;
21563
+ /** Folders first; undated rows go last in either time order. */
21564
+ function ordered(items, sort) {
21565
+ if (!sort) return items;
21566
+ const times = new Map(items.map((node) => [node, node.modifiedAt ? Date.parse(node.modifiedAt) : NaN]));
21567
+ const time = (node) => times.get(node);
21568
+ return [...items].sort((a, b) => {
21569
+ if (a.kind !== b.kind) return a.kind === "folder" ? -1 : 1;
21570
+ if (sort === "name") return byName(a.name, b.name);
21571
+ if (sort === "name-desc") return byName(b.name, a.name);
21572
+ const [ta, tb] = [time(a), time(b)];
21573
+ if (Number.isNaN(ta) || Number.isNaN(tb)) return Number.isNaN(ta) === Number.isNaN(tb) ? byName(a.name, b.name) : Number.isNaN(ta) ? 1 : -1;
21574
+ return (sort === "newest" ? tb - ta : ta - tb) || byName(a.name, b.name);
21575
+ });
21576
+ }
21577
+ function usePickerNavigation(adapter, request, systemFilter = () => true, sort = () => void 0) {
21598
21578
  const path = shallowRef("");
21599
21579
  const trail = ref([]);
21600
21580
  const entries = shallowRef([]);
@@ -21605,6 +21585,8 @@ function usePickerNavigation(adapter, request, systemFilter = () => true) {
21605
21585
  const expansionErrors = ref(/* @__PURE__ */ new Map());
21606
21586
  const loading = shallowRef(false);
21607
21587
  const error = shallowRef("");
21588
+ /** True when the current search results stopped at an adapter limit. */
21589
+ const truncated = shallowRef(false);
21608
21590
  let epoch = 0;
21609
21591
  let navigation = 0;
21610
21592
  let controller;
@@ -21724,13 +21706,16 @@ function usePickerNavigation(adapter, request, systemFilter = () => true) {
21724
21706
  };
21725
21707
  loading.value = true;
21726
21708
  error.value = "";
21709
+ truncated.value = false;
21727
21710
  entries.value = [];
21728
21711
  try {
21729
- const items = query.trim() ? await adapter().search(query.trim(), {
21712
+ const found = query.trim() ? await adapter().search(query.trim(), {
21730
21713
  path: path.value,
21731
21714
  recursive
21732
21715
  }, options) : path.value ? await loadChildren(path.value, [], refresh) : await adapter().listRoot(options);
21733
21716
  if (token !== navigation) return;
21717
+ const items = Array.isArray(found) ? found : found.nodes;
21718
+ truncated.value = !Array.isArray(found) && found.truncated;
21734
21719
  register(items, query.trim() ? void 0 : path.value);
21735
21720
  entries.value = items;
21736
21721
  if (!query.trim()) prefetch(items);
@@ -21776,8 +21761,9 @@ function usePickerNavigation(adapter, request, systemFilter = () => true) {
21776
21761
  }
21777
21762
  const rows = computed(() => {
21778
21763
  const result = [];
21764
+ const order = sort();
21779
21765
  function visit(items, depth, ancestors) {
21780
- for (const item of items) {
21766
+ for (const item of ordered(items, order)) {
21781
21767
  if (ancestors.has(item.path) || depth > 30) continue;
21782
21768
  const node = nodes.value.get(item.path) ?? item;
21783
21769
  if (!isAllowed(node)) continue;
@@ -21806,6 +21792,7 @@ function usePickerNavigation(adapter, request, systemFilter = () => true) {
21806
21792
  expansionErrors,
21807
21793
  loading,
21808
21794
  error,
21795
+ truncated,
21809
21796
  rows,
21810
21797
  isAllowed,
21811
21798
  clear,
@@ -22111,12 +22098,13 @@ function useFilePicker(props, emit, searchArea) {
22111
22098
  const source = shallowRef(allowedSources.value.includes(props.initialSelection?.source) ? props.initialSelection.source : allowedSources.value[0] ?? "server");
22112
22099
  const query = shallowRef("");
22113
22100
  const recursive = shallowRef(false);
22101
+ const sort = shallowRef(props.defaultSort);
22114
22102
  const skipBlanks = shallowRef(false);
22115
22103
  const reviewing = shallowRef(false);
22116
22104
  const localFiles = shallowRef([]);
22117
22105
  const localPaths = /* @__PURE__ */ new WeakMap();
22118
22106
  const localAdapter = computed(() => localFilesAdapter(localFiles.value, localFiles.value.map((file) => localPaths.get(toRaw(file)))));
22119
- const nav = usePickerNavigation(() => source.value === "localFile" ? localAdapter.value : props.adapter, () => ({ source: source.value }), (node) => props.systemFilter?.(node, source.value) !== false);
22107
+ const nav = usePickerNavigation(() => source.value === "localFile" ? localAdapter.value : props.adapter, () => ({ source: source.value }), (node) => props.systemFilter?.(node, source.value) !== false, () => sort.value);
22120
22108
  const capability = computed(() => props.capabilities[source.value]);
22121
22109
  const selection = usePickerSelection(nav, () => props.selectionMode, () => capability.value, () => skipBlanks.value);
22122
22110
  const { path, trail, loading, error, rows } = nav;
@@ -22199,6 +22187,7 @@ function useFilePicker(props, emit, searchArea) {
22199
22187
  watch(() => props.open, (open) => {
22200
22188
  clearTimeout(timer);
22201
22189
  if (open) {
22190
+ sort.value = props.defaultSort;
22202
22191
  if (!initialized) {
22203
22192
  path.value = props.initialPath;
22204
22193
  if (path.value) trail.value = [{
@@ -22360,10 +22349,11 @@ function useFilePicker(props, emit, searchArea) {
22360
22349
  }
22361
22350
  async function selectLocalFiles() {
22362
22351
  const token = openGeneration;
22363
- const items = props.selectionMode === "single-file" || props.selectionMode === "multi-file" ? await localAdapter.value.search("", {
22352
+ const found = props.selectionMode === "single-file" || props.selectionMode === "multi-file" ? await localAdapter.value.search("", {
22364
22353
  path: "",
22365
22354
  recursive: true
22366
22355
  }) : nav.entries.value;
22356
+ const items = Array.isArray(found) ? found : found.nodes;
22367
22357
  if (token !== openGeneration || !props.open || source.value !== "localFile") return;
22368
22358
  nav.register(items);
22369
22359
  const candidates = items.filter((node) => selection.selectable(node));
@@ -22408,6 +22398,7 @@ function useFilePicker(props, emit, searchArea) {
22408
22398
  source,
22409
22399
  query,
22410
22400
  recursive,
22401
+ sort,
22411
22402
  skipBlanks,
22412
22403
  reviewing,
22413
22404
  nav,
@@ -22470,32 +22461,38 @@ var _hoisted_8 = {
22470
22461
  key: 0,
22471
22462
  class: "mint-picker__accepts"
22472
22463
  };
22473
- var _hoisted_9 = ["aria-pressed"];
22474
- var _hoisted_10 = ["disabled"];
22475
- var _hoisted_11 = {
22464
+ var _hoisted_9 = [
22465
+ "aria-expanded",
22466
+ "aria-label",
22467
+ "onClick",
22468
+ "onKeydown"
22469
+ ];
22470
+ var _hoisted_10 = ["aria-pressed"];
22471
+ var _hoisted_11 = ["disabled"];
22472
+ var _hoisted_12 = {
22476
22473
  key: 1,
22477
22474
  class: "mint-picker__empty"
22478
22475
  };
22479
- var _hoisted_12 = {
22476
+ var _hoisted_13 = {
22480
22477
  key: 0,
22481
22478
  class: "mint-picker__local-upload"
22482
22479
  };
22483
- var _hoisted_13 = {
22480
+ var _hoisted_14 = {
22484
22481
  key: 0,
22485
22482
  role: "alert"
22486
22483
  };
22487
- var _hoisted_14 = {
22484
+ var _hoisted_15 = {
22488
22485
  key: 1,
22489
22486
  class: "mint-picker__workspace"
22490
22487
  };
22491
- var _hoisted_15 = { class: "mint-picker__footer" };
22492
- var _hoisted_16 = {
22488
+ var _hoisted_16 = { class: "mint-picker__footer" };
22489
+ var _hoisted_17 = {
22493
22490
  class: "mint-picker__receipt",
22494
22491
  role: "status"
22495
22492
  };
22496
- var _hoisted_17 = { class: "mint-picker__summary" };
22497
- var _hoisted_18 = { key: 2 };
22498
- var _hoisted_19 = { class: "mint-picker__actions" };
22493
+ var _hoisted_18 = { class: "mint-picker__summary" };
22494
+ var _hoisted_19 = { key: 2 };
22495
+ var _hoisted_20 = { class: "mint-picker__actions" };
22499
22496
  //#endregion
22500
22497
  //#region src/components/FilePicker.vue
22501
22498
  var FilePicker_default = /* @__PURE__ */ defineComponent({
@@ -22510,6 +22507,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22510
22507
  initialSelection: { default: null },
22511
22508
  title: { default: "Choose data" },
22512
22509
  view: { default: "list" },
22510
+ defaultSort: { default: "newest" },
22513
22511
  systemFilter: {}
22514
22512
  },
22515
22513
  emits: [
@@ -22530,7 +22528,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22530
22528
  const props = __props;
22531
22529
  const emit = __emit;
22532
22530
  const uploadError = ref("");
22533
- const { previewNode, sourceNames, mounts, segments, activeSegment, mountView, allowedSources, source, query, recursive, skipBlanks, reviewing, nav, selection, capability, path, trail, loading, error, rows, roots, chosen, focused, resolving, resolutionError, confirmLabel, folderCount, canConfirm, chooseSegment, clearSelection, selectNode, enter, up, refresh, selectParent, chooseLocal, cancel, confirm, keyboard } = useFilePicker(props, emit, useTemplateRef("searchArea"));
22531
+ const { previewNode, sourceNames, mounts, segments, activeSegment, mountView, allowedSources, source, query, recursive, sort, skipBlanks, reviewing, nav, selection, capability, path, trail, loading, error, rows, roots, chosen, focused, resolving, resolutionError, confirmLabel, folderCount, canConfirm, chooseSegment, clearSelection, selectNode, enter, up, refresh, selectParent, chooseLocal, cancel, confirm, keyboard } = useFilePicker(props, emit, useTemplateRef("searchArea"));
22534
22532
  const sourceLabel = computed(() => {
22535
22533
  const node = previewNode.value;
22536
22534
  if (!mountView.value || !node) return sourceNames[source.value];
@@ -22540,6 +22538,17 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22540
22538
  }
22541
22539
  return mounts.value.find((item) => item.path === props.adapter.mountOf?.(node.path))?.name ?? sourceNames.server;
22542
22540
  });
22541
+ const SORT_LABELS = {
22542
+ newest: "Newest first",
22543
+ oldest: "Oldest first",
22544
+ name: "Name A–Z",
22545
+ "name-desc": "Name Z–A"
22546
+ };
22547
+ const sortItems = computed(() => Object.keys(SORT_LABELS).map((id) => ({
22548
+ id,
22549
+ label: SORT_LABELS[id],
22550
+ checked: sort.value === id
22551
+ })));
22543
22552
  const accepts = computed(() => (capability.value?.formats ?? []).map((format) => `.${format.replace(/^\./, "")}`).join(" "));
22544
22553
  const summary = computed(() => {
22545
22554
  if (!roots.value.length) return "No selection";
@@ -22582,7 +22591,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22582
22591
  "aria-label": "Search folders and files",
22583
22592
  placeholder: "Search this source"
22584
22593
  }, {
22585
- prefix: withCtx(() => [..._cache[12] || (_cache[12] = [createElementVNode("svg", {
22594
+ prefix: withCtx(() => [..._cache[13] || (_cache[13] = [createElementVNode("svg", {
22586
22595
  viewBox: "0 0 24 24",
22587
22596
  fill: "none",
22588
22597
  stroke: "currentColor",
@@ -22593,40 +22602,40 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22593
22602
  cy: "10.5",
22594
22603
  r: "7"
22595
22604
  }), createElementVNode("path", { d: "m16 16 5 5" })], -1)])]),
22596
- suffix: withCtx(() => [..._cache[13] || (_cache[13] = [createElementVNode("kbd", null, "/", -1)])]),
22605
+ suffix: withCtx(() => [..._cache[14] || (_cache[14] = [createElementVNode("kbd", null, "/", -1)])]),
22597
22606
  _: 1
22598
22607
  }, 8, ["modelValue"])], 512)) : createCommentVNode("", true)
22599
22608
  ], 32)]),
22600
- footer: withCtx(() => [createElementVNode("div", _hoisted_15, [createElementVNode("div", _hoisted_16, [
22601
- createElementVNode("span", _hoisted_17, toDisplayString(summary.value), 1),
22609
+ footer: withCtx(() => [createElementVNode("div", _hoisted_16, [createElementVNode("div", _hoisted_17, [
22610
+ createElementVNode("span", _hoisted_18, toDisplayString(summary.value), 1),
22602
22611
  unref(roots).length ? (openBlock(), createElementBlock("button", {
22603
22612
  key: 0,
22604
22613
  type: "button",
22605
22614
  class: "mint-picker__link mint-picker__clear",
22606
- onClick: _cache[9] || (_cache[9] = (...args) => unref(clearSelection) && unref(clearSelection)(...args))
22615
+ onClick: _cache[10] || (_cache[10] = (...args) => unref(clearSelection) && unref(clearSelection)(...args))
22607
22616
  }, " Clear ")) : createCommentVNode("", true),
22608
22617
  unref(chosen).excluded.length && unref(source) === "server" ? (openBlock(), createElementBlock("button", {
22609
22618
  key: 1,
22610
22619
  type: "button",
22611
22620
  class: "mint-picker__link",
22612
- onClick: _cache[10] || (_cache[10] = ($event) => reviewing.value = !unref(reviewing))
22613
- }, toDisplayString(unref(chosen).excluded.length) + " skipped ", 1)) : unref(chosen).excluded.length ? (openBlock(), createElementBlock("span", _hoisted_18, toDisplayString(unref(chosen).excluded.length) + " skipped", 1)) : createCommentVNode("", true),
22621
+ onClick: _cache[11] || (_cache[11] = ($event) => reviewing.value = !unref(reviewing))
22622
+ }, toDisplayString(unref(chosen).excluded.length) + " skipped ", 1)) : unref(chosen).excluded.length ? (openBlock(), createElementBlock("span", _hoisted_19, toDisplayString(unref(chosen).excluded.length) + " skipped", 1)) : createCommentVNode("", true),
22614
22623
  unref(capability)?.isBlank ? (openBlock(), createBlock(BaseButton_default, {
22615
22624
  key: 3,
22616
22625
  size: "sm",
22617
22626
  variant: "ghost",
22618
22627
  "aria-pressed": unref(skipBlanks),
22619
- onClick: _cache[11] || (_cache[11] = ($event) => skipBlanks.value = !unref(skipBlanks))
22628
+ onClick: _cache[12] || (_cache[12] = ($event) => skipBlanks.value = !unref(skipBlanks))
22620
22629
  }, {
22621
22630
  default: withCtx(() => [createTextVNode("Skip blanks " + toDisplayString(unref(skipBlanks) ? "on" : "off"), 1)]),
22622
22631
  _: 1
22623
22632
  }, 8, ["aria-pressed"])) : createCommentVNode("", true)
22624
- ]), createElementVNode("div", _hoisted_19, [createVNode(BaseButton_default, {
22633
+ ]), createElementVNode("div", _hoisted_20, [createVNode(BaseButton_default, {
22625
22634
  variant: "ghost",
22626
22635
  size: "sm",
22627
22636
  onClick: unref(cancel)
22628
22637
  }, {
22629
- default: withCtx(() => [..._cache[16] || (_cache[16] = [createTextVNode("Cancel", -1)])]),
22638
+ default: withCtx(() => [..._cache[18] || (_cache[18] = [createTextVNode("Cancel", -1)])]),
22630
22639
  _: 1
22631
22640
  }, 8, ["onClick"]), createVNode(BaseButton_default, {
22632
22641
  size: "sm",
@@ -22639,7 +22648,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22639
22648
  default: withCtx(() => [(openBlock(), createElementBlock("div", {
22640
22649
  key: unref(source),
22641
22650
  class: "mint-picker mint-picker__source-panel",
22642
- onKeydown: _cache[8] || (_cache[8] = (...args) => unref(keyboard) && unref(keyboard)(...args))
22651
+ onKeydown: _cache[9] || (_cache[9] = (...args) => unref(keyboard) && unref(keyboard)(...args))
22643
22652
  }, [unref(source) === "server" ? (openBlock(), createElementBlock("div", _hoisted_3, [
22644
22653
  createElementVNode("nav", _hoisted_4, [!unref(mountView) ? (openBlock(), createElementBlock("button", {
22645
22654
  key: 0,
@@ -22648,7 +22657,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22648
22657
  "aria-current": unref(trail).length ? void 0 : "location",
22649
22658
  onClick: _cache[2] || (_cache[2] = ($event) => unref(up)(""))
22650
22659
  }, toDisplayString(unref(sourceNames)[unref(source)]), 9, _hoisted_5)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(trail), (crumb, index) => {
22651
- return openBlock(), createElementBlock(Fragment, { key: crumb.path }, [index > 0 || !unref(mountView) ? (openBlock(), createElementBlock("svg", _hoisted_6, [..._cache[14] || (_cache[14] = [createElementVNode("path", { d: "M6 4l4 4-4 4" }, null, -1)])])) : createCommentVNode("", true), createElementVNode("button", {
22660
+ return openBlock(), createElementBlock(Fragment, { key: crumb.path }, [index > 0 || !unref(mountView) ? (openBlock(), createElementBlock("svg", _hoisted_6, [..._cache[15] || (_cache[15] = [createElementVNode("path", { d: "M6 4l4 4-4 4" }, null, -1)])])) : createCommentVNode("", true), createElementVNode("button", {
22652
22661
  type: "button",
22653
22662
  class: "mint-picker__crumb",
22654
22663
  "aria-current": index === unref(trail).length - 1 ? "location" : void 0,
@@ -22656,43 +22665,66 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22656
22665
  }, toDisplayString(crumb.label), 9, _hoisted_7)], 64);
22657
22666
  }), 128))]),
22658
22667
  accepts.value ? (openBlock(), createElementBlock("span", _hoisted_8, "Accepts " + toDisplayString(accepts.value), 1)) : createCommentVNode("", true),
22668
+ createVNode(ActionMenu_default, {
22669
+ label: "Sort",
22670
+ items: sortItems.value,
22671
+ onSelect: _cache[3] || (_cache[3] = ($event) => sort.value = $event.id)
22672
+ }, {
22673
+ trigger: withCtx(({ open: menuOpen, toggle, keydown }) => [createElementVNode("button", {
22674
+ type: "button",
22675
+ class: "mint-picker__sort",
22676
+ "aria-haspopup": "menu",
22677
+ "aria-expanded": menuOpen,
22678
+ "aria-label": `Sort: ${SORT_LABELS[unref(sort)]}`,
22679
+ onClick: toggle,
22680
+ onKeydown: keydown
22681
+ }, [createTextVNode(toDisplayString(SORT_LABELS[unref(sort)]) + " ", 1), _cache[16] || (_cache[16] = createElementVNode("svg", {
22682
+ viewBox: "0 0 16 16",
22683
+ fill: "none",
22684
+ stroke: "currentColor",
22685
+ "stroke-width": "1.5",
22686
+ "aria-hidden": "true"
22687
+ }, [createElementVNode("path", { d: "M4 6l4 4 4-4" })], -1))], 40, _hoisted_9)]),
22688
+ _: 1
22689
+ }, 8, ["items"]),
22659
22690
  createElementVNode("button", {
22660
22691
  type: "button",
22661
22692
  class: "mint-picker__scope",
22662
22693
  "aria-pressed": unref(recursive),
22663
- onClick: _cache[3] || (_cache[3] = ($event) => recursive.value = !unref(recursive))
22664
- }, toDisplayString(unref(recursive) ? "Subfolders" : "This folder"), 9, _hoisted_9),
22694
+ onClick: _cache[4] || (_cache[4] = ($event) => recursive.value = !unref(recursive))
22695
+ }, toDisplayString(unref(recursive) ? "Subfolders" : "This folder"), 9, _hoisted_10),
22665
22696
  createElementVNode("button", {
22666
22697
  type: "button",
22667
22698
  class: "mint-picker__scope mint-picker__refresh",
22668
22699
  "aria-label": "Refresh location",
22669
22700
  title: "Refresh location",
22670
22701
  disabled: unref(loading),
22671
- onClick: _cache[4] || (_cache[4] = ($event) => unref(refresh)())
22672
- }, [..._cache[15] || (_cache[15] = [createElementVNode("svg", {
22702
+ onClick: _cache[5] || (_cache[5] = ($event) => unref(refresh)())
22703
+ }, [..._cache[17] || (_cache[17] = [createElementVNode("svg", {
22673
22704
  viewBox: "0 0 24 24",
22674
22705
  fill: "none",
22675
22706
  stroke: "currentColor",
22676
22707
  "stroke-width": "1.8",
22677
22708
  "aria-hidden": "true"
22678
- }, [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)])], 8, _hoisted_10)
22679
- ])) : createCommentVNode("", true), !unref(allowedSources).length ? (openBlock(), createElementBlock("div", _hoisted_11, " No data sources are enabled. ")) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(source) === "localFile" ? (openBlock(), createElementBlock("div", _hoisted_12, [createVNode(FileUploader_default, {
22709
+ }, [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)])], 8, _hoisted_11)
22710
+ ])) : createCommentVNode("", true), !unref(allowedSources).length ? (openBlock(), createElementBlock("div", _hoisted_12, " No data sources are enabled. ")) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [unref(source) === "localFile" ? (openBlock(), createElementBlock("div", _hoisted_13, [createVNode(FileUploader_default, {
22680
22711
  size: "lg",
22681
22712
  mode: __props.selectionMode === "folder" ? "folder" : __props.selectionMode === "single-file" ? "file" : "file+folder",
22682
22713
  multiple: __props.selectionMode !== "single-file",
22683
22714
  "show-files": false,
22684
- onUpload: _cache[5] || (_cache[5] = (...args) => {
22715
+ onUpload: _cache[6] || (_cache[6] = (...args) => {
22685
22716
  uploadError.value = "";
22686
22717
  unref(chooseLocal)(...args);
22687
22718
  }),
22688
- onError: _cache[6] || (_cache[6] = ($event) => uploadError.value = $event)
22689
- }, null, 8, ["mode", "multiple"]), uploadError.value || unref(error) || unref(resolutionError) ? (openBlock(), createElementBlock("p", _hoisted_13, toDisplayString(uploadError.value || unref(error) || unref(resolutionError)), 1)) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("div", _hoisted_14, [createVNode(FilePickerListInternal_default, {
22719
+ onError: _cache[7] || (_cache[7] = ($event) => uploadError.value = $event)
22720
+ }, null, 8, ["mode", "multiple"]), uploadError.value || unref(error) || unref(resolutionError) ? (openBlock(), createElementBlock("p", _hoisted_14, toDisplayString(uploadError.value || unref(error) || unref(resolutionError)), 1)) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("div", _hoisted_15, [createVNode(FilePickerListInternal_default, {
22690
22721
  "empty-title": unref(path) ? "No readable files" : "No server locations configured",
22691
22722
  view: __props.view,
22692
22723
  rows: unref(rows),
22693
22724
  loading: unref(loading),
22694
22725
  error: unref(error),
22695
22726
  query: unref(query),
22727
+ truncated: unref(nav).truncated.value,
22696
22728
  mode: __props.selectionMode,
22697
22729
  selected: unref(selection).selected,
22698
22730
  selectable: unref(selection).selectable,
@@ -22712,6 +22744,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22712
22744
  "loading",
22713
22745
  "error",
22714
22746
  "query",
22747
+ "truncated",
22715
22748
  "mode",
22716
22749
  "selected",
22717
22750
  "selectable",
@@ -22732,7 +22765,7 @@ var FilePicker_default = /* @__PURE__ */ defineComponent({
22732
22765
  busy: unref(resolving),
22733
22766
  error: unref(resolutionError),
22734
22767
  reviewing: unref(reviewing),
22735
- onReview: _cache[7] || (_cache[7] = ($event) => reviewing.value = !unref(reviewing)),
22768
+ onReview: _cache[8] || (_cache[8] = ($event) => reviewing.value = !unref(reviewing)),
22736
22769
  onRetry: unref(selection).resolve
22737
22770
  }, null, 8, [
22738
22771
  "node",
@@ -22861,6 +22894,6 @@ var components_exports = /* @__PURE__ */ __exportAll({
22861
22894
  WellPlate: () => WellPlate_default
22862
22895
  });
22863
22896
  //#endregion
22864
- export { PlateEditor_default as $, SampleLegend_default as A, AppToastContainer_default as At, StatusIndicator_default as B, __commonJSMin as Bt, ChemicalFormula_default as C, AppAvatarMenu_default as Ct, ReagentEditor_default as D, ActionMenu_default as Dt, SampleHierarchyTree_default as E, ThemeToggle_default as Et, SettingsModal_default as F, Calendar_default as Ft, ControlWorkspaceView_default as G, LayoutResizeHandle_default as H, AdductText_default as I, BasePill_default as It, SampleSelector_default as J, ComponentBindingRenderer_default as K, Breadcrumb_default as L, SegmentedControl_default as Lt, BioTemplatePackWorkspaceView_default as M, FormField_default as Mt, BioTemplateExperimentWorkspaceView_default as N, DataFrame_default as Nt, SmartGroupModal_default as O, IconButton_default as Ot, BioTemplateRenderer_default as P, LoadingSpinner_default as Pt, ReagentList_default as Q, Avatar_default as R, BaseTabs_default as Rt, sequenceSamplesRemaining as S, AppTopBar_default as St, ProtocolStepEditor_default as T, CollapsibleCard_default as Tt, AppContainer_default as U, Divider_default as V, DoseDesignWorkspaceView_default as W, SmartGroupManual_default as X, AutoGroupModal_default as Y, SmartGroupFieldRecipe_default as Z, estimateSequenceFinishDate as _, AppLayout_default as _t, ArtifactSaveDialog_default as a, GeneratedPluginView_default as at, formatSequenceRemaining as b, FormActions_default as bt, SectionCard_default as c, GeneratedPlotlyResult_default as ct, ExperimentCodeBadge_default as d, ChartContainer_default as dt, ConfirmDialog_default as et, ExperimentDataViewer_default as f, generatedJobDefaults as ft, SequenceProgressBar_default as g, MobileSupportGate_default as gt, InstrumentStateBadge_default as h, PluginWorkspaceView_default as ht, ExperimentPopover_default as i, DoseCalculator_default as it, BioTemplatePresetWorkspaceView_default as j, AlertBox_default as jt, GroupAssigner_default as k, RuntimeUpdateNotice_default as kt, ResourceCard_default as l, PlotlyChart_default as lt, AuditTrail_default as m, normalizeGeneratedJobInput as mt, FilePicker_default as n, sampleTypeMarker as nt, ArtifactSelectorModal_default as o, JobsStatusTray_default as ot, BatchProgressList_default as p, generatedJobFormSchema as pt, ScheduleCalendar_default as q, FitPanel_default as r, ExperimentTimeline_default as rt, ExperimentSelectorModal_default as s, GeneratedResultRenderer_default as st, components_exports as t, WellPlate_default as tt, TimeRangeInput_default as u, mintPlotlyTemplate as ut, estimateSequenceRemainingSeconds as v, AppSidebar_default as vt, ScientificNumber_default as w, PluginIcon_default as wt, sequenceProgressPercent as x, StepWizard_default as xt, formatSequenceEta as y, FormBuilder_default as yt, ProgressBar_default as z, SearchableSelect_default as zt };
22897
+ export { PlateEditor_default as $, SampleLegend_default as A, AppToastContainer_default as At, StatusIndicator_default as B, ChemicalFormula_default as C, AppAvatarMenu_default as Ct, ReagentEditor_default as D, ActionMenu_default as Dt, SampleHierarchyTree_default as E, ThemeToggle_default as Et, SettingsModal_default as F, Calendar_default as Ft, ControlWorkspaceView_default as G, LayoutResizeHandle_default as H, AdductText_default as I, BasePill_default as It, SampleSelector_default as J, ComponentBindingRenderer_default as K, Breadcrumb_default as L, SegmentedControl_default as Lt, BioTemplatePackWorkspaceView_default as M, FormField_default as Mt, BioTemplateExperimentWorkspaceView_default as N, DataFrame_default as Nt, SmartGroupModal_default as O, IconButton_default as Ot, BioTemplateRenderer_default as P, LoadingSpinner_default as Pt, ReagentList_default as Q, Avatar_default as R, BaseTabs_default as Rt, sequenceSamplesRemaining as S, AppTopBar_default as St, ProtocolStepEditor_default as T, CollapsibleCard_default as Tt, AppContainer_default as U, Divider_default as V, DoseDesignWorkspaceView_default as W, SmartGroupManual_default as X, AutoGroupModal_default as Y, SmartGroupFieldRecipe_default as Z, estimateSequenceFinishDate as _, AppLayout_default as _t, ArtifactSaveDialog_default as a, GeneratedPluginView_default as at, formatSequenceRemaining as b, FormActions_default as bt, SectionCard_default as c, GeneratedPlotlyResult_default as ct, ExperimentCodeBadge_default as d, ChartContainer_default as dt, ConfirmDialog_default as et, ExperimentDataViewer_default as f, generatedJobDefaults as ft, SequenceProgressBar_default as g, MobileSupportGate_default as gt, InstrumentStateBadge_default as h, PluginWorkspaceView_default as ht, ExperimentPopover_default as i, DoseCalculator_default as it, BioTemplatePresetWorkspaceView_default as j, AlertBox_default as jt, GroupAssigner_default as k, RuntimeUpdateNotice_default as kt, ResourceCard_default as l, PlotlyChart_default as lt, AuditTrail_default as m, normalizeGeneratedJobInput as mt, FilePicker_default as n, sampleTypeMarker as nt, ArtifactSelectorModal_default as o, JobsStatusTray_default as ot, BatchProgressList_default as p, generatedJobFormSchema as pt, ScheduleCalendar_default as q, FitPanel_default as r, ExperimentTimeline_default as rt, ExperimentSelectorModal_default as s, GeneratedResultRenderer_default as st, components_exports as t, WellPlate_default as tt, TimeRangeInput_default as u, mintPlotlyTemplate as ut, estimateSequenceRemainingSeconds as v, AppSidebar_default as vt, ScientificNumber_default as w, PluginIcon_default as wt, sequenceProgressPercent as x, StepWizard_default as xt, formatSequenceEta as y, FormBuilder_default as yt, ProgressBar_default as z, SearchableSelect_default as zt };
22865
22898
 
22866
- //# sourceMappingURL=components-CvY105kJ.js.map
22899
+ //# sourceMappingURL=components-vHfxV2PB.js.map