@morscherlab/mint-sdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseModal-B9UA8Y_I.js +165 -0
- package/dist/BaseModal-B9UA8Y_I.js.map +1 -0
- package/dist/BaseSelect-DksaKYq_.js +176 -0
- package/dist/BaseSelect-DksaKYq_.js.map +1 -0
- package/dist/ExperimentPopover-CCYB1oWp.js +361 -0
- package/dist/ExperimentPopover-CCYB1oWp.js.map +1 -0
- package/dist/ExperimentPopover-D0bg_fqM.js +3 -0
- package/dist/ExperimentSelectorModal-B_kPbXcg.js +4 -0
- package/dist/ExperimentSelectorModal-wm7yUdAr.js +720 -0
- package/dist/ExperimentSelectorModal-wm7yUdAr.js.map +1 -0
- package/dist/SettingsModal-L7Ejny45.js +5 -0
- package/dist/SettingsModal-LEKI6Ebl.js +521 -0
- package/dist/SettingsModal-LEKI6Ebl.js.map +1 -0
- package/dist/{auth-BulIv_km.js → auth-D9q2GIcv.js} +3 -80
- package/dist/auth-D9q2GIcv.js.map +1 -0
- package/dist/components/DataFrame.vue.d.ts +3 -0
- package/dist/components/ExperimentDataViewer.vue.d.ts +2 -0
- package/dist/components/PluginWorkspaceView.vue.d.ts +2 -2
- package/dist/components/index.js +7 -2
- package/dist/{components-DtX3LDLq.js → components-CdjRzHI2.js} +533 -2025
- package/dist/components-CdjRzHI2.js.map +1 -0
- package/dist/composables/index.js +9 -3
- package/dist/composables/usePluginClient.d.ts +2 -1
- package/dist/{composables-wNt7VtkF.js → composables-DJgqPrlR.js} +7 -12
- package/dist/{composables-wNt7VtkF.js.map → composables-DJgqPrlR.js.map} +1 -1
- package/dist/experiment-utils-hGXMHlAc.js +109 -0
- package/dist/experiment-utils-hGXMHlAc.js.map +1 -0
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/install.js +7 -2
- package/dist/install.js.map +1 -1
- package/dist/permissions.js +81 -0
- package/dist/permissions.js.map +1 -0
- package/dist/stores/index.js +1 -1
- package/dist/styles.css +3233 -3185
- package/dist/templates/index.js +3 -1
- package/dist/templates-Do43ZIMb.js +5065 -0
- package/dist/templates-Do43ZIMb.js.map +1 -0
- package/dist/{templates-DSbHJC4v.js → useControlSchema-0n8Bcftq.js} +10 -5335
- package/dist/useControlSchema-0n8Bcftq.js.map +1 -0
- package/dist/useDropdownState-Ben4DnjJ.js +47 -0
- package/dist/useDropdownState-Ben4DnjJ.js.map +1 -0
- package/dist/useEventListener-CfVkP9Xz.js +57 -0
- package/dist/useEventListener-CfVkP9Xz.js.map +1 -0
- package/dist/useExperimentSelector-BpZklTbV.js +469 -0
- package/dist/useExperimentSelector-BpZklTbV.js.map +1 -0
- package/dist/useFormBuilder-COfYWDuC.js +729 -0
- package/dist/useFormBuilder-COfYWDuC.js.map +1 -0
- package/dist/{useProtocolTemplates-DwBhEPPU.js → useProtocolTemplates-TUQO_F3n.js} +8 -1298
- package/dist/useProtocolTemplates-TUQO_F3n.js.map +1 -0
- package/dist/utils/pluginIcon.d.ts +29 -2
- package/package.json +5 -1
- package/src/__tests__/components/DataFrame.test.ts +37 -0
- package/src/__tests__/components/PluginIcon.test.ts +77 -0
- package/src/__tests__/composables/usePluginClient.test.ts +11 -10
- package/src/components/AppTopBar.vue +7 -6
- package/src/components/DataFrame.vue +27 -2
- package/src/components/ExperimentDataViewer.vue +5 -1
- package/src/components/PluginIcon.story.vue +31 -1
- package/src/components/PluginIcon.vue +94 -4
- package/src/composables/usePluginClient.ts +3 -12
- package/src/styles/components/dataframe.css +26 -0
- package/src/styles/components/plugin-icon.css +5 -0
- package/src/utils/pluginIcon.ts +159 -2
- package/dist/auth-BulIv_km.js.map +0 -1
- package/dist/components-DtX3LDLq.js.map +0 -1
- package/dist/templates-DSbHJC4v.js.map +0 -1
- package/dist/useProtocolTemplates-DwBhEPPU.js.map +0 -1
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { a as BasePill_default, i as Skeleton_default, n as ExperimentCodeBadge_default, o as BaseButton_default, r as EmptyState_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-wm7yUdAr.js";
|
|
2
|
+
import { n as normalizeOptionInput, r as BaseInput_default, t as BaseSelect_default } from "./BaseSelect-DksaKYq_.js";
|
|
3
|
+
import { A as useConcentrationUnits, B as TagsInput_default, I as useChemicalFormula, J as formatTime, L as DateTimePicker_default, M as SequenceInput_default, O as ConcentrationInput_default, P as FormulaInput_default, R as FileUploader_default, T as getDefaultControlView, U as compareTime, V as TimePicker_default, W as durationMinutes, _ as controlsToFormSchema, at as MultiSelect_default, ct as BaseSlider_default, dt as BaseCheckbox_default, f as resolveControlModel, ft as Tooltip_default, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, it as DatePicker_default, j as MoleculeInput_default, k as UnitInput_default, lt as BaseRadioGroup_default, m as controlValuesToComponentBindingsById, o as defineDoseDesignControlModel, ot as useListSelection, p as controlValuesToComponentBindings, pt as BaseTextarea_default, q as formatDuration, r as getControlDefaults, u as useControlWorkspace, ut as BaseToggle_default, w as controlsToViewItems, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as NumberInput_default } from "./useControlSchema-0n8Bcftq.js";
|
|
4
|
+
import { t as useEventListener } from "./useEventListener-CfVkP9Xz.js";
|
|
5
|
+
import { a as recordValuesEqualForKeys, c as normalizeLabelItemInput, i as pickExistingRecordKeys, n as FormFieldRendererInternal_default, o as FormField_default, r as formSchemaFieldNames, s as normalizeItemInput, t as SettingsModal_default } from "./SettingsModal-LEKI6Ebl.js";
|
|
6
|
+
import { t as BaseModal_default } from "./BaseModal-B9UA8Y_I.js";
|
|
7
|
+
import { t as useDropdownState } from "./useDropdownState-Ben4DnjJ.js";
|
|
8
|
+
import { A as parseCSV, B as useTheme, C as useExpansionSet, F as classKey, I as useWellPlateEditor, K as useSortedItems, L as useDoseCalculator, P as DEFAULT_COLORS, R as APP_EXPERIMENT_KEY, V as useToast, W as useTextSearch, _ as useScheduleDrag, a as useReagentSeries, c as useBioTemplatePresetWorkspace, k as useAutoGroup, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, v as useExperimentSamples, w as useSampleGroups, y as useExperimentData, z as useAppExperiment } from "./useProtocolTemplates-TUQO_F3n.js";
|
|
9
|
+
import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-COfYWDuC.js";
|
|
10
|
+
import { i as useApi } from "./useExperimentSelector-BpZklTbV.js";
|
|
11
|
+
import { n as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-CCYB1oWp.js";
|
|
12
|
+
import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-Do43ZIMb.js";
|
|
13
|
+
import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toRaw, unref, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
5
14
|
//#region \0rolldown/runtime.js
|
|
6
15
|
var __defProp = Object.defineProperty;
|
|
7
16
|
var __exportAll = (all, no_symbols) => {
|
|
@@ -14,75 +23,10 @@ var __exportAll = (all, no_symbols) => {
|
|
|
14
23
|
return target;
|
|
15
24
|
};
|
|
16
25
|
//#endregion
|
|
17
|
-
//#region src/components/BaseButton.vue?vue&type=script&setup=true&lang.ts
|
|
18
|
-
var _hoisted_1$77 = ["type", "disabled"];
|
|
19
|
-
var _hoisted_2$68 = {
|
|
20
|
-
key: 0,
|
|
21
|
-
class: "mint-button__spinner",
|
|
22
|
-
fill: "none",
|
|
23
|
-
viewBox: "0 0 24 24"
|
|
24
|
-
};
|
|
25
|
-
//#endregion
|
|
26
|
-
//#region src/components/BaseButton.vue
|
|
27
|
-
var BaseButton_default = /* @__PURE__ */ defineComponent({
|
|
28
|
-
__name: "BaseButton",
|
|
29
|
-
props: {
|
|
30
|
-
variant: { default: "primary" },
|
|
31
|
-
size: { default: "md" },
|
|
32
|
-
disabled: {
|
|
33
|
-
type: Boolean,
|
|
34
|
-
default: false
|
|
35
|
-
},
|
|
36
|
-
loading: {
|
|
37
|
-
type: Boolean,
|
|
38
|
-
default: false
|
|
39
|
-
},
|
|
40
|
-
type: { default: "button" },
|
|
41
|
-
fullWidth: {
|
|
42
|
-
type: Boolean,
|
|
43
|
-
default: false
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
emits: ["click"],
|
|
47
|
-
setup(__props, { emit: __emit }) {
|
|
48
|
-
/** Renders a styled `<button>` with variant, size, loading spinner, and full-width options. */
|
|
49
|
-
const props = __props;
|
|
50
|
-
const emit = __emit;
|
|
51
|
-
function handleClick(event) {
|
|
52
|
-
if (!props.disabled && !props.loading) emit("click", event);
|
|
53
|
-
}
|
|
54
|
-
return (_ctx, _cache) => {
|
|
55
|
-
return openBlock(), createElementBlock("button", {
|
|
56
|
-
type: __props.type,
|
|
57
|
-
disabled: __props.disabled || __props.loading,
|
|
58
|
-
class: normalizeClass([
|
|
59
|
-
"mint-button",
|
|
60
|
-
`mint-button--${__props.variant}`,
|
|
61
|
-
`mint-button--${__props.size}`,
|
|
62
|
-
__props.fullWidth ? "mint-button--full-width" : "",
|
|
63
|
-
__props.disabled || __props.loading ? "mint-button--disabled" : ""
|
|
64
|
-
]),
|
|
65
|
-
onClick: handleClick
|
|
66
|
-
}, [__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$68, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
|
|
67
|
-
style: { "opacity": "0.25" },
|
|
68
|
-
cx: "12",
|
|
69
|
-
cy: "12",
|
|
70
|
-
r: "10",
|
|
71
|
-
stroke: "currentColor",
|
|
72
|
-
"stroke-width": "4"
|
|
73
|
-
}, null, -1), createElementVNode("path", {
|
|
74
|
-
style: { "opacity": "0.75" },
|
|
75
|
-
fill: "currentColor",
|
|
76
|
-
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
77
|
-
}, null, -1)])])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$77);
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
//#endregion
|
|
82
26
|
//#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
|
|
83
|
-
var _hoisted_1$
|
|
84
|
-
var _hoisted_2$
|
|
85
|
-
var _hoisted_3$
|
|
27
|
+
var _hoisted_1$67 = { class: "mint-color-slider__row" };
|
|
28
|
+
var _hoisted_2$59 = { class: "mint-color-slider__track" };
|
|
29
|
+
var _hoisted_3$54 = [
|
|
86
30
|
"value",
|
|
87
31
|
"min",
|
|
88
32
|
"max",
|
|
@@ -197,7 +141,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
|
|
|
197
141
|
emit("update:modelValue", Number(target.value));
|
|
198
142
|
}
|
|
199
143
|
return (_ctx, _cache) => {
|
|
200
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$
|
|
144
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-color-slider", { "mint-color-slider--disabled": __props.disabled }]) }, [createElementVNode("div", _hoisted_1$67, [createElementVNode("div", _hoisted_2$59, [createElementVNode("input", {
|
|
201
145
|
type: "range",
|
|
202
146
|
value: currentValue.value,
|
|
203
147
|
min: __props.min,
|
|
@@ -214,7 +158,7 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
|
|
|
214
158
|
"--thumb-size": `${sizeConfig.value.thumb}px`
|
|
215
159
|
}),
|
|
216
160
|
onInput: handleInput
|
|
217
|
-
}, null, 44, _hoisted_3$
|
|
161
|
+
}, null, 44, _hoisted_3$54)]), __props.showValue ? (openBlock(), createElementBlock("div", {
|
|
218
162
|
key: 0,
|
|
219
163
|
class: "mint-color-slider__badge",
|
|
220
164
|
style: normalizeStyle({
|
|
@@ -232,27 +176,14 @@ var ColorSlider_default = /* @__PURE__ */ defineComponent({
|
|
|
232
176
|
}
|
|
233
177
|
});
|
|
234
178
|
//#endregion
|
|
235
|
-
//#region src/utils/items.ts
|
|
236
|
-
function normalizeItemInput(item) {
|
|
237
|
-
if (typeof item === "object") return item;
|
|
238
|
-
return {
|
|
239
|
-
id: item,
|
|
240
|
-
label: item
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
function normalizeLabelItemInput(item) {
|
|
244
|
-
if (typeof item === "object") return item;
|
|
245
|
-
return { label: item };
|
|
246
|
-
}
|
|
247
|
-
//#endregion
|
|
248
179
|
//#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
|
|
249
|
-
var _hoisted_1$
|
|
180
|
+
var _hoisted_1$66 = [
|
|
250
181
|
"aria-selected",
|
|
251
182
|
"aria-disabled",
|
|
252
183
|
"onClick"
|
|
253
184
|
];
|
|
254
|
-
var _hoisted_2$
|
|
255
|
-
var _hoisted_3$
|
|
185
|
+
var _hoisted_2$58 = { class: "mint-tab__content" };
|
|
186
|
+
var _hoisted_3$53 = {
|
|
256
187
|
key: 0,
|
|
257
188
|
class: "mint-tab__icon mint-tab__icon--svg",
|
|
258
189
|
viewBox: "0 0 24 24",
|
|
@@ -263,13 +194,13 @@ var _hoisted_3$60 = {
|
|
|
263
194
|
"stroke-linejoin": "round",
|
|
264
195
|
"aria-hidden": "true"
|
|
265
196
|
};
|
|
266
|
-
var _hoisted_4$
|
|
267
|
-
var _hoisted_5$
|
|
268
|
-
var _hoisted_6$
|
|
197
|
+
var _hoisted_4$50 = ["d"];
|
|
198
|
+
var _hoisted_5$48 = ["d"];
|
|
199
|
+
var _hoisted_6$47 = {
|
|
269
200
|
key: 1,
|
|
270
201
|
class: "mint-tab__icon"
|
|
271
202
|
};
|
|
272
|
-
var _hoisted_7$
|
|
203
|
+
var _hoisted_7$43 = {
|
|
273
204
|
key: 2,
|
|
274
205
|
class: "mint-tab__badge"
|
|
275
206
|
};
|
|
@@ -314,193 +245,33 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
|
|
|
314
245
|
tab.disabled ? "mint-tab--disabled" : ""
|
|
315
246
|
]),
|
|
316
247
|
onClick: ($event) => selectTab(tab.id)
|
|
317
|
-
}, [createElementVNode("span", _hoisted_2$
|
|
318
|
-
isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$
|
|
248
|
+
}, [createElementVNode("span", _hoisted_2$58, [
|
|
249
|
+
isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_3$53, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
|
|
319
250
|
return openBlock(), createElementBlock("path", {
|
|
320
251
|
key: index,
|
|
321
252
|
d
|
|
322
|
-
}, null, 8, _hoisted_4$
|
|
253
|
+
}, null, 8, _hoisted_4$50);
|
|
323
254
|
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
324
255
|
key: 1,
|
|
325
256
|
d: tab.icon
|
|
326
|
-
}, null, 8, _hoisted_5$
|
|
257
|
+
}, null, 8, _hoisted_5$48))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_6$47, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
|
|
327
258
|
createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
|
|
328
|
-
tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$
|
|
329
|
-
])], 10, _hoisted_1$
|
|
259
|
+
tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_7$43, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
|
|
260
|
+
])], 10, _hoisted_1$66);
|
|
330
261
|
}), 128))], 2);
|
|
331
262
|
};
|
|
332
263
|
}
|
|
333
264
|
});
|
|
334
265
|
//#endregion
|
|
335
|
-
//#region src/components/BaseModal.vue?vue&type=script&setup=true&lang.ts
|
|
336
|
-
var _hoisted_1$74 = {
|
|
337
|
-
key: 0,
|
|
338
|
-
class: "mint-modal__grab-hint",
|
|
339
|
-
"aria-hidden": "true"
|
|
340
|
-
};
|
|
341
|
-
var _hoisted_2$65 = {
|
|
342
|
-
key: 1,
|
|
343
|
-
class: "mint-modal__header"
|
|
344
|
-
};
|
|
345
|
-
var _hoisted_3$59 = {
|
|
346
|
-
key: 0,
|
|
347
|
-
class: "mint-modal__header-text"
|
|
348
|
-
};
|
|
349
|
-
var _hoisted_4$55 = {
|
|
350
|
-
key: 0,
|
|
351
|
-
class: "mint-modal__title"
|
|
352
|
-
};
|
|
353
|
-
var _hoisted_5$53 = {
|
|
354
|
-
key: 1,
|
|
355
|
-
class: "mint-modal__subtitle"
|
|
356
|
-
};
|
|
357
|
-
var _hoisted_6$52 = { class: "mint-modal__body" };
|
|
358
|
-
var _hoisted_7$46 = {
|
|
359
|
-
key: 2,
|
|
360
|
-
class: "mint-modal__footer"
|
|
361
|
-
};
|
|
362
|
-
//#endregion
|
|
363
|
-
//#region src/components/BaseModal.vue
|
|
364
|
-
var BaseModal_default = /* @__PURE__ */ defineComponent({
|
|
365
|
-
__name: "BaseModal",
|
|
366
|
-
props: {
|
|
367
|
-
modelValue: { type: Boolean },
|
|
368
|
-
title: {},
|
|
369
|
-
subtitle: {},
|
|
370
|
-
size: { default: "md" },
|
|
371
|
-
variant: { default: "centered" },
|
|
372
|
-
closable: {
|
|
373
|
-
type: Boolean,
|
|
374
|
-
default: true
|
|
375
|
-
},
|
|
376
|
-
closeOnOverlay: {
|
|
377
|
-
type: Boolean,
|
|
378
|
-
default: false
|
|
379
|
-
},
|
|
380
|
-
closeOnEscape: {
|
|
381
|
-
type: Boolean,
|
|
382
|
-
default: true
|
|
383
|
-
}
|
|
384
|
-
},
|
|
385
|
-
emits: ["update:modelValue", "close"],
|
|
386
|
-
setup(__props, { emit: __emit }) {
|
|
387
|
-
/** Modal dialog with backdrop, focus trap, Escape-to-close, and configurable size/variant. */
|
|
388
|
-
const props = __props;
|
|
389
|
-
const emit = __emit;
|
|
390
|
-
const containerRef = ref(null);
|
|
391
|
-
let previouslyFocused = null;
|
|
392
|
-
const FOCUSABLE_SELECTOR = [
|
|
393
|
-
"a[href]",
|
|
394
|
-
"button:not([disabled])",
|
|
395
|
-
"input:not([disabled])",
|
|
396
|
-
"select:not([disabled])",
|
|
397
|
-
"textarea:not([disabled])",
|
|
398
|
-
"[tabindex]:not([tabindex=\"-1\"])"
|
|
399
|
-
].join(", ");
|
|
400
|
-
function getFocusableElements() {
|
|
401
|
-
if (!containerRef.value) return [];
|
|
402
|
-
return Array.from(containerRef.value.querySelectorAll(FOCUSABLE_SELECTOR));
|
|
403
|
-
}
|
|
404
|
-
function handleKeydown(event) {
|
|
405
|
-
if (event.key === "Escape" && props.closeOnEscape && props.modelValue) {
|
|
406
|
-
close();
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
if (event.key !== "Tab" || !containerRef.value) return;
|
|
410
|
-
const focusable = getFocusableElements();
|
|
411
|
-
if (focusable.length === 0) {
|
|
412
|
-
event.preventDefault();
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
|
-
const first = focusable[0];
|
|
416
|
-
const last = focusable[focusable.length - 1];
|
|
417
|
-
if (event.shiftKey && document.activeElement === first) {
|
|
418
|
-
event.preventDefault();
|
|
419
|
-
last.focus();
|
|
420
|
-
} else if (!event.shiftKey && document.activeElement === last) {
|
|
421
|
-
event.preventDefault();
|
|
422
|
-
first.focus();
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
function close() {
|
|
426
|
-
if (props.closable) {
|
|
427
|
-
emit("update:modelValue", false);
|
|
428
|
-
emit("close");
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
function handleOverlayClick(event) {
|
|
432
|
-
if (props.closeOnOverlay && event.target === event.currentTarget) close();
|
|
433
|
-
}
|
|
434
|
-
watch(() => props.modelValue, async (isOpen) => {
|
|
435
|
-
if (isOpen) {
|
|
436
|
-
previouslyFocused = document.activeElement;
|
|
437
|
-
document.body.style.overflow = "hidden";
|
|
438
|
-
await nextTick();
|
|
439
|
-
const focusable = getFocusableElements();
|
|
440
|
-
if (focusable.length > 0) focusable[0].focus();
|
|
441
|
-
else containerRef.value?.focus();
|
|
442
|
-
} else {
|
|
443
|
-
document.body.style.overflow = "";
|
|
444
|
-
previouslyFocused?.focus();
|
|
445
|
-
previouslyFocused = null;
|
|
446
|
-
}
|
|
447
|
-
});
|
|
448
|
-
useEventListener(() => document, "keydown", handleKeydown);
|
|
449
|
-
onUnmounted(() => {
|
|
450
|
-
document.body.style.overflow = "";
|
|
451
|
-
});
|
|
452
|
-
return (_ctx, _cache) => {
|
|
453
|
-
return openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(Transition, { name: `modal-${__props.variant}` }, {
|
|
454
|
-
default: withCtx(() => [__props.modelValue ? (openBlock(), createElementBlock("div", {
|
|
455
|
-
key: 0,
|
|
456
|
-
class: normalizeClass(["mint-modal", `mint-modal--${__props.variant}`]),
|
|
457
|
-
onClick: handleOverlayClick
|
|
458
|
-
}, [_cache[1] || (_cache[1] = createElementVNode("div", { class: "mint-modal__overlay" }, null, -1)), createElementVNode("div", {
|
|
459
|
-
ref_key: "containerRef",
|
|
460
|
-
ref: containerRef,
|
|
461
|
-
class: normalizeClass([
|
|
462
|
-
"mint-modal__container",
|
|
463
|
-
`mint-modal__container--${__props.size}`,
|
|
464
|
-
`mint-modal__container--${__props.variant}`
|
|
465
|
-
]),
|
|
466
|
-
role: "dialog",
|
|
467
|
-
"aria-modal": "true",
|
|
468
|
-
tabindex: "-1"
|
|
469
|
-
}, [
|
|
470
|
-
__props.variant === "sheet" ? (openBlock(), createElementBlock("div", _hoisted_1$74)) : createCommentVNode("", true),
|
|
471
|
-
__props.title || __props.subtitle || __props.closable || _ctx.$slots.header ? (openBlock(), createElementBlock("div", _hoisted_2$65, [__props.title || __props.subtitle || _ctx.$slots.header ? (openBlock(), createElementBlock("div", _hoisted_3$59, [renderSlot(_ctx.$slots, "header", {}, () => [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$55, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_5$53, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])) : createCommentVNode("", true), __props.closable ? (openBlock(), createElementBlock("button", {
|
|
472
|
-
key: 1,
|
|
473
|
-
type: "button",
|
|
474
|
-
class: "mint-modal__close",
|
|
475
|
-
"aria-label": "Close modal",
|
|
476
|
-
onClick: close
|
|
477
|
-
}, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
|
|
478
|
-
class: "mint-modal__close-icon",
|
|
479
|
-
fill: "none",
|
|
480
|
-
stroke: "currentColor",
|
|
481
|
-
"stroke-width": "2",
|
|
482
|
-
"stroke-linecap": "round",
|
|
483
|
-
"stroke-linejoin": "round",
|
|
484
|
-
viewBox: "0 0 24 24"
|
|
485
|
-
}, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])) : createCommentVNode("", true)])) : createCommentVNode("", true),
|
|
486
|
-
createElementVNode("div", _hoisted_6$52, [renderSlot(_ctx.$slots, "default")]),
|
|
487
|
-
_ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_7$46, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
|
|
488
|
-
], 2)], 2)) : createCommentVNode("", true)]),
|
|
489
|
-
_: 3
|
|
490
|
-
}, 8, ["name"])]);
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
});
|
|
494
|
-
//#endregion
|
|
495
266
|
//#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
|
|
496
|
-
var _hoisted_1$
|
|
267
|
+
var _hoisted_1$65 = [
|
|
497
268
|
"aria-checked",
|
|
498
269
|
"disabled",
|
|
499
270
|
"onClick",
|
|
500
271
|
"onKeydown"
|
|
501
272
|
];
|
|
502
|
-
var _hoisted_2$
|
|
503
|
-
var _hoisted_3$
|
|
273
|
+
var _hoisted_2$57 = { class: "mint-segmented-control__label" };
|
|
274
|
+
var _hoisted_3$52 = {
|
|
504
275
|
key: 0,
|
|
505
276
|
class: "mint-segmented-control__description"
|
|
506
277
|
};
|
|
@@ -572,107 +343,35 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
|
|
|
572
343
|
]),
|
|
573
344
|
onClick: ($event) => handleSelect(option),
|
|
574
345
|
onKeydown: ($event) => handleKeydown($event, option)
|
|
575
|
-
}, [createElementVNode("span", _hoisted_2$
|
|
346
|
+
}, [createElementVNode("span", _hoisted_2$57, toDisplayString(option.label), 1), option.description && __props.variant === "card" ? (openBlock(), createElementBlock("span", _hoisted_3$52, toDisplayString(option.description), 1)) : createCommentVNode("", true)], 42, _hoisted_1$65);
|
|
576
347
|
}), 128))], 2);
|
|
577
348
|
};
|
|
578
349
|
}
|
|
579
350
|
});
|
|
580
351
|
//#endregion
|
|
581
|
-
//#region src/components/BasePill.vue?vue&type=script&setup=true&lang.ts
|
|
582
|
-
var _hoisted_1$72 = {
|
|
583
|
-
key: 0,
|
|
584
|
-
class: "mint-pill__icon"
|
|
585
|
-
};
|
|
586
|
-
var _hoisted_2$63 = { class: "mint-pill__label" };
|
|
587
|
-
//#endregion
|
|
588
|
-
//#region src/components/BasePill.vue
|
|
589
|
-
var BasePill_default = /* @__PURE__ */ defineComponent({
|
|
590
|
-
__name: "BasePill",
|
|
591
|
-
props: {
|
|
592
|
-
variant: { default: "default" },
|
|
593
|
-
color: { default: void 0 },
|
|
594
|
-
size: { default: "md" },
|
|
595
|
-
removable: {
|
|
596
|
-
type: Boolean,
|
|
597
|
-
default: false
|
|
598
|
-
},
|
|
599
|
-
disabled: {
|
|
600
|
-
type: Boolean,
|
|
601
|
-
default: false
|
|
602
|
-
},
|
|
603
|
-
icon: {
|
|
604
|
-
type: Boolean,
|
|
605
|
-
default: false
|
|
606
|
-
}
|
|
607
|
-
},
|
|
608
|
-
emits: ["remove"],
|
|
609
|
-
setup(__props, { emit: __emit }) {
|
|
610
|
-
/** Compact label for tags, status indicators, and badges; supports removable and icon slots. */
|
|
611
|
-
const props = __props;
|
|
612
|
-
/**
|
|
613
|
-
* @event remove - Emitted when the remove button is clicked
|
|
614
|
-
*/
|
|
615
|
-
const emit = __emit;
|
|
616
|
-
function handleRemove(event) {
|
|
617
|
-
event.stopPropagation();
|
|
618
|
-
if (!props.disabled) emit("remove");
|
|
619
|
-
}
|
|
620
|
-
return (_ctx, _cache) => {
|
|
621
|
-
return openBlock(), createElementBlock("span", { class: normalizeClass([
|
|
622
|
-
"mint-pill",
|
|
623
|
-
`mint-pill--${__props.variant}`,
|
|
624
|
-
__props.color && `mint-pill--${__props.color}`,
|
|
625
|
-
`mint-pill--${__props.size}`,
|
|
626
|
-
{
|
|
627
|
-
"mint-pill--disabled": __props.disabled,
|
|
628
|
-
"mint-pill--with-icon": __props.icon
|
|
629
|
-
}
|
|
630
|
-
]) }, [
|
|
631
|
-
__props.icon ? (openBlock(), createElementBlock("span", _hoisted_1$72, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
|
|
632
|
-
createElementVNode("span", _hoisted_2$63, [renderSlot(_ctx.$slots, "default")]),
|
|
633
|
-
__props.removable && !__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
634
|
-
key: 1,
|
|
635
|
-
type: "button",
|
|
636
|
-
class: "mint-pill__remove",
|
|
637
|
-
"aria-label": "Remove",
|
|
638
|
-
onClick: handleRemove
|
|
639
|
-
}, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
|
|
640
|
-
class: "mint-pill__remove-icon",
|
|
641
|
-
fill: "none",
|
|
642
|
-
stroke: "currentColor",
|
|
643
|
-
"stroke-width": "2",
|
|
644
|
-
"stroke-linecap": "round",
|
|
645
|
-
"stroke-linejoin": "round",
|
|
646
|
-
viewBox: "0 0 24 24"
|
|
647
|
-
}, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])) : createCommentVNode("", true)
|
|
648
|
-
], 2);
|
|
649
|
-
};
|
|
650
|
-
}
|
|
651
|
-
});
|
|
652
|
-
//#endregion
|
|
653
352
|
//#region src/components/DropdownButton.vue?vue&type=script&setup=true&lang.ts
|
|
654
|
-
var _hoisted_1$
|
|
655
|
-
var _hoisted_2$
|
|
353
|
+
var _hoisted_1$64 = ["disabled", "aria-expanded"];
|
|
354
|
+
var _hoisted_2$56 = {
|
|
656
355
|
key: 0,
|
|
657
356
|
class: "mint-dropdown-button__spinner",
|
|
658
357
|
viewBox: "0 0 24 24",
|
|
659
358
|
fill: "none",
|
|
660
359
|
"aria-hidden": "true"
|
|
661
360
|
};
|
|
662
|
-
var _hoisted_3$
|
|
663
|
-
var _hoisted_4$
|
|
664
|
-
var _hoisted_5$
|
|
361
|
+
var _hoisted_3$51 = { class: "mint-dropdown-button__label" };
|
|
362
|
+
var _hoisted_4$49 = ["aria-activedescendant"];
|
|
363
|
+
var _hoisted_5$47 = [
|
|
665
364
|
"id",
|
|
666
365
|
"aria-selected",
|
|
667
366
|
"aria-disabled",
|
|
668
367
|
"onClick"
|
|
669
368
|
];
|
|
670
|
-
var _hoisted_6$
|
|
671
|
-
var _hoisted_7$
|
|
369
|
+
var _hoisted_6$46 = { class: "mint-dropdown-button__option-label" };
|
|
370
|
+
var _hoisted_7$42 = {
|
|
672
371
|
key: 0,
|
|
673
372
|
class: "mint-dropdown-button__option-description"
|
|
674
373
|
};
|
|
675
|
-
var _hoisted_8$
|
|
374
|
+
var _hoisted_8$39 = {
|
|
676
375
|
key: 1,
|
|
677
376
|
class: "mint-dropdown-button__option-check",
|
|
678
377
|
viewBox: "0 0 24 24",
|
|
@@ -747,7 +446,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
747
446
|
"aria-haspopup": "listbox",
|
|
748
447
|
onClick: toggle
|
|
749
448
|
}, [
|
|
750
|
-
__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$
|
|
449
|
+
__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_2$56, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
|
|
751
450
|
cx: "12",
|
|
752
451
|
cy: "12",
|
|
753
452
|
r: "10",
|
|
@@ -760,7 +459,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
760
459
|
"stroke-width": "3",
|
|
761
460
|
"stroke-linecap": "round"
|
|
762
461
|
}, null, -1)])])) : createCommentVNode("", true),
|
|
763
|
-
createElementVNode("span", _hoisted_3$
|
|
462
|
+
createElementVNode("span", _hoisted_3$51, toDisplayString(selectedLabel.value), 1),
|
|
764
463
|
(openBlock(), createElementBlock("svg", {
|
|
765
464
|
class: normalizeClass(["mint-dropdown-button__chevron", { "mint-dropdown-button__chevron--open": unref(isOpen) }]),
|
|
766
465
|
viewBox: "0 0 24 24",
|
|
@@ -770,7 +469,7 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
770
469
|
"stroke-linecap": "round",
|
|
771
470
|
"stroke-linejoin": "round"
|
|
772
471
|
}, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))
|
|
773
|
-
], 10, _hoisted_1$
|
|
472
|
+
], 10, _hoisted_1$64), createVNode(Transition, { name: "mint-dropdown-button-menu" }, {
|
|
774
473
|
default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("ul", {
|
|
775
474
|
key: 0,
|
|
776
475
|
class: "mint-dropdown-button__menu",
|
|
@@ -789,11 +488,11 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
789
488
|
}]),
|
|
790
489
|
onClick: ($event) => selectOption(option)
|
|
791
490
|
}, [
|
|
792
|
-
createElementVNode("span", _hoisted_6$
|
|
793
|
-
option.description ? (openBlock(), createElementBlock("span", _hoisted_7$
|
|
794
|
-
option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$
|
|
795
|
-
], 10, _hoisted_5$
|
|
796
|
-
}), 128))], 8, _hoisted_4$
|
|
491
|
+
createElementVNode("span", _hoisted_6$46, toDisplayString(option.label), 1),
|
|
492
|
+
option.description ? (openBlock(), createElementBlock("span", _hoisted_7$42, toDisplayString(option.description), 1)) : createCommentVNode("", true),
|
|
493
|
+
option.value === __props.modelValue ? (openBlock(), createElementBlock("svg", _hoisted_8$39, [..._cache[2] || (_cache[2] = [createElementVNode("path", { d: "M20 6 9 17l-5-5" }, null, -1)])])) : createCommentVNode("", true)
|
|
494
|
+
], 10, _hoisted_5$47);
|
|
495
|
+
}), 128))], 8, _hoisted_4$49)) : createCommentVNode("", true)]),
|
|
797
496
|
_: 1
|
|
798
497
|
})], 512);
|
|
799
498
|
};
|
|
@@ -801,25 +500,25 @@ var DropdownButton_default = /* @__PURE__ */ defineComponent({
|
|
|
801
500
|
});
|
|
802
501
|
//#endregion
|
|
803
502
|
//#region src/components/Calendar.vue?vue&type=script&setup=true&lang.ts
|
|
804
|
-
var _hoisted_1$
|
|
805
|
-
var _hoisted_2$
|
|
503
|
+
var _hoisted_1$63 = { class: "mint-calendar" };
|
|
504
|
+
var _hoisted_2$55 = {
|
|
806
505
|
key: 0,
|
|
807
506
|
class: "mint-calendar__header"
|
|
808
507
|
};
|
|
809
|
-
var _hoisted_3$
|
|
810
|
-
var _hoisted_4$
|
|
811
|
-
var _hoisted_5$
|
|
812
|
-
var _hoisted_6$
|
|
508
|
+
var _hoisted_3$50 = { class: "mint-calendar__title" };
|
|
509
|
+
var _hoisted_4$48 = { class: "mint-calendar__weekdays" };
|
|
510
|
+
var _hoisted_5$46 = { class: "mint-calendar__grid" };
|
|
511
|
+
var _hoisted_6$45 = [
|
|
813
512
|
"disabled",
|
|
814
513
|
"onClick",
|
|
815
514
|
"onMouseenter"
|
|
816
515
|
];
|
|
817
|
-
var _hoisted_7$
|
|
818
|
-
var _hoisted_8$
|
|
516
|
+
var _hoisted_7$41 = { class: "mint-calendar__day-number" };
|
|
517
|
+
var _hoisted_8$38 = {
|
|
819
518
|
key: 0,
|
|
820
519
|
class: "mint-calendar__markers"
|
|
821
520
|
};
|
|
822
|
-
var _hoisted_9$
|
|
521
|
+
var _hoisted_9$34 = ["title"];
|
|
823
522
|
//#endregion
|
|
824
523
|
//#region src/components/Calendar.vue
|
|
825
524
|
var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
@@ -1035,8 +734,8 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1035
734
|
emit("navigate", "next", currentMonth.value, currentYear.value);
|
|
1036
735
|
}
|
|
1037
736
|
return (_ctx, _cache) => {
|
|
1038
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
1039
|
-
__props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
737
|
+
return openBlock(), createElementBlock("div", _hoisted_1$63, [
|
|
738
|
+
__props.showNavigation ? (openBlock(), createElementBlock("div", _hoisted_2$55, [
|
|
1040
739
|
createElementVNode("button", {
|
|
1041
740
|
type: "button",
|
|
1042
741
|
class: "mint-calendar__nav-btn",
|
|
@@ -1055,7 +754,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1055
754
|
year: currentYear.value,
|
|
1056
755
|
prevMonth,
|
|
1057
756
|
nextMonth
|
|
1058
|
-
}, () => [createElementVNode("span", _hoisted_3$
|
|
757
|
+
}, () => [createElementVNode("span", _hoisted_3$50, toDisplayString(monthLabel.value), 1)]),
|
|
1059
758
|
createElementVNode("button", {
|
|
1060
759
|
type: "button",
|
|
1061
760
|
class: "mint-calendar__nav-btn",
|
|
@@ -1070,7 +769,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1070
769
|
"stroke-linejoin": "round"
|
|
1071
770
|
}, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])])
|
|
1072
771
|
])) : createCommentVNode("", true),
|
|
1073
|
-
createElementVNode("div", _hoisted_4$
|
|
772
|
+
createElementVNode("div", _hoisted_4$48, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekDayLabels.value, (label, i) => {
|
|
1074
773
|
return openBlock(), createElementBlock("span", {
|
|
1075
774
|
key: i,
|
|
1076
775
|
class: "mint-calendar__weekday"
|
|
@@ -1079,7 +778,7 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1079
778
|
index: i
|
|
1080
779
|
}, () => [createTextVNode(toDisplayString(label), 1)])]);
|
|
1081
780
|
}), 128))]),
|
|
1082
|
-
createElementVNode("div", _hoisted_5$
|
|
781
|
+
createElementVNode("div", _hoisted_5$46, [(openBlock(true), createElementBlock(Fragment, null, renderList(calendarDays.value, (day, i) => {
|
|
1083
782
|
return openBlock(), createElementBlock("button", {
|
|
1084
783
|
key: i,
|
|
1085
784
|
type: "button",
|
|
@@ -1094,14 +793,14 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1094
793
|
}]),
|
|
1095
794
|
onClick: ($event) => handleDayClick(day),
|
|
1096
795
|
onMouseenter: ($event) => handleDayHover(day)
|
|
1097
|
-
}, [renderSlot(_ctx.$slots, "day-content", { day }, () => [createElementVNode("span", _hoisted_7$
|
|
796
|
+
}, [renderSlot(_ctx.$slots, "day-content", { day }, () => [createElementVNode("span", _hoisted_7$41, toDisplayString(day.dayOfMonth), 1), day.markers.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_8$38, [(openBlock(true), createElementBlock(Fragment, null, renderList(day.markers.slice(0, 3), (marker, mi) => {
|
|
1098
797
|
return openBlock(), createElementBlock("span", {
|
|
1099
798
|
key: mi,
|
|
1100
799
|
class: normalizeClass(["mint-calendar__marker", `mint-calendar__marker--${marker.type ?? "dot"}`]),
|
|
1101
800
|
style: normalizeStyle(marker.color ? { "--marker-color": marker.color } : {}),
|
|
1102
801
|
title: marker.label
|
|
1103
|
-
}, null, 14, _hoisted_9$
|
|
1104
|
-
}), 128))])) : createCommentVNode("", true)])], 42, _hoisted_6$
|
|
802
|
+
}, null, 14, _hoisted_9$34);
|
|
803
|
+
}), 128))])) : createCommentVNode("", true)])], 42, _hoisted_6$45);
|
|
1105
804
|
}), 128))])
|
|
1106
805
|
]);
|
|
1107
806
|
};
|
|
@@ -1109,45 +808,50 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
|
|
|
1109
808
|
});
|
|
1110
809
|
//#endregion
|
|
1111
810
|
//#region src/components/DataFrame.vue?vue&type=script&setup=true&lang.ts
|
|
1112
|
-
var _hoisted_1$
|
|
811
|
+
var _hoisted_1$62 = {
|
|
1113
812
|
key: 0,
|
|
1114
813
|
class: "mint-dataframe__header"
|
|
1115
814
|
};
|
|
1116
|
-
var _hoisted_2$
|
|
1117
|
-
var _hoisted_3$
|
|
1118
|
-
var _hoisted_4$
|
|
1119
|
-
var _hoisted_5$
|
|
815
|
+
var _hoisted_2$54 = { class: "mint-dataframe__search-wrapper" };
|
|
816
|
+
var _hoisted_3$49 = ["placeholder"];
|
|
817
|
+
var _hoisted_4$47 = { class: "mint-dataframe__table" };
|
|
818
|
+
var _hoisted_5$45 = {
|
|
1120
819
|
key: 0,
|
|
1121
820
|
class: "mint-dataframe__th mint-dataframe__th--checkbox"
|
|
1122
821
|
};
|
|
1123
|
-
var _hoisted_6$
|
|
1124
|
-
var _hoisted_7$
|
|
1125
|
-
var _hoisted_8$
|
|
1126
|
-
var _hoisted_9$
|
|
1127
|
-
|
|
822
|
+
var _hoisted_6$44 = ["checked", "indeterminate"];
|
|
823
|
+
var _hoisted_7$40 = ["onClick"];
|
|
824
|
+
var _hoisted_8$37 = { class: "mint-dataframe__th-content" };
|
|
825
|
+
var _hoisted_9$33 = [
|
|
826
|
+
"tabindex",
|
|
827
|
+
"role",
|
|
828
|
+
"onClick",
|
|
829
|
+
"onKeydown"
|
|
830
|
+
];
|
|
831
|
+
var _hoisted_10$29 = {
|
|
1128
832
|
key: 0,
|
|
1129
833
|
class: "mint-dataframe__td mint-dataframe__td--checkbox"
|
|
1130
834
|
};
|
|
1131
|
-
var _hoisted_11$
|
|
1132
|
-
var _hoisted_12$
|
|
1133
|
-
var _hoisted_13$
|
|
835
|
+
var _hoisted_11$27 = ["checked", "onChange"];
|
|
836
|
+
var _hoisted_12$24 = ["onClick"];
|
|
837
|
+
var _hoisted_13$23 = {
|
|
1134
838
|
key: 0,
|
|
1135
839
|
class: "mint-dataframe__empty"
|
|
1136
840
|
};
|
|
1137
|
-
var _hoisted_14$
|
|
1138
|
-
var _hoisted_15$
|
|
841
|
+
var _hoisted_14$20 = { class: "mint-dataframe__empty-text" };
|
|
842
|
+
var _hoisted_15$19 = {
|
|
1139
843
|
key: 1,
|
|
1140
844
|
class: "mint-dataframe__loading"
|
|
1141
845
|
};
|
|
1142
|
-
var _hoisted_16$
|
|
846
|
+
var _hoisted_16$17 = {
|
|
1143
847
|
key: 1,
|
|
1144
848
|
class: "mint-dataframe__footer"
|
|
1145
849
|
};
|
|
1146
|
-
var _hoisted_17$
|
|
1147
|
-
var _hoisted_18$
|
|
1148
|
-
var _hoisted_19$
|
|
1149
|
-
var _hoisted_20$
|
|
1150
|
-
var _hoisted_21$
|
|
850
|
+
var _hoisted_17$17 = { class: "mint-dataframe__page-info" };
|
|
851
|
+
var _hoisted_18$15 = { class: "mint-dataframe__page-controls" };
|
|
852
|
+
var _hoisted_19$14 = ["disabled"];
|
|
853
|
+
var _hoisted_20$13 = { class: "mint-dataframe__page-number" };
|
|
854
|
+
var _hoisted_21$11 = ["disabled"];
|
|
1151
855
|
//#endregion
|
|
1152
856
|
//#region src/components/DataFrame.vue
|
|
1153
857
|
var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
@@ -1194,7 +898,11 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1194
898
|
type: Boolean,
|
|
1195
899
|
default: false
|
|
1196
900
|
},
|
|
1197
|
-
selectedKeys: { default: () => [] }
|
|
901
|
+
selectedKeys: { default: () => [] },
|
|
902
|
+
clickableRows: {
|
|
903
|
+
type: Boolean,
|
|
904
|
+
default: false
|
|
905
|
+
}
|
|
1198
906
|
},
|
|
1199
907
|
emits: [
|
|
1200
908
|
"update:sort",
|
|
@@ -1287,6 +995,19 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1287
995
|
page
|
|
1288
996
|
});
|
|
1289
997
|
}
|
|
998
|
+
function handleRowClick(row, index) {
|
|
999
|
+
emit("row-click", row, index);
|
|
1000
|
+
}
|
|
1001
|
+
function handleRowKeydown(event, row, index) {
|
|
1002
|
+
if (!props.clickableRows) return;
|
|
1003
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
1004
|
+
event.preventDefault();
|
|
1005
|
+
handleRowClick(row, index);
|
|
1006
|
+
}
|
|
1007
|
+
function handleCellClick(row, col, index) {
|
|
1008
|
+
emit("cell-click", getCellValue(row, col.key), col, row);
|
|
1009
|
+
if (props.clickableRows) handleRowClick(row, index);
|
|
1010
|
+
}
|
|
1290
1011
|
function isColumnSortable(col) {
|
|
1291
1012
|
return col.sortable === true || props.sortable && col.sortable !== false;
|
|
1292
1013
|
}
|
|
@@ -1316,7 +1037,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1316
1037
|
});
|
|
1317
1038
|
return (_ctx, _cache) => {
|
|
1318
1039
|
return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-dataframe", { "mint-dataframe--bordered": __props.bordered }]) }, [
|
|
1319
|
-
__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$
|
|
1040
|
+
__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_1$62, [createElementVNode("div", _hoisted_2$54, [_cache[4] || (_cache[4] = createElementVNode("svg", {
|
|
1320
1041
|
class: "mint-dataframe__search-icon",
|
|
1321
1042
|
viewBox: "0 0 24 24",
|
|
1322
1043
|
fill: "none",
|
|
@@ -1333,18 +1054,18 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1333
1054
|
type: "text",
|
|
1334
1055
|
class: "mint-dataframe__search",
|
|
1335
1056
|
placeholder: __props.searchPlaceholder
|
|
1336
|
-
}, null, 8, _hoisted_3$
|
|
1057
|
+
}, null, 8, _hoisted_3$49), [[vModelText, searchQuery.value]])])])) : createCommentVNode("", true),
|
|
1337
1058
|
createElementVNode("div", {
|
|
1338
1059
|
class: "mint-dataframe__table-wrapper",
|
|
1339
1060
|
style: normalizeStyle(wrapperStyle.value)
|
|
1340
1061
|
}, [
|
|
1341
|
-
createElementVNode("table", _hoisted_4$
|
|
1062
|
+
createElementVNode("table", _hoisted_4$47, [createElementVNode("thead", { class: normalizeClass(["mint-dataframe__thead", { "mint-dataframe__thead--sticky": __props.stickyHeader }]) }, [createElementVNode("tr", null, [__props.selectable ? (openBlock(), createElementBlock("th", _hoisted_5$45, [createElementVNode("input", {
|
|
1342
1063
|
type: "checkbox",
|
|
1343
1064
|
checked: allSelected.value,
|
|
1344
1065
|
indeterminate: selectIndeterminate.value,
|
|
1345
1066
|
class: "mint-dataframe__checkbox",
|
|
1346
1067
|
onChange: toggleSelectAll
|
|
1347
|
-
}, null, 40, _hoisted_6$
|
|
1068
|
+
}, null, 40, _hoisted_6$44)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
1348
1069
|
return openBlock(), createElementBlock("th", {
|
|
1349
1070
|
key: col.key,
|
|
1350
1071
|
class: normalizeClass([
|
|
@@ -1361,7 +1082,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1361
1082
|
minWidth: col.minWidth ? typeof col.minWidth === "number" ? `${col.minWidth}px` : col.minWidth : void 0
|
|
1362
1083
|
}),
|
|
1363
1084
|
onClick: ($event) => isColumnSortable(col) ? handleSort(col) : void 0
|
|
1364
|
-
}, [renderSlot(_ctx.$slots, `header-${col.key}`, { column: col }, () => [createElementVNode("div", _hoisted_8$
|
|
1085
|
+
}, [renderSlot(_ctx.$slots, `header-${col.key}`, { column: col }, () => [createElementVNode("div", _hoisted_8$37, [createElementVNode("span", null, toDisplayString(col.label), 1), isColumnSortable(col) ? (openBlock(), createElementBlock("svg", {
|
|
1365
1086
|
key: 0,
|
|
1366
1087
|
class: normalizeClass(["mint-dataframe__sort-icon", {
|
|
1367
1088
|
"mint-dataframe__sort-icon--asc": activeSort.value?.key === col.key && activeSort.value?.direction === "asc",
|
|
@@ -1378,22 +1099,26 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1378
1099
|
createElementVNode("path", { d: "M17 20V4" }, null, -1),
|
|
1379
1100
|
createElementVNode("path", { d: "m3 8 4-4 4 4" }, null, -1),
|
|
1380
1101
|
createElementVNode("path", { d: "M7 4v16" }, null, -1)
|
|
1381
|
-
])], 2)) : createCommentVNode("", true)])])], 14, _hoisted_7$
|
|
1102
|
+
])], 2)) : createCommentVNode("", true)])])], 14, _hoisted_7$40);
|
|
1382
1103
|
}), 128))])], 2), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(paginatedData.value, (row, rowIndex) => {
|
|
1383
1104
|
return openBlock(), createElementBlock("tr", {
|
|
1384
1105
|
key: getRowKey(row, rowIndex),
|
|
1385
1106
|
class: normalizeClass(["mint-dataframe__row", {
|
|
1386
1107
|
"mint-dataframe__row--striped": __props.striped && rowIndex % 2 === 1,
|
|
1387
|
-
"mint-dataframe__row--selected": unref(rowSelection).isSelected(getRowKey(row, rowIndex))
|
|
1108
|
+
"mint-dataframe__row--selected": unref(rowSelection).isSelected(getRowKey(row, rowIndex)),
|
|
1109
|
+
"mint-dataframe__row--clickable": __props.clickableRows
|
|
1388
1110
|
}]),
|
|
1389
|
-
|
|
1390
|
-
|
|
1111
|
+
tabindex: __props.clickableRows ? 0 : void 0,
|
|
1112
|
+
role: __props.clickableRows ? "button" : void 0,
|
|
1113
|
+
onClick: ($event) => handleRowClick(row, rowIndex),
|
|
1114
|
+
onKeydown: ($event) => handleRowKeydown($event, row, rowIndex)
|
|
1115
|
+
}, [__props.selectable ? (openBlock(), createElementBlock("td", _hoisted_10$29, [createElementVNode("input", {
|
|
1391
1116
|
type: "checkbox",
|
|
1392
1117
|
checked: unref(rowSelection).isSelected(getRowKey(row, rowIndex)),
|
|
1393
1118
|
class: "mint-dataframe__checkbox",
|
|
1394
1119
|
onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
|
|
1395
1120
|
onChange: ($event) => toggleRowSelect(getRowKey(row, rowIndex))
|
|
1396
|
-
}, null, 40, _hoisted_11$
|
|
1121
|
+
}, null, 40, _hoisted_11$27)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
1397
1122
|
return openBlock(), createElementBlock("td", {
|
|
1398
1123
|
key: col.key,
|
|
1399
1124
|
class: normalizeClass([
|
|
@@ -1402,16 +1127,16 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1402
1127
|
`mint-dataframe__td--align-${col.align ?? "left"}`,
|
|
1403
1128
|
{ "mint-dataframe__td--ellipsis": col.ellipsis }
|
|
1404
1129
|
]),
|
|
1405
|
-
onClick: withModifiers(($event) =>
|
|
1130
|
+
onClick: withModifiers(($event) => handleCellClick(row, col, rowIndex), ["stop"])
|
|
1406
1131
|
}, [renderSlot(_ctx.$slots, `cell-${col.key}`, {
|
|
1407
1132
|
value: getCellValue(row, col.key),
|
|
1408
1133
|
row,
|
|
1409
1134
|
column: col,
|
|
1410
1135
|
index: rowIndex
|
|
1411
|
-
}, () => [createTextVNode(toDisplayString(formatCell(col, row, rowIndex)), 1)])], 10, _hoisted_12$
|
|
1412
|
-
}), 128))],
|
|
1136
|
+
}, () => [createTextVNode(toDisplayString(formatCell(col, row, rowIndex)), 1)])], 10, _hoisted_12$24);
|
|
1137
|
+
}), 128))], 42, _hoisted_9$33);
|
|
1413
1138
|
}), 128))])]),
|
|
1414
|
-
paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_13$
|
|
1139
|
+
paginatedData.value.length === 0 && !__props.loading ? (openBlock(), createElementBlock("div", _hoisted_13$23, [renderSlot(_ctx.$slots, "empty", {}, () => [_cache[6] || (_cache[6] = createElementVNode("svg", {
|
|
1415
1140
|
class: "mint-dataframe__empty-icon",
|
|
1416
1141
|
viewBox: "0 0 24 24",
|
|
1417
1142
|
fill: "none",
|
|
@@ -1419,8 +1144,8 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1419
1144
|
"stroke-width": "2",
|
|
1420
1145
|
"stroke-linecap": "round",
|
|
1421
1146
|
"stroke-linejoin": "round"
|
|
1422
|
-
}, [createElementVNode("polyline", { points: "22 12 16 12 14 15 10 15 8 12 2 12" }), createElementVNode("path", { d: "M5.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" })], -1)), createElementVNode("p", _hoisted_14$
|
|
1423
|
-
__props.loading ? (openBlock(), createElementBlock("div", _hoisted_15$
|
|
1147
|
+
}, [createElementVNode("polyline", { points: "22 12 16 12 14 15 10 15 8 12 2 12" }), createElementVNode("path", { d: "M5.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" })], -1)), createElementVNode("p", _hoisted_14$20, toDisplayString(__props.emptyText), 1)])])) : createCommentVNode("", true),
|
|
1148
|
+
__props.loading ? (openBlock(), createElementBlock("div", _hoisted_15$19, [renderSlot(_ctx.$slots, "loading", {}, () => [_cache[7] || (_cache[7] = createElementVNode("svg", {
|
|
1424
1149
|
class: "mint-dataframe__loading-spinner",
|
|
1425
1150
|
viewBox: "0 0 24 24",
|
|
1426
1151
|
fill: "none",
|
|
@@ -1439,7 +1164,7 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1439
1164
|
"stroke-linecap": "round"
|
|
1440
1165
|
})], -1))])])) : createCommentVNode("", true)
|
|
1441
1166
|
], 4),
|
|
1442
|
-
__props.pagination ? (openBlock(), createElementBlock("div", _hoisted_16$
|
|
1167
|
+
__props.pagination ? (openBlock(), createElementBlock("div", _hoisted_16$17, [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("span", _hoisted_17$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_18$15, [
|
|
1443
1168
|
createElementVNode("button", {
|
|
1444
1169
|
type: "button",
|
|
1445
1170
|
class: "mint-dataframe__page-btn",
|
|
@@ -1452,8 +1177,8 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1452
1177
|
"stroke-width": "2",
|
|
1453
1178
|
"stroke-linecap": "round",
|
|
1454
1179
|
"stroke-linejoin": "round"
|
|
1455
|
-
}, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_19$
|
|
1456
|
-
createElementVNode("span", _hoisted_20$
|
|
1180
|
+
}, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_19$14),
|
|
1181
|
+
createElementVNode("span", _hoisted_20$13, toDisplayString(__props.pagination.page) + " / " + toDisplayString(totalPages.value), 1),
|
|
1457
1182
|
createElementVNode("button", {
|
|
1458
1183
|
type: "button",
|
|
1459
1184
|
class: "mint-dataframe__page-btn",
|
|
@@ -1466,74 +1191,15 @@ var DataFrame_default = /* @__PURE__ */ defineComponent({
|
|
|
1466
1191
|
"stroke-width": "2",
|
|
1467
1192
|
"stroke-linecap": "round",
|
|
1468
1193
|
"stroke-linejoin": "round"
|
|
1469
|
-
}, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])], 8, _hoisted_21$
|
|
1194
|
+
}, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])], 8, _hoisted_21$11)
|
|
1470
1195
|
])])])) : createCommentVNode("", true)
|
|
1471
1196
|
], 2);
|
|
1472
1197
|
};
|
|
1473
1198
|
}
|
|
1474
1199
|
});
|
|
1475
1200
|
//#endregion
|
|
1476
|
-
//#region src/components/FormField.vue?vue&type=script&setup=true&lang.ts
|
|
1477
|
-
var _hoisted_1$68 = { class: "mint-form-field" };
|
|
1478
|
-
var _hoisted_2$59 = {
|
|
1479
|
-
key: 0,
|
|
1480
|
-
class: "mint-form-field__label-row"
|
|
1481
|
-
};
|
|
1482
|
-
var _hoisted_3$54 = ["for"];
|
|
1483
|
-
var _hoisted_4$51 = {
|
|
1484
|
-
key: 0,
|
|
1485
|
-
class: "mint-form-field__required",
|
|
1486
|
-
"aria-hidden": "true"
|
|
1487
|
-
};
|
|
1488
|
-
var _hoisted_5$49 = {
|
|
1489
|
-
key: 0,
|
|
1490
|
-
class: "mint-form-field__optional"
|
|
1491
|
-
};
|
|
1492
|
-
var _hoisted_6$48 = ["id"];
|
|
1493
|
-
var _hoisted_7$42 = ["id"];
|
|
1494
|
-
//#endregion
|
|
1495
|
-
//#region src/components/FormField.vue
|
|
1496
|
-
var FormField_default = /* @__PURE__ */ defineComponent({
|
|
1497
|
-
__name: "FormField",
|
|
1498
|
-
props: {
|
|
1499
|
-
label: {},
|
|
1500
|
-
error: {},
|
|
1501
|
-
hint: {},
|
|
1502
|
-
required: { type: Boolean },
|
|
1503
|
-
showOptional: { type: Boolean },
|
|
1504
|
-
htmlFor: {},
|
|
1505
|
-
fieldId: {}
|
|
1506
|
-
},
|
|
1507
|
-
setup(__props) {
|
|
1508
|
-
/** Wraps a form control with a label, optional hint text, and validation error display. */
|
|
1509
|
-
const props = __props;
|
|
1510
|
-
const errorId = computed(() => props.error && props.fieldId ? `${props.fieldId}-error` : void 0);
|
|
1511
|
-
const hintId = computed(() => !props.error && props.hint && props.fieldId ? `${props.fieldId}-hint` : void 0);
|
|
1512
|
-
const describedBy = computed(() => errorId.value ?? hintId.value);
|
|
1513
|
-
return (_ctx, _cache) => {
|
|
1514
|
-
return openBlock(), createElementBlock("div", _hoisted_1$68, [
|
|
1515
|
-
__props.label ? (openBlock(), createElementBlock("div", _hoisted_2$59, [createElementVNode("label", {
|
|
1516
|
-
for: __props.htmlFor,
|
|
1517
|
-
class: "mint-form-field__label"
|
|
1518
|
-
}, [createTextVNode(toDisplayString(__props.label) + " ", 1), __props.required ? (openBlock(), createElementBlock("span", _hoisted_4$51, "*")) : createCommentVNode("", true)], 8, _hoisted_3$54), !__props.required && __props.showOptional ? (openBlock(), createElementBlock("span", _hoisted_5$49, " optional ")) : createCommentVNode("", true)])) : createCommentVNode("", true),
|
|
1519
|
-
renderSlot(_ctx.$slots, "default", { describedBy: describedBy.value }),
|
|
1520
|
-
__props.error ? (openBlock(), createElementBlock("p", {
|
|
1521
|
-
key: 1,
|
|
1522
|
-
id: errorId.value,
|
|
1523
|
-
class: "mint-form-field__error",
|
|
1524
|
-
role: "alert"
|
|
1525
|
-
}, toDisplayString(__props.error), 9, _hoisted_6$48)) : __props.hint ? (openBlock(), createElementBlock("p", {
|
|
1526
|
-
key: 2,
|
|
1527
|
-
id: hintId.value,
|
|
1528
|
-
class: "mint-form-field__hint"
|
|
1529
|
-
}, toDisplayString(__props.hint), 9, _hoisted_7$42)) : createCommentVNode("", true)
|
|
1530
|
-
]);
|
|
1531
|
-
};
|
|
1532
|
-
}
|
|
1533
|
-
});
|
|
1534
|
-
//#endregion
|
|
1535
1201
|
//#region src/components/AlertBox.vue?vue&type=script&setup=true&lang.ts
|
|
1536
|
-
var _hoisted_1$
|
|
1202
|
+
var _hoisted_1$61 = {
|
|
1537
1203
|
key: 0,
|
|
1538
1204
|
class: "mint-alert__icon mint-alert__icon--success",
|
|
1539
1205
|
viewBox: "0 0 24 24",
|
|
@@ -1543,7 +1209,7 @@ var _hoisted_1$67 = {
|
|
|
1543
1209
|
"stroke-linecap": "round",
|
|
1544
1210
|
"stroke-linejoin": "round"
|
|
1545
1211
|
};
|
|
1546
|
-
var _hoisted_2$
|
|
1212
|
+
var _hoisted_2$53 = {
|
|
1547
1213
|
key: 1,
|
|
1548
1214
|
class: "mint-alert__icon mint-alert__icon--error",
|
|
1549
1215
|
viewBox: "0 0 24 24",
|
|
@@ -1553,7 +1219,7 @@ var _hoisted_2$58 = {
|
|
|
1553
1219
|
"stroke-linecap": "round",
|
|
1554
1220
|
"stroke-linejoin": "round"
|
|
1555
1221
|
};
|
|
1556
|
-
var _hoisted_3$
|
|
1222
|
+
var _hoisted_3$48 = {
|
|
1557
1223
|
key: 2,
|
|
1558
1224
|
class: "mint-alert__icon mint-alert__icon--warning",
|
|
1559
1225
|
viewBox: "0 0 24 24",
|
|
@@ -1563,7 +1229,7 @@ var _hoisted_3$53 = {
|
|
|
1563
1229
|
"stroke-linecap": "round",
|
|
1564
1230
|
"stroke-linejoin": "round"
|
|
1565
1231
|
};
|
|
1566
|
-
var _hoisted_4$
|
|
1232
|
+
var _hoisted_4$46 = {
|
|
1567
1233
|
key: 3,
|
|
1568
1234
|
class: "mint-alert__icon mint-alert__icon--info",
|
|
1569
1235
|
viewBox: "0 0 24 24",
|
|
@@ -1573,13 +1239,13 @@ var _hoisted_4$50 = {
|
|
|
1573
1239
|
"stroke-linecap": "round",
|
|
1574
1240
|
"stroke-linejoin": "round"
|
|
1575
1241
|
};
|
|
1576
|
-
var _hoisted_5$
|
|
1577
|
-
var _hoisted_6$
|
|
1242
|
+
var _hoisted_5$44 = { class: "mint-alert__content" };
|
|
1243
|
+
var _hoisted_6$43 = {
|
|
1578
1244
|
key: 0,
|
|
1579
1245
|
class: "mint-alert__title"
|
|
1580
1246
|
};
|
|
1581
|
-
var _hoisted_7$
|
|
1582
|
-
var _hoisted_8$
|
|
1247
|
+
var _hoisted_7$39 = { class: "mint-alert__message" };
|
|
1248
|
+
var _hoisted_8$36 = {
|
|
1583
1249
|
key: 4,
|
|
1584
1250
|
class: "mint-alert__actions"
|
|
1585
1251
|
};
|
|
@@ -1608,11 +1274,11 @@ var AlertBox_default = /* @__PURE__ */ defineComponent({
|
|
|
1608
1274
|
class: normalizeClass(["mint-alert", `mint-alert--${props.type}`]),
|
|
1609
1275
|
role: "alert"
|
|
1610
1276
|
}, [
|
|
1611
|
-
props.type === "success" ? (openBlock(), createElementBlock("svg", _hoisted_1$
|
|
1277
|
+
props.type === "success" ? (openBlock(), createElementBlock("svg", _hoisted_1$61, [..._cache[2] || (_cache[2] = [createElementVNode("circle", {
|
|
1612
1278
|
cx: "12",
|
|
1613
1279
|
cy: "12",
|
|
1614
1280
|
r: "10"
|
|
1615
|
-
}, null, -1), createElementVNode("path", { d: "m9 12 2 2 4-4" }, null, -1)])])) : props.type === "error" ? (openBlock(), createElementBlock("svg", _hoisted_2$
|
|
1281
|
+
}, null, -1), createElementVNode("path", { d: "m9 12 2 2 4-4" }, null, -1)])])) : props.type === "error" ? (openBlock(), createElementBlock("svg", _hoisted_2$53, [..._cache[3] || (_cache[3] = [
|
|
1616
1282
|
createElementVNode("circle", {
|
|
1617
1283
|
cx: "12",
|
|
1618
1284
|
cy: "12",
|
|
@@ -1620,11 +1286,11 @@ var AlertBox_default = /* @__PURE__ */ defineComponent({
|
|
|
1620
1286
|
}, null, -1),
|
|
1621
1287
|
createElementVNode("path", { d: "m15 9-6 6" }, null, -1),
|
|
1622
1288
|
createElementVNode("path", { d: "m9 9 6 6" }, null, -1)
|
|
1623
|
-
])])) : props.type === "warning" ? (openBlock(), createElementBlock("svg", _hoisted_3$
|
|
1289
|
+
])])) : props.type === "warning" ? (openBlock(), createElementBlock("svg", _hoisted_3$48, [..._cache[4] || (_cache[4] = [
|
|
1624
1290
|
createElementVNode("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }, null, -1),
|
|
1625
1291
|
createElementVNode("path", { d: "M12 9v4" }, null, -1),
|
|
1626
1292
|
createElementVNode("path", { d: "M12 17h.01" }, null, -1)
|
|
1627
|
-
])])) : (openBlock(), createElementBlock("svg", _hoisted_4$
|
|
1293
|
+
])])) : (openBlock(), createElementBlock("svg", _hoisted_4$46, [..._cache[5] || (_cache[5] = [
|
|
1628
1294
|
createElementVNode("circle", {
|
|
1629
1295
|
cx: "12",
|
|
1630
1296
|
cy: "12",
|
|
@@ -1633,8 +1299,8 @@ var AlertBox_default = /* @__PURE__ */ defineComponent({
|
|
|
1633
1299
|
createElementVNode("path", { d: "M12 16v-4" }, null, -1),
|
|
1634
1300
|
createElementVNode("path", { d: "M12 8h.01" }, null, -1)
|
|
1635
1301
|
])])),
|
|
1636
|
-
createElementVNode("div", _hoisted_5$
|
|
1637
|
-
hasActions() ? (openBlock(), createElementBlock("div", _hoisted_8$
|
|
1302
|
+
createElementVNode("div", _hoisted_5$44, [props.title ? (openBlock(), createElementBlock("h4", _hoisted_6$43, toDisplayString(props.title), 1)) : createCommentVNode("", true), createElementVNode("div", _hoisted_7$39, [renderSlot(_ctx.$slots, "default")])]),
|
|
1303
|
+
hasActions() ? (openBlock(), createElementBlock("div", _hoisted_8$36, [renderSlot(_ctx.$slots, "actions", {}, () => [createElementVNode("button", {
|
|
1638
1304
|
type: "button",
|
|
1639
1305
|
class: normalizeClass(["mint-alert__action-btn", `mint-alert__action-btn--${props.type}`]),
|
|
1640
1306
|
onClick: _cache[0] || (_cache[0] = ($event) => emit("action"))
|
|
@@ -1660,9 +1326,9 @@ var AlertBox_default = /* @__PURE__ */ defineComponent({
|
|
|
1660
1326
|
});
|
|
1661
1327
|
//#endregion
|
|
1662
1328
|
//#region src/components/AppToastContainer.vue?vue&type=script&setup=true&lang.ts
|
|
1663
|
-
var _hoisted_1$
|
|
1664
|
-
var _hoisted_2$
|
|
1665
|
-
var _hoisted_3$
|
|
1329
|
+
var _hoisted_1$60 = { class: "mint-toast__container" };
|
|
1330
|
+
var _hoisted_2$52 = ["onClick"];
|
|
1331
|
+
var _hoisted_3$47 = { class: "mint-toast__message" };
|
|
1666
1332
|
//#endregion
|
|
1667
1333
|
//#region src/components/AppToastContainer.vue
|
|
1668
1334
|
var AppToastContainer_default = /* @__PURE__ */ defineComponent({
|
|
@@ -1677,7 +1343,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
|
|
|
1677
1343
|
info: "#3B82F6"
|
|
1678
1344
|
};
|
|
1679
1345
|
return (_ctx, _cache) => {
|
|
1680
|
-
return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$
|
|
1346
|
+
return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$60, [createVNode(TransitionGroup, { name: "toast" }, {
|
|
1681
1347
|
default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(toasts), (toast) => {
|
|
1682
1348
|
return openBlock(), createElementBlock("div", {
|
|
1683
1349
|
key: toast.id,
|
|
@@ -1751,7 +1417,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
|
|
|
1751
1417
|
createElementVNode("path", { d: "M12 16v-4" }, null, -1),
|
|
1752
1418
|
createElementVNode("path", { d: "M12 8h.01" }, null, -1)
|
|
1753
1419
|
])], 4)),
|
|
1754
|
-
createElementVNode("span", _hoisted_3$
|
|
1420
|
+
createElementVNode("span", _hoisted_3$47, toDisplayString(toast.message), 1),
|
|
1755
1421
|
createElementVNode("span", {
|
|
1756
1422
|
class: "mint-toast__progress",
|
|
1757
1423
|
style: normalizeStyle({
|
|
@@ -1759,7 +1425,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
|
|
|
1759
1425
|
animationDuration: `${toast.duration ?? 3500}ms`
|
|
1760
1426
|
})
|
|
1761
1427
|
}, null, 4)
|
|
1762
|
-
], 14, _hoisted_2$
|
|
1428
|
+
], 14, _hoisted_2$52);
|
|
1763
1429
|
}), 128))]),
|
|
1764
1430
|
_: 1
|
|
1765
1431
|
})])]);
|
|
@@ -1768,7 +1434,7 @@ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
|
|
|
1768
1434
|
});
|
|
1769
1435
|
//#endregion
|
|
1770
1436
|
//#region src/components/IconButton.vue?vue&type=script&setup=true&lang.ts
|
|
1771
|
-
var _hoisted_1$
|
|
1437
|
+
var _hoisted_1$59 = [
|
|
1772
1438
|
"disabled",
|
|
1773
1439
|
"aria-label",
|
|
1774
1440
|
"title"
|
|
@@ -1830,13 +1496,13 @@ var IconButton_default = /* @__PURE__ */ defineComponent({
|
|
|
1830
1496
|
}, null, -1)])], 2)) : (openBlock(), createElementBlock("span", {
|
|
1831
1497
|
key: 1,
|
|
1832
1498
|
class: normalizeClass(`mint-icon-button__icon--${__props.size}`)
|
|
1833
|
-
}, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$
|
|
1499
|
+
}, [renderSlot(_ctx.$slots, "default")], 2))], 10, _hoisted_1$59);
|
|
1834
1500
|
};
|
|
1835
1501
|
}
|
|
1836
1502
|
});
|
|
1837
1503
|
//#endregion
|
|
1838
1504
|
//#region src/components/ThemeToggle.vue?vue&type=script&setup=true&lang.ts
|
|
1839
|
-
var _hoisted_1$
|
|
1505
|
+
var _hoisted_1$58 = {
|
|
1840
1506
|
key: 0,
|
|
1841
1507
|
class: "mint-theme-toggle__icon",
|
|
1842
1508
|
viewBox: "0 0 24 24",
|
|
@@ -1846,7 +1512,7 @@ var _hoisted_1$64 = {
|
|
|
1846
1512
|
"stroke-linecap": "round",
|
|
1847
1513
|
"stroke-linejoin": "round"
|
|
1848
1514
|
};
|
|
1849
|
-
var _hoisted_2$
|
|
1515
|
+
var _hoisted_2$51 = {
|
|
1850
1516
|
key: 1,
|
|
1851
1517
|
class: "mint-theme-toggle__icon",
|
|
1852
1518
|
viewBox: "0 0 24 24",
|
|
@@ -1872,7 +1538,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
|
|
|
1872
1538
|
label: unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
|
|
1873
1539
|
onClick: unref(toggleTheme)
|
|
1874
1540
|
}, {
|
|
1875
|
-
default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$
|
|
1541
|
+
default: withCtx(() => [unref(isDark) ? (openBlock(), createElementBlock("svg", _hoisted_1$58, [..._cache[0] || (_cache[0] = [
|
|
1876
1542
|
createElementVNode("circle", {
|
|
1877
1543
|
cx: "12",
|
|
1878
1544
|
cy: "12",
|
|
@@ -1886,7 +1552,7 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
|
|
|
1886
1552
|
createElementVNode("path", { d: "M20 12h2" }, null, -1),
|
|
1887
1553
|
createElementVNode("path", { d: "m6.34 17.66-1.41 1.41" }, null, -1),
|
|
1888
1554
|
createElementVNode("path", { d: "m19.07 4.93-1.41 1.41" }, null, -1)
|
|
1889
|
-
])])) : (openBlock(), createElementBlock("svg", _hoisted_2$
|
|
1555
|
+
])])) : (openBlock(), createElementBlock("svg", _hoisted_2$51, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }, null, -1)])]))]),
|
|
1890
1556
|
_: 1
|
|
1891
1557
|
}, 8, [
|
|
1892
1558
|
"size",
|
|
@@ -1898,25 +1564,25 @@ var ThemeToggle_default = /* @__PURE__ */ defineComponent({
|
|
|
1898
1564
|
});
|
|
1899
1565
|
//#endregion
|
|
1900
1566
|
//#region src/components/CollapsibleCard.vue?vue&type=script&setup=true&lang.ts
|
|
1901
|
-
var _hoisted_1$
|
|
1902
|
-
var _hoisted_2$
|
|
1903
|
-
var _hoisted_3$
|
|
1904
|
-
var _hoisted_4$
|
|
1905
|
-
var _hoisted_5$
|
|
1906
|
-
var _hoisted_6$
|
|
1907
|
-
var _hoisted_7$
|
|
1908
|
-
var _hoisted_8$
|
|
1567
|
+
var _hoisted_1$57 = { class: "mint-collapsible-card__header-shell" };
|
|
1568
|
+
var _hoisted_2$50 = ["disabled", "aria-expanded"];
|
|
1569
|
+
var _hoisted_3$46 = { class: "mint-collapsible-card__title-section" };
|
|
1570
|
+
var _hoisted_4$45 = ["d"];
|
|
1571
|
+
var _hoisted_5$43 = ["d"];
|
|
1572
|
+
var _hoisted_6$42 = { class: "mint-collapsible-card__titles" };
|
|
1573
|
+
var _hoisted_7$38 = { class: "mint-collapsible-card__title" };
|
|
1574
|
+
var _hoisted_8$35 = {
|
|
1909
1575
|
key: 0,
|
|
1910
1576
|
class: "mint-collapsible-card__subtitle"
|
|
1911
1577
|
};
|
|
1912
|
-
var _hoisted_9$
|
|
1913
|
-
var _hoisted_10$
|
|
1578
|
+
var _hoisted_9$32 = { class: "mint-collapsible-card__actions" };
|
|
1579
|
+
var _hoisted_10$28 = [
|
|
1914
1580
|
"disabled",
|
|
1915
1581
|
"aria-label",
|
|
1916
1582
|
"title",
|
|
1917
1583
|
"onClick"
|
|
1918
1584
|
];
|
|
1919
|
-
var _hoisted_11$
|
|
1585
|
+
var _hoisted_11$26 = {
|
|
1920
1586
|
key: 0,
|
|
1921
1587
|
class: "mint-collapsible-card__action-icon",
|
|
1922
1588
|
viewBox: "0 0 24 24",
|
|
@@ -1927,20 +1593,20 @@ var _hoisted_11$29 = {
|
|
|
1927
1593
|
"stroke-linejoin": "round",
|
|
1928
1594
|
"aria-hidden": "true"
|
|
1929
1595
|
};
|
|
1930
|
-
var _hoisted_12$
|
|
1931
|
-
var _hoisted_13$
|
|
1932
|
-
var _hoisted_14$
|
|
1596
|
+
var _hoisted_12$23 = ["d"];
|
|
1597
|
+
var _hoisted_13$22 = ["d"];
|
|
1598
|
+
var _hoisted_14$19 = {
|
|
1933
1599
|
key: 1,
|
|
1934
1600
|
class: "mint-collapsible-card__action-text-icon"
|
|
1935
1601
|
};
|
|
1936
|
-
var _hoisted_15$
|
|
1937
|
-
var _hoisted_16$
|
|
1602
|
+
var _hoisted_15$18 = ["aria-checked", "onKeydown"];
|
|
1603
|
+
var _hoisted_16$16 = [
|
|
1938
1604
|
"disabled",
|
|
1939
1605
|
"aria-label",
|
|
1940
1606
|
"aria-expanded"
|
|
1941
1607
|
];
|
|
1942
|
-
var _hoisted_17$
|
|
1943
|
-
var _hoisted_18$
|
|
1608
|
+
var _hoisted_17$16 = { class: "mint-collapsible-card__body" };
|
|
1609
|
+
var _hoisted_18$14 = { class: "mint-collapsible-card__content" };
|
|
1944
1610
|
//#endregion
|
|
1945
1611
|
//#region src/components/CollapsibleCard.vue
|
|
1946
1612
|
var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
|
|
@@ -1978,1507 +1644,138 @@ var CollapsibleCard_default = /* @__PURE__ */ defineComponent({
|
|
|
1978
1644
|
},
|
|
1979
1645
|
emits: ["update:toggleValue", "action"],
|
|
1980
1646
|
setup(__props, { emit: __emit }) {
|
|
1981
|
-
/** Card whose body collapses with a chevron-rotate animation, with an optional inline toggle switch independent of expand state. */
|
|
1982
|
-
const props = __props;
|
|
1983
|
-
const emit = __emit;
|
|
1984
|
-
const isOpen = ref(props.defaultOpen);
|
|
1985
|
-
const toggle = () => {
|
|
1986
|
-
if (!props.disabled) isOpen.value = !isOpen.value;
|
|
1987
|
-
};
|
|
1988
|
-
const handleToggleClick = (event) => {
|
|
1989
|
-
event.stopPropagation();
|
|
1990
|
-
emit("update:toggleValue", !props.toggleValue);
|
|
1991
|
-
};
|
|
1992
|
-
const headerClasses = computed(() => ["mint-collapsible-card__header", props.disabled ? "mint-collapsible-card__header--disabled" : ""]);
|
|
1993
|
-
const iconBgStyle = computed(() => ({ backgroundColor: props.iconBg || "var(--color-primary-soft)" }));
|
|
1994
|
-
const iconColorStyle = computed(() => ({ color: props.iconColor || "var(--color-primary)" }));
|
|
1995
|
-
const isSvgIcon = computed(() => isSvgIconValue(props.icon));
|
|
1996
|
-
const toggleTrackStyle = computed(() => {
|
|
1997
|
-
if (!props.toggleValue || !props.toggleColor) return {};
|
|
1998
|
-
return {
|
|
1999
|
-
backgroundColor: props.toggleColor,
|
|
2000
|
-
borderColor: props.toggleColor
|
|
2001
|
-
};
|
|
2002
|
-
});
|
|
2003
|
-
const badgeClasses = computed(() => ["mint-collapsible-card__badge", `mint-collapsible-card__badge--${props.badgeTone}`]);
|
|
2004
|
-
function isSvgIconValue(icon) {
|
|
2005
|
-
if (!icon) return false;
|
|
2006
|
-
return Array.isArray(icon) || icon.startsWith("M") || icon.startsWith("m");
|
|
2007
|
-
}
|
|
2008
|
-
function actionClasses(action) {
|
|
2009
|
-
return [
|
|
2010
|
-
"mint-collapsible-card__action",
|
|
2011
|
-
action.tone ? `mint-collapsible-card__action--${action.tone}` : "",
|
|
2012
|
-
action.disabled ? "mint-collapsible-card__action--disabled" : ""
|
|
2013
|
-
];
|
|
2014
|
-
}
|
|
2015
|
-
function actionStyle(action) {
|
|
2016
|
-
return action.iconColor ? { color: action.iconColor } : {};
|
|
2017
|
-
}
|
|
2018
|
-
function handleActionClick(action) {
|
|
2019
|
-
if (props.disabled || action.disabled) return;
|
|
2020
|
-
emit("action", action.id);
|
|
2021
|
-
}
|
|
2022
|
-
return (_ctx, _cache) => {
|
|
2023
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$63, [createElementVNode("button", {
|
|
2024
|
-
type: "button",
|
|
2025
|
-
class: normalizeClass(headerClasses.value),
|
|
2026
|
-
disabled: __props.disabled,
|
|
2027
|
-
"aria-expanded": isOpen.value,
|
|
2028
|
-
onClick: toggle
|
|
2029
|
-
}, [createElementVNode("div", _hoisted_3$51, [__props.icon ? (openBlock(), createElementBlock("div", {
|
|
2030
|
-
key: 0,
|
|
2031
|
-
class: "mint-collapsible-card__icon-badge",
|
|
2032
|
-
style: normalizeStyle(iconBgStyle.value)
|
|
2033
|
-
}, [isSvgIcon.value ? (openBlock(), createElementBlock("svg", {
|
|
2034
|
-
key: 0,
|
|
2035
|
-
class: "mint-collapsible-card__icon",
|
|
2036
|
-
style: normalizeStyle(iconColorStyle.value),
|
|
2037
|
-
viewBox: "0 0 24 24",
|
|
2038
|
-
fill: "none",
|
|
2039
|
-
stroke: "currentColor",
|
|
2040
|
-
"stroke-width": "2",
|
|
2041
|
-
"stroke-linecap": "round",
|
|
2042
|
-
"stroke-linejoin": "round"
|
|
2043
|
-
}, [Array.isArray(__props.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.icon, (d, i) => {
|
|
2044
|
-
return openBlock(), createElementBlock("path", {
|
|
2045
|
-
key: i,
|
|
2046
|
-
d
|
|
2047
|
-
}, null, 8, _hoisted_4$49);
|
|
2048
|
-
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
2049
|
-
key: 1,
|
|
2050
|
-
d: __props.icon
|
|
2051
|
-
}, null, 8, _hoisted_5$47))], 4)) : (openBlock(), createElementBlock("span", {
|
|
2052
|
-
key: 1,
|
|
2053
|
-
class: "mint-collapsible-card__icon-text",
|
|
2054
|
-
style: normalizeStyle(iconColorStyle.value)
|
|
2055
|
-
}, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$46, [createElementVNode("h3", _hoisted_7$40, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$37, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$55), createElementVNode("div", _hoisted_9$34, [
|
|
2056
|
-
__props.badge !== void 0 ? (openBlock(), createElementBlock("span", {
|
|
2057
|
-
key: 0,
|
|
2058
|
-
class: normalizeClass(badgeClasses.value)
|
|
2059
|
-
}, toDisplayString(__props.badge), 3)) : createCommentVNode("", true),
|
|
2060
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (action) => {
|
|
2061
|
-
return openBlock(), createElementBlock("button", {
|
|
2062
|
-
key: action.id,
|
|
2063
|
-
type: "button",
|
|
2064
|
-
class: normalizeClass(actionClasses(action)),
|
|
2065
|
-
style: normalizeStyle(actionStyle(action)),
|
|
2066
|
-
disabled: __props.disabled || action.disabled,
|
|
2067
|
-
"aria-label": action.label,
|
|
2068
|
-
title: action.label,
|
|
2069
|
-
onClick: ($event) => handleActionClick(action)
|
|
2070
|
-
}, [action.icon && isSvgIconValue(action.icon) ? (openBlock(), createElementBlock("svg", _hoisted_11$29, [Array.isArray(action.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(action.icon, (d, i) => {
|
|
2071
|
-
return openBlock(), createElementBlock("path", {
|
|
2072
|
-
key: i,
|
|
2073
|
-
d
|
|
2074
|
-
}, null, 8, _hoisted_12$26);
|
|
2075
|
-
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
2076
|
-
key: 1,
|
|
2077
|
-
d: action.icon
|
|
2078
|
-
}, null, 8, _hoisted_13$25))])) : action.icon ? (openBlock(), createElementBlock("span", _hoisted_14$22, toDisplayString(action.icon), 1)) : createCommentVNode("", true)], 14, _hoisted_10$31);
|
|
2079
|
-
}), 128)),
|
|
2080
|
-
__props.showToggle ? (openBlock(), createElementBlock("div", {
|
|
2081
|
-
key: 1,
|
|
2082
|
-
class: "mint-collapsible-card__toggle",
|
|
2083
|
-
onClick: handleToggleClick
|
|
2084
|
-
}, [createElementVNode("div", {
|
|
2085
|
-
role: "switch",
|
|
2086
|
-
tabindex: "0",
|
|
2087
|
-
"aria-checked": __props.toggleValue,
|
|
2088
|
-
class: normalizeClass(["mint-collapsible-card__toggle-track", __props.toggleValue ? "mint-collapsible-card__toggle-track--on" : ""]),
|
|
2089
|
-
style: normalizeStyle(toggleTrackStyle.value),
|
|
2090
|
-
onKeydown: [withKeys(withModifiers(handleToggleClick, ["prevent"]), ["enter"]), withKeys(withModifiers(handleToggleClick, ["prevent"]), ["space"])]
|
|
2091
|
-
}, [createElementVNode("span", { class: normalizeClass(["mint-collapsible-card__toggle-knob", __props.toggleValue ? "mint-collapsible-card__toggle-knob--on" : ""]) }, null, 2)], 46, _hoisted_15$21)])) : createCommentVNode("", true),
|
|
2092
|
-
createElementVNode("button", {
|
|
2093
|
-
type: "button",
|
|
2094
|
-
class: "mint-collapsible-card__chevron-button",
|
|
2095
|
-
disabled: __props.disabled,
|
|
2096
|
-
"aria-label": isOpen.value ? "Collapse section" : "Expand section",
|
|
2097
|
-
"aria-expanded": isOpen.value,
|
|
2098
|
-
onClick: toggle
|
|
2099
|
-
}, [(openBlock(), createElementBlock("svg", {
|
|
2100
|
-
class: normalizeClass(["mint-collapsible-card__chevron", isOpen.value ? "mint-collapsible-card__chevron--open" : ""]),
|
|
2101
|
-
fill: "none",
|
|
2102
|
-
stroke: "currentColor",
|
|
2103
|
-
"stroke-width": "2",
|
|
2104
|
-
"stroke-linecap": "round",
|
|
2105
|
-
"stroke-linejoin": "round",
|
|
2106
|
-
viewBox: "0 0 24 24",
|
|
2107
|
-
"aria-hidden": "true"
|
|
2108
|
-
}, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$19)
|
|
2109
|
-
])]), createVNode(Transition, { name: "collapse" }, {
|
|
2110
|
-
default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$19, [createElementVNode("div", _hoisted_18$17, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
|
|
2111
|
-
_: 3
|
|
2112
|
-
})], 2);
|
|
2113
|
-
};
|
|
2114
|
-
}
|
|
2115
|
-
});
|
|
2116
|
-
//#endregion
|
|
2117
|
-
//#region src/components/internal/FormFieldRendererInternal.vue
|
|
2118
|
-
var FormFieldRendererInternal_default = /* @__PURE__ */ defineComponent({
|
|
2119
|
-
__name: "FormFieldRendererInternal",
|
|
2120
|
-
props: {
|
|
2121
|
-
field: {},
|
|
2122
|
-
resolvedProps: {},
|
|
2123
|
-
form: {}
|
|
2124
|
-
},
|
|
2125
|
-
setup(__props) {
|
|
2126
|
-
const props = __props;
|
|
2127
|
-
const entry = computed(() => getFieldRegistryEntry(props.field.type));
|
|
2128
|
-
const isChoiceField = computed(() => props.field.type === "checkbox" || props.field.type === "toggle");
|
|
2129
|
-
const componentProps = computed(() => {
|
|
2130
|
-
if (!isChoiceField.value) return props.resolvedProps;
|
|
2131
|
-
return {
|
|
2132
|
-
variant: "row",
|
|
2133
|
-
label: props.field.label,
|
|
2134
|
-
description: props.field.hint,
|
|
2135
|
-
icon: props.field.icon,
|
|
2136
|
-
iconColor: props.field.iconColor,
|
|
2137
|
-
iconBg: props.field.iconBg,
|
|
2138
|
-
...props.resolvedProps
|
|
2139
|
-
};
|
|
2140
|
-
});
|
|
2141
|
-
const errorMessage = computed(() => {
|
|
2142
|
-
const name = props.field.name;
|
|
2143
|
-
return props.form.touched[name] ? props.form.errors[name] : null;
|
|
2144
|
-
});
|
|
2145
|
-
function handleUpload(files) {
|
|
2146
|
-
props.form.setFieldValue(props.field.name, files);
|
|
2147
|
-
}
|
|
2148
|
-
return (_ctx, _cache) => {
|
|
2149
|
-
return openBlock(), createBlock(FormField_default, {
|
|
2150
|
-
label: isChoiceField.value ? void 0 : __props.field.label,
|
|
2151
|
-
error: errorMessage.value ?? void 0,
|
|
2152
|
-
hint: isChoiceField.value ? void 0 : __props.field.hint,
|
|
2153
|
-
required: !!__props.field.validation?.required,
|
|
2154
|
-
"html-for": isChoiceField.value ? void 0 : __props.field.name
|
|
2155
|
-
}, {
|
|
2156
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, `field:${__props.field.name}`, {
|
|
2157
|
-
field: __props.field,
|
|
2158
|
-
form: __props.form,
|
|
2159
|
-
fieldProps: __props.form.getFieldProps(__props.field.name)
|
|
2160
|
-
}, () => [entry.value.vModel ? (openBlock(), createBlock(resolveDynamicComponent(entry.value.component), normalizeProps(mergeProps({ key: 0 }, componentProps.value)), null, 16)) : (openBlock(), createBlock(resolveDynamicComponent(entry.value.component), mergeProps({ key: 1 }, componentProps.value, { onUpload: handleUpload }), null, 16))])]),
|
|
2161
|
-
_: 3
|
|
2162
|
-
}, 8, [
|
|
2163
|
-
"label",
|
|
2164
|
-
"error",
|
|
2165
|
-
"hint",
|
|
2166
|
-
"required",
|
|
2167
|
-
"html-for"
|
|
2168
|
-
]);
|
|
2169
|
-
};
|
|
2170
|
-
}
|
|
2171
|
-
});
|
|
2172
|
-
//#endregion
|
|
2173
|
-
//#region src/utils/formModelSync.ts
|
|
2174
|
-
function recordValuesEqualForKeys(left, right, keys) {
|
|
2175
|
-
for (const key of keys) if (!valuesEqual(left[key], right[key])) return false;
|
|
2176
|
-
return true;
|
|
2177
|
-
}
|
|
2178
|
-
function pickRecordKeys(source, keys) {
|
|
2179
|
-
return Object.fromEntries(keys.map((key) => [key, source[key]]));
|
|
2180
|
-
}
|
|
2181
|
-
function pickExistingRecordKeys(source, keys) {
|
|
2182
|
-
return Object.fromEntries(keys.filter((key) => Object.prototype.hasOwnProperty.call(source, key)).map((key) => [key, source[key]]));
|
|
2183
|
-
}
|
|
2184
|
-
function formSchemaFieldNames(schema) {
|
|
2185
|
-
return (schema.steps ? schema.steps.flatMap((step) => step.sections) : schema.sections).flatMap((section) => section.fields.map((field) => field.name));
|
|
2186
|
-
}
|
|
2187
|
-
function valuesEqual(left, right) {
|
|
2188
|
-
if (Object.is(left, right)) return true;
|
|
2189
|
-
if (Array.isArray(left) && Array.isArray(right)) return left.length === right.length && left.every((item, index) => valuesEqual(item, right[index]));
|
|
2190
|
-
if (isRecord(left) && isRecord(right)) return recordValuesEqualForKeys(left, right, [...new Set([...Object.keys(left), ...Object.keys(right)])]);
|
|
2191
|
-
return false;
|
|
2192
|
-
}
|
|
2193
|
-
function isRecord(value) {
|
|
2194
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2195
|
-
}
|
|
2196
|
-
//#endregion
|
|
2197
|
-
//#region src/components/SettingsModal.schema.ts
|
|
2198
|
-
var APPEARANCE_TAB_ID = "appearance";
|
|
2199
|
-
var APPEARANCE_TAB = {
|
|
2200
|
-
id: APPEARANCE_TAB_ID,
|
|
2201
|
-
label: "Appearance",
|
|
2202
|
-
description: "Theme, color palette, and table density"
|
|
2203
|
-
};
|
|
2204
|
-
function buildFlatSettingsSchema(schema) {
|
|
2205
|
-
return { sections: schema.groups.map((group) => ({
|
|
2206
|
-
id: group.id,
|
|
2207
|
-
title: "",
|
|
2208
|
-
fields: group.fields,
|
|
2209
|
-
columns: group.columns,
|
|
2210
|
-
condition: group.condition
|
|
2211
|
-
})) };
|
|
2212
|
-
}
|
|
2213
|
-
function filterSettingsSchemaByAccess(schema, canShow) {
|
|
2214
|
-
return { groups: schema.groups.flatMap((group) => {
|
|
2215
|
-
if (!canShow(group)) return [];
|
|
2216
|
-
const fields = group.fields.filter(canShow);
|
|
2217
|
-
if (fields.length === 0) return [];
|
|
2218
|
-
return [{
|
|
2219
|
-
...group,
|
|
2220
|
-
fields
|
|
2221
|
-
}];
|
|
2222
|
-
}) };
|
|
2223
|
-
}
|
|
2224
|
-
function settingsGroupToTab(group) {
|
|
2225
|
-
return {
|
|
2226
|
-
id: group.id,
|
|
2227
|
-
label: group.label,
|
|
2228
|
-
icon: group.icon,
|
|
2229
|
-
description: group.description
|
|
2230
|
-
};
|
|
2231
|
-
}
|
|
2232
|
-
function normalizeVisibleSettingsTabs(tabs, canShow) {
|
|
2233
|
-
return tabs.map(normalizeItemInput).filter(canShow);
|
|
2234
|
-
}
|
|
2235
|
-
function buildSettingsTabs(baseTabs, showAppearance) {
|
|
2236
|
-
return showAppearance ? [...baseTabs, APPEARANCE_TAB] : baseTabs;
|
|
2237
|
-
}
|
|
2238
|
-
//#endregion
|
|
2239
|
-
//#region src/components/SettingsModal.vue?vue&type=script&setup=true&lang.ts
|
|
2240
|
-
var _hoisted_1$62 = {
|
|
2241
|
-
key: 0,
|
|
2242
|
-
class: "mint-settings-modal__tabs"
|
|
2243
|
-
};
|
|
2244
|
-
var _hoisted_2$54 = ["onClick"];
|
|
2245
|
-
var _hoisted_3$50 = {
|
|
2246
|
-
key: 1,
|
|
2247
|
-
class: "mint-settings-modal__rail",
|
|
2248
|
-
role: "tablist",
|
|
2249
|
-
"aria-orientation": "vertical",
|
|
2250
|
-
"aria-label": "Settings sections"
|
|
2251
|
-
};
|
|
2252
|
-
var _hoisted_4$48 = [
|
|
2253
|
-
"id",
|
|
2254
|
-
"aria-selected",
|
|
2255
|
-
"aria-controls",
|
|
2256
|
-
"tabindex",
|
|
2257
|
-
"onClick"
|
|
2258
|
-
];
|
|
2259
|
-
var _hoisted_5$46 = {
|
|
2260
|
-
class: "mint-settings-modal__rail-item-icon",
|
|
2261
|
-
"aria-hidden": "true"
|
|
2262
|
-
};
|
|
2263
|
-
var _hoisted_6$45 = ["innerHTML"];
|
|
2264
|
-
var _hoisted_7$39 = { class: "mint-settings-modal__rail-item-text" };
|
|
2265
|
-
var _hoisted_8$36 = { class: "mint-settings-modal__rail-item-label" };
|
|
2266
|
-
var _hoisted_9$33 = {
|
|
2267
|
-
key: 0,
|
|
2268
|
-
class: "mint-settings-modal__rail-item-description"
|
|
2269
|
-
};
|
|
2270
|
-
var _hoisted_10$30 = {
|
|
2271
|
-
key: 0,
|
|
2272
|
-
class: "mint-settings-modal__pane-header"
|
|
2273
|
-
};
|
|
2274
|
-
var _hoisted_11$28 = { class: "mint-settings-modal__pane-title" };
|
|
2275
|
-
var _hoisted_12$25 = {
|
|
2276
|
-
key: 0,
|
|
2277
|
-
class: "mint-settings-modal__pane-subtitle"
|
|
2278
|
-
};
|
|
2279
|
-
var _hoisted_13$24 = { key: 2 };
|
|
2280
|
-
var _hoisted_14$21 = { class: "mint-settings-modal__section" };
|
|
2281
|
-
var _hoisted_15$20 = { class: "mint-settings-modal__option-group" };
|
|
2282
|
-
var _hoisted_16$18 = ["onClick"];
|
|
2283
|
-
var _hoisted_17$18 = { class: "mint-settings-modal__section" };
|
|
2284
|
-
var _hoisted_18$16 = { class: "mint-settings-modal__option-group" };
|
|
2285
|
-
var _hoisted_19$16 = ["onClick"];
|
|
2286
|
-
var _hoisted_20$14 = { class: "mint-settings-modal__section" };
|
|
2287
|
-
var _hoisted_21$12 = { class: "mint-settings-modal__option-group" };
|
|
2288
|
-
var _hoisted_22$10 = ["onClick"];
|
|
2289
|
-
var _hoisted_23$9 = {
|
|
2290
|
-
key: 0,
|
|
2291
|
-
class: "mint-settings-modal__footer"
|
|
2292
|
-
};
|
|
2293
|
-
//#endregion
|
|
2294
|
-
//#region src/components/SettingsModal.vue
|
|
2295
|
-
var SettingsModal_default = /* @__PURE__ */ defineComponent({
|
|
2296
|
-
__name: "SettingsModal",
|
|
2297
|
-
props: {
|
|
2298
|
-
modelValue: { type: Boolean },
|
|
2299
|
-
title: { default: "Settings" },
|
|
2300
|
-
tabs: { default: () => [] },
|
|
2301
|
-
showAppearance: {
|
|
2302
|
-
type: Boolean,
|
|
2303
|
-
default: true
|
|
2304
|
-
},
|
|
2305
|
-
size: { default: "lg" },
|
|
2306
|
-
layout: { default: "horizontal" },
|
|
2307
|
-
schema: {},
|
|
2308
|
-
model: { default: void 0 },
|
|
2309
|
-
controls: {},
|
|
2310
|
-
controlOptions: {},
|
|
2311
|
-
values: {},
|
|
2312
|
-
enhancements: {},
|
|
2313
|
-
userType: {}
|
|
2314
|
-
},
|
|
2315
|
-
emits: [
|
|
2316
|
-
"update:modelValue",
|
|
2317
|
-
"update:values",
|
|
2318
|
-
"close"
|
|
2319
|
-
],
|
|
2320
|
-
setup(__props, { emit: __emit }) {
|
|
2321
|
-
/**
|
|
2322
|
-
* Tabbed settings modal with three usage modes:
|
|
2323
|
-
*
|
|
2324
|
-
* 1. Schema-driven (recommended) — pass `schema`, compact `controls`, or a
|
|
2325
|
-
* complete `defineControlModel()` result plus `v-model:values`. Each
|
|
2326
|
-
* group/section becomes a tab; fields auto-render via the SDK form field
|
|
2327
|
-
* registry (text, select, number, toggle, molecule, concentration, …).
|
|
2328
|
-
* Conditional visibility, validation, and dynamic options come for free.
|
|
2329
|
-
*
|
|
2330
|
-
* 2. Manual tabs + slots — pass `tabs` and a `<template #tab-{id}>` slot
|
|
2331
|
-
* per tab. Use this when you need bespoke widgets the form-builder
|
|
2332
|
-
* registry doesn't cover (or for legacy plugins).
|
|
2333
|
-
*
|
|
2334
|
-
* 3. Appearance only — `showAppearance` (default true) renders the built-in
|
|
2335
|
-
* theme / palette / table-density tab. Works alongside both modes above.
|
|
2336
|
-
*
|
|
2337
|
-
* Layout: `horizontal` (underline tabs, default) or `vertical` (sidebar rail
|
|
2338
|
-
* with optional icons + descriptions, recommended for 5+ groups).
|
|
2339
|
-
*/
|
|
2340
|
-
const props = __props;
|
|
2341
|
-
const emit = __emit;
|
|
2342
|
-
const settings = useSettingsStore();
|
|
2343
|
-
const auth = useAuthStore();
|
|
2344
|
-
const { user: platformUser } = usePlatformContext();
|
|
2345
|
-
const isVertical = computed(() => props.layout === "vertical");
|
|
2346
|
-
const uid = `mint-settings-${Math.random().toString(36).slice(2, 9)}`;
|
|
2347
|
-
const tabId = (id) => `${uid}-tab-${id}`;
|
|
2348
|
-
const panelId = (id) => `${uid}-panel-${id}`;
|
|
2349
|
-
const resolvedModel = computed(() => {
|
|
2350
|
-
return resolveControlModel(props.model);
|
|
2351
|
-
});
|
|
2352
|
-
const resolvedControls = computed(() => props.controls ?? resolvedModel.value?.controls);
|
|
2353
|
-
const resolvedControlOptions = computed(() => mergeControlWorkspaceOptions(resolvedModel.value?.controlOptions ?? {}, props.controlOptions));
|
|
2354
|
-
const sourceSettingsSchema = computed(() => props.schema ?? (resolvedControls.value ? controlsToSettingsSchema(resolvedControls.value, resolvedControlOptions.value) : void 0));
|
|
2355
|
-
const currentAccessUser = computed(() => {
|
|
2356
|
-
if (props.userType) return { role: props.userType === "admin" ? "admin" : "user" };
|
|
2357
|
-
return auth.userInfo ?? platformUser.value ?? null;
|
|
2358
|
-
});
|
|
2359
|
-
const isAccessUserAuthenticated = computed(() => props.userType !== void 0 || auth.isAuthenticated || !!platformUser.value);
|
|
2360
|
-
const settingsSchema = computed(() => {
|
|
2361
|
-
if (!sourceSettingsSchema.value) return void 0;
|
|
2362
|
-
return filterSettingsSchemaByAccess(sourceSettingsSchema.value, canShowForCurrentUser);
|
|
2363
|
-
});
|
|
2364
|
-
const isSchemaDriven = computed(() => !!settingsSchema.value);
|
|
2365
|
-
const resolvedValues = computed(() => ({
|
|
2366
|
-
...resolvedControlOptions.value.initialValues ?? {},
|
|
2367
|
-
...props.values ?? {}
|
|
2368
|
-
}));
|
|
2369
|
-
const builder = useFormBuilder(settingsSchema.value ? buildFlatSettingsSchema(settingsSchema.value) : { sections: [] }, resolvedValues.value, props.enhancements);
|
|
2370
|
-
watch(() => settingsSchema.value, (schema) => {
|
|
2371
|
-
if (!schema) {
|
|
2372
|
-
builder.updateSchema({ sections: [] }, {});
|
|
2373
|
-
return;
|
|
2374
|
-
}
|
|
2375
|
-
const flatSchema = buildFlatSettingsSchema(schema);
|
|
2376
|
-
const fieldNames = formSchemaFieldNames(flatSchema);
|
|
2377
|
-
const sourceValues = props.values === void 0 ? {
|
|
2378
|
-
...resolvedValues.value,
|
|
2379
|
-
...builder.form.data
|
|
2380
|
-
} : resolvedValues.value;
|
|
2381
|
-
builder.updateSchema(flatSchema, pickExistingRecordKeys(sourceValues ?? {}, fieldNames));
|
|
2382
|
-
}, { deep: true });
|
|
2383
|
-
watch(() => ({ ...resolvedValues.value }), (data) => {
|
|
2384
|
-
if (!settingsSchema.value) return;
|
|
2385
|
-
const fieldNames = builderFieldNames();
|
|
2386
|
-
if (recordValuesEqualForKeys(data, builder.form.data, fieldNames)) return;
|
|
2387
|
-
builder.reset(pickRecordKeys(data, fieldNames));
|
|
2388
|
-
}, { deep: true });
|
|
2389
|
-
watch(() => ({ ...builder.form.data }), (data) => {
|
|
2390
|
-
if (settingsSchema.value) emit("update:values", data);
|
|
2391
|
-
}, { deep: true });
|
|
2392
|
-
const visibleSchemaGroups = computed(() => settingsSchema.value ? settingsSchema.value.groups.filter((g) => builder.isSectionVisible(g.id)) : []);
|
|
2393
|
-
const manualTabs = computed(() => normalizeVisibleSettingsTabs(props.tabs, canShowForCurrentUser));
|
|
2394
|
-
const allTabs = computed(() => {
|
|
2395
|
-
return buildSettingsTabs(settingsSchema.value ? visibleSchemaGroups.value.map(settingsGroupToTab) : manualTabs.value, props.showAppearance);
|
|
2396
|
-
});
|
|
2397
|
-
const activeTab = ref(allTabs.value[0]?.id || "appearance");
|
|
2398
|
-
const activeTabMeta = computed(() => allTabs.value.find((t) => t.id === activeTab.value));
|
|
2399
|
-
watch(allTabs, (tabs) => {
|
|
2400
|
-
if (!tabs.some((t) => t.id === activeTab.value)) activeTab.value = tabs[0]?.id ?? "appearance";
|
|
2401
|
-
});
|
|
2402
|
-
const activeGroup = computed(() => visibleSchemaGroups.value.find((g) => g.id === activeTab.value));
|
|
2403
|
-
const activeGroupVisibleFields = computed(() => {
|
|
2404
|
-
if (!activeGroup.value) return [];
|
|
2405
|
-
return activeGroup.value.fields.filter((f) => builder.isFieldVisible(f.name));
|
|
2406
|
-
});
|
|
2407
|
-
const themeOptions = [
|
|
2408
|
-
{
|
|
2409
|
-
value: "light",
|
|
2410
|
-
label: "Light"
|
|
2411
|
-
},
|
|
2412
|
-
{
|
|
2413
|
-
value: "dark",
|
|
2414
|
-
label: "Dark"
|
|
2415
|
-
},
|
|
2416
|
-
{
|
|
2417
|
-
value: "system",
|
|
2418
|
-
label: "System"
|
|
2419
|
-
}
|
|
2420
|
-
];
|
|
2421
|
-
const densityOptions = [
|
|
2422
|
-
{
|
|
2423
|
-
value: "compact",
|
|
2424
|
-
label: "Compact"
|
|
2425
|
-
},
|
|
2426
|
-
{
|
|
2427
|
-
value: "normal",
|
|
2428
|
-
label: "Normal"
|
|
2429
|
-
},
|
|
2430
|
-
{
|
|
2431
|
-
value: "comfortable",
|
|
2432
|
-
label: "Comfortable"
|
|
2433
|
-
}
|
|
2434
|
-
];
|
|
2435
|
-
function handleClose() {
|
|
2436
|
-
emit("update:modelValue", false);
|
|
2437
|
-
emit("close");
|
|
2438
|
-
}
|
|
2439
|
-
function builderFieldNames() {
|
|
2440
|
-
return builder.fields.map((field) => field.name);
|
|
2441
|
-
}
|
|
2442
|
-
function canShowForCurrentUser(item) {
|
|
2443
|
-
return canAccessByPolicy(currentAccessUser.value, item, isAccessUserAuthenticated.value);
|
|
2444
|
-
}
|
|
2445
|
-
return (_ctx, _cache) => {
|
|
2446
|
-
return openBlock(), createBlock(BaseModal_default, {
|
|
2447
|
-
"model-value": __props.modelValue,
|
|
2448
|
-
title: __props.title,
|
|
2449
|
-
size: __props.size,
|
|
2450
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event)),
|
|
2451
|
-
onClose: handleClose
|
|
2452
|
-
}, {
|
|
2453
|
-
default: withCtx(() => [createElementVNode("div", { class: normalizeClass(["mint-settings-modal", `mint-settings-modal--${__props.layout}`]) }, [!isVertical.value && allTabs.value.length > 1 ? (openBlock(), createElementBlock("div", _hoisted_1$62, [(openBlock(true), createElementBlock(Fragment, null, renderList(allTabs.value, (tab) => {
|
|
2454
|
-
return openBlock(), createElementBlock("button", {
|
|
2455
|
-
key: tab.id,
|
|
2456
|
-
type: "button",
|
|
2457
|
-
class: normalizeClass(["mint-settings-modal__tab", { "mint-settings-modal__tab--active": activeTab.value === tab.id }]),
|
|
2458
|
-
onClick: ($event) => activeTab.value = tab.id
|
|
2459
|
-
}, toDisplayString(tab.label), 11, _hoisted_2$54);
|
|
2460
|
-
}), 128))])) : isVertical.value ? (openBlock(), createElementBlock("div", _hoisted_3$50, [(openBlock(true), createElementBlock(Fragment, null, renderList(allTabs.value, (tab) => {
|
|
2461
|
-
return openBlock(), createElementBlock("button", {
|
|
2462
|
-
id: tabId(tab.id),
|
|
2463
|
-
key: tab.id,
|
|
2464
|
-
type: "button",
|
|
2465
|
-
role: "tab",
|
|
2466
|
-
class: normalizeClass(["mint-settings-modal__rail-item", { "mint-settings-modal__rail-item--active": activeTab.value === tab.id }]),
|
|
2467
|
-
"aria-selected": activeTab.value === tab.id,
|
|
2468
|
-
"aria-controls": panelId(tab.id),
|
|
2469
|
-
tabindex: activeTab.value === tab.id ? 0 : -1,
|
|
2470
|
-
onClick: ($event) => activeTab.value = tab.id
|
|
2471
|
-
}, [createElementVNode("span", _hoisted_5$46, [tab.icon ? (openBlock(), createElementBlock("span", {
|
|
2472
|
-
key: 0,
|
|
2473
|
-
innerHTML: tab.icon
|
|
2474
|
-
}, null, 8, _hoisted_6$45)) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_7$39, [createElementVNode("span", _hoisted_8$36, toDisplayString(tab.label), 1), tab.description ? (openBlock(), createElementBlock("span", _hoisted_9$33, toDisplayString(tab.description), 1)) : createCommentVNode("", true)])], 10, _hoisted_4$48);
|
|
2475
|
-
}), 128))])) : createCommentVNode("", true), (openBlock(), createBlock(resolveDynamicComponent(isVertical.value ? "section" : "div"), {
|
|
2476
|
-
class: normalizeClass(isVertical.value ? "mint-settings-modal__pane" : "mint-settings-modal__content"),
|
|
2477
|
-
id: isVertical.value && activeTabMeta.value ? panelId(activeTabMeta.value.id) : void 0,
|
|
2478
|
-
role: isVertical.value ? "tabpanel" : void 0,
|
|
2479
|
-
"aria-labelledby": isVertical.value && activeTabMeta.value ? tabId(activeTabMeta.value.id) : void 0,
|
|
2480
|
-
tabindex: isVertical.value ? 0 : void 0
|
|
2481
|
-
}, {
|
|
2482
|
-
default: withCtx(() => [isVertical.value && activeTabMeta.value?.label ? (openBlock(), createElementBlock("header", _hoisted_10$30, [createElementVNode("h4", _hoisted_11$28, toDisplayString(activeTabMeta.value.label), 1), activeTabMeta.value.description ? (openBlock(), createElementBlock("p", _hoisted_12$25, toDisplayString(activeTabMeta.value.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(isVertical.value ? "mint-settings-modal__pane-body" : null) }, [isSchemaDriven.value && activeGroup.value ? (openBlock(), createElementBlock("div", {
|
|
2483
|
-
key: 0,
|
|
2484
|
-
class: "mint-settings-modal__group-grid",
|
|
2485
|
-
style: normalizeStyle({ "--mint-settings-cols": activeGroup.value.columns ?? 1 })
|
|
2486
|
-
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(activeGroupVisibleFields.value, (field) => {
|
|
2487
|
-
return openBlock(), createElementBlock("div", {
|
|
2488
|
-
key: field.name,
|
|
2489
|
-
style: normalizeStyle(field.colSpan ? { gridColumn: `span ${field.colSpan}` } : void 0)
|
|
2490
|
-
}, [renderSlot(_ctx.$slots, `field:${field.name}`, {
|
|
2491
|
-
field,
|
|
2492
|
-
form: unref(builder).form,
|
|
2493
|
-
fieldProps: unref(builder).form.getFieldProps(field.name)
|
|
2494
|
-
}, () => [createVNode(FormFieldRendererInternal_default, {
|
|
2495
|
-
field,
|
|
2496
|
-
"resolved-props": unref(builder).getResolvedFieldProps(field),
|
|
2497
|
-
form: unref(builder).form
|
|
2498
|
-
}, null, 8, [
|
|
2499
|
-
"field",
|
|
2500
|
-
"resolved-props",
|
|
2501
|
-
"form"
|
|
2502
|
-
])])], 4);
|
|
2503
|
-
}), 128))], 4)) : !isSchemaDriven.value ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(manualTabs.value, (tab) => {
|
|
2504
|
-
return withDirectives((openBlock(), createElementBlock("div", { key: tab.id }, [renderSlot(_ctx.$slots, `tab-${tab.id}`)], 512)), [[vShow, activeTab.value === tab.id]]);
|
|
2505
|
-
}), 128)) : createCommentVNode("", true), __props.showAppearance ? withDirectives((openBlock(), createElementBlock("div", _hoisted_13$24, [
|
|
2506
|
-
createElementVNode("div", _hoisted_14$21, [_cache[1] || (_cache[1] = createElementVNode("div", { class: "mint-settings-modal__section-label" }, "Theme", -1)), createElementVNode("div", _hoisted_15$20, [(openBlock(), createElementBlock(Fragment, null, renderList(themeOptions, (opt) => {
|
|
2507
|
-
return createElementVNode("button", {
|
|
2508
|
-
key: opt.value,
|
|
2509
|
-
type: "button",
|
|
2510
|
-
class: normalizeClass(["mint-settings-modal__option-btn", { "mint-settings-modal__option-btn--active": unref(settings).theme === opt.value }]),
|
|
2511
|
-
onClick: ($event) => unref(settings).theme = opt.value
|
|
2512
|
-
}, toDisplayString(opt.label), 11, _hoisted_16$18);
|
|
2513
|
-
}), 64))])]),
|
|
2514
|
-
createElementVNode("div", _hoisted_17$18, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-settings-modal__section-label" }, "Color Palette", -1)), createElementVNode("div", _hoisted_18$16, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(colorPalettes), (palette, key) => {
|
|
2515
|
-
return openBlock(), createElementBlock("button", {
|
|
2516
|
-
key,
|
|
2517
|
-
type: "button",
|
|
2518
|
-
class: normalizeClass(["mint-settings-modal__option-btn", { "mint-settings-modal__option-btn--active": unref(settings).colorPalette === key }]),
|
|
2519
|
-
onClick: ($event) => unref(settings).colorPalette = key
|
|
2520
|
-
}, toDisplayString(palette.name), 11, _hoisted_19$16);
|
|
2521
|
-
}), 128))])]),
|
|
2522
|
-
createElementVNode("div", _hoisted_20$14, [
|
|
2523
|
-
_cache[3] || (_cache[3] = createElementVNode("div", { class: "mint-settings-modal__section-label" }, "Table Density", -1)),
|
|
2524
|
-
createElementVNode("div", _hoisted_21$12, [(openBlock(), createElementBlock(Fragment, null, renderList(densityOptions, (opt) => {
|
|
2525
|
-
return createElementVNode("button", {
|
|
2526
|
-
key: opt.value,
|
|
2527
|
-
type: "button",
|
|
2528
|
-
class: normalizeClass(["mint-settings-modal__option-btn", { "mint-settings-modal__option-btn--active": unref(settings).tableDensity === opt.value }]),
|
|
2529
|
-
onClick: ($event) => unref(settings).tableDensity = opt.value
|
|
2530
|
-
}, toDisplayString(opt.label), 11, _hoisted_22$10);
|
|
2531
|
-
}), 64))]),
|
|
2532
|
-
_cache[4] || (_cache[4] = createElementVNode("p", { class: "mint-settings-modal__note" }, "Adjusts row height in data tables.", -1))
|
|
2533
|
-
]),
|
|
2534
|
-
renderSlot(_ctx.$slots, "appearance")
|
|
2535
|
-
], 512)), [[vShow, activeTab.value === unref(APPEARANCE_TAB_ID)]]) : createCommentVNode("", true)], 2)]),
|
|
2536
|
-
_: 3
|
|
2537
|
-
}, 8, [
|
|
2538
|
-
"class",
|
|
2539
|
-
"id",
|
|
2540
|
-
"role",
|
|
2541
|
-
"aria-labelledby",
|
|
2542
|
-
"tabindex"
|
|
2543
|
-
]))], 2), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_23$9, [renderSlot(_ctx.$slots, "footer", {
|
|
2544
|
-
values: unref(builder).form.data,
|
|
2545
|
-
close: handleClose
|
|
2546
|
-
})])) : createCommentVNode("", true)]),
|
|
2547
|
-
_: 3
|
|
2548
|
-
}, 8, [
|
|
2549
|
-
"model-value",
|
|
2550
|
-
"title",
|
|
2551
|
-
"size"
|
|
2552
|
-
]);
|
|
2553
|
-
};
|
|
2554
|
-
}
|
|
2555
|
-
});
|
|
2556
|
-
//#endregion
|
|
2557
|
-
//#region src/components/ConfirmDialog.vue?vue&type=script&setup=true&lang.ts
|
|
2558
|
-
var _hoisted_1$61 = { class: "mint-confirm" };
|
|
2559
|
-
var _hoisted_2$53 = {
|
|
2560
|
-
key: 1,
|
|
2561
|
-
class: "mint-confirm__message"
|
|
2562
|
-
};
|
|
2563
|
-
var _hoisted_3$49 = { class: "mint-confirm__footer" };
|
|
2564
|
-
var _hoisted_4$47 = ["disabled"];
|
|
2565
|
-
var _hoisted_5$45 = ["disabled"];
|
|
2566
|
-
var _hoisted_6$44 = {
|
|
2567
|
-
key: 0,
|
|
2568
|
-
class: "mint-confirm__btn-spinner",
|
|
2569
|
-
fill: "none",
|
|
2570
|
-
viewBox: "0 0 24 24"
|
|
2571
|
-
};
|
|
2572
|
-
//#endregion
|
|
2573
|
-
//#region src/components/ConfirmDialog.vue
|
|
2574
|
-
var ConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
2575
|
-
__name: "ConfirmDialog",
|
|
2576
|
-
props: {
|
|
2577
|
-
modelValue: { type: Boolean },
|
|
2578
|
-
title: { default: "Confirm" },
|
|
2579
|
-
subtitle: {},
|
|
2580
|
-
message: {},
|
|
2581
|
-
variant: { default: "danger" },
|
|
2582
|
-
confirmLabel: { default: "Confirm" },
|
|
2583
|
-
cancelLabel: { default: "Cancel" },
|
|
2584
|
-
loading: {
|
|
2585
|
-
type: Boolean,
|
|
2586
|
-
default: false
|
|
2587
|
-
}
|
|
2588
|
-
},
|
|
2589
|
-
emits: [
|
|
2590
|
-
"update:modelValue",
|
|
2591
|
-
"confirm",
|
|
2592
|
-
"cancel"
|
|
2593
|
-
],
|
|
2594
|
-
setup(__props, { emit: __emit }) {
|
|
2595
|
-
/** Confirm/cancel dialog with danger, warning, and info variants; blocks close while loading. */
|
|
2596
|
-
const emit = __emit;
|
|
2597
|
-
function handleCancel() {
|
|
2598
|
-
emit("update:modelValue", false);
|
|
2599
|
-
emit("cancel");
|
|
2600
|
-
}
|
|
2601
|
-
function handleConfirm() {
|
|
2602
|
-
emit("confirm");
|
|
2603
|
-
}
|
|
2604
|
-
return (_ctx, _cache) => {
|
|
2605
|
-
return openBlock(), createBlock(BaseModal_default, {
|
|
2606
|
-
"model-value": __props.modelValue,
|
|
2607
|
-
title: __props.title,
|
|
2608
|
-
subtitle: __props.subtitle,
|
|
2609
|
-
size: "sm",
|
|
2610
|
-
closable: !__props.loading,
|
|
2611
|
-
"close-on-overlay": !__props.loading,
|
|
2612
|
-
"close-on-escape": !__props.loading,
|
|
2613
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event))
|
|
2614
|
-
}, {
|
|
2615
|
-
footer: withCtx(() => [createElementVNode("div", _hoisted_3$49, [createElementVNode("button", {
|
|
2616
|
-
type: "button",
|
|
2617
|
-
class: "mint-confirm__btn-cancel",
|
|
2618
|
-
disabled: __props.loading,
|
|
2619
|
-
onClick: handleCancel
|
|
2620
|
-
}, toDisplayString(__props.cancelLabel), 9, _hoisted_4$47), createElementVNode("button", {
|
|
2621
|
-
type: "button",
|
|
2622
|
-
class: normalizeClass(["mint-confirm__btn-confirm", `mint-confirm__btn-confirm--${__props.variant}`]),
|
|
2623
|
-
disabled: __props.loading,
|
|
2624
|
-
onClick: handleConfirm
|
|
2625
|
-
}, [__props.loading ? (openBlock(), createElementBlock("svg", _hoisted_6$44, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
|
|
2626
|
-
style: { "opacity": "0.25" },
|
|
2627
|
-
cx: "12",
|
|
2628
|
-
cy: "12",
|
|
2629
|
-
r: "10",
|
|
2630
|
-
stroke: "currentColor",
|
|
2631
|
-
"stroke-width": "4"
|
|
2632
|
-
}, null, -1), createElementVNode("path", {
|
|
2633
|
-
style: { "opacity": "0.75" },
|
|
2634
|
-
fill: "currentColor",
|
|
2635
|
-
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
2636
|
-
}, null, -1)])])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(__props.confirmLabel), 1)], 10, _hoisted_5$45)])]),
|
|
2637
|
-
default: withCtx(() => [createElementVNode("div", _hoisted_1$61, [
|
|
2638
|
-
_ctx.$slots.icon ? (openBlock(), createElementBlock("div", {
|
|
2639
|
-
key: 0,
|
|
2640
|
-
class: normalizeClass(["mint-confirm__icon", `mint-confirm__icon--${__props.variant}`])
|
|
2641
|
-
}, [renderSlot(_ctx.$slots, "icon")], 2)) : createCommentVNode("", true),
|
|
2642
|
-
__props.message ? (openBlock(), createElementBlock("p", _hoisted_2$53, toDisplayString(__props.message), 1)) : createCommentVNode("", true),
|
|
2643
|
-
renderSlot(_ctx.$slots, "default")
|
|
2644
|
-
])]),
|
|
2645
|
-
_: 3
|
|
2646
|
-
}, 8, [
|
|
2647
|
-
"model-value",
|
|
2648
|
-
"title",
|
|
2649
|
-
"subtitle",
|
|
2650
|
-
"closable",
|
|
2651
|
-
"close-on-overlay",
|
|
2652
|
-
"close-on-escape"
|
|
2653
|
-
]);
|
|
2654
|
-
};
|
|
2655
|
-
}
|
|
2656
|
-
});
|
|
2657
|
-
//#endregion
|
|
2658
|
-
//#region src/components/ExperimentPopover.vue?vue&type=script&setup=true&lang.ts
|
|
2659
|
-
var _hoisted_1$60 = ["title"];
|
|
2660
|
-
var _hoisted_2$52 = {
|
|
2661
|
-
key: 0,
|
|
2662
|
-
class: "mint-experiment-popover__trigger-code"
|
|
2663
|
-
};
|
|
2664
|
-
var _hoisted_3$48 = {
|
|
2665
|
-
key: 1,
|
|
2666
|
-
class: "mint-experiment-popover__trigger-text"
|
|
2667
|
-
};
|
|
2668
|
-
var _hoisted_4$46 = {
|
|
2669
|
-
key: 2,
|
|
2670
|
-
class: "mint-experiment-popover__trigger-text"
|
|
2671
|
-
};
|
|
2672
|
-
var _hoisted_5$44 = ["disabled", "title"];
|
|
2673
|
-
var _hoisted_6$43 = {
|
|
2674
|
-
key: 0,
|
|
2675
|
-
class: "mint-experiment-popover__spinner--inline"
|
|
2676
|
-
};
|
|
2677
|
-
var _hoisted_7$38 = {
|
|
2678
|
-
key: 1,
|
|
2679
|
-
class: "mint-experiment-popover__save-trigger-icon",
|
|
2680
|
-
fill: "none",
|
|
2681
|
-
stroke: "currentColor",
|
|
2682
|
-
viewBox: "0 0 24 24"
|
|
2683
|
-
};
|
|
2684
|
-
var _hoisted_8$35 = {
|
|
2685
|
-
key: 2,
|
|
2686
|
-
class: "mint-experiment-popover__save-trigger-icon",
|
|
2687
|
-
fill: "none",
|
|
2688
|
-
stroke: "currentColor",
|
|
2689
|
-
viewBox: "0 0 24 24"
|
|
2690
|
-
};
|
|
2691
|
-
var _hoisted_9$32 = {
|
|
2692
|
-
key: 0,
|
|
2693
|
-
class: "mint-experiment-popover__panel"
|
|
2694
|
-
};
|
|
2695
|
-
var _hoisted_10$29 = { class: "mint-experiment-popover__header" };
|
|
2696
|
-
var _hoisted_11$27 = { class: "mint-experiment-popover__subtitle" };
|
|
2697
|
-
var _hoisted_12$24 = {
|
|
2698
|
-
key: 0,
|
|
2699
|
-
class: "mint-experiment-popover__body"
|
|
2700
|
-
};
|
|
2701
|
-
var _hoisted_13$23 = {
|
|
2702
|
-
key: 1,
|
|
2703
|
-
class: "mint-experiment-popover__body"
|
|
2704
|
-
};
|
|
2705
|
-
var _hoisted_14$20 = { class: "mint-experiment-popover__card" };
|
|
2706
|
-
var _hoisted_15$19 = { class: "mint-experiment-popover__card-info" };
|
|
2707
|
-
var _hoisted_16$17 = {
|
|
2708
|
-
key: 0,
|
|
2709
|
-
class: "mint-experiment-popover__card-code"
|
|
2710
|
-
};
|
|
2711
|
-
var _hoisted_17$17 = { class: "mint-experiment-popover__card-name" };
|
|
2712
|
-
var _hoisted_18$15 = {
|
|
2713
|
-
key: 1,
|
|
2714
|
-
class: "mint-experiment-popover__card-status"
|
|
2715
|
-
};
|
|
2716
|
-
var _hoisted_19$15 = { class: "mint-experiment-popover__card-actions" };
|
|
2717
|
-
//#endregion
|
|
2718
|
-
//#region src/components/ExperimentPopover.vue
|
|
2719
|
-
var ExperimentPopover_default = /* @__PURE__ */ defineComponent({
|
|
2720
|
-
__name: "ExperimentPopover",
|
|
2721
|
-
props: {
|
|
2722
|
-
experimentName: {},
|
|
2723
|
-
experimentCode: {},
|
|
2724
|
-
experimentStatus: {},
|
|
2725
|
-
showSave: {
|
|
2726
|
-
type: Boolean,
|
|
2727
|
-
default: false
|
|
2728
|
-
},
|
|
2729
|
-
showDetach: {
|
|
2730
|
-
type: Boolean,
|
|
2731
|
-
default: false
|
|
2732
|
-
},
|
|
2733
|
-
saveDisabled: {
|
|
2734
|
-
type: Boolean,
|
|
2735
|
-
default: false
|
|
2736
|
-
},
|
|
2737
|
-
saveLoading: {
|
|
2738
|
-
type: Boolean,
|
|
2739
|
-
default: false
|
|
2740
|
-
},
|
|
2741
|
-
saveSuccessMessage: {},
|
|
2742
|
-
saveDisabledMessage: {},
|
|
2743
|
-
confirmSave: {
|
|
2744
|
-
type: Boolean,
|
|
2745
|
-
default: true
|
|
2746
|
-
},
|
|
2747
|
-
confirmTitle: {},
|
|
2748
|
-
confirmMessage: {}
|
|
2749
|
-
},
|
|
2750
|
-
emits: [
|
|
2751
|
-
"select",
|
|
2752
|
-
"save",
|
|
2753
|
-
"detach"
|
|
2754
|
-
],
|
|
2755
|
-
setup(__props, { emit: __emit }) {
|
|
2756
|
-
/** Floating popover showing the active experiment with save, detach, and select actions. */
|
|
2757
|
-
const props = __props;
|
|
2758
|
-
const emit = __emit;
|
|
2759
|
-
const { isOpen, rootRef: popoverRef, close, toggle } = useDropdownState({ closeOnEscape: false });
|
|
2760
|
-
const showSuccess = ref(false);
|
|
2761
|
-
const showConfirm = ref(false);
|
|
2762
|
-
function handleSelect() {
|
|
2763
|
-
emit("select");
|
|
2764
|
-
close();
|
|
2765
|
-
}
|
|
2766
|
-
function handleSave() {
|
|
2767
|
-
if (props.saveDisabled || props.saveLoading) return;
|
|
2768
|
-
if (props.confirmSave) showConfirm.value = true;
|
|
2769
|
-
else emit("save");
|
|
2770
|
-
}
|
|
2771
|
-
function handleConfirmSave() {
|
|
2772
|
-
showConfirm.value = false;
|
|
2773
|
-
emit("save");
|
|
2774
|
-
}
|
|
2775
|
-
function handleDetach() {
|
|
2776
|
-
emit("detach");
|
|
2777
|
-
close();
|
|
2778
|
-
}
|
|
2779
|
-
let successTimer = null;
|
|
2780
|
-
watch(() => props.saveSuccessMessage, (msg) => {
|
|
2781
|
-
if (successTimer) clearTimeout(successTimer);
|
|
2782
|
-
if (msg) {
|
|
2783
|
-
showSuccess.value = true;
|
|
2784
|
-
successTimer = setTimeout(() => {
|
|
2785
|
-
showSuccess.value = false;
|
|
2786
|
-
successTimer = null;
|
|
2787
|
-
}, 3e3);
|
|
2788
|
-
}
|
|
2789
|
-
});
|
|
2790
|
-
onUnmounted(() => {
|
|
2791
|
-
if (successTimer) clearTimeout(successTimer);
|
|
2792
|
-
});
|
|
2793
|
-
return (_ctx, _cache) => {
|
|
2794
|
-
return openBlock(), createElementBlock("div", {
|
|
2795
|
-
ref_key: "popoverRef",
|
|
2796
|
-
ref: popoverRef,
|
|
2797
|
-
class: "mint-experiment-popover"
|
|
2798
|
-
}, [
|
|
2799
|
-
createElementVNode("div", { class: normalizeClass(["mint-experiment-popover__split", { "mint-experiment-popover__split--with-save": __props.showSave && __props.experimentName }]) }, [createElementVNode("button", {
|
|
2800
|
-
type: "button",
|
|
2801
|
-
class: normalizeClass([
|
|
2802
|
-
"mint-experiment-popover__trigger",
|
|
2803
|
-
{ "mint-experiment-popover__trigger--active": unref(isOpen) },
|
|
2804
|
-
{ "mint-experiment-popover__trigger--empty": !__props.experimentCode && !__props.experimentName }
|
|
2805
|
-
]),
|
|
2806
|
-
title: __props.experimentName || void 0,
|
|
2807
|
-
onClick: _cache[0] || (_cache[0] = withModifiers((...args) => unref(toggle) && unref(toggle)(...args), ["stop"]))
|
|
2808
|
-
}, [
|
|
2809
|
-
_cache[2] || (_cache[2] = createElementVNode("svg", {
|
|
2810
|
-
class: "mint-experiment-popover__trigger-icon",
|
|
2811
|
-
fill: "none",
|
|
2812
|
-
stroke: "currentColor",
|
|
2813
|
-
viewBox: "0 0 24 24"
|
|
2814
|
-
}, [createElementVNode("path", {
|
|
2815
|
-
"stroke-linecap": "round",
|
|
2816
|
-
"stroke-linejoin": "round",
|
|
2817
|
-
"stroke-width": "1.75",
|
|
2818
|
-
d: "M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"
|
|
2819
|
-
})], -1)),
|
|
2820
|
-
__props.experimentCode ? (openBlock(), createElementBlock("span", _hoisted_2$52, toDisplayString(__props.experimentCode), 1)) : __props.experimentName ? (openBlock(), createElementBlock("span", _hoisted_3$48, toDisplayString(__props.experimentName), 1)) : (openBlock(), createElementBlock("span", _hoisted_4$46, "No experiment")),
|
|
2821
|
-
_cache[3] || (_cache[3] = createElementVNode("svg", {
|
|
2822
|
-
class: "mint-experiment-popover__trigger-chevron",
|
|
2823
|
-
viewBox: "0 0 24 24",
|
|
2824
|
-
fill: "none",
|
|
2825
|
-
stroke: "currentColor",
|
|
2826
|
-
"stroke-width": "2",
|
|
2827
|
-
"stroke-linecap": "round",
|
|
2828
|
-
"stroke-linejoin": "round"
|
|
2829
|
-
}, [createElementVNode("path", { d: "m6 9 6 6 6-6" })], -1))
|
|
2830
|
-
], 10, _hoisted_1$60), __props.showSave && __props.experimentName ? (openBlock(), createElementBlock("button", {
|
|
2831
|
-
key: 0,
|
|
2832
|
-
type: "button",
|
|
2833
|
-
class: normalizeClass([
|
|
2834
|
-
"mint-experiment-popover__save-trigger",
|
|
2835
|
-
{ "mint-experiment-popover__save-trigger--loading": __props.saveLoading },
|
|
2836
|
-
{ "mint-experiment-popover__save-trigger--success": showSuccess.value },
|
|
2837
|
-
{ "mint-experiment-popover__save-trigger--disabled": __props.saveDisabled && !showSuccess.value }
|
|
2838
|
-
]),
|
|
2839
|
-
disabled: __props.saveDisabled && !showSuccess.value,
|
|
2840
|
-
title: __props.saveDisabled && __props.saveDisabledMessage ? __props.saveDisabledMessage : showSuccess.value && __props.saveSuccessMessage ? __props.saveSuccessMessage : "Save to Experiment",
|
|
2841
|
-
onClick: withModifiers(handleSave, ["stop"])
|
|
2842
|
-
}, [__props.saveLoading ? (openBlock(), createElementBlock("span", _hoisted_6$43)) : showSuccess.value ? (openBlock(), createElementBlock("svg", _hoisted_7$38, [..._cache[4] || (_cache[4] = [createElementVNode("path", {
|
|
2843
|
-
"stroke-linecap": "round",
|
|
2844
|
-
"stroke-linejoin": "round",
|
|
2845
|
-
"stroke-width": "2.5",
|
|
2846
|
-
d: "M5 13l4 4L19 7"
|
|
2847
|
-
}, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$35, [..._cache[5] || (_cache[5] = [createElementVNode("path", {
|
|
2848
|
-
"stroke-linecap": "round",
|
|
2849
|
-
"stroke-linejoin": "round",
|
|
2850
|
-
"stroke-width": "2",
|
|
2851
|
-
d: "M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4"
|
|
2852
|
-
}, null, -1)])]))], 10, _hoisted_5$44)) : createCommentVNode("", true)], 2),
|
|
2853
|
-
unref(isOpen) ? (openBlock(), createElementBlock("div", _hoisted_9$32, [createElementVNode("div", _hoisted_10$29, [_cache[6] || (_cache[6] = createElementVNode("div", { class: "mint-experiment-popover__title" }, "Experiment", -1)), createElementVNode("div", _hoisted_11$27, toDisplayString(__props.experimentName ? "Linked experiment context" : "Link to an MINT experiment"), 1)]), !__props.experimentName ? (openBlock(), createElementBlock("div", _hoisted_12$24, [createElementVNode("button", {
|
|
2854
|
-
type: "button",
|
|
2855
|
-
class: "mint-experiment-popover__select-btn",
|
|
2856
|
-
onClick: handleSelect
|
|
2857
|
-
}, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
|
|
2858
|
-
width: "14",
|
|
2859
|
-
height: "14",
|
|
2860
|
-
fill: "none",
|
|
2861
|
-
stroke: "currentColor",
|
|
2862
|
-
viewBox: "0 0 24 24"
|
|
2863
|
-
}, [createElementVNode("path", {
|
|
2864
|
-
"stroke-linecap": "round",
|
|
2865
|
-
"stroke-linejoin": "round",
|
|
2866
|
-
"stroke-width": "2",
|
|
2867
|
-
d: "M12 4v16m8-8H4"
|
|
2868
|
-
})], -1), createTextVNode(" Select Experiment ", -1)])])])) : (openBlock(), createElementBlock("div", _hoisted_13$23, [createElementVNode("div", _hoisted_14$20, [_cache[8] || (_cache[8] = createElementVNode("div", { class: "mint-experiment-popover__card-icon" }, [createElementVNode("svg", {
|
|
2869
|
-
fill: "none",
|
|
2870
|
-
stroke: "currentColor",
|
|
2871
|
-
viewBox: "0 0 24 24"
|
|
2872
|
-
}, [createElementVNode("path", {
|
|
2873
|
-
"stroke-linecap": "round",
|
|
2874
|
-
"stroke-linejoin": "round",
|
|
2875
|
-
"stroke-width": "1.75",
|
|
2876
|
-
d: "M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"
|
|
2877
|
-
})])], -1)), createElementVNode("div", _hoisted_15$19, [
|
|
2878
|
-
__props.experimentCode ? (openBlock(), createElementBlock("span", _hoisted_16$17, toDisplayString(__props.experimentCode), 1)) : createCommentVNode("", true),
|
|
2879
|
-
createElementVNode("div", _hoisted_17$17, toDisplayString(__props.experimentName), 1),
|
|
2880
|
-
__props.experimentStatus ? (openBlock(), createElementBlock("div", _hoisted_18$15, toDisplayString(unref(formatExperimentStatus)(__props.experimentStatus)), 1)) : createCommentVNode("", true)
|
|
2881
|
-
])]), createElementVNode("div", _hoisted_19$15, [createElementVNode("button", {
|
|
2882
|
-
type: "button",
|
|
2883
|
-
class: "mint-experiment-popover__change-btn",
|
|
2884
|
-
onClick: handleSelect
|
|
2885
|
-
}, " Change "), __props.showDetach ? (openBlock(), createElementBlock("button", {
|
|
2886
|
-
key: 0,
|
|
2887
|
-
type: "button",
|
|
2888
|
-
class: "mint-experiment-popover__detach-btn",
|
|
2889
|
-
onClick: handleDetach
|
|
2890
|
-
}, " Detach ")) : createCommentVNode("", true)])]))])) : createCommentVNode("", true),
|
|
2891
|
-
createVNode(ConfirmDialog_default, {
|
|
2892
|
-
modelValue: showConfirm.value,
|
|
2893
|
-
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showConfirm.value = $event),
|
|
2894
|
-
title: __props.confirmTitle ?? "Save to Experiment",
|
|
2895
|
-
message: __props.confirmMessage ?? `Save current data to ${__props.experimentName}?`,
|
|
2896
|
-
variant: "info",
|
|
2897
|
-
"confirm-label": "Save",
|
|
2898
|
-
loading: __props.saveLoading,
|
|
2899
|
-
onConfirm: handleConfirmSave
|
|
2900
|
-
}, null, 8, [
|
|
2901
|
-
"modelValue",
|
|
2902
|
-
"title",
|
|
2903
|
-
"message",
|
|
2904
|
-
"loading"
|
|
2905
|
-
])
|
|
2906
|
-
], 512);
|
|
2907
|
-
};
|
|
2908
|
-
}
|
|
2909
|
-
});
|
|
2910
|
-
//#endregion
|
|
2911
|
-
//#region src/components/Skeleton.vue
|
|
2912
|
-
var Skeleton_default = /* @__PURE__ */ defineComponent({
|
|
2913
|
-
__name: "Skeleton",
|
|
2914
|
-
props: {
|
|
2915
|
-
variant: { default: "text" },
|
|
2916
|
-
width: {},
|
|
2917
|
-
height: {},
|
|
2918
|
-
animation: { default: "wave" }
|
|
2919
|
-
},
|
|
2920
|
-
setup(__props) {
|
|
2921
|
-
/** Animated loading placeholder in text, circular, rectangular, or rounded variants with pulse or wave animation. */
|
|
2922
|
-
const props = __props;
|
|
2923
|
-
const style = computed(() => {
|
|
2924
|
-
const s = {};
|
|
2925
|
-
if (props.width) s.width = typeof props.width === "number" ? `${props.width}px` : props.width;
|
|
2926
|
-
if (props.height) s.height = typeof props.height === "number" ? `${props.height}px` : props.height;
|
|
2927
|
-
return s;
|
|
2928
|
-
});
|
|
2929
|
-
const classes = computed(() => {
|
|
2930
|
-
const base = ["bg-bg-hover"];
|
|
2931
|
-
switch (props.variant) {
|
|
2932
|
-
case "circular":
|
|
2933
|
-
base.push("rounded-full");
|
|
2934
|
-
if (!props.width && !props.height) base.push("w-10 h-10");
|
|
2935
|
-
break;
|
|
2936
|
-
case "rectangular":
|
|
2937
|
-
base.push("rounded-none");
|
|
2938
|
-
if (!props.height) base.push("h-24");
|
|
2939
|
-
break;
|
|
2940
|
-
case "rounded":
|
|
2941
|
-
base.push("rounded-mint");
|
|
2942
|
-
if (!props.height) base.push("h-24");
|
|
2943
|
-
break;
|
|
2944
|
-
default:
|
|
2945
|
-
base.push("rounded");
|
|
2946
|
-
if (!props.height) base.push("h-4");
|
|
2947
|
-
if (!props.width) base.push("w-full");
|
|
2948
|
-
}
|
|
2949
|
-
switch (props.animation) {
|
|
2950
|
-
case "pulse":
|
|
2951
|
-
base.push("animate-pulse");
|
|
2952
|
-
break;
|
|
2953
|
-
case "wave":
|
|
2954
|
-
base.push("skeleton-wave");
|
|
2955
|
-
break;
|
|
2956
|
-
}
|
|
2957
|
-
return base;
|
|
2958
|
-
});
|
|
2959
|
-
return (_ctx, _cache) => {
|
|
2960
|
-
return openBlock(), createElementBlock("div", {
|
|
2961
|
-
class: normalizeClass(classes.value),
|
|
2962
|
-
style: normalizeStyle(style.value)
|
|
2963
|
-
}, null, 6);
|
|
2964
|
-
};
|
|
2965
|
-
}
|
|
2966
|
-
});
|
|
2967
|
-
//#endregion
|
|
2968
|
-
//#region src/components/EmptyState.vue?vue&type=script&setup=true&lang.ts
|
|
2969
|
-
var _hoisted_1$59 = ["d"];
|
|
2970
|
-
var _hoisted_2$51 = ["d"];
|
|
2971
|
-
var _hoisted_3$47 = { class: "mint-empty-state__body" };
|
|
2972
|
-
var _hoisted_4$45 = {
|
|
2973
|
-
key: 0,
|
|
2974
|
-
class: "mint-empty-state__title"
|
|
2975
|
-
};
|
|
2976
|
-
var _hoisted_5$43 = {
|
|
2977
|
-
key: 1,
|
|
2978
|
-
class: "mint-empty-state__description"
|
|
2979
|
-
};
|
|
2980
|
-
var _hoisted_6$42 = {
|
|
2981
|
-
key: 0,
|
|
2982
|
-
class: "mint-empty-state__action"
|
|
2983
|
-
};
|
|
2984
|
-
//#endregion
|
|
2985
|
-
//#region src/components/EmptyState.vue
|
|
2986
|
-
var EmptyState_default = /* @__PURE__ */ defineComponent({
|
|
2987
|
-
__name: "EmptyState",
|
|
2988
|
-
props: {
|
|
2989
|
-
title: {},
|
|
2990
|
-
description: {},
|
|
2991
|
-
iconPath: {},
|
|
2992
|
-
color: { default: "primary" },
|
|
2993
|
-
size: { default: "md" },
|
|
2994
|
-
variant: { default: "illustrated" },
|
|
2995
|
-
actionLabel: {}
|
|
2996
|
-
},
|
|
2997
|
-
emits: ["action"],
|
|
2998
|
-
setup(__props, { emit: __emit }) {
|
|
2999
|
-
/** Empty-state placeholder with icon badge, headline, description, default slot, and optional CTA button. */
|
|
3000
|
-
const emit = __emit;
|
|
3001
|
-
const defaultIconPaths = [
|
|
3002
|
-
"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",
|
|
3003
|
-
"M7 11h10",
|
|
3004
|
-
"M7 15h6",
|
|
3005
|
-
"M7 7h8"
|
|
3006
|
-
];
|
|
3007
|
-
return (_ctx, _cache) => {
|
|
3008
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass([
|
|
3009
|
-
"mint-empty-state",
|
|
3010
|
-
`mint-empty-state--${__props.variant}`,
|
|
3011
|
-
`mint-empty-state--${__props.size}`
|
|
3012
|
-
]) }, [
|
|
3013
|
-
createElementVNode("div", { class: normalizeClass(["mint-empty-state__icon-wrapper", `mint-empty-state__icon-wrapper--${__props.color}`]) }, [renderSlot(_ctx.$slots, "icon", {}, () => [(openBlock(), createElementBlock("svg", {
|
|
3014
|
-
class: normalizeClass(["mint-empty-state__icon", `mint-empty-state__icon--${__props.color}`]),
|
|
3015
|
-
viewBox: "0 0 24 24",
|
|
3016
|
-
fill: "none",
|
|
3017
|
-
stroke: "currentColor",
|
|
3018
|
-
"stroke-width": "2",
|
|
3019
|
-
"stroke-linecap": "round",
|
|
3020
|
-
"stroke-linejoin": "round"
|
|
3021
|
-
}, [__props.iconPath ? (openBlock(), createElementBlock("path", {
|
|
3022
|
-
key: 0,
|
|
3023
|
-
d: __props.iconPath
|
|
3024
|
-
}, null, 8, _hoisted_1$59)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, renderList(defaultIconPaths, (d, i) => {
|
|
3025
|
-
return createElementVNode("path", {
|
|
3026
|
-
key: i,
|
|
3027
|
-
d
|
|
3028
|
-
}, null, 8, _hoisted_2$51);
|
|
3029
|
-
}), 64))], 2))])], 2),
|
|
3030
|
-
createElementVNode("div", _hoisted_3$47, [
|
|
3031
|
-
__props.title ? (openBlock(), createElementBlock("h3", _hoisted_4$45, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
|
|
3032
|
-
__props.description ? (openBlock(), createElementBlock("p", _hoisted_5$43, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
|
|
3033
|
-
renderSlot(_ctx.$slots, "default")
|
|
3034
|
-
]),
|
|
3035
|
-
__props.actionLabel ? (openBlock(), createElementBlock("div", _hoisted_6$42, [createVNode(BaseButton_default, { onClick: _cache[0] || (_cache[0] = ($event) => emit("action")) }, {
|
|
3036
|
-
default: withCtx(() => [createTextVNode(toDisplayString(__props.actionLabel), 1)]),
|
|
3037
|
-
_: 1
|
|
3038
|
-
})])) : createCommentVNode("", true)
|
|
3039
|
-
], 2);
|
|
3040
|
-
};
|
|
3041
|
-
}
|
|
3042
|
-
});
|
|
3043
|
-
//#endregion
|
|
3044
|
-
//#region src/components/ExperimentCodeBadge.vue?vue&type=script&setup=true&lang.ts
|
|
3045
|
-
var _hoisted_1$58 = [
|
|
3046
|
-
"role",
|
|
3047
|
-
"tabindex",
|
|
3048
|
-
"title"
|
|
3049
|
-
];
|
|
3050
|
-
//#endregion
|
|
3051
|
-
//#region src/components/ExperimentCodeBadge.vue
|
|
3052
|
-
var ExperimentCodeBadge_default = /* @__PURE__ */ defineComponent({
|
|
3053
|
-
__name: "ExperimentCodeBadge",
|
|
3054
|
-
props: {
|
|
3055
|
-
code: {},
|
|
3056
|
-
size: { default: "md" },
|
|
3057
|
-
copyable: {
|
|
3058
|
-
type: Boolean,
|
|
3059
|
-
default: true
|
|
3060
|
-
}
|
|
3061
|
-
},
|
|
3062
|
-
emits: ["copy"],
|
|
3063
|
-
setup(__props, { emit: __emit }) {
|
|
3064
|
-
/** Inline badge that displays an experiment code and copies it to the clipboard on click. */
|
|
3065
|
-
const props = __props;
|
|
3066
|
-
const emit = __emit;
|
|
3067
|
-
const copied = ref(false);
|
|
3068
|
-
let copyTimeout = null;
|
|
3069
|
-
async function handleCopy() {
|
|
3070
|
-
if (!props.copyable) return;
|
|
3071
|
-
try {
|
|
3072
|
-
await navigator.clipboard.writeText(props.code);
|
|
3073
|
-
copied.value = true;
|
|
3074
|
-
emit("copy", props.code);
|
|
3075
|
-
if (copyTimeout) clearTimeout(copyTimeout);
|
|
3076
|
-
copyTimeout = setTimeout(() => {
|
|
3077
|
-
copied.value = false;
|
|
3078
|
-
}, 1500);
|
|
3079
|
-
} catch {}
|
|
3080
|
-
}
|
|
3081
|
-
function handleKeydown(event) {
|
|
3082
|
-
if (!props.copyable) return;
|
|
3083
|
-
if (event.key === "Enter" || event.key === " ") {
|
|
3084
|
-
event.preventDefault();
|
|
3085
|
-
handleCopy();
|
|
3086
|
-
}
|
|
3087
|
-
}
|
|
3088
|
-
return (_ctx, _cache) => {
|
|
3089
|
-
return openBlock(), createElementBlock("span", {
|
|
3090
|
-
class: normalizeClass([
|
|
3091
|
-
"mint-exp-code",
|
|
3092
|
-
`mint-exp-code--${__props.size}`,
|
|
3093
|
-
{
|
|
3094
|
-
"mint-exp-code--copyable": __props.copyable,
|
|
3095
|
-
"mint-exp-code--copied": copied.value
|
|
3096
|
-
}
|
|
3097
|
-
]),
|
|
3098
|
-
role: __props.copyable ? "button" : void 0,
|
|
3099
|
-
tabindex: __props.copyable ? 0 : void 0,
|
|
3100
|
-
title: __props.copyable ? copied.value ? "Copied!" : "Click to copy" : void 0,
|
|
3101
|
-
onClick: handleCopy,
|
|
3102
|
-
onKeydown: handleKeydown
|
|
3103
|
-
}, toDisplayString(copied.value ? "Copied!" : __props.code), 43, _hoisted_1$58);
|
|
3104
|
-
};
|
|
3105
|
-
}
|
|
3106
|
-
});
|
|
3107
|
-
//#endregion
|
|
3108
|
-
//#region src/components/ExperimentSelectorModal.vue?vue&type=script&setup=true&lang.ts
|
|
3109
|
-
var _hoisted_1$57 = { class: "mint-experiment-selector__filters-row" };
|
|
3110
|
-
var _hoisted_2$50 = { class: "mint-experiment-selector__search" };
|
|
3111
|
-
var _hoisted_3$46 = { class: "mint-experiment-selector__filter-select" };
|
|
3112
|
-
var _hoisted_4$44 = {
|
|
3113
|
-
key: 0,
|
|
3114
|
-
class: "mint-experiment-selector__filter-select"
|
|
3115
|
-
};
|
|
3116
|
-
var _hoisted_5$42 = {
|
|
3117
|
-
key: 0,
|
|
3118
|
-
class: "mint-experiment-selector__filters-dot"
|
|
3119
|
-
};
|
|
3120
|
-
var _hoisted_6$41 = {
|
|
3121
|
-
key: 0,
|
|
3122
|
-
class: "mint-experiment-selector__filters-advanced"
|
|
3123
|
-
};
|
|
3124
|
-
var _hoisted_7$37 = {
|
|
3125
|
-
key: 0,
|
|
3126
|
-
class: "mint-experiment-selector__filter-select"
|
|
3127
|
-
};
|
|
3128
|
-
var _hoisted_8$34 = { class: "mint-experiment-selector__filter-select" };
|
|
3129
|
-
var _hoisted_9$31 = { class: "mint-experiment-selector__filter-select" };
|
|
3130
|
-
var _hoisted_10$28 = { class: "mint-experiment-selector__group-toggle" };
|
|
3131
|
-
var _hoisted_11$26 = {
|
|
3132
|
-
key: 1,
|
|
3133
|
-
class: "mint-experiment-selector__skeleton"
|
|
3134
|
-
};
|
|
3135
|
-
var _hoisted_12$23 = { class: "mint-experiment-selector__skeleton-content" };
|
|
3136
|
-
var _hoisted_13$22 = {
|
|
3137
|
-
key: 2,
|
|
3138
|
-
class: "mint-experiment-selector__error"
|
|
3139
|
-
};
|
|
3140
|
-
var _hoisted_14$19 = ["onClick"];
|
|
3141
|
-
var _hoisted_15$18 = { class: "mint-experiment-selector__group-name" };
|
|
3142
|
-
var _hoisted_16$16 = { class: "mint-experiment-selector__group-count" };
|
|
3143
|
-
var _hoisted_17$16 = ["onClick", "onMouseenter"];
|
|
3144
|
-
var _hoisted_18$14 = { class: "mint-experiment-selector__row-content" };
|
|
3145
|
-
var _hoisted_19$14 = { class: "mint-experiment-selector__name" };
|
|
3146
|
-
var _hoisted_20$13 = { class: "mint-experiment-selector__meta" };
|
|
3147
|
-
var _hoisted_21$11 = ["onClick", "onMouseenter"];
|
|
3148
|
-
var _hoisted_22$9 = { class: "mint-experiment-selector__row-content" };
|
|
3149
|
-
var _hoisted_23$8 = { class: "mint-experiment-selector__name" };
|
|
3150
|
-
var _hoisted_24$8 = { class: "mint-experiment-selector__meta" };
|
|
3151
|
-
var _hoisted_25$8 = { key: 0 };
|
|
3152
|
-
var _hoisted_26$8 = {
|
|
3153
|
-
key: 6,
|
|
3154
|
-
class: "mint-experiment-selector__footer"
|
|
3155
|
-
};
|
|
3156
|
-
//#endregion
|
|
3157
|
-
//#region src/components/ExperimentSelectorModal.vue
|
|
3158
|
-
var ExperimentSelectorModal_default = /* @__PURE__ */ defineComponent({
|
|
3159
|
-
__name: "ExperimentSelectorModal",
|
|
3160
|
-
props: {
|
|
3161
|
-
modelValue: { type: Boolean },
|
|
3162
|
-
experimentType: {},
|
|
3163
|
-
currentExperimentId: { default: null },
|
|
3164
|
-
title: { default: "Select Experiment" },
|
|
3165
|
-
size: { default: "full" },
|
|
3166
|
-
groupByProject: {
|
|
3167
|
-
type: Boolean,
|
|
3168
|
-
default: false
|
|
3169
|
-
},
|
|
3170
|
-
showFilters: {
|
|
3171
|
-
type: Boolean,
|
|
3172
|
-
default: false
|
|
3173
|
-
}
|
|
3174
|
-
},
|
|
3175
|
-
emits: [
|
|
3176
|
-
"update:modelValue",
|
|
3177
|
-
"select",
|
|
3178
|
-
"deselect"
|
|
3179
|
-
],
|
|
3180
|
-
setup(__props, { emit: __emit }) {
|
|
3181
|
-
/** Modal for searching and selecting an experiment from the platform list with filters and keyboard nav. */
|
|
1647
|
+
/** Card whose body collapses with a chevron-rotate animation, with an optional inline toggle switch independent of expand state. */
|
|
3182
1648
|
const props = __props;
|
|
3183
1649
|
const emit = __emit;
|
|
3184
|
-
const
|
|
3185
|
-
const
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
const
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
if (!groupToggle.value) return experiments.value;
|
|
3203
|
-
return groupedByProject.value.flatMap(([, exps]) => exps);
|
|
1650
|
+
const isOpen = ref(props.defaultOpen);
|
|
1651
|
+
const toggle = () => {
|
|
1652
|
+
if (!props.disabled) isOpen.value = !isOpen.value;
|
|
1653
|
+
};
|
|
1654
|
+
const handleToggleClick = (event) => {
|
|
1655
|
+
event.stopPropagation();
|
|
1656
|
+
emit("update:toggleValue", !props.toggleValue);
|
|
1657
|
+
};
|
|
1658
|
+
const headerClasses = computed(() => ["mint-collapsible-card__header", props.disabled ? "mint-collapsible-card__header--disabled" : ""]);
|
|
1659
|
+
const iconBgStyle = computed(() => ({ backgroundColor: props.iconBg || "var(--color-primary-soft)" }));
|
|
1660
|
+
const iconColorStyle = computed(() => ({ color: props.iconColor || "var(--color-primary)" }));
|
|
1661
|
+
const isSvgIcon = computed(() => isSvgIconValue(props.icon));
|
|
1662
|
+
const toggleTrackStyle = computed(() => {
|
|
1663
|
+
if (!props.toggleValue || !props.toggleColor) return {};
|
|
1664
|
+
return {
|
|
1665
|
+
backgroundColor: props.toggleColor,
|
|
1666
|
+
borderColor: props.toggleColor
|
|
1667
|
+
};
|
|
3204
1668
|
});
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
sortKey.value = String(value) || "created_at:desc";
|
|
3210
|
-
}
|
|
3211
|
-
function handleSelect(experiment) {
|
|
3212
|
-
emit("select", experiment);
|
|
3213
|
-
emit("update:modelValue", false);
|
|
3214
|
-
}
|
|
3215
|
-
function handleDeselect() {
|
|
3216
|
-
emit("deselect");
|
|
3217
|
-
emit("update:modelValue", false);
|
|
3218
|
-
}
|
|
3219
|
-
function handleKeydown(event) {
|
|
3220
|
-
const list = flatExperiments.value;
|
|
3221
|
-
if (!list.length) return;
|
|
3222
|
-
switch (event.key) {
|
|
3223
|
-
case "ArrowDown":
|
|
3224
|
-
event.preventDefault();
|
|
3225
|
-
activeIndex.value = Math.min(activeIndex.value + 1, list.length - 1);
|
|
3226
|
-
scrollActiveIntoView();
|
|
3227
|
-
break;
|
|
3228
|
-
case "ArrowUp":
|
|
3229
|
-
event.preventDefault();
|
|
3230
|
-
activeIndex.value = Math.max(activeIndex.value - 1, 0);
|
|
3231
|
-
scrollActiveIntoView();
|
|
3232
|
-
break;
|
|
3233
|
-
case "Enter":
|
|
3234
|
-
event.preventDefault();
|
|
3235
|
-
if (activeIndex.value >= 0 && activeIndex.value < list.length) handleSelect(list[activeIndex.value]);
|
|
3236
|
-
break;
|
|
3237
|
-
}
|
|
1669
|
+
const badgeClasses = computed(() => ["mint-collapsible-card__badge", `mint-collapsible-card__badge--${props.badgeTone}`]);
|
|
1670
|
+
function isSvgIconValue(icon) {
|
|
1671
|
+
if (!icon) return false;
|
|
1672
|
+
return Array.isArray(icon) || icon.startsWith("M") || icon.startsWith("m");
|
|
3238
1673
|
}
|
|
3239
|
-
function
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
1674
|
+
function actionClasses(action) {
|
|
1675
|
+
return [
|
|
1676
|
+
"mint-collapsible-card__action",
|
|
1677
|
+
action.tone ? `mint-collapsible-card__action--${action.tone}` : "",
|
|
1678
|
+
action.disabled ? "mint-collapsible-card__action--disabled" : ""
|
|
1679
|
+
];
|
|
3243
1680
|
}
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
flatExperiments.value.forEach((exp, i) => map.set(exp.id, i));
|
|
3247
|
-
return map;
|
|
3248
|
-
});
|
|
3249
|
-
function getFlatIndex(experiment) {
|
|
3250
|
-
return flatIndexMap.value.get(experiment.id) ?? -1;
|
|
1681
|
+
function actionStyle(action) {
|
|
1682
|
+
return action.iconColor ? { color: action.iconColor } : {};
|
|
3251
1683
|
}
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
else collapsedGroups.add(groupName);
|
|
1684
|
+
function handleActionClick(action) {
|
|
1685
|
+
if (props.disabled || action.disabled) return;
|
|
1686
|
+
emit("action", action.id);
|
|
3256
1687
|
}
|
|
3257
|
-
watch(experiments, () => {
|
|
3258
|
-
activeIndex.value = -1;
|
|
3259
|
-
});
|
|
3260
|
-
watch(() => props.modelValue, (isOpen) => {
|
|
3261
|
-
if (isOpen) {
|
|
3262
|
-
activeIndex.value = -1;
|
|
3263
|
-
collapsedGroups.clear();
|
|
3264
|
-
fetchFilterOptions();
|
|
3265
|
-
fetchExperiments();
|
|
3266
|
-
}
|
|
3267
|
-
});
|
|
3268
1688
|
return (_ctx, _cache) => {
|
|
3269
|
-
return openBlock(),
|
|
3270
|
-
"
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
"
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
stroke: "currentColor",
|
|
3310
|
-
"stroke-width": "2",
|
|
3311
|
-
"stroke-linecap": "round",
|
|
3312
|
-
"stroke-linejoin": "round"
|
|
3313
|
-
}, [
|
|
3314
|
-
createElementVNode("line", {
|
|
3315
|
-
x1: "4",
|
|
3316
|
-
y1: "6",
|
|
3317
|
-
x2: "20",
|
|
3318
|
-
y2: "6"
|
|
3319
|
-
}),
|
|
3320
|
-
createElementVNode("line", {
|
|
3321
|
-
x1: "8",
|
|
3322
|
-
y1: "12",
|
|
3323
|
-
x2: "20",
|
|
3324
|
-
y2: "12"
|
|
3325
|
-
}),
|
|
3326
|
-
createElementVNode("line", {
|
|
3327
|
-
x1: "12",
|
|
3328
|
-
y1: "18",
|
|
3329
|
-
x2: "20",
|
|
3330
|
-
y2: "18"
|
|
3331
|
-
}),
|
|
3332
|
-
createElementVNode("circle", {
|
|
3333
|
-
cx: "6",
|
|
3334
|
-
cy: "12",
|
|
3335
|
-
r: "2"
|
|
3336
|
-
}),
|
|
3337
|
-
createElementVNode("circle", {
|
|
3338
|
-
cx: "10",
|
|
3339
|
-
cy: "18",
|
|
3340
|
-
r: "2"
|
|
3341
|
-
}),
|
|
3342
|
-
createElementVNode("circle", {
|
|
3343
|
-
cx: "6",
|
|
3344
|
-
cy: "6",
|
|
3345
|
-
r: "2"
|
|
3346
|
-
})
|
|
3347
|
-
], -1)),
|
|
3348
|
-
_cache[9] || (_cache[9] = createTextVNode(" Filters ", -1)),
|
|
3349
|
-
hasActiveAdvancedFilters.value ? (openBlock(), createElementBlock("span", _hoisted_5$42)) : createCommentVNode("", true)
|
|
3350
|
-
], 2)
|
|
3351
|
-
]),
|
|
3352
|
-
showAdvanced.value ? (openBlock(), createElementBlock("div", _hoisted_6$41, [
|
|
3353
|
-
projectFilterOptions.value.length > 1 ? (openBlock(), createElementBlock("div", _hoisted_7$37, [createVNode(BaseSelect_default, {
|
|
3354
|
-
"model-value": unref(filters).project ?? "",
|
|
3355
|
-
options: projectFilterOptions.value,
|
|
3356
|
-
size: "sm",
|
|
3357
|
-
"onUpdate:modelValue": _cache[4] || (_cache[4] = (v) => setFilter("project", v))
|
|
3358
|
-
}, null, 8, ["model-value", "options"])])) : createCommentVNode("", true),
|
|
3359
|
-
createElementVNode("div", _hoisted_8$34, [createVNode(BaseSelect_default, {
|
|
3360
|
-
"model-value": unref(filters).datePreset ?? "",
|
|
3361
|
-
options: unref(DATE_PRESET_OPTIONS),
|
|
3362
|
-
size: "sm",
|
|
3363
|
-
"onUpdate:modelValue": _cache[5] || (_cache[5] = (v) => setFilter("datePreset", v))
|
|
3364
|
-
}, null, 8, ["model-value", "options"])]),
|
|
3365
|
-
createElementVNode("div", _hoisted_9$31, [createVNode(BaseSelect_default, {
|
|
3366
|
-
"model-value": unref(sortKey),
|
|
3367
|
-
options: unref(SORT_OPTIONS),
|
|
3368
|
-
size: "sm",
|
|
3369
|
-
"onUpdate:modelValue": handleSortChange
|
|
3370
|
-
}, null, 8, ["model-value", "options"])]),
|
|
3371
|
-
createElementVNode("label", _hoisted_10$28, [withDirectives(createElementVNode("input", {
|
|
3372
|
-
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => groupToggle.value = $event),
|
|
3373
|
-
type: "checkbox",
|
|
3374
|
-
class: "mint-experiment-selector__group-checkbox"
|
|
3375
|
-
}, null, 512), [[vModelCheckbox, groupToggle.value]]), _cache[10] || (_cache[10] = createTextVNode(" Group by project ", -1))])
|
|
3376
|
-
])) : createCommentVNode("", true),
|
|
3377
|
-
unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_11$26, [(openBlock(), createElementBlock(Fragment, null, renderList(4, (n) => {
|
|
3378
|
-
return createElementVNode("div", {
|
|
3379
|
-
key: n,
|
|
3380
|
-
class: "mint-experiment-selector__skeleton-row"
|
|
3381
|
-
}, [createElementVNode("div", _hoisted_12$23, [createVNode(Skeleton_default, {
|
|
3382
|
-
width: 120 + n * 20,
|
|
3383
|
-
height: "14px"
|
|
3384
|
-
}, null, 8, ["width"]), createVNode(Skeleton_default, {
|
|
3385
|
-
width: "80px",
|
|
3386
|
-
height: "10px"
|
|
3387
|
-
})]), createVNode(Skeleton_default, {
|
|
3388
|
-
width: "60px",
|
|
3389
|
-
height: "20px",
|
|
3390
|
-
variant: "rounded"
|
|
3391
|
-
})]);
|
|
3392
|
-
}), 64))])) : unref(error) ? (openBlock(), createElementBlock("div", _hoisted_13$22, toDisplayString(unref(error)), 1)) : unref(experiments).length === 0 ? (openBlock(), createBlock(EmptyState_default, {
|
|
3393
|
-
key: 3,
|
|
3394
|
-
title: "No experiments found",
|
|
3395
|
-
description: "Try adjusting your search or filters.",
|
|
3396
|
-
size: "sm"
|
|
3397
|
-
})) : groupToggle.value ? (openBlock(), createElementBlock("div", {
|
|
3398
|
-
key: 4,
|
|
3399
|
-
ref_key: "listRef",
|
|
3400
|
-
ref: listRef,
|
|
3401
|
-
class: "mint-experiment-selector__list"
|
|
3402
|
-
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(groupedByProject), ([groupName, groupExps]) => {
|
|
3403
|
-
return openBlock(), createElementBlock(Fragment, { key: groupName }, [createElementVNode("button", {
|
|
3404
|
-
type: "button",
|
|
3405
|
-
class: "mint-experiment-selector__group-header",
|
|
3406
|
-
onClick: ($event) => toggleGroup(groupName)
|
|
3407
|
-
}, [
|
|
3408
|
-
(openBlock(), createElementBlock("svg", {
|
|
3409
|
-
class: normalizeClass(["mint-experiment-selector__group-chevron", { "mint-experiment-selector__group-chevron--collapsed": collapsedGroups.has(groupName) }]),
|
|
3410
|
-
width: "14",
|
|
3411
|
-
height: "14",
|
|
3412
|
-
viewBox: "0 0 24 24",
|
|
3413
|
-
fill: "none",
|
|
3414
|
-
stroke: "currentColor",
|
|
3415
|
-
"stroke-width": "2",
|
|
3416
|
-
"stroke-linecap": "round",
|
|
3417
|
-
"stroke-linejoin": "round"
|
|
3418
|
-
}, [..._cache[11] || (_cache[11] = [createElementVNode("polyline", { points: "6 9 12 15 18 9" }, null, -1)])], 2)),
|
|
3419
|
-
createElementVNode("span", _hoisted_15$18, toDisplayString(groupName), 1),
|
|
3420
|
-
createElementVNode("span", _hoisted_16$16, toDisplayString(groupExps.length), 1)
|
|
3421
|
-
], 8, _hoisted_14$19), !collapsedGroups.has(groupName) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(groupExps, (exp) => {
|
|
3422
|
-
return openBlock(), createElementBlock("div", {
|
|
3423
|
-
key: exp.id,
|
|
3424
|
-
class: normalizeClass(["mint-experiment-selector__row", {
|
|
3425
|
-
"mint-experiment-selector__row--active": exp.id === __props.currentExperimentId,
|
|
3426
|
-
"mint-experiment-selector__row--focused": getFlatIndex(exp) === activeIndex.value
|
|
3427
|
-
}]),
|
|
3428
|
-
onClick: ($event) => handleSelect(exp),
|
|
3429
|
-
onMouseenter: ($event) => activeIndex.value = getFlatIndex(exp)
|
|
3430
|
-
}, [createElementVNode("div", _hoisted_18$14, [createElementVNode("div", _hoisted_19$14, [createTextVNode(toDisplayString(exp.name) + " ", 1), exp.experiment_code ? (openBlock(), createBlock(ExperimentCodeBadge_default, {
|
|
3431
|
-
key: 0,
|
|
3432
|
-
code: exp.experiment_code,
|
|
3433
|
-
size: "sm",
|
|
3434
|
-
copyable: false
|
|
3435
|
-
}, null, 8, ["code"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_20$13, [createElementVNode("span", null, toDisplayString(unref(formatExperimentDate)(exp.created_at)), 1)])]), createVNode(BasePill_default, {
|
|
3436
|
-
variant: unref(getExperimentStatusVariant)(exp.status),
|
|
3437
|
-
size: "sm"
|
|
3438
|
-
}, {
|
|
3439
|
-
default: withCtx(() => [createTextVNode(toDisplayString(unref(formatExperimentStatus)(exp.status)), 1)]),
|
|
3440
|
-
_: 2
|
|
3441
|
-
}, 1032, ["variant"])], 42, _hoisted_17$16);
|
|
3442
|
-
}), 128)) : createCommentVNode("", true)], 64);
|
|
3443
|
-
}), 128))], 512)) : (openBlock(), createElementBlock("div", {
|
|
3444
|
-
key: 5,
|
|
3445
|
-
ref_key: "listRef",
|
|
3446
|
-
ref: listRef,
|
|
3447
|
-
class: "mint-experiment-selector__list"
|
|
3448
|
-
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(experiments), (exp, idx) => {
|
|
3449
|
-
return openBlock(), createElementBlock("div", {
|
|
3450
|
-
key: exp.id,
|
|
3451
|
-
class: normalizeClass(["mint-experiment-selector__row", {
|
|
3452
|
-
"mint-experiment-selector__row--active": exp.id === __props.currentExperimentId,
|
|
3453
|
-
"mint-experiment-selector__row--focused": idx === activeIndex.value
|
|
3454
|
-
}]),
|
|
3455
|
-
onClick: ($event) => handleSelect(exp),
|
|
3456
|
-
onMouseenter: ($event) => activeIndex.value = idx
|
|
3457
|
-
}, [createElementVNode("div", _hoisted_22$9, [createElementVNode("div", _hoisted_23$8, [createTextVNode(toDisplayString(exp.name) + " ", 1), exp.experiment_code ? (openBlock(), createBlock(ExperimentCodeBadge_default, {
|
|
3458
|
-
key: 0,
|
|
3459
|
-
code: exp.experiment_code,
|
|
3460
|
-
size: "sm",
|
|
3461
|
-
copyable: false
|
|
3462
|
-
}, null, 8, ["code"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_24$8, [exp.project_name || exp.project ? (openBlock(), createElementBlock("span", _hoisted_25$8, toDisplayString(exp.project_name || exp.project), 1)) : createCommentVNode("", true), createElementVNode("span", null, toDisplayString(unref(formatExperimentDate)(exp.created_at)), 1)])]), createVNode(BasePill_default, {
|
|
3463
|
-
variant: unref(getExperimentStatusVariant)(exp.status),
|
|
3464
|
-
size: "sm"
|
|
3465
|
-
}, {
|
|
3466
|
-
default: withCtx(() => [createTextVNode(toDisplayString(unref(formatExperimentStatus)(exp.status)), 1)]),
|
|
3467
|
-
_: 2
|
|
3468
|
-
}, 1032, ["variant"])], 42, _hoisted_21$11);
|
|
3469
|
-
}), 128))], 512)),
|
|
3470
|
-
__props.currentExperimentId != null ? (openBlock(), createElementBlock("div", _hoisted_26$8, [createElementVNode("button", {
|
|
1689
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(["mint-collapsible-card", __props.dense ? "mint-collapsible-card--dense" : ""]) }, [createElementVNode("div", _hoisted_1$57, [createElementVNode("button", {
|
|
1690
|
+
type: "button",
|
|
1691
|
+
class: normalizeClass(headerClasses.value),
|
|
1692
|
+
disabled: __props.disabled,
|
|
1693
|
+
"aria-expanded": isOpen.value,
|
|
1694
|
+
onClick: toggle
|
|
1695
|
+
}, [createElementVNode("div", _hoisted_3$46, [__props.icon ? (openBlock(), createElementBlock("div", {
|
|
1696
|
+
key: 0,
|
|
1697
|
+
class: "mint-collapsible-card__icon-badge",
|
|
1698
|
+
style: normalizeStyle(iconBgStyle.value)
|
|
1699
|
+
}, [isSvgIcon.value ? (openBlock(), createElementBlock("svg", {
|
|
1700
|
+
key: 0,
|
|
1701
|
+
class: "mint-collapsible-card__icon",
|
|
1702
|
+
style: normalizeStyle(iconColorStyle.value),
|
|
1703
|
+
viewBox: "0 0 24 24",
|
|
1704
|
+
fill: "none",
|
|
1705
|
+
stroke: "currentColor",
|
|
1706
|
+
"stroke-width": "2",
|
|
1707
|
+
"stroke-linecap": "round",
|
|
1708
|
+
"stroke-linejoin": "round"
|
|
1709
|
+
}, [Array.isArray(__props.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.icon, (d, i) => {
|
|
1710
|
+
return openBlock(), createElementBlock("path", {
|
|
1711
|
+
key: i,
|
|
1712
|
+
d
|
|
1713
|
+
}, null, 8, _hoisted_4$45);
|
|
1714
|
+
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
1715
|
+
key: 1,
|
|
1716
|
+
d: __props.icon
|
|
1717
|
+
}, null, 8, _hoisted_5$43))], 4)) : (openBlock(), createElementBlock("span", {
|
|
1718
|
+
key: 1,
|
|
1719
|
+
class: "mint-collapsible-card__icon-text",
|
|
1720
|
+
style: normalizeStyle(iconColorStyle.value)
|
|
1721
|
+
}, toDisplayString(__props.icon), 5))], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_6$42, [createElementVNode("h3", _hoisted_7$38, toDisplayString(__props.title), 1), __props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_8$35, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)])])], 10, _hoisted_2$50), createElementVNode("div", _hoisted_9$32, [
|
|
1722
|
+
__props.badge !== void 0 ? (openBlock(), createElementBlock("span", {
|
|
1723
|
+
key: 0,
|
|
1724
|
+
class: normalizeClass(badgeClasses.value)
|
|
1725
|
+
}, toDisplayString(__props.badge), 3)) : createCommentVNode("", true),
|
|
1726
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (action) => {
|
|
1727
|
+
return openBlock(), createElementBlock("button", {
|
|
1728
|
+
key: action.id,
|
|
3471
1729
|
type: "button",
|
|
3472
|
-
class:
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
1730
|
+
class: normalizeClass(actionClasses(action)),
|
|
1731
|
+
style: normalizeStyle(actionStyle(action)),
|
|
1732
|
+
disabled: __props.disabled || action.disabled,
|
|
1733
|
+
"aria-label": action.label,
|
|
1734
|
+
title: action.label,
|
|
1735
|
+
onClick: ($event) => handleActionClick(action)
|
|
1736
|
+
}, [action.icon && isSvgIconValue(action.icon) ? (openBlock(), createElementBlock("svg", _hoisted_11$26, [Array.isArray(action.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(action.icon, (d, i) => {
|
|
1737
|
+
return openBlock(), createElementBlock("path", {
|
|
1738
|
+
key: i,
|
|
1739
|
+
d
|
|
1740
|
+
}, null, 8, _hoisted_12$23);
|
|
1741
|
+
}), 128)) : (openBlock(), createElementBlock("path", {
|
|
1742
|
+
key: 1,
|
|
1743
|
+
d: action.icon
|
|
1744
|
+
}, null, 8, _hoisted_13$22))])) : action.icon ? (openBlock(), createElementBlock("span", _hoisted_14$19, toDisplayString(action.icon), 1)) : createCommentVNode("", true)], 14, _hoisted_10$28);
|
|
1745
|
+
}), 128)),
|
|
1746
|
+
__props.showToggle ? (openBlock(), createElementBlock("div", {
|
|
1747
|
+
key: 1,
|
|
1748
|
+
class: "mint-collapsible-card__toggle",
|
|
1749
|
+
onClick: handleToggleClick
|
|
1750
|
+
}, [createElementVNode("div", {
|
|
1751
|
+
role: "switch",
|
|
1752
|
+
tabindex: "0",
|
|
1753
|
+
"aria-checked": __props.toggleValue,
|
|
1754
|
+
class: normalizeClass(["mint-collapsible-card__toggle-track", __props.toggleValue ? "mint-collapsible-card__toggle-track--on" : ""]),
|
|
1755
|
+
style: normalizeStyle(toggleTrackStyle.value),
|
|
1756
|
+
onKeydown: [withKeys(withModifiers(handleToggleClick, ["prevent"]), ["enter"]), withKeys(withModifiers(handleToggleClick, ["prevent"]), ["space"])]
|
|
1757
|
+
}, [createElementVNode("span", { class: normalizeClass(["mint-collapsible-card__toggle-knob", __props.toggleValue ? "mint-collapsible-card__toggle-knob--on" : ""]) }, null, 2)], 46, _hoisted_15$18)])) : createCommentVNode("", true),
|
|
1758
|
+
createElementVNode("button", {
|
|
1759
|
+
type: "button",
|
|
1760
|
+
class: "mint-collapsible-card__chevron-button",
|
|
1761
|
+
disabled: __props.disabled,
|
|
1762
|
+
"aria-label": isOpen.value ? "Collapse section" : "Expand section",
|
|
1763
|
+
"aria-expanded": isOpen.value,
|
|
1764
|
+
onClick: toggle
|
|
1765
|
+
}, [(openBlock(), createElementBlock("svg", {
|
|
1766
|
+
class: normalizeClass(["mint-collapsible-card__chevron", isOpen.value ? "mint-collapsible-card__chevron--open" : ""]),
|
|
1767
|
+
fill: "none",
|
|
1768
|
+
stroke: "currentColor",
|
|
1769
|
+
"stroke-width": "2",
|
|
1770
|
+
"stroke-linecap": "round",
|
|
1771
|
+
"stroke-linejoin": "round",
|
|
1772
|
+
viewBox: "0 0 24 24",
|
|
1773
|
+
"aria-hidden": "true"
|
|
1774
|
+
}, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "m6 9 6 6 6-6" }, null, -1)])], 2))], 8, _hoisted_16$16)
|
|
1775
|
+
])]), createVNode(Transition, { name: "collapse" }, {
|
|
1776
|
+
default: withCtx(() => [withDirectives(createElementVNode("div", _hoisted_17$16, [createElementVNode("div", _hoisted_18$14, [renderSlot(_ctx.$slots, "default")])], 512), [[vShow, isOpen.value]])]),
|
|
1777
|
+
_: 3
|
|
1778
|
+
})], 2);
|
|
3482
1779
|
};
|
|
3483
1780
|
}
|
|
3484
1781
|
});
|
|
@@ -3487,6 +1784,11 @@ var ExperimentSelectorModal_default = /* @__PURE__ */ defineComponent({
|
|
|
3487
1784
|
var PLUGIN_ICON_FALLBACK_PATH = "M14 7v4a1 1 0 0 0 1 1h4M5 3h9l5 5v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z";
|
|
3488
1785
|
var PATH_REGEX = /^[Mm][\s,\d\-.]/;
|
|
3489
1786
|
var RASTER_DATA_URL_REGEX = /^data:image\/(png|jpeg|jpg|gif|webp);/;
|
|
1787
|
+
var VIEW_BOX_REGEX = /^-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s+\d+(?:\.\d+)?\s+\d+(?:\.\d+)?$/;
|
|
1788
|
+
var COLOR_REGEX = /^(#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})|currentColor|white|black|none)$/i;
|
|
1789
|
+
var MAX_STRUCTURED_ICON_LENGTH = 8e3;
|
|
1790
|
+
var MAX_PATHS = 8;
|
|
1791
|
+
var MAX_STOPS = 8;
|
|
3490
1792
|
function normalizePluginIconSource(icon) {
|
|
3491
1793
|
return (icon ?? "").replace(/^[\s]+/, "");
|
|
3492
1794
|
}
|
|
@@ -3496,6 +1798,11 @@ function detectPluginIcon(icon) {
|
|
|
3496
1798
|
format: "fallback",
|
|
3497
1799
|
value: PLUGIN_ICON_FALLBACK_PATH
|
|
3498
1800
|
};
|
|
1801
|
+
const structured = parseStructuredPluginIcon(raw);
|
|
1802
|
+
if (structured) return {
|
|
1803
|
+
format: "structured",
|
|
1804
|
+
value: structured
|
|
1805
|
+
};
|
|
3499
1806
|
if (PATH_REGEX.test(raw)) return {
|
|
3500
1807
|
format: "path",
|
|
3501
1808
|
value: raw
|
|
@@ -3517,6 +1824,93 @@ function isPluginIconFormat(icon) {
|
|
|
3517
1824
|
const raw = normalizePluginIconSource(icon);
|
|
3518
1825
|
return !!raw && detectPluginIcon(raw).format !== "fallback";
|
|
3519
1826
|
}
|
|
1827
|
+
function parseStructuredPluginIcon(raw) {
|
|
1828
|
+
if (!raw.startsWith("{") || raw.length > MAX_STRUCTURED_ICON_LENGTH) return void 0;
|
|
1829
|
+
let parsed;
|
|
1830
|
+
try {
|
|
1831
|
+
parsed = JSON.parse(raw);
|
|
1832
|
+
} catch {
|
|
1833
|
+
return;
|
|
1834
|
+
}
|
|
1835
|
+
if (!isRecord(parsed) || parsed.type !== "mint-icon") return void 0;
|
|
1836
|
+
const viewBox = typeof parsed.viewBox === "string" && VIEW_BOX_REGEX.test(parsed.viewBox) ? parsed.viewBox : "0 0 24 24";
|
|
1837
|
+
const paths = parseStructuredPaths(parsed.paths);
|
|
1838
|
+
if (!paths.length) return void 0;
|
|
1839
|
+
const gradient = parseStructuredGradient(parsed.gradient);
|
|
1840
|
+
const background = parseStructuredBackground(parsed.background, gradient);
|
|
1841
|
+
return {
|
|
1842
|
+
type: "mint-icon",
|
|
1843
|
+
viewBox,
|
|
1844
|
+
...background ? { background } : {},
|
|
1845
|
+
...gradient ? { gradient } : {},
|
|
1846
|
+
paths
|
|
1847
|
+
};
|
|
1848
|
+
}
|
|
1849
|
+
function parseStructuredPaths(value) {
|
|
1850
|
+
if (!Array.isArray(value)) return [];
|
|
1851
|
+
return value.slice(0, MAX_PATHS).flatMap((item) => {
|
|
1852
|
+
if (!isRecord(item) || typeof item.d !== "string" || !item.d.trim()) return [];
|
|
1853
|
+
const path = { d: item.d.slice(0, 2e3) };
|
|
1854
|
+
if (isSafeColor(item.fill)) path.fill = item.fill;
|
|
1855
|
+
if (isSafeColor(item.stroke)) path.stroke = item.stroke;
|
|
1856
|
+
if (isFiniteNumber(item.strokeWidth, 0, 24)) path.strokeWidth = item.strokeWidth;
|
|
1857
|
+
if (isFiniteNumber(item.opacity, 0, 1)) path.opacity = item.opacity;
|
|
1858
|
+
return [path];
|
|
1859
|
+
});
|
|
1860
|
+
}
|
|
1861
|
+
function parseStructuredGradient(value) {
|
|
1862
|
+
if (!isRecord(value) || value.type !== "linear") return void 0;
|
|
1863
|
+
const stops = parseStructuredStops(value.stops);
|
|
1864
|
+
if (stops.length < 2 && isSafeColor(value.from) && isSafeColor(value.to)) stops.push({
|
|
1865
|
+
offset: "0%",
|
|
1866
|
+
color: value.from
|
|
1867
|
+
}, {
|
|
1868
|
+
offset: "100%",
|
|
1869
|
+
color: value.to
|
|
1870
|
+
});
|
|
1871
|
+
if (stops.length < 2) return void 0;
|
|
1872
|
+
return {
|
|
1873
|
+
type: "linear",
|
|
1874
|
+
angle: isFiniteNumber(value.angle, 0, 360) ? value.angle : 135,
|
|
1875
|
+
stops
|
|
1876
|
+
};
|
|
1877
|
+
}
|
|
1878
|
+
function parseStructuredStops(value) {
|
|
1879
|
+
if (!Array.isArray(value)) return [];
|
|
1880
|
+
return value.slice(0, MAX_STOPS).flatMap((item) => {
|
|
1881
|
+
if (!isRecord(item) || !isSafeColor(item.color)) return [];
|
|
1882
|
+
const offset = parseOffset(item.offset);
|
|
1883
|
+
if (!offset) return [];
|
|
1884
|
+
return [{
|
|
1885
|
+
offset,
|
|
1886
|
+
color: item.color,
|
|
1887
|
+
...isFiniteNumber(item.opacity, 0, 1) ? { opacity: item.opacity } : {}
|
|
1888
|
+
}];
|
|
1889
|
+
});
|
|
1890
|
+
}
|
|
1891
|
+
function parseStructuredBackground(value, gradient) {
|
|
1892
|
+
if (!isRecord(value)) return void 0;
|
|
1893
|
+
const fill = value.fill === "gradient" && gradient ? "gradient" : isSafeColor(value.fill) ? value.fill : void 0;
|
|
1894
|
+
if (!fill) return void 0;
|
|
1895
|
+
return {
|
|
1896
|
+
fill,
|
|
1897
|
+
radius: isFiniteNumber(value.radius, 0, 12) ? value.radius : 5
|
|
1898
|
+
};
|
|
1899
|
+
}
|
|
1900
|
+
function parseOffset(value) {
|
|
1901
|
+
if (isFiniteNumber(value, 0, 1)) return String(value);
|
|
1902
|
+
if (typeof value !== "string") return void 0;
|
|
1903
|
+
if (/^(?:100|(?:[1-9]?\d)(?:\.\d+)?)%$/.test(value)) return value;
|
|
1904
|
+
}
|
|
1905
|
+
function isRecord(value) {
|
|
1906
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1907
|
+
}
|
|
1908
|
+
function isSafeColor(value) {
|
|
1909
|
+
return typeof value === "string" && COLOR_REGEX.test(value);
|
|
1910
|
+
}
|
|
1911
|
+
function isFiniteNumber(value, min, max) {
|
|
1912
|
+
return typeof value === "number" && Number.isFinite(value) && value >= min && value <= max;
|
|
1913
|
+
}
|
|
3520
1914
|
//#endregion
|
|
3521
1915
|
//#region src/components/internal/ActionItemInternal.vue?vue&type=script&setup=true&lang.ts
|
|
3522
1916
|
var _hoisted_1$56 = [
|
|
@@ -3598,8 +1992,37 @@ var ActionItemInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
3598
1992
|
});
|
|
3599
1993
|
//#endregion
|
|
3600
1994
|
//#region src/components/PluginIcon.vue?vue&type=script&setup=true&lang.ts
|
|
3601
|
-
var _hoisted_1$55 =
|
|
3602
|
-
|
|
1995
|
+
var _hoisted_1$55 = ["viewBox"];
|
|
1996
|
+
var _hoisted_2$48 = { key: 0 };
|
|
1997
|
+
var _hoisted_3$44 = [
|
|
1998
|
+
"id",
|
|
1999
|
+
"x1",
|
|
2000
|
+
"y1",
|
|
2001
|
+
"x2",
|
|
2002
|
+
"y2"
|
|
2003
|
+
];
|
|
2004
|
+
var _hoisted_4$44 = [
|
|
2005
|
+
"offset",
|
|
2006
|
+
"stop-color",
|
|
2007
|
+
"stop-opacity"
|
|
2008
|
+
];
|
|
2009
|
+
var _hoisted_5$42 = [
|
|
2010
|
+
"x",
|
|
2011
|
+
"y",
|
|
2012
|
+
"width",
|
|
2013
|
+
"height",
|
|
2014
|
+
"rx",
|
|
2015
|
+
"fill"
|
|
2016
|
+
];
|
|
2017
|
+
var _hoisted_6$41 = [
|
|
2018
|
+
"d",
|
|
2019
|
+
"fill",
|
|
2020
|
+
"stroke",
|
|
2021
|
+
"stroke-width",
|
|
2022
|
+
"opacity"
|
|
2023
|
+
];
|
|
2024
|
+
var _hoisted_7$37 = {
|
|
2025
|
+
key: 1,
|
|
3603
2026
|
class: "mint-plugin-icon__svg",
|
|
3604
2027
|
viewBox: "0 0 24 24",
|
|
3605
2028
|
fill: "none",
|
|
@@ -3609,8 +2032,8 @@ var _hoisted_1$55 = {
|
|
|
3609
2032
|
"stroke-linejoin": "round",
|
|
3610
2033
|
"aria-hidden": "true"
|
|
3611
2034
|
};
|
|
3612
|
-
var
|
|
3613
|
-
var
|
|
2035
|
+
var _hoisted_8$34 = ["d"];
|
|
2036
|
+
var _hoisted_9$31 = ["src"];
|
|
3614
2037
|
//#endregion
|
|
3615
2038
|
//#region src/components/PluginIcon.vue
|
|
3616
2039
|
var PluginIcon_default = /* @__PURE__ */ defineComponent({
|
|
@@ -3624,6 +2047,7 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
|
|
|
3624
2047
|
},
|
|
3625
2048
|
setup(__props) {
|
|
3626
2049
|
/** Renders a plugin's icon as a sized chip. Auto-detects format:
|
|
2050
|
+
* - Structured MINT icon JSON ({"type":"mint-icon",...}) → controlled multi-color SVG
|
|
3627
2051
|
* - SVG path data (e.g. "M13 10V3...") → inline <svg><path>
|
|
3628
2052
|
* - Raster data URL (data:image/png|jpeg|jpg|gif|webp;...) → <img>
|
|
3629
2053
|
* - https:// URL → <img> with no-referrer + lazy loading
|
|
@@ -3633,6 +2057,40 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
|
|
|
3633
2057
|
* (mixed-content + XSS, see spec 2026-05-04-plugin-icon-component-design.md). */
|
|
3634
2058
|
const props = __props;
|
|
3635
2059
|
const detected = computed(() => detectPluginIcon(props.icon));
|
|
2060
|
+
const structuredIcon = computed(() => detected.value.format === "structured" ? detected.value.value : void 0);
|
|
2061
|
+
const iconValue = computed(() => typeof detected.value.value === "string" ? detected.value.value : "");
|
|
2062
|
+
const gradientId = computed(() => {
|
|
2063
|
+
const source = props.icon ?? "";
|
|
2064
|
+
let hash = 0;
|
|
2065
|
+
for (let index = 0; index < source.length; index += 1) hash = (hash << 5) - hash + source.charCodeAt(index) | 0;
|
|
2066
|
+
return `mint-plugin-icon-gradient-${Math.abs(hash)}`;
|
|
2067
|
+
});
|
|
2068
|
+
const gradientCoords = computed(() => {
|
|
2069
|
+
const radians = ((structuredIcon.value?.gradient?.angle ?? 135) - 90) * Math.PI / 180;
|
|
2070
|
+
const x = Math.cos(radians) * 50;
|
|
2071
|
+
const y = Math.sin(radians) * 50;
|
|
2072
|
+
return {
|
|
2073
|
+
x1: `${50 - x}%`,
|
|
2074
|
+
y1: `${50 - y}%`,
|
|
2075
|
+
x2: `${50 + x}%`,
|
|
2076
|
+
y2: `${50 + y}%`
|
|
2077
|
+
};
|
|
2078
|
+
});
|
|
2079
|
+
const structuredViewBox = computed(() => {
|
|
2080
|
+
const parts = structuredIcon.value?.viewBox.split(/\s+/).map(Number) ?? [
|
|
2081
|
+
0,
|
|
2082
|
+
0,
|
|
2083
|
+
24,
|
|
2084
|
+
24
|
|
2085
|
+
];
|
|
2086
|
+
return {
|
|
2087
|
+
x: parts[0],
|
|
2088
|
+
y: parts[1],
|
|
2089
|
+
width: parts[2],
|
|
2090
|
+
height: parts[3]
|
|
2091
|
+
};
|
|
2092
|
+
});
|
|
2093
|
+
const backgroundFill = computed(() => structuredIcon.value?.background?.fill === "gradient" ? `url(#${gradientId.value})` : structuredIcon.value?.background?.fill);
|
|
3636
2094
|
const rootClasses = computed(() => [
|
|
3637
2095
|
"mint-plugin-icon",
|
|
3638
2096
|
`mint-plugin-icon--${props.size}`,
|
|
@@ -3643,14 +2101,55 @@ var PluginIcon_default = /* @__PURE__ */ defineComponent({
|
|
|
3643
2101
|
return openBlock(), createElementBlock("span", {
|
|
3644
2102
|
class: normalizeClass(rootClasses.value),
|
|
3645
2103
|
style: normalizeStyle(rootStyle.value)
|
|
3646
|
-
}, [
|
|
3647
|
-
key:
|
|
2104
|
+
}, [structuredIcon.value ? (openBlock(), createElementBlock("svg", {
|
|
2105
|
+
key: 0,
|
|
2106
|
+
class: "mint-plugin-icon__svg mint-plugin-icon__svg--structured",
|
|
2107
|
+
viewBox: structuredIcon.value.viewBox,
|
|
2108
|
+
"aria-hidden": "true"
|
|
2109
|
+
}, [
|
|
2110
|
+
structuredIcon.value.gradient ? (openBlock(), createElementBlock("defs", _hoisted_2$48, [createElementVNode("linearGradient", {
|
|
2111
|
+
id: gradientId.value,
|
|
2112
|
+
x1: gradientCoords.value.x1,
|
|
2113
|
+
y1: gradientCoords.value.y1,
|
|
2114
|
+
x2: gradientCoords.value.x2,
|
|
2115
|
+
y2: gradientCoords.value.y2
|
|
2116
|
+
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(structuredIcon.value.gradient.stops, (stop) => {
|
|
2117
|
+
return openBlock(), createElementBlock("stop", {
|
|
2118
|
+
key: `${stop.offset}-${stop.color}`,
|
|
2119
|
+
offset: stop.offset,
|
|
2120
|
+
"stop-color": stop.color,
|
|
2121
|
+
"stop-opacity": stop.opacity
|
|
2122
|
+
}, null, 8, _hoisted_4$44);
|
|
2123
|
+
}), 128))], 8, _hoisted_3$44)])) : createCommentVNode("", true),
|
|
2124
|
+
structuredIcon.value.background ? (openBlock(), createElementBlock("rect", {
|
|
2125
|
+
key: 1,
|
|
2126
|
+
x: structuredViewBox.value.x,
|
|
2127
|
+
y: structuredViewBox.value.y,
|
|
2128
|
+
width: structuredViewBox.value.width,
|
|
2129
|
+
height: structuredViewBox.value.height,
|
|
2130
|
+
rx: structuredIcon.value.background.radius,
|
|
2131
|
+
fill: backgroundFill.value
|
|
2132
|
+
}, null, 8, _hoisted_5$42)) : createCommentVNode("", true),
|
|
2133
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(structuredIcon.value.paths, (path, index) => {
|
|
2134
|
+
return openBlock(), createElementBlock("path", {
|
|
2135
|
+
key: index,
|
|
2136
|
+
d: path.d,
|
|
2137
|
+
fill: path.fill ?? "none",
|
|
2138
|
+
stroke: path.stroke,
|
|
2139
|
+
"stroke-width": path.strokeWidth,
|
|
2140
|
+
opacity: path.opacity,
|
|
2141
|
+
"stroke-linecap": "round",
|
|
2142
|
+
"stroke-linejoin": "round"
|
|
2143
|
+
}, null, 8, _hoisted_6$41);
|
|
2144
|
+
}), 128))
|
|
2145
|
+
], 8, _hoisted_1$55)) : detected.value.format === "path" || detected.value.format === "fallback" ? (openBlock(), createElementBlock("svg", _hoisted_7$37, [createElementVNode("path", { d: iconValue.value }, null, 8, _hoisted_8$34)])) : (openBlock(), createElementBlock("img", {
|
|
2146
|
+
key: 2,
|
|
3648
2147
|
class: "mint-plugin-icon__img",
|
|
3649
|
-
src:
|
|
2148
|
+
src: iconValue.value,
|
|
3650
2149
|
alt: "",
|
|
3651
2150
|
referrerpolicy: "no-referrer",
|
|
3652
2151
|
loading: "lazy"
|
|
3653
|
-
}, null, 8,
|
|
2152
|
+
}, null, 8, _hoisted_9$31))], 6);
|
|
3654
2153
|
};
|
|
3655
2154
|
}
|
|
3656
2155
|
});
|
|
@@ -4425,6 +2924,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
|
|
|
4425
2924
|
setup(__props, { emit: __emit }) {
|
|
4426
2925
|
/** Full application top bar with brand logo, page selector or plugin switcher, centered pill nav, experiment popover, and avatar menu. */
|
|
4427
2926
|
const props = __props;
|
|
2927
|
+
const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-L7Ejny45.js"));
|
|
2928
|
+
const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-D0bg_fqM.js"));
|
|
2929
|
+
const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-B_kPbXcg.js"));
|
|
4428
2930
|
const emit = __emit;
|
|
4429
2931
|
const settingsOpen = ref(false);
|
|
4430
2932
|
const { isIntegrated, plugin } = usePlatformContext();
|
|
@@ -4532,7 +3034,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
|
|
|
4532
3034
|
}, null, 8, ["items", "current-item-id"])) : createCommentVNode("", true)])])) : createCommentVNode("", true),
|
|
4533
3035
|
createElementVNode("div", _hoisted_12$21, [
|
|
4534
3036
|
__props.showStandaloneLabel && isStandalone.value && !unref(appExperiment) ? (openBlock(), createElementBlock("span", _hoisted_13$21, toDisplayString(__props.standaloneLabel), 1)) : createCommentVNode("", true),
|
|
4535
|
-
unref(appExperiment) && !isStandalone.value ? (openBlock(), createBlock(
|
|
3037
|
+
unref(appExperiment) && !isStandalone.value ? (openBlock(), createBlock(unref(ExperimentPopover), mergeProps({ key: 1 }, unref(appExperiment).popover.value, {
|
|
4536
3038
|
onSelect: _cache[5] || (_cache[5] = ($event) => unref(appExperiment).openModal()),
|
|
4537
3039
|
onSave: _cache[6] || (_cache[6] = ($event) => unref(appExperiment).handleSave()),
|
|
4538
3040
|
onDetach: _cache[7] || (_cache[7] = ($event) => unref(appExperiment).handleDetach())
|
|
@@ -4625,7 +3127,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
|
|
|
4625
3127
|
}, [createElementVNode("div", _hoisted_16$15, toDisplayString(profileInitial.value), 1), __props.userName ? (openBlock(), createElementBlock("span", _hoisted_17$15, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true)
|
|
4626
3128
|
])
|
|
4627
3129
|
])], 2),
|
|
4628
|
-
__props.showSettings ? (openBlock(), createBlock(
|
|
3130
|
+
__props.showSettings && settingsOpen.value ? (openBlock(), createBlock(unref(SettingsModal), {
|
|
4629
3131
|
key: 0,
|
|
4630
3132
|
modelValue: settingsOpen.value,
|
|
4631
3133
|
"onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => settingsOpen.value = $event),
|
|
@@ -4665,7 +3167,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
|
|
|
4665
3167
|
"enhancements",
|
|
4666
3168
|
"user-type"
|
|
4667
3169
|
])) : createCommentVNode("", true),
|
|
4668
|
-
unref(appExperiment) && !isStandalone.value ? (openBlock(), createBlock(
|
|
3170
|
+
unref(appExperiment) && !isStandalone.value && unref(appExperiment).selectorModal.value.modelValue ? (openBlock(), createBlock(unref(ExperimentSelectorModal), mergeProps({ key: 1 }, unref(appExperiment).selectorModal.value, {
|
|
4669
3171
|
"onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $event ? unref(appExperiment).openModal() : unref(appExperiment).closeModal()),
|
|
4670
3172
|
onSelect: _cache[17] || (_cache[17] = ($event) => unref(appExperiment).handleSelect($event)),
|
|
4671
3173
|
onDeselect: _cache[18] || (_cache[18] = ($event) => unref(appExperiment).handleDetach())
|
|
@@ -16823,7 +15325,11 @@ var ExperimentDataViewer_default = /* @__PURE__ */ defineComponent({
|
|
|
16823
15325
|
default: false
|
|
16824
15326
|
},
|
|
16825
15327
|
downloadJsonUrl: {},
|
|
16826
|
-
downloadCsvUrl: {}
|
|
15328
|
+
downloadCsvUrl: {},
|
|
15329
|
+
autoFetch: {
|
|
15330
|
+
type: Boolean,
|
|
15331
|
+
default: true
|
|
15332
|
+
}
|
|
16827
15333
|
},
|
|
16828
15334
|
emits: [
|
|
16829
15335
|
"open-plugin",
|
|
@@ -16836,7 +15342,7 @@ var ExperimentDataViewer_default = /* @__PURE__ */ defineComponent({
|
|
|
16836
15342
|
const expData = useExperimentData();
|
|
16837
15343
|
const hasPropData = computed(() => props.treeData && props.treeData.length > 0 || props.summaryData);
|
|
16838
15344
|
watch(() => props.experimentId, (id) => {
|
|
16839
|
-
if (id && !hasPropData.value) expData.fetch(id);
|
|
15345
|
+
if (props.autoFetch && id && !hasPropData.value) expData.fetch(id);
|
|
16840
15346
|
}, { immediate: true });
|
|
16841
15347
|
const mergedTreeData = computed(() => props.treeData?.length ? props.treeData : expData.treeData.value);
|
|
16842
15348
|
const mergedTableData = computed(() => props.tableData?.length ? props.tableData : expData.tableData.value);
|
|
@@ -16916,22 +15422,24 @@ var ExperimentDataViewer_default = /* @__PURE__ */ defineComponent({
|
|
|
16916
15422
|
default: withCtx(() => [createTextVNode(" Open in " + toDisplayString(__props.pluginName || "Plugin"), 1)]),
|
|
16917
15423
|
_: 1
|
|
16918
15424
|
})) : createCommentVNode("", true),
|
|
16919
|
-
|
|
15425
|
+
__props.downloadJsonUrl ? (openBlock(), createBlock(BaseButton_default, {
|
|
15426
|
+
key: 1,
|
|
16920
15427
|
variant: "ghost",
|
|
16921
15428
|
size: "sm",
|
|
16922
15429
|
onClick: handleDownloadJson
|
|
16923
15430
|
}, {
|
|
16924
15431
|
default: withCtx(() => [..._cache[2] || (_cache[2] = [createTextVNode(" JSON ", -1)])]),
|
|
16925
15432
|
_: 1
|
|
16926
|
-
}),
|
|
16927
|
-
|
|
15433
|
+
})) : createCommentVNode("", true),
|
|
15434
|
+
__props.downloadCsvUrl ? (openBlock(), createBlock(BaseButton_default, {
|
|
15435
|
+
key: 2,
|
|
16928
15436
|
variant: "ghost",
|
|
16929
15437
|
size: "sm",
|
|
16930
15438
|
onClick: handleDownloadCsv
|
|
16931
15439
|
}, {
|
|
16932
15440
|
default: withCtx(() => [..._cache[3] || (_cache[3] = [createTextVNode(" CSV ", -1)])]),
|
|
16933
15441
|
_: 1
|
|
16934
|
-
})
|
|
15442
|
+
})) : createCommentVNode("", true)
|
|
16935
15443
|
])]), createElementVNode("div", _hoisted_5$2, [isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_6$2, [createElementVNode("div", _hoisted_7$1, [
|
|
16936
15444
|
createVNode(Skeleton_default, {
|
|
16937
15445
|
width: "40%",
|
|
@@ -17501,6 +16009,6 @@ var components_exports = /* @__PURE__ */ __exportAll({
|
|
|
17501
16009
|
WellPlate: () => WellPlate_default
|
|
17502
16010
|
});
|
|
17503
16011
|
//#endregion
|
|
17504
|
-
export { SampleLegend_default as $, ReagentEditor_default as A,
|
|
16012
|
+
export { SampleLegend_default as $, ReagentEditor_default as A, ProgressBar_default as B, formatSequenceRemaining as C, ColorSlider_default as Ct, ScientificNumber_default as D, ChemicalFormula_default as E, BioTemplateExperimentWorkspaceView_default as F, ControlWorkspaceView_default as G, Divider_default as H, BioTemplateRenderer_default as I, SampleSelector_default as J, ComponentBindingRenderer_default as K, ChartContainer_default as L, RackEditor_default as M, BioTemplatePresetWorkspaceView_default as N, ProtocolStepEditor_default as O, BioTemplatePackWorkspaceView_default as P, PlateMapEditor_default as Q, Breadcrumb_default as R, formatSequenceEta as S, BaseTabs_default as St, sequenceSamplesRemaining as T, AppContainer_default as U, StatusIndicator_default as V, DoseDesignWorkspaceView_default as W, LoadingSpinner_default as X, AutoGroupModal_default as Y, ReagentList_default as Z, InstrumentStateBadge_default as _, AlertBox_default as _t, ExperimentDataViewer_default as a, AppSidebar_default as at, estimateSequenceFinishDate as b, DropdownButton_default as bt, LcmsSequenceTable_default as c, StepWizard_default as ct, extractLcmsCommonPrefix as d, AppAvatarMenu_default as dt, WellPlate_default as et, extractLcmsSampleName as f, PluginIcon_default as ft, InstrumentStatusCard_default as g, AppToastContainer_default as gt, reconstructLcmsPlateCellsFromSequenceItems as h, IconButton_default as ht, TimeRangeInput_default as i, AppLayout_default as it, GroupAssigner_default as j, SampleHierarchyTree_default as k, DEFAULT_LCMS_SEQUENCE_COLUMNS as l, AppTopBar_default as lt, lcmsWellIdFromPosition as m, ThemeToggle_default as mt, FitPanel_default as n, DoseCalculator_default as nt, BatchProgressList_default as o, FormBuilder_default as ot, inferLcmsPlateTypeFromWellIds as p, CollapsibleCard_default as pt, ScheduleCalendar_default as q, ResourceCard_default as r, PluginWorkspaceView_default as rt, AuditTrail_default as s, FormActions_default as st, components_exports as t, ExperimentTimeline_default as tt, basenameFromWindowsPath as u, AppPluginSwitcher_default as ut, InstrumentAlertLog_default as v, DataFrame_default as vt, sequenceProgressPercent as w, estimateSequenceRemainingSeconds as x, SegmentedControl_default as xt, SequenceProgressBar_default as y, Calendar_default as yt, Avatar_default as z };
|
|
17505
16013
|
|
|
17506
|
-
//# sourceMappingURL=components-
|
|
16014
|
+
//# sourceMappingURL=components-CdjRzHI2.js.map
|