@milaboratories/multi-sequence-alignment 1.45.0
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 +52 -0
- package/.turbo/turbo-lint.log +12 -0
- package/.turbo/turbo-test.log +13 -0
- package/.turbo/turbo-type-check.log +6 -0
- package/dist/Consensus.vue.d.ts +9 -0
- package/dist/Consensus.vue.js +10 -0
- package/dist/Consensus.vue.js.map +1 -0
- package/dist/Consensus.vue2.js +122 -0
- package/dist/Consensus.vue2.js.map +1 -0
- package/dist/Consensus.vue3.js +9 -0
- package/dist/Consensus.vue3.js.map +1 -0
- package/dist/Legend.vue.d.ts +6 -0
- package/dist/Legend.vue.js +10 -0
- package/dist/Legend.vue.js.map +1 -0
- package/dist/Legend.vue2.js +28 -0
- package/dist/Legend.vue2.js.map +1 -0
- package/dist/Legend.vue3.js +13 -0
- package/dist/Legend.vue3.js.map +1 -0
- package/dist/MultiSequenceAlignmentView.vue.d.ts +25 -0
- package/dist/MultiSequenceAlignmentView.vue.js +10 -0
- package/dist/MultiSequenceAlignmentView.vue.js.map +1 -0
- package/dist/MultiSequenceAlignmentView.vue2.js +138 -0
- package/dist/MultiSequenceAlignmentView.vue2.js.map +1 -0
- package/dist/MultiSequenceAlignmentView.vue3.js +31 -0
- package/dist/MultiSequenceAlignmentView.vue3.js.map +1 -0
- package/dist/PhylogeneticTree.vue.d.ts +8 -0
- package/dist/PhylogeneticTree.vue.js +10 -0
- package/dist/PhylogeneticTree.vue.js.map +1 -0
- package/dist/PhylogeneticTree.vue2.js +77 -0
- package/dist/PhylogeneticTree.vue2.js.map +1 -0
- package/dist/PhylogeneticTree.vue3.js +9 -0
- package/dist/PhylogeneticTree.vue3.js.map +1 -0
- package/dist/PlMultiSequenceAlignment.vue.d.ts +71 -0
- package/dist/PlMultiSequenceAlignment.vue.js +10 -0
- package/dist/PlMultiSequenceAlignment.vue.js.map +1 -0
- package/dist/PlMultiSequenceAlignment.vue2.js +224 -0
- package/dist/PlMultiSequenceAlignment.vue2.js.map +1 -0
- package/dist/PlMultiSequenceAlignment.vue3.js +9 -0
- package/dist/PlMultiSequenceAlignment.vue3.js.map +1 -0
- package/dist/SeqLogo.vue.d.ts +8 -0
- package/dist/SeqLogo.vue.js +10 -0
- package/dist/SeqLogo.vue.js.map +1 -0
- package/dist/SeqLogo.vue2.js +127 -0
- package/dist/SeqLogo.vue2.js.map +1 -0
- package/dist/SeqLogo.vue3.js +9 -0
- package/dist/SeqLogo.vue3.js.map +1 -0
- package/dist/Toolbar.vue.d.ts +16 -0
- package/dist/Toolbar.vue.js +10 -0
- package/dist/Toolbar.vue.js.map +1 -0
- package/dist/Toolbar.vue2.js +228 -0
- package/dist/Toolbar.vue2.js.map +1 -0
- package/dist/Toolbar.vue3.js +19 -0
- package/dist/Toolbar.vue3.js.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +6 -0
- package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +1 -0
- package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +5 -0
- package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +1 -0
- package/dist/cell-size.d.ts +4 -0
- package/dist/cell-size.js +8 -0
- package/dist/cell-size.js.map +1 -0
- package/dist/chemical-properties.d.ts +44 -0
- package/dist/chemical-properties.js +132 -0
- package/dist/chemical-properties.js.map +1 -0
- package/dist/data.d.ts +61 -0
- package/dist/data.js +370 -0
- package/dist/data.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/markup.d.ts +16 -0
- package/dist/markup.js +84 -0
- package/dist/markup.js.map +1 -0
- package/dist/migrations.d.ts +3 -0
- package/dist/migrations.js +24 -0
- package/dist/migrations.js.map +1 -0
- package/dist/multi-sequence-alignment.worker.d.ts +6 -0
- package/dist/node_modules/.pnpm/@milaboratories_helpers@1.12.0/node_modules/@milaboratories/helpers/dist/objects.js +33 -0
- package/dist/node_modules/.pnpm/@milaboratories_helpers@1.12.0/node_modules/@milaboratories/helpers/dist/objects.js.map +1 -0
- package/dist/phylogenetic-tree.worker.d.ts +7 -0
- package/dist/residue-counts.d.ts +2 -0
- package/dist/residue-counts.js +13 -0
- package/dist/residue-counts.js.map +1 -0
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +9 -0
- package/dist/settings.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/useMiPlots.d.ts +4 -0
- package/dist/useMiPlots.js +19 -0
- package/dist/useMiPlots.js.map +1 -0
- package/eslint.config.js +66 -0
- package/package.json +45 -0
- package/src/Consensus.vue +165 -0
- package/src/Legend.vue +44 -0
- package/src/MultiSequenceAlignmentView.vue +299 -0
- package/src/PhylogeneticTree.vue +110 -0
- package/src/PlMultiSequenceAlignment.vue +314 -0
- package/src/README.md +216 -0
- package/src/SeqLogo.vue +166 -0
- package/src/Toolbar.vue +228 -0
- package/src/cell-size.ts +4 -0
- package/src/chemical-properties.ts +199 -0
- package/src/data.ts +661 -0
- package/src/index.ts +2 -0
- package/src/markup.ts +141 -0
- package/src/migrations.ts +46 -0
- package/src/multi-sequence-alignment.worker.ts +54 -0
- package/src/phylogenetic-tree.worker.ts +89 -0
- package/src/residue-counts.ts +124 -0
- package/src/settings.ts +7 -0
- package/src/types.ts +3 -0
- package/src/useMiPlots.ts +23 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { defineComponent as v, useCssModule as g, useTemplateRef as y, computed as w, shallowRef as k, watchEffect as _, onBeforeUnmount as I, createBlock as x, createElementBlock as C, unref as o, openBlock as p, withCtx as L, createTextVNode as T, toDisplayString as B, normalizeClass as E } from "vue";
|
|
2
|
+
import { PlAlert as P } from "@milaboratories/uikit";
|
|
3
|
+
import { cellSize as d } from "./cell-size.js";
|
|
4
|
+
import { useMiPlots as b } from "./useMiPlots.js";
|
|
5
|
+
const N = /* @__PURE__ */ v({
|
|
6
|
+
__name: "PhylogeneticTree",
|
|
7
|
+
props: {
|
|
8
|
+
tree: {}
|
|
9
|
+
},
|
|
10
|
+
setup(m) {
|
|
11
|
+
const f = m, h = g(), l = y("plotEl"), a = {
|
|
12
|
+
type: "dendro",
|
|
13
|
+
title: { show: !1, name: "" },
|
|
14
|
+
size: {
|
|
15
|
+
width: 149,
|
|
16
|
+
minCellHeight: d.block,
|
|
17
|
+
maxCellHeight: d.block,
|
|
18
|
+
marginLeft: 1,
|
|
19
|
+
marginRight: 0,
|
|
20
|
+
marginTop: 0,
|
|
21
|
+
marginBottom: 0
|
|
22
|
+
},
|
|
23
|
+
mode: "normal",
|
|
24
|
+
leavesMode: "alignLeavesToLine",
|
|
25
|
+
leavesOrder: "indexAsc",
|
|
26
|
+
legend: { show: !1 },
|
|
27
|
+
id: {
|
|
28
|
+
type: "column",
|
|
29
|
+
value: "nodeId"
|
|
30
|
+
},
|
|
31
|
+
parentId: {
|
|
32
|
+
type: "column",
|
|
33
|
+
value: "parentId"
|
|
34
|
+
},
|
|
35
|
+
height: {
|
|
36
|
+
type: "column",
|
|
37
|
+
value: "distance"
|
|
38
|
+
},
|
|
39
|
+
showNodes: !1,
|
|
40
|
+
showNodesLabels: !1,
|
|
41
|
+
showLeavesLabels: !1,
|
|
42
|
+
rootPosition: "left"
|
|
43
|
+
}, r = w(() => {
|
|
44
|
+
const e = [], n = [], u = [];
|
|
45
|
+
for (const s of f.tree)
|
|
46
|
+
e.push(s.id), n.push(s.parentId ?? null), u.push(s.length ?? 0);
|
|
47
|
+
return {
|
|
48
|
+
type: "columns",
|
|
49
|
+
id: `phylogeneticTree-${crypto.randomUUID()}`,
|
|
50
|
+
values: { nodeId: e, parentId: n, distance: u }
|
|
51
|
+
};
|
|
52
|
+
}), { miplots: i, error: c } = b(), t = k();
|
|
53
|
+
return _(async () => {
|
|
54
|
+
!l.value || !i.value || (t.value ? t.value.updateSettingsAndData(r.value, a) : (t.value = i.value.newPlot(r.value, a), t.value.mount(l.value)));
|
|
55
|
+
}), I(() => {
|
|
56
|
+
var e;
|
|
57
|
+
(e = t.value) == null || e.unmount();
|
|
58
|
+
}), (e, n) => o(c) ? (p(), x(o(P), {
|
|
59
|
+
key: 0,
|
|
60
|
+
type: "error"
|
|
61
|
+
}, {
|
|
62
|
+
default: L(() => [
|
|
63
|
+
T(B(o(c).message), 1)
|
|
64
|
+
]),
|
|
65
|
+
_: 1
|
|
66
|
+
})) : (p(), C("div", {
|
|
67
|
+
key: 1,
|
|
68
|
+
ref_key: "plotEl",
|
|
69
|
+
ref: l,
|
|
70
|
+
class: E(o(h).container)
|
|
71
|
+
}, null, 2));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
export {
|
|
75
|
+
N as default
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=PhylogeneticTree.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhylogeneticTree.vue2.js","sources":["../src/PhylogeneticTree.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n Settings,\n} from '@milaboratories/miplots4';\nimport { PlAlert } from '@milaboratories/uikit';\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useCssModule,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport { cellSize } from './cell-size';\nimport type { TreeNodeData } from './phylogenetic-tree.worker';\nimport { useMiPlots } from './useMiPlots';\n\nconst props = defineProps<{\n tree: TreeNodeData[];\n}>();\n\nconst classes = useCssModule();\n\nconst plotEl = useTemplateRef('plotEl');\n\nconst settings: Settings = {\n type: 'dendro',\n title: { show: false, name: '' },\n size: {\n width: 149,\n minCellHeight: cellSize.block,\n maxCellHeight: cellSize.block,\n marginLeft: 1,\n marginRight: 0,\n marginTop: 0,\n marginBottom: 0,\n },\n mode: 'normal',\n leavesMode: 'alignLeavesToLine',\n leavesOrder: 'indexAsc',\n legend: { show: false },\n id: {\n type: 'column',\n value: 'nodeId',\n },\n parentId: {\n type: 'column',\n value: 'parentId',\n },\n height: {\n type: 'column',\n value: 'distance',\n },\n showNodes: false,\n showNodesLabels: false,\n showLeavesLabels: false,\n rootPosition: 'left',\n};\n\nconst data = computed<DataByColumns>(() => {\n const nodeId: number[] = [];\n const parentId: (number | null)[] = [];\n const distance: number[] = [];\n for (const node of props.tree) {\n nodeId.push(node.id);\n parentId.push(node.parentId ?? null);\n distance.push(node.length ?? 0);\n }\n return ({\n type: 'columns',\n id: `phylogeneticTree-${crypto.randomUUID()}`,\n values: { nodeId, parentId, distance },\n });\n});\n\nconst { miplots, error } = useMiPlots();\n\nconst plot = shallowRef<ChartInterface>();\n\nwatchEffect(async () => {\n if (!plotEl.value || !miplots.value) return;\n if (!plot.value) {\n plot.value = miplots.value.newPlot(data.value, settings);\n plot.value.mount(plotEl.value);\n } else {\n plot.value.updateSettingsAndData(data.value, settings);\n }\n});\n\nonBeforeUnmount(() => {\n plot.value?.unmount();\n});\n</script>\n\n<template>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error.message }}\n </PlAlert>\n <div v-else ref=\"plotEl\" :class=\"classes.container\" />\n</template>\n\n<style module>\n.container {\n svg {\n display: block;\n }\n}\n</style>\n"],"names":["props","__props","classes","useCssModule","plotEl","useTemplateRef","settings","cellSize","data","computed","nodeId","parentId","distance","node","miplots","error","useMiPlots","plot","shallowRef","watchEffect","onBeforeUnmount","_a","_unref","_createBlock","PlAlert","_createTextVNode","_toDisplayString","_createElementBlock","_normalizeClass"],"mappings":";;;;;;;;;;AAmBA,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAASC,EAAe,QAAQ,GAEhCC,IAAqB;AAAA,MACzB,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,IAAO,MAAM,GAAA;AAAA,MAC5B,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,eAAeC,EAAS;AAAA,QACxB,eAAeA,EAAS;AAAA,QACxB,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,WAAW;AAAA,QACX,cAAc;AAAA,MAAA;AAAA,MAEhB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,QAAQ,EAAE,MAAM,GAAA;AAAA,MAChB,IAAI;AAAA,QACF,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAAA,GAGVC,IAAOC,EAAwB,MAAM;AACzC,YAAMC,IAAmB,CAAA,GACnBC,IAA8B,CAAA,GAC9BC,IAAqB,CAAA;AAC3B,iBAAWC,KAAQb,EAAM;AACvB,QAAAU,EAAO,KAAKG,EAAK,EAAE,GACnBF,EAAS,KAAKE,EAAK,YAAY,IAAI,GACnCD,EAAS,KAAKC,EAAK,UAAU,CAAC;AAEhC,aAAQ;AAAA,QACN,MAAM;AAAA,QACN,IAAI,oBAAoB,OAAO,WAAA,CAAY;AAAA,QAC3C,QAAQ,EAAE,QAAAH,GAAQ,UAAAC,GAAU,UAAAC,EAAA;AAAA,MAAS;AAAA,IAEzC,CAAC,GAEK,EAAE,SAAAE,GAAS,OAAAC,EAAA,IAAUC,EAAA,GAErBC,IAAOC,EAAA;AAEb,WAAAC,EAAY,YAAY;AACtB,MAAI,CAACf,EAAO,SAAS,CAACU,EAAQ,UACzBG,EAAK,QAIRA,EAAK,MAAM,sBAAsBT,EAAK,OAAOF,CAAQ,KAHrDW,EAAK,QAAQH,EAAQ,MAAM,QAAQN,EAAK,OAAOF,CAAQ,GACvDW,EAAK,MAAM,MAAMb,EAAO,KAAK;AAAA,IAIjC,CAAC,GAEDgB,EAAgB,MAAM;;AACpB,OAAAC,IAAAJ,EAAK,UAAL,QAAAI,EAAY;AAAA,IACd,CAAC,aAIgBC,EAAAP,CAAA,UAAfQ,EAEUD,EAAAE,CAAA,GAAA;AAAA;MAFY,MAAK;AAAA,IAAA;iBACzB,MAAmB;AAAA,QAAhBC,EAAAC,EAAAJ,EAAAP,CAAA,EAAM,OAAO,GAAA,CAAA;AAAA,MAAA;;gBAElBY,EAAsD,OAAA;AAAA;eAAtC;AAAA,MAAJ,KAAIvB;AAAA,MAAU,OAAKwB,EAAEN,EAAApB,CAAA,EAAQ,SAAS;AAAA,IAAA;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_1uo2b_2 svg{display:block}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
const n = "_container_1uo2b_2", t = {
|
|
3
|
+
container: n
|
|
4
|
+
};
|
|
5
|
+
export {
|
|
6
|
+
n as container,
|
|
7
|
+
t as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=PhylogeneticTree.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhylogeneticTree.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { PColumnPredicate, PFrameHandle, PlMultiSequenceAlignmentModel, PlSelectionModel } from '@platforma-sdk/model';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/**
|
|
4
|
+
* Handle to PFrame created using `createPFrameForGraphs`.
|
|
5
|
+
* Should contain all desired sequence and label columns.
|
|
6
|
+
*/
|
|
7
|
+
readonly pFrame: PFrameHandle | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Return true if column should be shown in sequence columns dropdown.
|
|
10
|
+
* By default, all sequence columns are selected.
|
|
11
|
+
*/
|
|
12
|
+
readonly sequenceColumnPredicate: PColumnPredicate;
|
|
13
|
+
/**
|
|
14
|
+
* Row selection model (from `PlAgDataTableV2` or `GraphMaker`).
|
|
15
|
+
* If not provided or empty, all rows will be considered selected.
|
|
16
|
+
* Warning: should be forwarded as a field of `reactive` object
|
|
17
|
+
*/
|
|
18
|
+
readonly selection?: PlSelectionModel;
|
|
19
|
+
};
|
|
20
|
+
type __VLS_PublicProps = {
|
|
21
|
+
modelValue?: PlMultiSequenceAlignmentModel;
|
|
22
|
+
} & __VLS_Props;
|
|
23
|
+
declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
24
|
+
"update:modelValue": (value: PlMultiSequenceAlignmentModel) => any;
|
|
25
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
26
|
+
"onUpdate:modelValue"?: ((value: PlMultiSequenceAlignmentModel) => any) | undefined;
|
|
27
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
28
|
+
msa: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
29
|
+
sequences: {
|
|
30
|
+
name: string;
|
|
31
|
+
rows: string[];
|
|
32
|
+
residueCounts: import('./types').ResidueCounts;
|
|
33
|
+
highlightImageUrl?: string;
|
|
34
|
+
}[];
|
|
35
|
+
labels: {
|
|
36
|
+
rows: string[];
|
|
37
|
+
}[];
|
|
38
|
+
highlightLegend: import('./types').HighlightLegend | undefined;
|
|
39
|
+
phylogeneticTree: import('./phylogenetic-tree.worker').TreeNodeData[] | undefined;
|
|
40
|
+
widgets: import('@platforma-sdk/model').PlMultiSequenceAlignmentWidget[];
|
|
41
|
+
}> & Readonly<{}>, {
|
|
42
|
+
rootEl: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
|
|
43
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
|
|
44
|
+
rootRef: HTMLDivElement;
|
|
45
|
+
referenceCell: HTMLDivElement;
|
|
46
|
+
corner: HTMLDivElement;
|
|
47
|
+
}, HTMLDivElement, import('vue').ComponentProvideOptions, {
|
|
48
|
+
P: {};
|
|
49
|
+
B: {};
|
|
50
|
+
D: {};
|
|
51
|
+
C: {};
|
|
52
|
+
M: {};
|
|
53
|
+
Defaults: {};
|
|
54
|
+
}, Readonly<{
|
|
55
|
+
sequences: {
|
|
56
|
+
name: string;
|
|
57
|
+
rows: string[];
|
|
58
|
+
residueCounts: import('./types').ResidueCounts;
|
|
59
|
+
highlightImageUrl?: string;
|
|
60
|
+
}[];
|
|
61
|
+
labels: {
|
|
62
|
+
rows: string[];
|
|
63
|
+
}[];
|
|
64
|
+
highlightLegend: import('./types').HighlightLegend | undefined;
|
|
65
|
+
phylogeneticTree: import('./phylogenetic-tree.worker').TreeNodeData[] | undefined;
|
|
66
|
+
widgets: import('@platforma-sdk/model').PlMultiSequenceAlignmentWidget[];
|
|
67
|
+
}> & Readonly<{}>, {
|
|
68
|
+
rootEl: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
|
|
69
|
+
}, {}, {}, {}, {}> | null;
|
|
70
|
+
}, any>;
|
|
71
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import s from "./PlMultiSequenceAlignment.vue2.js";
|
|
2
|
+
import o from "./PlMultiSequenceAlignment.vue3.js";
|
|
3
|
+
import t from "./_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const e = {
|
|
5
|
+
$style: o
|
|
6
|
+
}, c = /* @__PURE__ */ t(s, [["__cssModules", e]]);
|
|
7
|
+
export {
|
|
8
|
+
c as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=PlMultiSequenceAlignment.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlMultiSequenceAlignment.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { defineComponent as J, mergeModels as Q, useModel as G, onBeforeMount as H, reactive as h, useCssModule as K, computed as T, watchEffect as L, useTemplateRef as W, onUnmounted as X, createElementBlock as A, openBlock as p, Fragment as N, createVNode as R, createBlock as S, unref as r, withCtx as b, createTextVNode as w, toDisplayString as v, createCommentVNode as V, normalizeClass as Y } from "vue";
|
|
2
|
+
import { isJsonEqual as q } from "./node_modules/.pnpm/@milaboratories_helpers@1.12.0/node_modules/@milaboratories/helpers/dist/objects.js";
|
|
3
|
+
import { PlAlert as P, PlSplash as Z } from "@milaboratories/uikit";
|
|
4
|
+
import { getRawPlatformaInstance as ee } from "@platforma-sdk/model";
|
|
5
|
+
import { useSequenceColumnsOptions as te, useLabelColumnsOptions as oe, useMarkupColumnsOptions as ne, useMultipleAlignmentData as le, SEQUENCE_LIMIT as _ } from "./data.js";
|
|
6
|
+
import { runMigrations as se } from "./migrations.js";
|
|
7
|
+
import ae from "./MultiSequenceAlignmentView.vue.js";
|
|
8
|
+
import { defaultSettings as j } from "./settings.js";
|
|
9
|
+
import re from "./Toolbar.vue.js";
|
|
10
|
+
const ye = /* @__PURE__ */ J({
|
|
11
|
+
__name: "PlMultiSequenceAlignment",
|
|
12
|
+
props: /* @__PURE__ */ Q({
|
|
13
|
+
pFrame: {},
|
|
14
|
+
sequenceColumnPredicate: { type: Function },
|
|
15
|
+
selection: {}
|
|
16
|
+
}, {
|
|
17
|
+
modelValue: { default: {} },
|
|
18
|
+
modelModifiers: {}
|
|
19
|
+
}),
|
|
20
|
+
emits: ["update:modelValue"],
|
|
21
|
+
setup(k) {
|
|
22
|
+
const y = G(k, "modelValue");
|
|
23
|
+
H(() => {
|
|
24
|
+
se(y);
|
|
25
|
+
});
|
|
26
|
+
const t = h({
|
|
27
|
+
...j
|
|
28
|
+
}), c = k, B = K(), g = h(te(() => ({
|
|
29
|
+
pFrame: c.pFrame,
|
|
30
|
+
sequenceColumnPredicate: c.sequenceColumnPredicate
|
|
31
|
+
}))), f = h(oe(() => ({
|
|
32
|
+
pFrame: c.pFrame,
|
|
33
|
+
sequenceColumnIds: t.sequenceColumnIds
|
|
34
|
+
}))), C = h(ne(() => ({
|
|
35
|
+
pFrame: c.pFrame,
|
|
36
|
+
sequenceColumnIds: t.sequenceColumnIds
|
|
37
|
+
}))), s = h(le(() => ({
|
|
38
|
+
pFrame: c.pFrame,
|
|
39
|
+
sequenceColumnIds: t.sequenceColumnIds,
|
|
40
|
+
labelColumnIds: t.labelColumnIds,
|
|
41
|
+
selection: c.selection,
|
|
42
|
+
colorScheme: t.colorScheme,
|
|
43
|
+
alignmentParams: t.alignmentParams,
|
|
44
|
+
shouldBuildPhylogeneticTree: t.widgets.includes("tree")
|
|
45
|
+
}))), I = new Intl.NumberFormat("en").format, D = T(
|
|
46
|
+
() => [
|
|
47
|
+
{
|
|
48
|
+
label: "Chemical Properties",
|
|
49
|
+
value: { type: "chemical-properties" }
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: "No Color",
|
|
53
|
+
value: { type: "no-color" }
|
|
54
|
+
},
|
|
55
|
+
...(C.data ?? []).map(({ label: o, value: n }) => ({
|
|
56
|
+
label: o,
|
|
57
|
+
value: {
|
|
58
|
+
type: "markup",
|
|
59
|
+
columnIds: n
|
|
60
|
+
}
|
|
61
|
+
}))
|
|
62
|
+
]
|
|
63
|
+
), x = T(
|
|
64
|
+
() => g.error ?? f.error ?? C.error ?? s.error
|
|
65
|
+
);
|
|
66
|
+
function E(o) {
|
|
67
|
+
y.value = Object.fromEntries(
|
|
68
|
+
Object.entries({ ...y.value, ...o }).filter(([n, e]) => e !== void 0)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
L(() => {
|
|
72
|
+
var n, e;
|
|
73
|
+
const o = Object.fromEntries(
|
|
74
|
+
Object.entries({
|
|
75
|
+
...j,
|
|
76
|
+
sequenceColumnIds: (n = g.data) == null ? void 0 : n.defaults,
|
|
77
|
+
labelColumnIds: (e = f.data) == null ? void 0 : e.defaults,
|
|
78
|
+
...y.value
|
|
79
|
+
}).filter(
|
|
80
|
+
([l, a]) => !q(
|
|
81
|
+
t[l],
|
|
82
|
+
a
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
);
|
|
86
|
+
Object.assign(t, o);
|
|
87
|
+
}), L(() => {
|
|
88
|
+
var e, l, a;
|
|
89
|
+
const o = [];
|
|
90
|
+
!g.isLoading && ((e = t.sequenceColumnIds) != null && e.some(
|
|
91
|
+
(i) => {
|
|
92
|
+
var m;
|
|
93
|
+
return (((m = g.data) == null ? void 0 : m.options) ?? []).every(
|
|
94
|
+
({ value: u }) => !q(u, i)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
)) && o.push("sequenceColumnIds"), !f.isLoading && ((l = t.labelColumnIds) != null && l.some(
|
|
98
|
+
(i) => {
|
|
99
|
+
var m;
|
|
100
|
+
return (((m = f.data) == null ? void 0 : m.options) ?? []).every(
|
|
101
|
+
({ value: u }) => !q(u, i)
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
)) && o.push("labelColumnIds");
|
|
105
|
+
const n = ((a = t.colorScheme) == null ? void 0 : a.type) === "markup" ? t.colorScheme.columnIds : void 0;
|
|
106
|
+
!C.isLoading && n && (C.data ?? []).every(
|
|
107
|
+
({ value: i }) => !q(i, n)
|
|
108
|
+
) && o.push("colorScheme"), o.length && E(Object.fromEntries(
|
|
109
|
+
o.map((i) => [i, void 0])
|
|
110
|
+
));
|
|
111
|
+
});
|
|
112
|
+
const z = W("msa");
|
|
113
|
+
async function U() {
|
|
114
|
+
var M, F, O;
|
|
115
|
+
const o = (F = (M = ee()) == null ? void 0 : M.lsDriver) == null ? void 0 : F.exportToPdf;
|
|
116
|
+
if (!o)
|
|
117
|
+
return console.error(
|
|
118
|
+
"API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
|
|
119
|
+
);
|
|
120
|
+
const n = (O = z.value) == null ? void 0 : O.rootEl;
|
|
121
|
+
if (!n)
|
|
122
|
+
throw new Error("MSA element is not available.");
|
|
123
|
+
const e = document.createElement("div");
|
|
124
|
+
e.id = `print-target-${crypto.randomUUID()}`;
|
|
125
|
+
const l = new CSSStyleSheet();
|
|
126
|
+
document.adoptedStyleSheets.push(l), l.insertRule(`
|
|
127
|
+
@media screen {
|
|
128
|
+
#${e.id} {
|
|
129
|
+
visibility: hidden;
|
|
130
|
+
position: fixed;
|
|
131
|
+
}
|
|
132
|
+
}`);
|
|
133
|
+
const a = n.cloneNode(!0);
|
|
134
|
+
a.dataset.prePrint = "", e.replaceChildren(a), document.body.appendChild(e);
|
|
135
|
+
const { height: i, width: m } = e.getBoundingClientRect(), u = CSS.cm(1), $ = [m, i].map((d) => CSS.px(d).add(u.mul(2))).join(" ");
|
|
136
|
+
l.insertRule(`
|
|
137
|
+
@media print {
|
|
138
|
+
@page {
|
|
139
|
+
size: ${$};
|
|
140
|
+
margin: ${u};
|
|
141
|
+
}
|
|
142
|
+
body > :not(#${e.id}) {
|
|
143
|
+
display: none;
|
|
144
|
+
}
|
|
145
|
+
}`);
|
|
146
|
+
try {
|
|
147
|
+
await o();
|
|
148
|
+
} catch (d) {
|
|
149
|
+
console.error(d);
|
|
150
|
+
} finally {
|
|
151
|
+
document.body.removeChild(e);
|
|
152
|
+
const d = document.adoptedStyleSheets.indexOf(l);
|
|
153
|
+
d >= 0 && document.adoptedStyleSheets.splice(d, 1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return X(() => {
|
|
157
|
+
s.data = void 0;
|
|
158
|
+
}), (o, n) => {
|
|
159
|
+
var e, l, a;
|
|
160
|
+
return p(), A(N, null, [
|
|
161
|
+
R(re, {
|
|
162
|
+
settings: t,
|
|
163
|
+
"sequence-column-options": (e = g.data) == null ? void 0 : e.options,
|
|
164
|
+
"label-column-options": (l = f.data) == null ? void 0 : l.options,
|
|
165
|
+
"color-scheme-options": D.value,
|
|
166
|
+
onUpdateSettings: E,
|
|
167
|
+
onExport: U
|
|
168
|
+
}, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
|
|
169
|
+
x.value ? (p(), S(r(P), {
|
|
170
|
+
key: 0,
|
|
171
|
+
type: "error"
|
|
172
|
+
}, {
|
|
173
|
+
default: b(() => [
|
|
174
|
+
w(v(x.value), 1)
|
|
175
|
+
]),
|
|
176
|
+
_: 1
|
|
177
|
+
})) : !s.isLoading && !s.data ? (p(), S(r(P), {
|
|
178
|
+
key: 1,
|
|
179
|
+
type: "warn",
|
|
180
|
+
icon: ""
|
|
181
|
+
}, {
|
|
182
|
+
default: b(() => [...n[0] || (n[0] = [
|
|
183
|
+
w(" Please select at least one sequence column and two or more rows to run alignment ", -1)
|
|
184
|
+
])]),
|
|
185
|
+
_: 1
|
|
186
|
+
})) : (p(), A(N, { key: 2 }, [
|
|
187
|
+
(a = s.data) != null && a.exceedsLimit ? (p(), S(r(P), {
|
|
188
|
+
key: 0,
|
|
189
|
+
type: "warn",
|
|
190
|
+
icon: "",
|
|
191
|
+
label: "Visualization is limited"
|
|
192
|
+
}, {
|
|
193
|
+
default: b(() => [
|
|
194
|
+
w(" MSA visualization supports " + v(r(I)(2)) + " to " + v(r(I)(r(_))) + " sequences. Only the first " + v(r(I)(r(_))) + " will be displayed. ", 1)
|
|
195
|
+
]),
|
|
196
|
+
_: 1
|
|
197
|
+
})) : V("", !0),
|
|
198
|
+
R(r(Z), {
|
|
199
|
+
type: "transparent",
|
|
200
|
+
class: Y(r(B).splash),
|
|
201
|
+
loading: s.isLoading
|
|
202
|
+
}, {
|
|
203
|
+
default: b(() => [
|
|
204
|
+
s.data ? (p(), S(ae, {
|
|
205
|
+
key: 0,
|
|
206
|
+
ref: "msa",
|
|
207
|
+
sequences: s.data.sequences,
|
|
208
|
+
labels: s.data.labels,
|
|
209
|
+
"highlight-legend": s.data.highlightLegend,
|
|
210
|
+
"phylogenetic-tree": s.data.phylogeneticTree,
|
|
211
|
+
widgets: t.widgets
|
|
212
|
+
}, null, 8, ["sequences", "labels", "highlight-legend", "phylogenetic-tree", "widgets"])) : V("", !0)
|
|
213
|
+
]),
|
|
214
|
+
_: 1
|
|
215
|
+
}, 8, ["class", "loading"])
|
|
216
|
+
], 64))
|
|
217
|
+
], 64);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
export {
|
|
222
|
+
ye as default
|
|
223
|
+
};
|
|
224
|
+
//# sourceMappingURL=PlMultiSequenceAlignment.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../src/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 onUnmounted,\n reactive,\n useCssModule,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n SEQUENCE_LIMIT,\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 classes = useCssModule();\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 shouldBuildPhylogeneticTree: settings.widgets.includes('tree'),\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 columnIds: 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 markupColumnIds = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnIds\n : undefined;\n\n if (\n !markupColumns.isLoading\n && markupColumnIds\n && (markupColumns.data ?? []).every(\n ({ value }) => !isJsonEqual(value, markupColumnIds),\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\nonUnmounted(() => {\n multipleAlignmentData.data = undefined;\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 && !multipleAlignmentData.data\"\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(SEQUENCE_LIMIT) }} sequences. Only the first\n {{ formatNumber(SEQUENCE_LIMIT) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"classes.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <MultiSequenceAlignmentView\n v-if=\"multipleAlignmentData.data\"\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :labels=\"multipleAlignmentData.data.labels\"\n :highlight-legend=\"multipleAlignmentData.data.highlightLegend\"\n :phylogenetic-tree=\"multipleAlignmentData.data.phylogeneticTree\"\n :widgets=\"settings.widgets\"\n />\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","classes","useCssModule","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","markupColumnIds","_c","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","msaClone","height","width","margin","pageSize","index","onUnmounted","_createVNode","Toolbar","_createBlock","_unref","PlAlert","_cache","_createElementBlock","_Fragment","_createTextVNode","_toDisplayString","SEQUENCE_LIMIT","PlSplash","_normalizeClass","MultiSequenceAlignmentView"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._splash_dk8xp_2{flex:1;display:flex;flex-direction:column;gap:12px;overflow:hidden}")),document.head.appendChild(e)}}catch(d){console.error("vite-plugin-css-injected-by-js",d)}})();
|
|
2
|
+
const s = "_splash_dk8xp_2", a = {
|
|
3
|
+
splash: s
|
|
4
|
+
};
|
|
5
|
+
export {
|
|
6
|
+
a as default,
|
|
7
|
+
s as splash
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=PlMultiSequenceAlignment.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlMultiSequenceAlignment.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ResidueCounts } from './types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
residueCounts: ResidueCounts;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
6
|
+
plotEl: HTMLDivElement;
|
|
7
|
+
}, any>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import o from "./SeqLogo.vue2.js";
|
|
2
|
+
import s from "./SeqLogo.vue3.js";
|
|
3
|
+
import t from "./_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const e = {
|
|
5
|
+
$style: s
|
|
6
|
+
}, f = /* @__PURE__ */ t(o, [["__cssModules", e]]);
|
|
7
|
+
export {
|
|
8
|
+
f as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=SeqLogo.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeqLogo.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { defineComponent as C, useCssModule as w, useTemplateRef as E, computed as f, shallowRef as x, watchEffect as D, onBeforeUnmount as _, createBlock as K, createElementBlock as B, unref as l, openBlock as d, withCtx as A, createTextVNode as G, toDisplayString as S, normalizeClass as T } from "vue";
|
|
2
|
+
import { PlAlert as L } from "@milaboratories/uikit";
|
|
3
|
+
import { cellSize as N } from "./cell-size.js";
|
|
4
|
+
import { useMiPlots as P } from "./useMiPlots.js";
|
|
5
|
+
const R = /* @__PURE__ */ C({
|
|
6
|
+
__name: "SeqLogo",
|
|
7
|
+
props: {
|
|
8
|
+
residueCounts: {}
|
|
9
|
+
},
|
|
10
|
+
setup(y) {
|
|
11
|
+
const u = y, g = w(), n = E("plotEl"), e = {
|
|
12
|
+
blue: "#549EE7",
|
|
13
|
+
red: "#E85456",
|
|
14
|
+
green: "#65BF65",
|
|
15
|
+
magenta: "#9178E1",
|
|
16
|
+
pink: "#D568D5",
|
|
17
|
+
orange: "#C59445",
|
|
18
|
+
cyan: "#62C7CC",
|
|
19
|
+
yellow: "#D5D549",
|
|
20
|
+
black: "#000000"
|
|
21
|
+
}, h = {
|
|
22
|
+
A: e.blue,
|
|
23
|
+
R: e.red,
|
|
24
|
+
N: e.green,
|
|
25
|
+
D: e.magenta,
|
|
26
|
+
C: e.pink,
|
|
27
|
+
Q: e.green,
|
|
28
|
+
E: e.magenta,
|
|
29
|
+
G: e.orange,
|
|
30
|
+
H: e.cyan,
|
|
31
|
+
I: e.blue,
|
|
32
|
+
L: e.blue,
|
|
33
|
+
K: e.red,
|
|
34
|
+
M: e.blue,
|
|
35
|
+
F: e.blue,
|
|
36
|
+
P: e.yellow,
|
|
37
|
+
S: e.green,
|
|
38
|
+
T: e.green,
|
|
39
|
+
W: e.blue,
|
|
40
|
+
Y: e.cyan,
|
|
41
|
+
V: e.blue,
|
|
42
|
+
B: e.black,
|
|
43
|
+
X: e.black,
|
|
44
|
+
Z: e.black
|
|
45
|
+
}, r = f(() => ({
|
|
46
|
+
type: "discrete",
|
|
47
|
+
title: {
|
|
48
|
+
name: "",
|
|
49
|
+
show: !1
|
|
50
|
+
},
|
|
51
|
+
size: {
|
|
52
|
+
width: u.residueCounts.length * N.inline,
|
|
53
|
+
height: 80,
|
|
54
|
+
innerOffset: 0,
|
|
55
|
+
outerOffset: 0
|
|
56
|
+
},
|
|
57
|
+
frame: {
|
|
58
|
+
type: "empty"
|
|
59
|
+
},
|
|
60
|
+
xAxis: {
|
|
61
|
+
title: "",
|
|
62
|
+
showGrid: !1,
|
|
63
|
+
showTicks: !1,
|
|
64
|
+
hiddenLabels: !0
|
|
65
|
+
},
|
|
66
|
+
yAxis: {
|
|
67
|
+
title: "",
|
|
68
|
+
showGrid: !1,
|
|
69
|
+
showTicks: !1,
|
|
70
|
+
hiddenLabels: !0
|
|
71
|
+
},
|
|
72
|
+
y: {
|
|
73
|
+
type: "column",
|
|
74
|
+
value: "countKey"
|
|
75
|
+
},
|
|
76
|
+
primaryGrouping: {
|
|
77
|
+
columnName: {
|
|
78
|
+
type: "column",
|
|
79
|
+
value: "columnKey"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
secondaryGrouping: {
|
|
83
|
+
columnName: {
|
|
84
|
+
type: "column",
|
|
85
|
+
value: "residueKey"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
layers: [{
|
|
89
|
+
type: "logo",
|
|
90
|
+
aes: { fillColor: h }
|
|
91
|
+
}]
|
|
92
|
+
})), a = f(() => {
|
|
93
|
+
const t = [], s = [], m = [];
|
|
94
|
+
for (const [v, b] of u.residueCounts.entries())
|
|
95
|
+
for (const [p, k] of Object.entries(b))
|
|
96
|
+
p !== "-" && (t.push(k), s.push(v), m.push(p));
|
|
97
|
+
return {
|
|
98
|
+
type: "columns",
|
|
99
|
+
id: `seq-logo-${crypto.randomUUID()}`,
|
|
100
|
+
values: { countKey: t, columnKey: s, residueKey: m }
|
|
101
|
+
};
|
|
102
|
+
}), { miplots: c, error: i } = P(), o = x();
|
|
103
|
+
return D(async () => {
|
|
104
|
+
!n.value || !c.value || (o.value ? o.value.updateSettingsAndData(a.value, r.value) : (o.value = c.value.newPlot(a.value, r.value), o.value.mount(n.value)));
|
|
105
|
+
}), _(() => {
|
|
106
|
+
var t;
|
|
107
|
+
(t = o.value) == null || t.unmount();
|
|
108
|
+
}), (t, s) => l(i) ? (d(), K(l(L), {
|
|
109
|
+
key: 0,
|
|
110
|
+
type: "error"
|
|
111
|
+
}, {
|
|
112
|
+
default: A(() => [
|
|
113
|
+
G(S(l(i).message), 1)
|
|
114
|
+
]),
|
|
115
|
+
_: 1
|
|
116
|
+
})) : (d(), B("div", {
|
|
117
|
+
key: 1,
|
|
118
|
+
ref_key: "plotEl",
|
|
119
|
+
ref: n,
|
|
120
|
+
class: T(l(g).container)
|
|
121
|
+
}, null, 2));
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
export {
|
|
125
|
+
R as default
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=SeqLogo.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeqLogo.vue2.js","sources":["../src/SeqLogo.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n Settings,\n} from '@milaboratories/miplots4';\nimport { PlAlert } from '@milaboratories/uikit';\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useCssModule,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport { cellSize } from './cell-size';\nimport type { ResidueCounts } from './types';\nimport { useMiPlots } from './useMiPlots';\n\nconst props = defineProps<{\n residueCounts: ResidueCounts;\n}>();\n\nconst classes = useCssModule();\n\nconst plotEl = useTemplateRef('plotEl');\n\nconst palette = {\n blue: '#549EE7',\n red: '#E85456',\n green: '#65BF65',\n magenta: '#9178E1',\n pink: '#D568D5',\n orange: '#C59445',\n cyan: '#62C7CC',\n yellow: '#D5D549',\n black: '#000000',\n};\n\nconst residueColors = {\n A: palette.blue,\n R: palette.red,\n N: palette.green,\n D: palette.magenta,\n C: palette.pink,\n Q: palette.green,\n E: palette.magenta,\n G: palette.orange,\n H: palette.cyan,\n I: palette.blue,\n L: palette.blue,\n K: palette.red,\n M: palette.blue,\n F: palette.blue,\n P: palette.yellow,\n S: palette.green,\n T: palette.green,\n W: palette.blue,\n Y: palette.cyan,\n V: palette.blue,\n B: palette.black,\n X: palette.black,\n Z: palette.black,\n};\n\nconst settings = computed(() => ({\n type: 'discrete',\n title: {\n name: '',\n show: false,\n },\n size: {\n width: props.residueCounts.length * cellSize.inline,\n height: 80,\n innerOffset: 0,\n outerOffset: 0,\n },\n frame: {\n type: 'empty',\n },\n xAxis: {\n title: '',\n showGrid: false,\n showTicks: false,\n hiddenLabels: true,\n },\n yAxis: {\n title: '',\n showGrid: false,\n showTicks: false,\n hiddenLabels: true,\n },\n y: {\n type: 'column',\n value: 'countKey',\n },\n primaryGrouping: {\n columnName: {\n type: 'column',\n value: 'columnKey',\n },\n },\n secondaryGrouping: {\n columnName: {\n type: 'column',\n value: 'residueKey',\n },\n },\n layers: [{\n type: 'logo',\n aes: { fillColor: residueColors },\n }],\n} satisfies Settings));\n\nconst data = computed<DataByColumns>(() => {\n const countKey: number[] = [];\n const columnKey: number[] = [];\n const residueKey: string[] = [];\n for (const [columnIndex, column] of props.residueCounts.entries()) {\n for (const [residue, count] of Object.entries(column)) {\n if (residue === '-') continue;\n countKey.push(count);\n columnKey.push(columnIndex);\n residueKey.push(residue);\n }\n }\n return ({\n type: 'columns',\n id: `seq-logo-${crypto.randomUUID()}`,\n values: { countKey, columnKey, residueKey },\n });\n});\n\nconst { miplots, error } = useMiPlots();\n\nconst plot = shallowRef<ChartInterface>();\n\nwatchEffect(async () => {\n if (!plotEl.value || !miplots.value) return;\n if (!plot.value) {\n plot.value = miplots.value.newPlot(data.value, settings.value);\n plot.value.mount(plotEl.value);\n } else {\n plot.value.updateSettingsAndData(data.value, settings.value);\n }\n});\n\nonBeforeUnmount(() => {\n plot.value?.unmount();\n});\n</script>\n\n<template>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error.message }}\n </PlAlert>\n <div v-else ref=\"plotEl\" :class=\"classes.container\" />\n</template>\n\n<style module>\n.container {\n svg {\n display: block;\n }\n}\n</style>\n"],"names":["props","__props","classes","useCssModule","plotEl","useTemplateRef","palette","residueColors","settings","computed","cellSize","data","countKey","columnKey","residueKey","columnIndex","column","residue","count","miplots","error","useMiPlots","plot","shallowRef","watchEffect","onBeforeUnmount","_a","_unref","_createBlock","PlAlert","_createTextVNode","_toDisplayString","_createElementBlock","_normalizeClass"],"mappings":";;;;;;;;;;AAmBA,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAASC,EAAe,QAAQ,GAEhCC,IAAU;AAAA,MACd,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA,GAGHC,IAAgB;AAAA,MACpB,GAAGD,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,MACX,GAAGA,EAAQ;AAAA,IAAA,GAGPE,IAAWC,EAAS,OAAO;AAAA,MAC/B,MAAM;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,OAAOT,EAAM,cAAc,SAASU,EAAS;AAAA,QAC7C,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,aAAa;AAAA,MAAA;AAAA,MAEf,OAAO;AAAA,QACL,MAAM;AAAA,MAAA;AAAA,MAER,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,MAAA;AAAA,MAEhB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,MAAA;AAAA,MAEhB,GAAG;AAAA,QACD,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,iBAAiB;AAAA,QACf,YAAY;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,MAEF,mBAAmB;AAAA,QACjB,YAAY;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,MAEF,QAAQ,CAAC;AAAA,QACP,MAAM;AAAA,QACN,KAAK,EAAE,WAAWH,EAAA;AAAA,MAAc,CACjC;AAAA,IAAA,EACkB,GAEfI,IAAOF,EAAwB,MAAM;AACzC,YAAMG,IAAqB,CAAA,GACrBC,IAAsB,CAAA,GACtBC,IAAuB,CAAA;AAC7B,iBAAW,CAACC,GAAaC,CAAM,KAAKhB,EAAM,cAAc;AACtD,mBAAW,CAACiB,GAASC,CAAK,KAAK,OAAO,QAAQF,CAAM;AAClD,UAAIC,MAAY,QAChBL,EAAS,KAAKM,CAAK,GACnBL,EAAU,KAAKE,CAAW,GAC1BD,EAAW,KAAKG,CAAO;AAG3B,aAAQ;AAAA,QACN,MAAM;AAAA,QACN,IAAI,YAAY,OAAO,WAAA,CAAY;AAAA,QACnC,QAAQ,EAAE,UAAAL,GAAU,WAAAC,GAAW,YAAAC,EAAA;AAAA,MAAW;AAAA,IAE9C,CAAC,GAEK,EAAE,SAAAK,GAAS,OAAAC,EAAA,IAAUC,EAAA,GAErBC,IAAOC,EAAA;AAEb,WAAAC,EAAY,YAAY;AACtB,MAAI,CAACpB,EAAO,SAAS,CAACe,EAAQ,UACzBG,EAAK,QAIRA,EAAK,MAAM,sBAAsBX,EAAK,OAAOH,EAAS,KAAK,KAH3Dc,EAAK,QAAQH,EAAQ,MAAM,QAAQR,EAAK,OAAOH,EAAS,KAAK,GAC7Dc,EAAK,MAAM,MAAMlB,EAAO,KAAK;AAAA,IAIjC,CAAC,GAEDqB,EAAgB,MAAM;;AACpB,OAAAC,IAAAJ,EAAK,UAAL,QAAAI,EAAY;AAAA,IACd,CAAC,aAIgBC,EAAAP,CAAA,UAAfQ,EAEUD,EAAAE,CAAA,GAAA;AAAA;MAFY,MAAK;AAAA,IAAA;iBACzB,MAAmB;AAAA,QAAhBC,EAAAC,EAAAJ,EAAAP,CAAA,EAAM,OAAO,GAAA,CAAA;AAAA,MAAA;;gBAElBY,EAAsD,OAAA;AAAA;eAAtC;AAAA,MAAJ,KAAI5B;AAAA,MAAU,OAAK6B,EAAEN,EAAAzB,CAAA,EAAQ,SAAS;AAAA,IAAA;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_1uo2b_2 svg{display:block}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
const n = "_container_1uo2b_2", t = {
|
|
3
|
+
container: n
|
|
4
|
+
};
|
|
5
|
+
export {
|
|
6
|
+
n as container,
|
|
7
|
+
t as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=SeqLogo.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeqLogo.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|