@morscherlab/mld-sdk 0.8.3 → 0.9.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/components/ExperimentPopover.vue.d.ts +22 -0
- package/dist/components/ExperimentPopover.vue.js +212 -0
- package/dist/components/ExperimentPopover.vue.js.map +1 -0
- package/dist/components/ExperimentPopover.vue3.js +6 -0
- package/dist/components/ExperimentPopover.vue3.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +5 -2
- package/dist/components/index.js.map +1 -1
- package/dist/composables/useExperimentSelector.js +11 -3
- package/dist/composables/useExperimentSelector.js.map +1 -1
- package/dist/composables/usePlatformContext.d.ts +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/styles.css +445 -0
- package/dist/types/platform.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/ExperimentPopover.vue +177 -0
- package/src/components/index.ts +1 -0
- package/src/composables/useExperimentSelector.ts +13 -3
- package/src/index.ts +1 -0
- package/src/styles/components/experiment-popover.css +252 -0
- package/src/styles/index.css +1 -0
- package/src/types/platform.ts +3 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
experimentName?: string;
|
|
3
|
+
experimentStatus?: string;
|
|
4
|
+
showSave?: boolean;
|
|
5
|
+
saveDisabled?: boolean;
|
|
6
|
+
saveLoading?: boolean;
|
|
7
|
+
saveSuccessMessage?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
10
|
+
select: () => any;
|
|
11
|
+
save: () => any;
|
|
12
|
+
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
13
|
+
onSelect?: (() => any) | undefined;
|
|
14
|
+
onSave?: (() => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
showSave: boolean;
|
|
17
|
+
saveDisabled: boolean;
|
|
18
|
+
saveLoading: boolean;
|
|
19
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
20
|
+
popoverRef: HTMLDivElement;
|
|
21
|
+
}, HTMLDivElement>;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { defineComponent, ref, watch, onMounted, onUnmounted, openBlock, createElementBlock, createElementVNode, withModifiers, normalizeClass, toDisplayString, createTextVNode, createCommentVNode, Fragment } from "vue";
|
|
2
|
+
const _hoisted_1 = { class: "mld-experiment-popover__trigger-text" };
|
|
3
|
+
const _hoisted_2 = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "mld-experiment-popover__panel"
|
|
6
|
+
};
|
|
7
|
+
const _hoisted_3 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "mld-experiment-popover__empty"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_4 = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "mld-experiment-popover__card"
|
|
14
|
+
};
|
|
15
|
+
const _hoisted_5 = { class: "mld-experiment-popover__card-info" };
|
|
16
|
+
const _hoisted_6 = { class: "mld-experiment-popover__card-name" };
|
|
17
|
+
const _hoisted_7 = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "mld-experiment-popover__card-status"
|
|
20
|
+
};
|
|
21
|
+
const _hoisted_8 = { class: "mld-experiment-popover__footer" };
|
|
22
|
+
const _hoisted_9 = ["disabled"];
|
|
23
|
+
const _hoisted_10 = {
|
|
24
|
+
key: 0,
|
|
25
|
+
class: "mld-experiment-popover__spinner"
|
|
26
|
+
};
|
|
27
|
+
const _hoisted_11 = {
|
|
28
|
+
key: 1,
|
|
29
|
+
class: "mld-experiment-popover__check-icon",
|
|
30
|
+
fill: "none",
|
|
31
|
+
stroke: "currentColor",
|
|
32
|
+
viewBox: "0 0 24 24"
|
|
33
|
+
};
|
|
34
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
35
|
+
__name: "ExperimentPopover",
|
|
36
|
+
props: {
|
|
37
|
+
experimentName: {},
|
|
38
|
+
experimentStatus: {},
|
|
39
|
+
showSave: { type: Boolean, default: false },
|
|
40
|
+
saveDisabled: { type: Boolean, default: false },
|
|
41
|
+
saveLoading: { type: Boolean, default: false },
|
|
42
|
+
saveSuccessMessage: {}
|
|
43
|
+
},
|
|
44
|
+
emits: ["select", "save"],
|
|
45
|
+
setup(__props, { emit: __emit }) {
|
|
46
|
+
const props = __props;
|
|
47
|
+
const emit = __emit;
|
|
48
|
+
const isOpen = ref(false);
|
|
49
|
+
const popoverRef = ref(null);
|
|
50
|
+
const showSuccess = ref(false);
|
|
51
|
+
function toggle() {
|
|
52
|
+
isOpen.value = !isOpen.value;
|
|
53
|
+
}
|
|
54
|
+
function close() {
|
|
55
|
+
isOpen.value = false;
|
|
56
|
+
}
|
|
57
|
+
function handleSelect() {
|
|
58
|
+
emit("select");
|
|
59
|
+
close();
|
|
60
|
+
}
|
|
61
|
+
function handleSave() {
|
|
62
|
+
if (props.saveDisabled || props.saveLoading) return;
|
|
63
|
+
emit("save");
|
|
64
|
+
}
|
|
65
|
+
function handleClickOutside(event) {
|
|
66
|
+
if (popoverRef.value && !popoverRef.value.contains(event.target)) {
|
|
67
|
+
close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
watch(() => props.saveSuccessMessage, (msg) => {
|
|
71
|
+
if (msg) {
|
|
72
|
+
showSuccess.value = true;
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
showSuccess.value = false;
|
|
75
|
+
}, 3e3);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
onMounted(() => {
|
|
79
|
+
document.addEventListener("click", handleClickOutside);
|
|
80
|
+
});
|
|
81
|
+
onUnmounted(() => {
|
|
82
|
+
document.removeEventListener("click", handleClickOutside);
|
|
83
|
+
});
|
|
84
|
+
function formatStatus(status) {
|
|
85
|
+
return status.replace(/_/g, " ").replace(/^\w/, (c) => c.toUpperCase());
|
|
86
|
+
}
|
|
87
|
+
return (_ctx, _cache) => {
|
|
88
|
+
return openBlock(), createElementBlock("div", {
|
|
89
|
+
ref_key: "popoverRef",
|
|
90
|
+
ref: popoverRef,
|
|
91
|
+
class: "mld-experiment-popover"
|
|
92
|
+
}, [
|
|
93
|
+
createElementVNode("button", {
|
|
94
|
+
type: "button",
|
|
95
|
+
class: normalizeClass([
|
|
96
|
+
"mld-experiment-popover__trigger",
|
|
97
|
+
{ "mld-experiment-popover__trigger--active": isOpen.value },
|
|
98
|
+
{ "mld-experiment-popover__trigger--empty": !__props.experimentName }
|
|
99
|
+
]),
|
|
100
|
+
onClick: withModifiers(toggle, ["stop"])
|
|
101
|
+
}, [
|
|
102
|
+
_cache[0] || (_cache[0] = createElementVNode("svg", {
|
|
103
|
+
class: "mld-experiment-popover__trigger-icon",
|
|
104
|
+
fill: "none",
|
|
105
|
+
stroke: "currentColor",
|
|
106
|
+
viewBox: "0 0 24 24"
|
|
107
|
+
}, [
|
|
108
|
+
createElementVNode("path", {
|
|
109
|
+
"stroke-linecap": "round",
|
|
110
|
+
"stroke-linejoin": "round",
|
|
111
|
+
"stroke-width": "1.75",
|
|
112
|
+
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"
|
|
113
|
+
})
|
|
114
|
+
], -1)),
|
|
115
|
+
createElementVNode("span", _hoisted_1, toDisplayString(__props.experimentName || "No experiment"), 1),
|
|
116
|
+
_cache[1] || (_cache[1] = createElementVNode("svg", {
|
|
117
|
+
class: "mld-experiment-popover__trigger-chevron",
|
|
118
|
+
viewBox: "0 0 24 24",
|
|
119
|
+
fill: "none",
|
|
120
|
+
stroke: "currentColor",
|
|
121
|
+
"stroke-width": "2",
|
|
122
|
+
"stroke-linecap": "round",
|
|
123
|
+
"stroke-linejoin": "round"
|
|
124
|
+
}, [
|
|
125
|
+
createElementVNode("path", { d: "m6 9 6 6 6-6" })
|
|
126
|
+
], -1))
|
|
127
|
+
], 2),
|
|
128
|
+
isOpen.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
129
|
+
_cache[6] || (_cache[6] = createElementVNode("div", { class: "mld-experiment-popover__header" }, [
|
|
130
|
+
createElementVNode("div", { class: "mld-experiment-popover__title" }, "Experiment")
|
|
131
|
+
], -1)),
|
|
132
|
+
!__props.experimentName ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
133
|
+
createElementVNode("button", {
|
|
134
|
+
type: "button",
|
|
135
|
+
class: "mld-experiment-popover__select-btn",
|
|
136
|
+
onClick: handleSelect
|
|
137
|
+
}, [..._cache[2] || (_cache[2] = [
|
|
138
|
+
createElementVNode("svg", {
|
|
139
|
+
width: "14",
|
|
140
|
+
height: "14",
|
|
141
|
+
fill: "none",
|
|
142
|
+
stroke: "currentColor",
|
|
143
|
+
viewBox: "0 0 24 24"
|
|
144
|
+
}, [
|
|
145
|
+
createElementVNode("path", {
|
|
146
|
+
"stroke-linecap": "round",
|
|
147
|
+
"stroke-linejoin": "round",
|
|
148
|
+
"stroke-width": "2",
|
|
149
|
+
d: "M12 4v16m8-8H4"
|
|
150
|
+
})
|
|
151
|
+
], -1),
|
|
152
|
+
createTextVNode(" Select Experiment ", -1)
|
|
153
|
+
])])
|
|
154
|
+
])) : (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
155
|
+
_cache[3] || (_cache[3] = createElementVNode("div", { class: "mld-experiment-popover__card-icon" }, [
|
|
156
|
+
createElementVNode("svg", {
|
|
157
|
+
fill: "none",
|
|
158
|
+
stroke: "currentColor",
|
|
159
|
+
viewBox: "0 0 24 24"
|
|
160
|
+
}, [
|
|
161
|
+
createElementVNode("path", {
|
|
162
|
+
"stroke-linecap": "round",
|
|
163
|
+
"stroke-linejoin": "round",
|
|
164
|
+
"stroke-width": "1.75",
|
|
165
|
+
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"
|
|
166
|
+
})
|
|
167
|
+
])
|
|
168
|
+
], -1)),
|
|
169
|
+
createElementVNode("div", _hoisted_5, [
|
|
170
|
+
createElementVNode("div", _hoisted_6, toDisplayString(__props.experimentName), 1),
|
|
171
|
+
__props.experimentStatus ? (openBlock(), createElementBlock("div", _hoisted_7, toDisplayString(formatStatus(__props.experimentStatus)), 1)) : createCommentVNode("", true)
|
|
172
|
+
]),
|
|
173
|
+
createElementVNode("button", {
|
|
174
|
+
type: "button",
|
|
175
|
+
class: "mld-experiment-popover__change-btn",
|
|
176
|
+
onClick: handleSelect
|
|
177
|
+
}, " Change ")
|
|
178
|
+
])),
|
|
179
|
+
__props.showSave ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
180
|
+
_cache[5] || (_cache[5] = createElementVNode("div", { class: "mld-experiment-popover__divider" }, null, -1)),
|
|
181
|
+
createElementVNode("div", _hoisted_8, [
|
|
182
|
+
createElementVNode("button", {
|
|
183
|
+
type: "button",
|
|
184
|
+
class: normalizeClass([
|
|
185
|
+
"mld-experiment-popover__save-btn",
|
|
186
|
+
{ "mld-experiment-popover__save-btn--loading": __props.saveLoading },
|
|
187
|
+
{ "mld-experiment-popover__save-btn--success": showSuccess.value }
|
|
188
|
+
]),
|
|
189
|
+
disabled: __props.saveDisabled && !showSuccess.value,
|
|
190
|
+
onClick: handleSave
|
|
191
|
+
}, [
|
|
192
|
+
__props.saveLoading ? (openBlock(), createElementBlock("span", _hoisted_10)) : showSuccess.value ? (openBlock(), createElementBlock("svg", _hoisted_11, [..._cache[4] || (_cache[4] = [
|
|
193
|
+
createElementVNode("path", {
|
|
194
|
+
"stroke-linecap": "round",
|
|
195
|
+
"stroke-linejoin": "round",
|
|
196
|
+
"stroke-width": "2",
|
|
197
|
+
d: "M5 13l4 4L19 7"
|
|
198
|
+
}, null, -1)
|
|
199
|
+
])])) : createCommentVNode("", true),
|
|
200
|
+
createElementVNode("span", null, toDisplayString(showSuccess.value && __props.saveSuccessMessage ? __props.saveSuccessMessage : "Save to Experiment"), 1)
|
|
201
|
+
], 10, _hoisted_9)
|
|
202
|
+
])
|
|
203
|
+
], 64)) : createCommentVNode("", true)
|
|
204
|
+
])) : createCommentVNode("", true)
|
|
205
|
+
], 512);
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
export {
|
|
210
|
+
_sfc_main as default
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=ExperimentPopover.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperimentPopover.vue.js","sources":["../../src/components/ExperimentPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onUnmounted } from 'vue'\n\ninterface Props {\n experimentName?: string\n experimentStatus?: string\n showSave?: boolean\n saveDisabled?: boolean\n saveLoading?: boolean\n saveSuccessMessage?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n showSave: false,\n saveDisabled: false,\n saveLoading: false,\n})\n\nconst emit = defineEmits<{\n select: []\n save: []\n}>()\n\nconst isOpen = ref(false)\nconst popoverRef = ref<HTMLElement | null>(null)\nconst showSuccess = ref(false)\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\nfunction close() {\n isOpen.value = false\n}\n\nfunction handleSelect() {\n emit('select')\n close()\n}\n\nfunction handleSave() {\n if (props.saveDisabled || props.saveLoading) return\n emit('save')\n}\n\nfunction handleClickOutside(event: MouseEvent) {\n if (popoverRef.value && !popoverRef.value.contains(event.target as Node)) {\n close()\n }\n}\n\n// Show success state when saveSuccessMessage changes from empty to a value\nwatch(() => props.saveSuccessMessage, (msg) => {\n if (msg) {\n showSuccess.value = true\n setTimeout(() => {\n showSuccess.value = false\n }, 3000)\n }\n})\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside)\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n})\n\n// Format status for display (e.g., \"ready_to_extract\" -> \"Ready to extract\")\nfunction formatStatus(status: string): string {\n return status.replace(/_/g, ' ').replace(/^\\w/, c => c.toUpperCase())\n}\n</script>\n\n<template>\n <div ref=\"popoverRef\" class=\"mld-experiment-popover\">\n <!-- Trigger button -->\n <button\n type=\"button\"\n :class=\"[\n 'mld-experiment-popover__trigger',\n { 'mld-experiment-popover__trigger--active': isOpen },\n { 'mld-experiment-popover__trigger--empty': !experimentName },\n ]\"\n @click.stop=\"toggle\"\n >\n <!-- Flask icon -->\n <svg class=\"mld-experiment-popover__trigger-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n 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\"\n />\n </svg>\n <span class=\"mld-experiment-popover__trigger-text\">\n {{ experimentName || 'No experiment' }}\n </span>\n <!-- Chevron -->\n <svg class=\"mld-experiment-popover__trigger-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n <!-- Popover panel -->\n <div v-if=\"isOpen\" class=\"mld-experiment-popover__panel\">\n <!-- Header -->\n <div class=\"mld-experiment-popover__header\">\n <div class=\"mld-experiment-popover__title\">Experiment</div>\n </div>\n\n <!-- No experiment selected -->\n <div v-if=\"!experimentName\" class=\"mld-experiment-popover__empty\">\n <button type=\"button\" class=\"mld-experiment-popover__select-btn\" @click=\"handleSelect\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 4v16m8-8H4\" />\n </svg>\n Select Experiment\n </button>\n </div>\n\n <!-- Experiment selected -->\n <div v-else class=\"mld-experiment-popover__card\">\n <div class=\"mld-experiment-popover__card-icon\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n 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\"\n />\n </svg>\n </div>\n <div class=\"mld-experiment-popover__card-info\">\n <div class=\"mld-experiment-popover__card-name\">{{ experimentName }}</div>\n <div v-if=\"experimentStatus\" class=\"mld-experiment-popover__card-status\">\n {{ formatStatus(experimentStatus) }}\n </div>\n </div>\n <button type=\"button\" class=\"mld-experiment-popover__change-btn\" @click=\"handleSelect\">\n Change\n </button>\n </div>\n\n <!-- Save section -->\n <template v-if=\"showSave\">\n <div class=\"mld-experiment-popover__divider\" />\n <div class=\"mld-experiment-popover__footer\">\n <button\n type=\"button\"\n :class=\"[\n 'mld-experiment-popover__save-btn',\n { 'mld-experiment-popover__save-btn--loading': saveLoading },\n { 'mld-experiment-popover__save-btn--success': showSuccess },\n ]\"\n :disabled=\"saveDisabled && !showSuccess\"\n @click=\"handleSave\"\n >\n <!-- Loading spinner -->\n <span v-if=\"saveLoading\" class=\"mld-experiment-popover__spinner\" />\n <!-- Success check -->\n <svg v-else-if=\"showSuccess\" class=\"mld-experiment-popover__check-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\" />\n </svg>\n <!-- Label -->\n <span>{{ showSuccess && saveSuccessMessage ? saveSuccessMessage : 'Save to Experiment' }}</span>\n </button>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<style>\n@import '../styles/components/experiment-popover.css';\n</style>\n"],"names":["_createElementBlock","_createElementVNode","_normalizeClass","_toDisplayString","_openBlock","_Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperimentPopover.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -77,4 +77,5 @@ export { default as TimeRangeInput } from './TimeRangeInput.vue';
|
|
|
77
77
|
export { default as ScheduleCalendar } from './ScheduleCalendar.vue';
|
|
78
78
|
export { default as ResourceCard } from './ResourceCard.vue';
|
|
79
79
|
export { default as ExperimentSelectorModal } from './ExperimentSelectorModal.vue';
|
|
80
|
+
export { default as ExperimentPopover } from './ExperimentPopover.vue';
|
|
80
81
|
export { default as FitPanel } from './FitPanel.vue';
|
package/dist/components/index.js
CHANGED
|
@@ -154,7 +154,9 @@ import { default as default79 } from "./ResourceCard.vue.js";
|
|
|
154
154
|
/* empty css */
|
|
155
155
|
import { default as default80 } from "./ExperimentSelectorModal.vue.js";
|
|
156
156
|
/* empty css */
|
|
157
|
-
import { default as default81 } from "./
|
|
157
|
+
import { default as default81 } from "./ExperimentPopover.vue.js";
|
|
158
|
+
/* empty css */
|
|
159
|
+
import { default as default82 } from "./FitPanel.vue.js";
|
|
158
160
|
/* empty css */
|
|
159
161
|
export {
|
|
160
162
|
default25 as AlertBox,
|
|
@@ -194,10 +196,11 @@ export {
|
|
|
194
196
|
default41 as EmptyState,
|
|
195
197
|
default75 as ExperimentCodeBadge,
|
|
196
198
|
default74 as ExperimentDataViewer,
|
|
199
|
+
default81 as ExperimentPopover,
|
|
197
200
|
default80 as ExperimentSelectorModal,
|
|
198
201
|
default51 as ExperimentTimeline,
|
|
199
202
|
default24 as FileUploader,
|
|
200
|
-
|
|
203
|
+
default82 as FitPanel,
|
|
201
204
|
default72 as FormActions,
|
|
202
205
|
default70 as FormBuilder,
|
|
203
206
|
default19 as FormField,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { ref, computed, reactive, watch, onScopeDispose } from "vue";
|
|
2
2
|
import { useApi } from "./useApi.js";
|
|
3
|
+
function getPlatformContext() {
|
|
4
|
+
if (typeof window === "undefined") return void 0;
|
|
5
|
+
return window.__MLD_PLATFORM__;
|
|
6
|
+
}
|
|
3
7
|
function getPlatformApiUrl() {
|
|
4
8
|
var _a;
|
|
5
|
-
|
|
6
|
-
return (_a = window.__MLD_PLATFORM__) == null ? void 0 : _a.platformApiUrl;
|
|
9
|
+
return (_a = getPlatformContext()) == null ? void 0 : _a.platformApiUrl;
|
|
7
10
|
}
|
|
8
11
|
function useExperimentSelector(options = {}) {
|
|
9
12
|
const { limit = 100, immediate = false, experimentType, apiBaseUrl } = options;
|
|
@@ -21,7 +24,12 @@ function useExperimentSelector(options = {}) {
|
|
|
21
24
|
error.value = null;
|
|
22
25
|
try {
|
|
23
26
|
const params = new URLSearchParams();
|
|
24
|
-
|
|
27
|
+
const effectiveType = experimentType ?? (() => {
|
|
28
|
+
var _a;
|
|
29
|
+
const types = (_a = getPlatformContext()) == null ? void 0 : _a.allowedExperimentTypes;
|
|
30
|
+
return (types == null ? void 0 : types.length) === 1 ? types[0] : void 0;
|
|
31
|
+
})();
|
|
32
|
+
if (effectiveType) params.set("experiment_type", effectiveType);
|
|
25
33
|
if (filters.status) params.set("status", filters.status);
|
|
26
34
|
if (filters.search) params.set("search", filters.search);
|
|
27
35
|
if (filters.project) params.set("project", filters.project);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExperimentSelector.js","sources":["../../src/composables/useExperimentSelector.ts"],"sourcesContent":["import { ref, reactive, computed, watch, onScopeDispose, type Ref, type ComputedRef } from 'vue'\nimport { useApi } from './useApi'\nimport type { ExperimentSummary, ExperimentListResponse, ExperimentFilters, PlatformContext } from '../types'\n\nfunction
|
|
1
|
+
{"version":3,"file":"useExperimentSelector.js","sources":["../../src/composables/useExperimentSelector.ts"],"sourcesContent":["import { ref, reactive, computed, watch, onScopeDispose, type Ref, type ComputedRef } from 'vue'\nimport { useApi } from './useApi'\nimport type { ExperimentSummary, ExperimentListResponse, ExperimentFilters, PlatformContext } from '../types'\n\nfunction getPlatformContext(): PlatformContext | undefined {\n if (typeof window === 'undefined') return undefined\n return (window as unknown as { __MLD_PLATFORM__?: PlatformContext }).__MLD_PLATFORM__\n}\n\nfunction getPlatformApiUrl(): string | undefined {\n return getPlatformContext()?.platformApiUrl\n}\n\nexport interface UseExperimentSelectorOptions {\n experimentType?: string\n apiBaseUrl?: string\n limit?: number\n immediate?: boolean\n}\n\nexport interface UseExperimentSelectorReturn {\n experiments: Ref<ExperimentSummary[]>\n total: Ref<number>\n selectedExperiment: Ref<ExperimentSummary | null>\n filters: ExperimentFilters\n isLoading: Ref<boolean>\n error: Ref<string | null>\n page: Ref<number>\n hasMore: ComputedRef<boolean>\n fetch: () => Promise<void>\n loadMore: () => Promise<void>\n reset: () => void\n select: (experiment: ExperimentSummary) => void\n clear: () => void\n}\n\nexport function useExperimentSelector(\n options: UseExperimentSelectorOptions = {},\n): UseExperimentSelectorReturn {\n const { limit = 100, immediate = false, experimentType, apiBaseUrl } = options\n const platformBase = apiBaseUrl ?? getPlatformApiUrl()\n const api = useApi()\n\n const experiments = ref<ExperimentSummary[]>([])\n const total = ref(0)\n const selectedExperiment = ref<ExperimentSummary | null>(null)\n const isLoading = ref(false)\n const error = ref<string | null>(null)\n const page = ref(0)\n\n const hasMore = computed(() => experiments.value.length < total.value)\n\n async function fetchExperiments(): Promise<void> {\n isLoading.value = true\n error.value = null\n try {\n const params = new URLSearchParams()\n // Priority: explicit option > platform context (single type) > no filter\n const effectiveType = experimentType\n ?? (() => {\n const types = getPlatformContext()?.allowedExperimentTypes\n return types?.length === 1 ? types[0] : undefined\n })()\n if (effectiveType) params.set('experiment_type', effectiveType)\n if (filters.status) params.set('status', filters.status)\n if (filters.search) params.set('search', filters.search)\n if (filters.project) params.set('project', filters.project)\n params.set('limit', String(limit))\n params.set('skip', String(page.value * limit))\n\n const query = params.toString()\n // Use absolute platform URL in integrated mode to bypass plugin's baseURL\n const base = platformBase ?? '/api'\n const url = `${base}/experiments${query ? `?${query}` : ''}`\n const data = await api.get<ExperimentListResponse>(url)\n\n if (page.value === 0) {\n experiments.value = data.experiments\n } else {\n experiments.value = [...experiments.value, ...data.experiments]\n }\n total.value = data.total\n } catch (e) {\n error.value = e instanceof Error ? e.message : 'Failed to fetch experiments'\n if (page.value === 0) {\n experiments.value = []\n total.value = 0\n }\n } finally {\n isLoading.value = false\n }\n }\n\n async function loadMore(): Promise<void> {\n if (!hasMore.value || isLoading.value) return\n page.value++\n await fetchExperiments()\n }\n\n function reset(): void {\n page.value = 0\n experiments.value = []\n total.value = 0\n fetchExperiments()\n }\n\n function select(experiment: ExperimentSummary): void {\n selectedExperiment.value = experiment\n }\n\n function clear(): void {\n selectedExperiment.value = null\n filters.search = undefined\n filters.status = undefined\n filters.project = undefined\n page.value = 0\n }\n\n const filters: ExperimentFilters = reactive({\n search: undefined,\n status: undefined,\n project: undefined,\n })\n\n // Debounced watch on search filter\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n watch(\n () => filters.search,\n () => {\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(() => {\n page.value = 0\n fetchExperiments()\n }, 300)\n },\n )\n\n // Immediate watch on status/project filters (no debounce needed)\n watch(\n () => [filters.status, filters.project],\n () => {\n page.value = 0\n fetchExperiments()\n },\n )\n\n onScopeDispose(() => {\n if (debounceTimer) clearTimeout(debounceTimer)\n })\n\n if (immediate) {\n fetchExperiments()\n }\n\n return {\n experiments,\n total,\n selectedExperiment,\n filters,\n isLoading,\n error,\n page,\n hasMore,\n fetch: fetchExperiments,\n loadMore,\n reset,\n select,\n clear,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,7 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
52
52
|
role: string;
|
|
53
53
|
} | undefined;
|
|
54
54
|
theme: "light" | "dark" | "system";
|
|
55
|
+
allowedExperimentTypes?: string[] | null | undefined;
|
|
55
56
|
features?: {
|
|
56
57
|
experiments?: boolean | undefined;
|
|
57
58
|
passkey?: boolean | undefined;
|
|
@@ -84,6 +85,7 @@ export declare function usePlatformContext(options?: PlatformContextOptions): {
|
|
|
84
85
|
role: string;
|
|
85
86
|
} | undefined;
|
|
86
87
|
theme: "light" | "dark" | "system";
|
|
88
|
+
allowedExperimentTypes?: string[] | null | undefined;
|
|
87
89
|
features?: {
|
|
88
90
|
experiments?: boolean | undefined;
|
|
89
91
|
passkey?: boolean | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MLDSdk, default } from './install';
|
|
2
|
-
export { BaseButton, BaseInput, BaseTextarea, BaseSelect, BaseCheckbox, BaseToggle, BaseRadioGroup, BaseSlider, ColorSlider, BaseTabs, BaseModal, FormField, DatePicker, TimePicker, TagsInput, NumberInput, FileUploader, AlertBox, ToastNotification, IconButton, ThemeToggle, SettingsButton, CollapsibleCard, AppTopBar, AppSidebar, AppLayout, AppContainer, Skeleton, WellPlate, RackEditor, SampleLegend, PlateMapEditor, ExperimentTimeline, SampleSelector, GroupingModal, AutoGroupModal, GroupAssigner, MoleculeInput, ConcentrationInput, DoseCalculator, ReagentList, SampleHierarchyTree, ProtocolStepEditor, SegmentedControl, MultiSelect, BasePill, DropdownButton, Calendar, DataFrame, LoadingSpinner, Divider, StatusIndicator, ProgressBar, Avatar, EmptyState, Breadcrumb, Tooltip, ConfirmDialog, ChartContainer, SettingsModal, ScientificNumber, ChemicalFormula, FormulaInput, SequenceInput, UnitInput, StepWizard, AuditTrail, BatchProgressList, ExperimentDataViewer, ExperimentCodeBadge, DateTimePicker, TimeRangeInput, ScheduleCalendar, ResourceCard, ExperimentSelectorModal, FitPanel, } from './components';
|
|
2
|
+
export { BaseButton, BaseInput, BaseTextarea, BaseSelect, BaseCheckbox, BaseToggle, BaseRadioGroup, BaseSlider, ColorSlider, BaseTabs, BaseModal, FormField, DatePicker, TimePicker, TagsInput, NumberInput, FileUploader, AlertBox, ToastNotification, IconButton, ThemeToggle, SettingsButton, CollapsibleCard, AppTopBar, AppSidebar, AppLayout, AppContainer, Skeleton, WellPlate, RackEditor, SampleLegend, PlateMapEditor, ExperimentTimeline, SampleSelector, GroupingModal, AutoGroupModal, GroupAssigner, MoleculeInput, ConcentrationInput, DoseCalculator, ReagentList, SampleHierarchyTree, ProtocolStepEditor, SegmentedControl, MultiSelect, BasePill, DropdownButton, Calendar, DataFrame, LoadingSpinner, Divider, StatusIndicator, ProgressBar, Avatar, EmptyState, Breadcrumb, Tooltip, ConfirmDialog, ChartContainer, SettingsModal, ScientificNumber, ChemicalFormula, FormulaInput, SequenceInput, UnitInput, StepWizard, AuditTrail, BatchProgressList, ExperimentDataViewer, ExperimentCodeBadge, DateTimePicker, TimeRangeInput, ScheduleCalendar, ResourceCard, ExperimentSelectorModal, ExperimentPopover, FitPanel, } from './components';
|
|
3
3
|
export { useApi, useAuth, usePasskey, useTheme, useToast, usePlatformContext, useWellPlateEditor, useConcentrationUnits, useDoseCalculator, useProtocolTemplates, useRackEditor, useChemicalFormula, ATOMIC_WEIGHTS, useSequenceUtils, type ApiClientOptions, type UseWellPlateEditorOptions, type UseWellPlateEditorReturn, type UseRackEditorOptions, type UseRackEditorReturn, type ConcentrationValue, type ConcentrationUnit, type VolumeValue, type VolumeUnit, type StepTemplate, type FormulaParseResult, type FormulaPart, type SequenceType, type SequenceStats, parseTime, formatTime, generateTimeSlots, rangesOverlap, durationMinutes, formatDuration, isTimeInRange, findAvailableSlots, snapToSlot, addMinutes, compareTime, useScheduleDrag, usePluginConfig, type UsePluginConfigReturn, useAutoGroup, DEFAULT_COLORS, useExperimentSelector, type UseExperimentSelectorOptions, type UseExperimentSelectorReturn, formatExperimentDate, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, EXPERIMENT_STATUS_LABELS, useExperimentData, type UseExperimentDataOptions, type UseExperimentDataReturn, } from './composables';
|
|
4
4
|
export { useAuthStore, useSettingsStore, colorPalettes, type SettingsState, } from './stores';
|
|
5
5
|
export type { ContainerDirection, ButtonVariant, ButtonSize, InputType, ModalSize, AlertType, Toast, TabItem, SelectOption, RadioOption, FormFieldProps, SidebarToolSection, CollapsibleState, TopBarVariant, TopBarPage, TopBarTab, TopBarTabOption, TopBarSettingsConfig, WellPlateFormat, WellState, WellPlateSelectionMode, Well, HeatmapColorScale, HeatmapConfig, SlotPosition, WellExtendedData, WellEditData, WellEditField, WellLegendItem, Rack, SampleType, PlateMap, PlateMapEditorState, ProtocolStepType, ProtocolStepStatus, ProtocolStep, SampleGroup, GroupItem, OutlierAction, InputMode, OutlierInfo, ColumnInfo, MetadataRow, AutoGroupResult, ParsedCsvData, FileUploaderMode, SegmentedOption, SegmentedControlVariant, SegmentedControlSize, MultiSelectOption, MultiSelectSize, PillVariant, PillSize, CalendarSelectionMode, CalendarMarker, CalendarDayContext, SortDirection, SortState, DataFrameColumn, PaginationState, SpinnerSize, SpinnerVariant, DividerSpacing, StatusType, ProgressVariant, ProgressSize, AvatarSize, EmptyStateColor, EmptyStateSize, BreadcrumbItem, TooltipPosition, ConfirmVariant, SettingsTab, NumberNotation, TimePickerFormat, TimeRange, ScheduleView, ScheduleEventStatus, ScheduleEvent, ScheduleBlockedSlot, ScheduleSlotContext, ScheduleEventCreateContext, ScheduleEventUpdateContext, ResourceStatus, ResourceSpec, ExperimentStatus, ExperimentSummary, ExperimentListResponse, ExperimentFilters, FitState, FitResultSummary, UnitOption, WizardStep, WizardStepState, AuditEntryType, AuditEntry, BatchItemStatus, BatchItem, BatchSummary, AuthConfig, UserInfo, LoginResponse, TokenVerifyResponse, RegisterRequest, UpdateProfileRequest, CredentialInfo, SummaryData, SummarySection, SummarySectionItem, TreeNode, TreeNodeType, PluginInfo, PluginNavItem, PluginSettings, PluginSettingField, PlatformContext, PlatformEventType, PlatformEvent, ThemeMode, ColorPalette, TableDensity, } from './types';
|
package/dist/index.js
CHANGED
|
@@ -149,7 +149,9 @@ import { default as default75 } from "./components/ResourceCard.vue.js";
|
|
|
149
149
|
/* empty css */
|
|
150
150
|
import { default as default76 } from "./components/ExperimentSelectorModal.vue.js";
|
|
151
151
|
/* empty css */
|
|
152
|
-
import { default as default77 } from "./components/
|
|
152
|
+
import { default as default77 } from "./components/ExperimentPopover.vue.js";
|
|
153
|
+
/* empty css */
|
|
154
|
+
import { default as default78 } from "./components/FitPanel.vue.js";
|
|
153
155
|
/* empty css */
|
|
154
156
|
import { useApi } from "./composables/useApi.js";
|
|
155
157
|
import { useAuth } from "./composables/useAuth.js";
|
|
@@ -216,10 +218,11 @@ export {
|
|
|
216
218
|
default41 as EmptyState,
|
|
217
219
|
default71 as ExperimentCodeBadge,
|
|
218
220
|
default70 as ExperimentDataViewer,
|
|
221
|
+
default77 as ExperimentPopover,
|
|
219
222
|
default76 as ExperimentSelectorModal,
|
|
220
223
|
default51 as ExperimentTimeline,
|
|
221
224
|
default24 as FileUploader,
|
|
222
|
-
|
|
225
|
+
default78 as FitPanel,
|
|
223
226
|
default19 as FormField,
|
|
224
227
|
default64 as FormulaInput,
|
|
225
228
|
default55 as GroupAssigner,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|