@platforma-sdk/ui-vue 1.42.3 → 1.42.5
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/.turbo/turbo-build.log +16 -16
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +15 -0
- package/dist/aggrid.js +4 -4
- package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +7 -7
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +13 -13
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +88 -85
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.js +6 -6
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +10 -10
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -2
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +37 -29
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +18 -14
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +100 -98
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/data.d.ts +1 -1
- package/dist/components/PlMultiSequenceAlignment/data.js +41 -41
- package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
- package/dist/components/PlTableFilters/filters-state.js +2 -2
- package/dist/defineApp.js +16 -16
- package/dist/internal/createAppV2.js +9 -9
- package/dist/lib/model/common/dist/index.js +329 -317
- package/dist/lib/model/common/dist/index.js.map +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue2.js → ExpandTransition.vue.js} +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js +16 -16
- package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
- package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +8 -8
- package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +18 -18
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/sdk/model/dist/index.js +198 -206
- package/dist/sdk/model/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +9 -6
- package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +65 -18
- package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +16 -11
- package/src/components/PlMultiSequenceAlignment/data.ts +10 -10
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as I, useCssVars as R, computed as
|
|
1
|
+
import { defineComponent as I, useCssVars as R, computed as f, useTemplateRef as N, createElementBlock as l, openBlock as s, normalizeClass as n, createElementVNode as t, createBlock as g, createCommentVNode as a, Fragment as i, renderList as d, normalizeStyle as b, toDisplayString as m } from "vue";
|
|
2
2
|
import { useObjectUrl as L } from "../../node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js";
|
|
3
3
|
import S from "./Consensus.vue.js";
|
|
4
4
|
import V from "./Legend.vue.js";
|
|
@@ -13,48 +13,52 @@ const A = /* @__PURE__ */ I({
|
|
|
13
13
|
highlightImage: {},
|
|
14
14
|
widgets: {}
|
|
15
15
|
},
|
|
16
|
-
setup(c, { expose:
|
|
16
|
+
setup(c, { expose: q }) {
|
|
17
17
|
R((e) => ({
|
|
18
|
-
"
|
|
18
|
+
"861533c4": k.value
|
|
19
19
|
}));
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const $ = N("rootRef");
|
|
21
|
+
q({ rootEl: $ });
|
|
22
22
|
const h = L(() => {
|
|
23
23
|
var e;
|
|
24
24
|
return (e = c.highlightImage) == null ? void 0 : e.blob;
|
|
25
|
-
}),
|
|
25
|
+
}), k = f(
|
|
26
26
|
() => h.value ? `url('${h.value}')` : "none"
|
|
27
|
-
),
|
|
27
|
+
), C = f(
|
|
28
28
|
() => {
|
|
29
29
|
var e;
|
|
30
|
-
return (e = c.sequences.at(0)) == null ? void 0 : e.split(" ").map(({ length:
|
|
30
|
+
return (e = c.sequences.at(0)) == null ? void 0 : e.split(" ").map(({ length: y }) => y);
|
|
31
31
|
}
|
|
32
32
|
);
|
|
33
|
-
return (e,
|
|
34
|
-
var
|
|
33
|
+
return (e, y) => {
|
|
34
|
+
var p, v;
|
|
35
35
|
return s(), l("div", {
|
|
36
36
|
ref: "rootRef",
|
|
37
37
|
class: n(e.$style.root)
|
|
38
38
|
}, [
|
|
39
|
-
|
|
39
|
+
t("div", {
|
|
40
40
|
class: n(["pl-scrollable", e.$style.table])
|
|
41
41
|
}, [
|
|
42
|
-
|
|
42
|
+
t("div", {
|
|
43
43
|
class: n(e.$style.corner)
|
|
44
|
-
},
|
|
45
|
-
|
|
44
|
+
}, [
|
|
45
|
+
t("div", {
|
|
46
|
+
class: n(e.$style["label-scroll-indicator"])
|
|
47
|
+
}, null, 2)
|
|
48
|
+
], 2),
|
|
49
|
+
t("div", {
|
|
46
50
|
class: n(e.$style.header)
|
|
47
51
|
}, [
|
|
48
52
|
e.sequenceNames.length > 1 ? (s(), l("div", {
|
|
49
53
|
key: 0,
|
|
50
54
|
class: n(e.$style["sequence-names"])
|
|
51
55
|
}, [
|
|
52
|
-
(s(!0), l(
|
|
53
|
-
var
|
|
56
|
+
(s(!0), l(i, null, d(e.sequenceNames, (u, r) => {
|
|
57
|
+
var o;
|
|
54
58
|
return s(), l("span", {
|
|
55
|
-
key:
|
|
56
|
-
style:
|
|
57
|
-
inlineSize: (((
|
|
59
|
+
key: r,
|
|
60
|
+
style: b({
|
|
61
|
+
inlineSize: (((o = C.value) == null ? void 0 : o.at(r)) ?? 0) * 20 + "px"
|
|
58
62
|
})
|
|
59
63
|
}, m(u), 5);
|
|
60
64
|
}), 128))
|
|
@@ -68,23 +72,27 @@ const A = /* @__PURE__ */ I({
|
|
|
68
72
|
"residue-counts": e.residueCounts
|
|
69
73
|
}, null, 8, ["residue-counts"])) : a("", !0)
|
|
70
74
|
], 2),
|
|
71
|
-
|
|
75
|
+
t("div", {
|
|
72
76
|
class: n(e.$style.labels)
|
|
73
77
|
}, [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
t("div", {
|
|
79
|
+
class: n(e.$style["labels-grid"])
|
|
80
|
+
}, [
|
|
81
|
+
(s(!0), l(i, null, d(e.labelRows, (u, r) => (s(), l(i, null, [
|
|
82
|
+
(s(!0), l(i, null, d(u, (o, w) => (s(), l("div", {
|
|
83
|
+
key: w,
|
|
84
|
+
style: b({ gridRow: r + 1 })
|
|
85
|
+
}, m(o), 5))), 128))
|
|
86
|
+
], 64))), 256))
|
|
87
|
+
], 2)
|
|
80
88
|
], 2),
|
|
81
|
-
|
|
89
|
+
t("div", {
|
|
82
90
|
class: n(e.$style.sequences)
|
|
83
91
|
}, [
|
|
84
|
-
(s(!0), l(
|
|
92
|
+
(s(!0), l(i, null, d(e.sequences, (u, r) => (s(), l("div", { key: r }, m(u), 1))), 128))
|
|
85
93
|
], 2)
|
|
86
94
|
], 2),
|
|
87
|
-
(
|
|
95
|
+
(p = e.widgets) != null && p.includes("legend") && ((v = e.highlightImage) != null && v.legend) ? (s(), g(V, {
|
|
88
96
|
key: 0,
|
|
89
97
|
legend: e.highlightImage.legend
|
|
90
98
|
}, null, 8, ["legend"])) : a("", !0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSequenceAlignmentView.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useObjectUrl } from '@vueuse/core';\nimport { computed, useTemplateRef } from 'vue';\nimport Consensus from './Consensus.vue';\nimport Legend from './Legend.vue';\nimport SeqLogo from './SeqLogo.vue';\nimport type { HighlightLegend, ResidueCounts } from './types';\n\nconst { sequences, highlightImage } = defineProps<{\n sequences: string[];\n sequenceNames: string[];\n labelRows: string[][];\n residueCounts: ResidueCounts;\n highlightImage: {\n blob: Blob;\n legend: HighlightLegend;\n } | undefined;\n widgets: ('consensus' | 'seqLogo' | 'legend')[];\n}>();\n\nconst rootEl = useTemplateRef('rootRef');\ndefineExpose({ rootEl });\n\nconst highlightImageObjectUrl = useObjectUrl(() => highlightImage?.blob);\nconst highlightImageCssUrl = computed(() =>\n highlightImageObjectUrl.value\n ? `url('${highlightImageObjectUrl.value}')`\n : 'none',\n);\n\nconst sequenceLengths = computed(() =>\n sequences.at(0)?.split(' ').map(({ length }) => length),\n);\n</script>\n\n<template>\n <div ref=\"rootRef\" :class=\"$style.root\">\n <div :class=\"['pl-scrollable', $style.table]\">\n <div :class=\"$style.corner\" />\n <div :class=\"$style.header\">\n <div v-if=\"sequenceNames.length > 1\" :class=\"$style['sequence-names']\">\n <span\n v-for=\"(name, index) of sequenceNames\"\n :key=\"index\"\n :style=\"{\n inlineSize: ((sequenceLengths?.at(index) ?? 0) * 20)\n + 'px',\n }\"\n >{{ name }}</span>\n </div>\n <Consensus v-if=\"widgets.includes('consensus')\" :residue-counts />\n <SeqLogo v-if=\"widgets.includes('seqLogo')\" :residue-counts />\n </div>\n <div :class=\"$style.labels\">\n <template v-for=\"(labelRow, rowIndex) of labelRows\">\n
|
|
1
|
+
{"version":3,"file":"MultiSequenceAlignmentView.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useObjectUrl } from '@vueuse/core';\nimport { computed, useTemplateRef } from 'vue';\nimport Consensus from './Consensus.vue';\nimport Legend from './Legend.vue';\nimport SeqLogo from './SeqLogo.vue';\nimport type { HighlightLegend, ResidueCounts } from './types';\n\nconst { sequences, highlightImage } = defineProps<{\n sequences: string[];\n sequenceNames: string[];\n labelRows: string[][];\n residueCounts: ResidueCounts;\n highlightImage: {\n blob: Blob;\n legend: HighlightLegend;\n } | undefined;\n widgets: ('consensus' | 'seqLogo' | 'legend')[];\n}>();\n\nconst rootEl = useTemplateRef('rootRef');\ndefineExpose({ rootEl });\n\nconst highlightImageObjectUrl = useObjectUrl(() => highlightImage?.blob);\nconst highlightImageCssUrl = computed(() =>\n highlightImageObjectUrl.value\n ? `url('${highlightImageObjectUrl.value}')`\n : 'none',\n);\n\nconst sequenceLengths = computed(() =>\n sequences.at(0)?.split(' ').map(({ length }) => length),\n);\n</script>\n\n<template>\n <div ref=\"rootRef\" :class=\"$style.root\">\n <div :class=\"['pl-scrollable', $style.table]\">\n <div :class=\"$style.corner\">\n <div :class=\"$style['label-scroll-indicator']\" />\n </div>\n <div :class=\"$style.header\">\n <div v-if=\"sequenceNames.length > 1\" :class=\"$style['sequence-names']\">\n <span\n v-for=\"(name, index) of sequenceNames\"\n :key=\"index\"\n :style=\"{\n inlineSize: ((sequenceLengths?.at(index) ?? 0) * 20)\n + 'px',\n }\"\n >{{ name }}</span>\n </div>\n <Consensus v-if=\"widgets.includes('consensus')\" :residue-counts />\n <SeqLogo v-if=\"widgets.includes('seqLogo')\" :residue-counts />\n </div>\n <div :class=\"$style.labels\">\n <div :class=\"$style['labels-grid']\">\n <template v-for=\"(labelRow, rowIndex) of labelRows\">\n <div\n v-for=\"(label, labelIndex) of labelRow\"\n :key=\"labelIndex\"\n :style=\"{ gridRow: rowIndex + 1 }\"\n >\n {{ label }}\n </div>\n </template>\n </div>\n </div>\n <div :class=\"$style.sequences\">\n <div\n v-for=\"(sequence, index) of sequences\"\n :key=\"index\"\n >\n {{ sequence }}\n </div>\n </div>\n </div>\n <Legend\n v-if=\"widgets?.includes('legend') && highlightImage?.legend\"\n :legend=\"highlightImage.legend\"\n />\n </div>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-block-size: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n\n &[data-pre-print] {\n .table {\n container-type: unset;\n }\n .labels {\n max-inline-size: unset;\n }\n }\n}\n\n.table {\n container-type: inline-size;\n display: grid;\n grid-template-areas:\n \"corner header\"\n \"labels sequences\";\n justify-content: start;\n timeline-scope: --msa-labels-scroll;\n @media print {\n overflow: visible;\n }\n}\n\n.corner {\n grid-area: corner;\n background-color: #fff;\n position: sticky;\n inset-inline-start: 0;\n inset-block-start: 0;\n z-index: 2;\n}\n\n.label-scroll-indicator {\n position: absolute;\n inset-inline-end: 0;\n block-size: 100cqb;\n inline-size: 8px;\n animation-name: hide;\n animation-timeline: --msa-labels-scroll;\n visibility: hidden;\n background: #fff;\n box-shadow: -4px 0 4px -2px rgba(0, 0, 0, 0.10);\n}\n\n.header {\n grid-area: header;\n background-color: #fff;\n position: sticky;\n inset-block-start: 0;\n z-index: 1;\n}\n\n.sequence-names {\n display: flex;\n font-weight: 700;\n line-height: 20px;\n margin-block-end: 4px;\n gap: 20px;\n}\n\n.labels {\n grid-area: labels;\n background-color: #fff;\n position: sticky;\n inset-inline-start: 0;\n z-index: 1;\n inline-size: max-content;\n max-inline-size: 30cqi;\n overflow: scroll;\n scrollbar-width: none;\n overscroll-behavior-inline: none;\n scroll-timeline: --msa-labels-scroll inline;\n}\n\n.labels-grid {\n display: grid;\n grid-auto-flow: dense;\n font-family: Spline Sans Mono;\n line-height: 24px;\n text-wrap: nowrap;\n\n > * {\n padding-inline-end: 12px;\n }\n}\n\n.sequences {\n grid-area: sequences;\n display: flex;\n flex-direction: column;\n font-family: Spline Sans Mono;\n font-weight: 600;\n line-height: 24px;\n letter-spacing: 11.6px;\n text-indent: 5.8px;\n margin-inline-end: -5.8px;\n background-image: v-bind(highlightImageCssUrl);\n background-repeat: no-repeat;\n background-size: calc(100% - 5.8px) 100%;\n}\n\n@keyframes hide {\n from {\n visibility: visible;\n }\n to {\n visibility: hidden;\n }\n}\n</style>\n"],"names":["rootEl","useTemplateRef","__expose","highlightImageObjectUrl","useObjectUrl","_a","__props","highlightImageCssUrl","computed","sequenceLengths","length"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBM,UAAAA,IAASC,EAAe,SAAS;AAC1B,IAAAC,EAAA,EAAE,QAAAF,GAAQ;AAEvB,UAAMG,IAA0BC,EAAa,MAAM;;AAAA,cAAAC,IAAAC,EAAA,mBAAA,gBAAAD,EAAgB;AAAA,KAAI,GACjEE,IAAuBC;AAAA,MAAS,MACpCL,EAAwB,QACpB,QAAQA,EAAwB,KAAK,OACrC;AAAA,IACN,GAEMM,IAAkBD;AAAA,MAAS,MAAA;;AAC/B,gBAAAH,IAAAC,YAAU,GAAG,CAAC,MAAd,gBAAAD,EAAiB,MAAM,KAAK,IAAI,CAAC,EAAE,QAAAK,QAAaA;AAAA;AAAA,IAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('.
|
|
2
|
-
const e = "
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._root_y6xw0_2{display:flex;flex-direction:column;gap:12px;min-block-size:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}._root_y6xw0_2[data-pre-print] ._table_y6xw0_11{container-type:unset}._root_y6xw0_2[data-pre-print] ._labels_y6xw0_14{max-inline-size:unset}._table_y6xw0_11{container-type:inline-size;display:grid;grid-template-areas:"corner header" "labels sequences";justify-content:start;timeline-scope:--msa-labels-scroll}@media print{._table_y6xw0_11{overflow:visible}}._corner_y6xw0_33{grid-area:corner;background-color:#fff;position:sticky;inset-inline-start:0;inset-block-start:0;z-index:2}._label-scroll-indicator_y6xw0_42{position:absolute;inset-inline-end:0;block-size:100cqb;inline-size:8px;animation-name:_hide_y6xw0_1;animation-timeline:--msa-labels-scroll;visibility:hidden;background:#fff;box-shadow:-4px 0 4px -2px #0000001a}._header_y6xw0_54{grid-area:header;background-color:#fff;position:sticky;inset-block-start:0;z-index:1}._sequence-names_y6xw0_62{display:flex;font-weight:700;line-height:20px;margin-block-end:4px;gap:20px}._labels_y6xw0_14{grid-area:labels;background-color:#fff;position:sticky;inset-inline-start:0;z-index:1;inline-size:max-content;max-inline-size:30cqi;overflow:scroll;scrollbar-width:none;overscroll-behavior-inline:none;scroll-timeline:--msa-labels-scroll inline}._labels-grid_y6xw0_84{display:grid;grid-auto-flow:dense;font-family:Spline Sans Mono;line-height:24px;text-wrap:nowrap}._labels-grid_y6xw0_84>*{padding-inline-end:12px}._sequences_y6xw0_96{grid-area:sequences;display:flex;flex-direction:column;font-family:Spline Sans Mono;font-weight:600;line-height:24px;letter-spacing:11.6px;text-indent:5.8px;margin-inline-end:-5.8px;background-image:var(--861533c4);background-repeat:no-repeat;background-size:calc(100% - 5.8px) 100%}@keyframes _hide_y6xw0_1{0%{visibility:visible}to{visibility:hidden}}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
|
|
2
|
+
const e = "_root_y6xw0_2", _ = "_table_y6xw0_11", s = "_labels_y6xw0_14", l = "_corner_y6xw0_33", o = "_hide_y6xw0_1", c = "_header_y6xw0_54", n = "_sequences_y6xw0_96", a = {
|
|
3
3
|
root: e,
|
|
4
|
-
table:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
table: _,
|
|
5
|
+
labels: s,
|
|
6
|
+
corner: l,
|
|
7
|
+
"label-scroll-indicator": "_label-scroll-indicator_y6xw0_42",
|
|
8
|
+
hide: o,
|
|
9
|
+
header: c,
|
|
10
|
+
"sequence-names": "_sequence-names_y6xw0_62",
|
|
11
|
+
"labels-grid": "_labels-grid_y6xw0_84",
|
|
12
|
+
sequences: n
|
|
10
13
|
};
|
|
11
14
|
export {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
l as corner,
|
|
16
|
+
a as default,
|
|
17
|
+
c as header,
|
|
18
|
+
o as hide,
|
|
19
|
+
s as labels,
|
|
16
20
|
e as root,
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
n as sequences,
|
|
22
|
+
_ as table
|
|
19
23
|
};
|
|
20
24
|
//# sourceMappingURL=MultiSequenceAlignmentView.vue3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSequenceAlignmentView.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MultiSequenceAlignmentView.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlMultiSequenceAlignment.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlMultiSequenceAlignment.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"names":[],"mappings":"AA4TA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAEjB,KAAK,6BAA6B,EAElC,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AA8B9B,KAAK,WAAW,GAAG;IACjB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC,CAAC;AA6LF,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,6BAA6B,CAAC;CAC1C,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkLhB,wBAQG"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { isJsonEqual as
|
|
1
|
+
import { defineComponent as U, mergeModels as J, useModel as G, onBeforeMount as H, reactive as h, computed as R, watchEffect as L, useTemplateRef as K, createElementBlock as N, openBlock as p, Fragment as T, createVNode as V, createBlock as S, unref as m, withCtx as b, createTextVNode as w, toDisplayString as q, createCommentVNode as j, normalizeClass as Q } from "vue";
|
|
2
|
+
import { isJsonEqual as v } from "../../lib/util/helpers/dist/index.js";
|
|
3
3
|
import "../../lib/ui/uikit/dist/index.js";
|
|
4
|
-
import { getRawPlatformaInstance as
|
|
5
|
-
import { useSequenceColumnsOptions as
|
|
6
|
-
import { runMigrations as
|
|
7
|
-
import
|
|
8
|
-
import { defaultSettings as
|
|
9
|
-
import
|
|
4
|
+
import { getRawPlatformaInstance as W } from "../../sdk/model/dist/index.js";
|
|
5
|
+
import { useSequenceColumnsOptions as X, useLabelColumnsOptions as Y, useMarkupColumnsOptions as Z, useMultipleAlignmentData as ee, sequenceLimit as A } from "./data.js";
|
|
6
|
+
import { runMigrations as te } from "./migrations.js";
|
|
7
|
+
import oe from "./MultiSequenceAlignmentView.vue.js";
|
|
8
|
+
import { defaultSettings as B } from "./settings.js";
|
|
9
|
+
import ne from "./Toolbar.vue.js";
|
|
10
10
|
import P from "../../lib/ui/uikit/dist/components/PlAlert/PlAlert.vue.js";
|
|
11
|
-
import
|
|
12
|
-
const
|
|
11
|
+
import se from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
|
|
12
|
+
const he = /* @__PURE__ */ U({
|
|
13
13
|
__name: "PlMultiSequenceAlignment",
|
|
14
|
-
props: /* @__PURE__ */
|
|
14
|
+
props: /* @__PURE__ */ J({
|
|
15
15
|
pFrame: {},
|
|
16
16
|
sequenceColumnPredicate: { type: Function },
|
|
17
17
|
selection: {}
|
|
@@ -20,30 +20,30 @@ const ge = /* @__PURE__ */ L({
|
|
|
20
20
|
modelModifiers: {}
|
|
21
21
|
}),
|
|
22
22
|
emits: ["update:modelValue"],
|
|
23
|
-
setup(
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
setup(k) {
|
|
24
|
+
const C = G(k, "modelValue");
|
|
25
|
+
H(() => {
|
|
26
|
+
te(C);
|
|
27
27
|
});
|
|
28
|
-
const o =
|
|
29
|
-
...
|
|
30
|
-
}),
|
|
31
|
-
pFrame:
|
|
32
|
-
sequenceColumnPredicate:
|
|
33
|
-
}))),
|
|
34
|
-
pFrame:
|
|
28
|
+
const o = h({
|
|
29
|
+
...B
|
|
30
|
+
}), u = k, f = h(X(() => ({
|
|
31
|
+
pFrame: u.pFrame,
|
|
32
|
+
sequenceColumnPredicate: u.sequenceColumnPredicate
|
|
33
|
+
}))), g = h(Y(() => ({
|
|
34
|
+
pFrame: u.pFrame,
|
|
35
35
|
sequenceColumnIds: o.sequenceColumnIds
|
|
36
|
-
}))),
|
|
37
|
-
pFrame:
|
|
36
|
+
}))), y = h(Z(() => ({
|
|
37
|
+
pFrame: u.pFrame,
|
|
38
38
|
sequenceColumnIds: o.sequenceColumnIds
|
|
39
|
-
}))), l =
|
|
40
|
-
|
|
39
|
+
}))), l = h(ee(() => ({
|
|
40
|
+
pFrame: u.pFrame,
|
|
41
41
|
sequenceColumnIds: o.sequenceColumnIds,
|
|
42
42
|
labelColumnIds: o.labelColumnIds,
|
|
43
|
-
selection:
|
|
43
|
+
selection: u.selection,
|
|
44
44
|
colorScheme: o.colorScheme,
|
|
45
45
|
alignmentParams: o.alignmentParams
|
|
46
|
-
}))),
|
|
46
|
+
}))), I = new Intl.NumberFormat("en").format, D = R(
|
|
47
47
|
() => [
|
|
48
48
|
{
|
|
49
49
|
label: "Chemical Properties",
|
|
@@ -53,7 +53,7 @@ const ge = /* @__PURE__ */ L({
|
|
|
53
53
|
label: "No Color",
|
|
54
54
|
value: { type: "no-color" }
|
|
55
55
|
},
|
|
56
|
-
...(
|
|
56
|
+
...(y.data ?? []).map(({ label: t, value: n }) => ({
|
|
57
57
|
label: t,
|
|
58
58
|
value: {
|
|
59
59
|
type: "markup",
|
|
@@ -61,82 +61,84 @@ const ge = /* @__PURE__ */ L({
|
|
|
61
61
|
}
|
|
62
62
|
}))
|
|
63
63
|
]
|
|
64
|
-
),
|
|
65
|
-
() =>
|
|
64
|
+
), x = R(
|
|
65
|
+
() => f.error ?? g.error ?? y.error ?? l.error
|
|
66
66
|
);
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
Object.entries({ ...
|
|
67
|
+
function F(t) {
|
|
68
|
+
C.value = Object.fromEntries(
|
|
69
|
+
Object.entries({ ...C.value, ...t }).filter(([n, e]) => e !== void 0)
|
|
70
70
|
);
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
L(() => {
|
|
73
73
|
var n, e;
|
|
74
74
|
const t = Object.fromEntries(
|
|
75
75
|
Object.entries({
|
|
76
|
-
...
|
|
77
|
-
sequenceColumnIds: (n =
|
|
78
|
-
labelColumnIds: (e =
|
|
79
|
-
...
|
|
76
|
+
...B,
|
|
77
|
+
sequenceColumnIds: (n = f.data) == null ? void 0 : n.defaults,
|
|
78
|
+
labelColumnIds: (e = g.data) == null ? void 0 : e.defaults,
|
|
79
|
+
...C.value
|
|
80
80
|
}).filter(
|
|
81
|
-
([
|
|
82
|
-
o[
|
|
81
|
+
([s, r]) => !v(
|
|
82
|
+
o[s],
|
|
83
83
|
r
|
|
84
84
|
)
|
|
85
85
|
)
|
|
86
86
|
);
|
|
87
87
|
Object.assign(o, t);
|
|
88
|
-
}),
|
|
89
|
-
var e,
|
|
88
|
+
}), L(() => {
|
|
89
|
+
var e, s, r;
|
|
90
90
|
const t = [];
|
|
91
|
-
(e = o.sequenceColumnIds) != null && e.some(
|
|
92
|
-
(
|
|
93
|
-
var
|
|
94
|
-
return
|
|
95
|
-
({ value:
|
|
96
|
-
)
|
|
91
|
+
!f.isLoading && ((e = o.sequenceColumnIds) != null && e.some(
|
|
92
|
+
(a) => {
|
|
93
|
+
var i;
|
|
94
|
+
return (((i = f.data) == null ? void 0 : i.options) ?? []).every(
|
|
95
|
+
({ value: c }) => !v(c, a)
|
|
96
|
+
);
|
|
97
97
|
}
|
|
98
|
-
) && t.push("sequenceColumnIds"), (
|
|
99
|
-
(
|
|
100
|
-
var
|
|
101
|
-
return
|
|
102
|
-
({ value:
|
|
103
|
-
)
|
|
98
|
+
)) && t.push("sequenceColumnIds"), !g.isLoading && ((s = o.labelColumnIds) != null && s.some(
|
|
99
|
+
(a) => {
|
|
100
|
+
var i;
|
|
101
|
+
return (((i = g.data) == null ? void 0 : i.options) ?? []).every(
|
|
102
|
+
({ value: c }) => !v(c, a)
|
|
103
|
+
);
|
|
104
104
|
}
|
|
105
|
-
) && t.push("labelColumnIds");
|
|
105
|
+
)) && t.push("labelColumnIds");
|
|
106
106
|
const n = ((r = o.colorScheme) == null ? void 0 : r.type) === "markup" ? o.colorScheme.columnId : void 0;
|
|
107
|
-
n &&
|
|
108
|
-
({ value:
|
|
109
|
-
)
|
|
110
|
-
t.map((
|
|
107
|
+
!y.isLoading && n && (y.data ?? []).every(
|
|
108
|
+
({ value: a }) => !v(a, n)
|
|
109
|
+
) && t.push("colorScheme"), t.length && F(Object.fromEntries(
|
|
110
|
+
t.map((a) => [a, void 0])
|
|
111
111
|
));
|
|
112
112
|
});
|
|
113
|
-
const
|
|
114
|
-
async function
|
|
115
|
-
var
|
|
116
|
-
const t = (
|
|
113
|
+
const _ = K("msa");
|
|
114
|
+
async function $() {
|
|
115
|
+
var O, E, M;
|
|
116
|
+
const t = (E = (O = W()) == null ? void 0 : O.lsDriver) == null ? void 0 : E.exportToPdf;
|
|
117
117
|
if (!t)
|
|
118
118
|
return console.error(
|
|
119
119
|
"API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
|
|
120
120
|
);
|
|
121
|
-
const n = (M =
|
|
121
|
+
const n = (M = _.value) == null ? void 0 : M.rootEl;
|
|
122
122
|
if (!n)
|
|
123
123
|
throw new Error("MSA element is not available.");
|
|
124
124
|
const e = document.createElement("div");
|
|
125
125
|
e.id = `print-target-${crypto.randomUUID()}`;
|
|
126
|
-
const
|
|
127
|
-
document.adoptedStyleSheets.push(
|
|
126
|
+
const s = new CSSStyleSheet();
|
|
127
|
+
document.adoptedStyleSheets.push(s), s.insertRule(`
|
|
128
128
|
@media screen {
|
|
129
129
|
#${e.id} {
|
|
130
130
|
visibility: hidden;
|
|
131
131
|
position: fixed;
|
|
132
132
|
}
|
|
133
|
-
}`)
|
|
134
|
-
const
|
|
135
|
-
|
|
133
|
+
}`);
|
|
134
|
+
const r = n.cloneNode(!0);
|
|
135
|
+
r.dataset.prePrint = "", e.replaceChildren(r), document.body.appendChild(e);
|
|
136
|
+
const { height: a, width: i } = e.getBoundingClientRect(), c = CSS.cm(1), z = [i, a].map((d) => CSS.px(d).add(c.mul(2))).join(" ");
|
|
137
|
+
s.insertRule(`
|
|
136
138
|
@media print {
|
|
137
139
|
@page {
|
|
138
|
-
size: ${
|
|
139
|
-
margin: ${
|
|
140
|
+
size: ${z};
|
|
141
|
+
margin: ${c};
|
|
140
142
|
}
|
|
141
143
|
body > :not(#${e.id}) {
|
|
142
144
|
display: none;
|
|
@@ -144,63 +146,63 @@ const ge = /* @__PURE__ */ L({
|
|
|
144
146
|
}`);
|
|
145
147
|
try {
|
|
146
148
|
await t();
|
|
147
|
-
} catch (
|
|
148
|
-
console.error(
|
|
149
|
+
} catch (d) {
|
|
150
|
+
console.error(d);
|
|
149
151
|
} finally {
|
|
150
152
|
document.body.removeChild(e);
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
+
const d = document.adoptedStyleSheets.indexOf(s);
|
|
154
|
+
d >= 0 && document.adoptedStyleSheets.splice(d, 1);
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
return (t, n) => {
|
|
156
|
-
var e,
|
|
157
|
-
return
|
|
158
|
-
|
|
158
|
+
var e, s, r, a;
|
|
159
|
+
return p(), N(T, null, [
|
|
160
|
+
V(ne, {
|
|
159
161
|
settings: o,
|
|
160
|
-
"sequence-column-options": (e =
|
|
161
|
-
"label-column-options": (
|
|
162
|
-
"color-scheme-options":
|
|
163
|
-
onUpdateSettings:
|
|
164
|
-
onExport:
|
|
162
|
+
"sequence-column-options": (e = f.data) == null ? void 0 : e.options,
|
|
163
|
+
"label-column-options": (s = g.data) == null ? void 0 : s.options,
|
|
164
|
+
"color-scheme-options": D.value,
|
|
165
|
+
onUpdateSettings: F,
|
|
166
|
+
onExport: $
|
|
165
167
|
}, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
|
|
166
|
-
|
|
168
|
+
x.value ? (p(), S(m(P), {
|
|
167
169
|
key: 0,
|
|
168
170
|
type: "error"
|
|
169
171
|
}, {
|
|
170
172
|
default: b(() => [
|
|
171
|
-
|
|
173
|
+
w(q(x.value), 1)
|
|
172
174
|
]),
|
|
173
175
|
_: 1
|
|
174
|
-
})) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (
|
|
176
|
+
})) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (p(), S(m(P), {
|
|
175
177
|
key: 1,
|
|
176
178
|
type: "warn",
|
|
177
179
|
icon: ""
|
|
178
180
|
}, {
|
|
179
181
|
default: b(() => n[0] || (n[0] = [
|
|
180
|
-
|
|
182
|
+
w(" Please select at least one sequence column and two or more rows to run alignment ")
|
|
181
183
|
])),
|
|
182
184
|
_: 1
|
|
183
|
-
})) : (
|
|
184
|
-
(
|
|
185
|
+
})) : (p(), N(T, { key: 2 }, [
|
|
186
|
+
(a = l.data) != null && a.exceedsLimit ? (p(), S(m(P), {
|
|
185
187
|
key: 0,
|
|
186
188
|
type: "warn",
|
|
187
189
|
icon: "",
|
|
188
190
|
label: "Visualization is limited"
|
|
189
191
|
}, {
|
|
190
192
|
default: b(() => [
|
|
191
|
-
|
|
193
|
+
w(" MSA visualization supports " + q(m(I)(2)) + " to " + q(m(I)(m(A))) + " sequences. Only the first " + q(m(I)(m(A))) + " will be displayed. ", 1)
|
|
192
194
|
]),
|
|
193
195
|
_: 1
|
|
194
|
-
})) :
|
|
195
|
-
|
|
196
|
+
})) : j("", !0),
|
|
197
|
+
V(m(se), {
|
|
196
198
|
type: "transparent",
|
|
197
|
-
class:
|
|
199
|
+
class: Q(t.$style.splash),
|
|
198
200
|
loading: l.isLoading
|
|
199
201
|
}, {
|
|
200
202
|
default: b(() => {
|
|
201
|
-
var
|
|
203
|
+
var i;
|
|
202
204
|
return [
|
|
203
|
-
(
|
|
205
|
+
(i = l.data) != null && i.sequences.length ? (p(), S(oe, {
|
|
204
206
|
key: 0,
|
|
205
207
|
ref: "msa",
|
|
206
208
|
sequences: l.data.sequences,
|
|
@@ -209,7 +211,7 @@ const ge = /* @__PURE__ */ L({
|
|
|
209
211
|
"residue-counts": l.data.residueCounts,
|
|
210
212
|
"highlight-image": l.data.highlightImage,
|
|
211
213
|
widgets: o.widgets
|
|
212
|
-
}, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) :
|
|
214
|
+
}, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : j("", !0)
|
|
213
215
|
];
|
|
214
216
|
}),
|
|
215
217
|
_: 1
|
|
@@ -220,6 +222,6 @@ const ge = /* @__PURE__ */ L({
|
|
|
220
222
|
}
|
|
221
223
|
});
|
|
222
224
|
export {
|
|
223
|
-
|
|
225
|
+
he as default
|
|
224
226
|
};
|
|
225
227
|
//# sourceMappingURL=PlMultiSequenceAlignment.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlAlert,\n PlSplash,\n} from '@milaboratories/uikit';\nimport {\n getRawPlatformaInstance,\n type PColumnPredicate,\n type PFrameHandle,\n type PlMultiSequenceAlignmentColorSchemeOption,\n type PlMultiSequenceAlignmentModel,\n type PlMultiSequenceAlignmentSettings,\n type PlSelectionModel,\n} from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n reactive,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pframe: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n settings.sequenceColumnIds?.some((id) =>\n !sequenceColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n settings.labelColumnIds?.some((id) =>\n !labelColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n markupColumnId\n && !markupColumns.data?.some(\n ({ value }) => isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n printTarget.replaceChildren(msaRoot.cloneNode(true));\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","_d","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","height","width","margin","pageSize","index"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmCM,UAAAA,IAAQC,EAA0CC,GAAA,YAAgB;AAExE,IAAAC,EAAc,MAAM;AAClB,MAAAC,GAAcJ,CAAK;AAAA,IAAA,CACpB;AAED,UAAMK,IAAWC,EAA2C;AAAA,MAC1D,GAAGC;AAAA,IAAA,CACJ,GAEKC,IAAQN,GAmBRO,IAAkBH,EAASI,EAA0B,OAAO;AAAA,MAChE,QAAQF,EAAM;AAAA,MACd,yBAAyBA,EAAM;AAAA,MAC/B,CAAC,GAEGG,IAAeL,EAASM,EAAuB,OAAO;AAAA,MAC1D,QAAQJ,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,CAAC,GAEGQ,IAAgBP,EAASQ,EAAwB,OAAO;AAAA,MAC5D,QAAQN,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,CAAC,GAEGU,IAAwBT,EAASU,EAAyB,OAAO;AAAA,MACrE,QAAQR,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,gBAAgBA,EAAS;AAAA,MACzB,WAAWG,EAAM;AAAA,MACjB,aAAaH,EAAS;AAAA,MACtB,iBAAiBA,EAAS;AAAA,MAC1B,CAAC,GAEGY,IAAe,IAAI,KAAK,aAAa,IAAI,EAAE,QAE3CC,IAAqBC;AAAA,MAGzB,MAAM;AAAA,QACJ;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,MAAM,sBAAsB;AAAA,QACvC;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,MAAM,WAAW;AAAA,QAC5B;AAAA,QACA,IAAIN,EAAc,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,OAAAO,GAAO,OAAAC,SAAa;AAAA,UACvD,OAAAD;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAUC;AAAA,UAAA;AAAA,QACZ,EACA;AAAA,MAAA;AAAA,IAEN,GAEMC,IAAQH;AAAA,MAAS,MACrBV,EAAgB,SACbE,EAAa,SACbE,EAAc,SACdE,EAAsB;AAAA,IAC3B;AAEA,aAASQ,EACPC,GACA;AACA,MAAAxB,EAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,EAAE,GAAGA,EAAM,OAAO,GAAGwB,EAAA,CAAe,EAChD,OAAO,CAAC,CAACC,GAAMJ,CAAK,MAAMA,MAAU,MAAS;AAAA,MAClD;AAAA,IAAA;AAGF,IAAAK,EAAY,MAAM;;AAChB,YAAMC,IAAmD,OAAO;AAAA,QAC9D,OAAO,QAAQ;AAAA,UACb,GAAGpB;AAAA,UACH,oBAAmBqB,IAAAnB,EAAgB,SAAhB,gBAAAmB,EAAsB;AAAA,UACzC,iBAAgBC,IAAAlB,EAAa,SAAb,gBAAAkB,EAAmB;AAAA,UACnC,GAAG7B,EAAM;AAAA,QACV,CAAA,EAAE;AAAA,UAAO,CAAC,CAAC8B,GAAKT,CAAK,MACpB,CAACU;AAAAA,YACC1B,EAASyB,CAA6C;AAAA,YACtDT;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AACO,aAAA,OAAOhB,GAAUsB,CAAK;AAAA,IAAA,CAC9B,GAGDD,EAAY,MAAM;;AAChB,YAAMM,IAA8D,CAAC;AACrE,OACEJ,IAAAvB,EAAS,sBAAT,QAAAuB,EAA4B;AAAA,QAAK,CAACK,MAAA;;AAChC,oBAACL,IAAAnB,EAAgB,SAAhB,QAAAmB,EAAsB,QAAQ;AAAA,YAC7B,CAAC,EAAE,OAAAP,EAAA,MAAYU,EAAYV,GAAOY,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,mBAAmB,IAGxCH,IAAAxB,EAAS,mBAAT,QAAAwB,EAAyB;AAAA,QAAK,CAACI,MAAA;;AAC7B,oBAACL,IAAAjB,EAAa,SAAb,QAAAiB,EAAmB,QAAQ;AAAA,YAC1B,CAAC,EAAE,OAAAP,EAAA,MAAYU,EAAYV,GAAOY,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,gBAAgB;AAGvC,YAAME,MAAiBC,IAAA9B,EAAS,gBAAT,gBAAA8B,EAAsB,UAAS,WAClD9B,EAAS,YAAY,WACrB;AAGF,MAAA6B,KACG,GAACE,IAAAvB,EAAc,SAAd,QAAAuB,EAAoB;AAAA,QACtB,CAAC,EAAE,OAAAf,EAAA,MAAYU,EAAYV,GAAOa,CAAc;AAAA,YAGlDF,EAAgB,KAAK,aAAa,GAEhCA,EAAgB,UAClBT,EAAc,OAAO;AAAA,QACnBS,EAAgB,IAAI,CAACF,MAAQ,CAACA,GAAK,MAAS,CAAC;AAAA,MAAA,CAC9C;AAAA,IACH,CACD;AAEK,UAAAO,IAAQC,EAAe,KAAK;AAElC,mBAAeC,IAAY;;AACnB,YAAAC,KAAcC,KAAAA,IAAAA,QAAAA,gBAAAA,EAA2B,aAA3BA,gBAAAA,EAChB;AACJ,UAAI,CAACD;AACH,eAAO,QAAQ;AAAA,UACb;AAAA,QACF;AAEI,YAAAE,KAAUP,IAAAE,EAAM,UAAN,gBAAAF,EAAa;AAC7B,UAAI,CAACO;AACG,cAAA,IAAI,MAAM,+BAA+B;AAE3C,YAAAC,IAAc,SAAS,cAAc,KAAK;AAChD,MAAAA,EAAY,KAAK,gBAAgB,OAAO,WAAY,CAAA;AAC9C,YAAAC,IAAkB,IAAI,cAAc;AACjC,eAAA,mBAAmB,KAAKA,CAAe,GAChDA,EAAgB,WAAW;AAAA;AAAA,KAExBD,EAAY,EAAE;AAAA;AAAA;AAAA;AAAA,EAIjB,GACAA,EAAY,gBAAgBD,EAAQ,UAAU,EAAI,CAAC,GAC1C,SAAA,KAAK,YAAYC,CAAW;AACrC,YAAM,EAAE,QAAAE,GAAQ,OAAAC,MAAUH,EAAY,sBAAsB,GACtDI,IAAS,IAAI,GAAG,CAAC,GACjBC,IAAW,CAACF,GAAOD,CAAM,EAC5B,IAAI,CAACxB,MAAU,IAAI,GAAGA,CAAK,EAAE,IAAI0B,EAAO,IAAI,CAAC,CAAC,CAAC,EAC/C,KAAK,GAAG;AACX,MAAAH,EAAgB,WAAW;AAAA;AAAA;AAAA,YAGjBI,CAAQ;AAAA,cACND,CAAM;AAAA;AAAA,iBAEHJ,EAAY,EAAE;AAAA;AAAA;AAAA,EAG7B;AACI,UAAA;AACF,cAAMH,EAAY;AAAA,eACXlB,GAAO;AACd,gBAAQ,MAAMA,CAAK;AAAA,MAAA,UACnB;AACS,iBAAA,KAAK,YAAYqB,CAAW;AACrC,cAAMM,IAAQ,SAAS,mBAAmB,QAAQL,CAAe;AACjE,QAAIK,KAAS,KACF,SAAA,mBAAmB,OAAOA,GAAO,CAAC;AAAA,MAC7C;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlAlert,\n PlSplash,\n} from '@milaboratories/uikit';\nimport {\n getRawPlatformaInstance,\n type PColumnPredicate,\n type PFrameHandle,\n type PlMultiSequenceAlignmentColorSchemeOption,\n type PlMultiSequenceAlignmentModel,\n type PlMultiSequenceAlignmentSettings,\n type PlSelectionModel,\n} from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n reactive,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n !sequenceColumns.isLoading\n && settings.sequenceColumnIds?.some((id) =>\n (sequenceColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n !labelColumns.isLoading\n && settings.labelColumnIds?.some((id) =>\n (labelColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n !markupColumns.isLoading\n && markupColumnId\n && (markupColumns.data ?? []).every(\n ({ value }) => !isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n const msaClone = msaRoot.cloneNode(true) as HTMLElement;\n msaClone.dataset.prePrint = '';\n printTarget.replaceChildren(msaClone);\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","msaClone","height","width","margin","pageSize","index"],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ export declare const useMarkupColumnsOptions: (paramsGetter: () => {
|
|
|
27
27
|
error: import('vue').Ref<Error | undefined, Error | undefined>;
|
|
28
28
|
};
|
|
29
29
|
export declare const useMultipleAlignmentData: (paramsGetter: () => {
|
|
30
|
-
|
|
30
|
+
pFrame: PFrameHandle | undefined;
|
|
31
31
|
sequenceColumnIds: PObjectId[] | undefined;
|
|
32
32
|
labelColumnIds: PTableColumnId[] | undefined;
|
|
33
33
|
selection: PlSelectionModel | undefined;
|