@platforma-sdk/ui-vue 1.41.19 → 1.42.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 +19 -19
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +11 -0
- package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +2 -2
- package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +11 -11
- package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +8 -8
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +12 -6
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +80 -65
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +14 -12
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +36 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +146 -111
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +2 -0
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +71 -68
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +42 -6
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +96 -130
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/data.d.ts +3 -9
- package/dist/components/PlMultiSequenceAlignment/data.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/data.js +198 -212
- package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/markup.d.ts +7 -5
- package/dist/components/PlMultiSequenceAlignment/markup.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/markup.js +47 -26
- package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/types.d.ts +1 -1
- package/dist/components/PlMultiSequenceAlignment/types.d.ts.map +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
- 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 +1 -1
- package/dist/node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js +111 -165
- package/dist/node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js +1 -1
- package/dist/sdk/model/dist/index.js +1 -1
- package/package.json +5 -5
- package/src/components/PlMultiSequenceAlignment/Legend.vue +4 -3
- package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +66 -46
- package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +85 -34
- package/src/components/PlMultiSequenceAlignment/README.md +10 -8
- package/src/components/PlMultiSequenceAlignment/Toolbar.vue +4 -1
- package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +154 -161
- package/src/components/PlMultiSequenceAlignment/data.ts +65 -85
- package/src/components/PlMultiSequenceAlignment/markup.ts +47 -15
- package/src/components/PlMultiSequenceAlignment/types.ts +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
|
@@ -1,18 +1,20 @@
|
|
|
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_cgj1q_2{display:flex;flex-direction:column;gap:12px;min-block-size:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}._table_cgj1q_11{display:grid;grid-template-areas:"corner header" "labels sequences";text-wrap:nowrap;justify-content:start}@media print{._table_cgj1q_11{overflow:visible}}._corner_cgj1q_23{grid-area:corner;background-color:#fff;position:sticky;inset-inline-start:0;inset-block-start:0;z-index:2}._header_cgj1q_32{grid-area:header;background-color:#fff;position:sticky;inset-block-start:0;z-index:1}._sequence-names_cgj1q_40{display:flex;font-weight:700;line-height:20px;margin-block-end:4px;gap:20px}._labels_cgj1q_48{grid-area:labels;display:grid;grid-auto-flow:dense;column-gap:12px;background-color:#fff;position:sticky;inset-inline-start:0;z-index:1;padding-inline-end:12px;font-family:Spline Sans Mono;line-height:24px}._sequences_cgj1q_62{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(--3cff4522);background-repeat:no-repeat;background-size:calc(100% - 5.8px) 100%}')),document.head.appendChild(e)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();
|
|
2
|
+
const e = "_root_cgj1q_2", c = "_table_cgj1q_11", s = "_corner_cgj1q_23", _ = "_header_cgj1q_32", n = "_labels_cgj1q_48", o = "_sequences_cgj1q_62", t = {
|
|
3
3
|
root: e,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
table: c,
|
|
5
|
+
corner: s,
|
|
6
|
+
header: _,
|
|
7
|
+
"sequence-names": "_sequence-names_cgj1q_40",
|
|
8
|
+
labels: n,
|
|
9
|
+
sequences: o
|
|
9
10
|
};
|
|
10
11
|
export {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
s as corner,
|
|
13
|
+
t as default,
|
|
14
|
+
_ as header,
|
|
15
|
+
n as labels,
|
|
15
16
|
e as root,
|
|
16
|
-
|
|
17
|
+
o as sequences,
|
|
18
|
+
c as table
|
|
17
19
|
};
|
|
18
20
|
//# 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":";;;;;;;;;"}
|
|
@@ -24,6 +24,41 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
24
24
|
"update:modelValue": (value: PlMultiSequenceAlignmentModel) => any;
|
|
25
25
|
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
26
26
|
"onUpdate:modelValue"?: ((value: PlMultiSequenceAlignmentModel) => any) | undefined;
|
|
27
|
-
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
27
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
28
|
+
msa: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
29
|
+
sequences: string[];
|
|
30
|
+
sequenceNames: string[];
|
|
31
|
+
labelRows: string[][];
|
|
32
|
+
residueCounts: import('./types').ResidueCounts;
|
|
33
|
+
highlightImage: {
|
|
34
|
+
blob: Blob;
|
|
35
|
+
legend: import('./types').HighlightLegend;
|
|
36
|
+
} | undefined;
|
|
37
|
+
widgets: ("consensus" | "seqLogo" | "legend")[];
|
|
38
|
+
}> & Readonly<{}>, {
|
|
39
|
+
rootEl: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
|
|
40
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
|
|
41
|
+
rootRef: HTMLDivElement;
|
|
42
|
+
}, HTMLDivElement, import('vue').ComponentProvideOptions, {
|
|
43
|
+
P: {};
|
|
44
|
+
B: {};
|
|
45
|
+
D: {};
|
|
46
|
+
C: {};
|
|
47
|
+
M: {};
|
|
48
|
+
Defaults: {};
|
|
49
|
+
}, Readonly<{
|
|
50
|
+
sequences: string[];
|
|
51
|
+
sequenceNames: string[];
|
|
52
|
+
labelRows: string[][];
|
|
53
|
+
residueCounts: import('./types').ResidueCounts;
|
|
54
|
+
highlightImage: {
|
|
55
|
+
blob: Blob;
|
|
56
|
+
legend: import('./types').HighlightLegend;
|
|
57
|
+
} | undefined;
|
|
58
|
+
widgets: ("consensus" | "seqLogo" | "legend")[];
|
|
59
|
+
}> & Readonly<{}>, {
|
|
60
|
+
rootEl: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
|
|
61
|
+
}, {}, {}, {}, {}> | null;
|
|
62
|
+
}, any>;
|
|
28
63
|
export default _default;
|
|
29
64
|
//# sourceMappingURL=PlMultiSequenceAlignment.vue.d.ts.map
|
|
@@ -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":"AAuTA,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;AAwLF,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 L, mergeModels as U, useModel as J, onBeforeMount as G, reactive as g, computed as R, watchEffect as N, useTemplateRef as H, createElementBlock as T, openBlock as f, Fragment as V, createVNode as j, createBlock as S, unref as i, withCtx as b, createTextVNode as k, toDisplayString as q, createCommentVNode as A, normalizeClass as K } from "vue";
|
|
2
|
+
import { isJsonEqual as I } from "../../lib/util/helpers/dist/index.js";
|
|
3
3
|
import "../../lib/ui/uikit/dist/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import X from "./
|
|
6
|
-
import { runMigrations as
|
|
7
|
-
import
|
|
4
|
+
import { getRawPlatformaInstance as Q } from "../../sdk/model/dist/index.js";
|
|
5
|
+
import { useSequenceColumnsOptions as W, useLabelColumnsOptions as X, useMarkupColumnsOptions as Y, useMultipleAlignmentData as Z, sequenceLimit as B } from "./data.js";
|
|
6
|
+
import { runMigrations as ee } from "./migrations.js";
|
|
7
|
+
import te from "./MultiSequenceAlignmentView.vue.js";
|
|
8
8
|
import { defaultSettings as D } from "./settings.js";
|
|
9
|
-
import
|
|
9
|
+
import oe from "./Toolbar.vue.js";
|
|
10
10
|
import P from "../../lib/ui/uikit/dist/components/PlAlert/PlAlert.vue.js";
|
|
11
|
-
import
|
|
12
|
-
const
|
|
11
|
+
import ne from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
|
|
12
|
+
const ge = /* @__PURE__ */ L({
|
|
13
13
|
__name: "PlMultiSequenceAlignment",
|
|
14
|
-
props: /* @__PURE__ */
|
|
14
|
+
props: /* @__PURE__ */ U({
|
|
15
15
|
pFrame: {},
|
|
16
16
|
sequenceColumnPredicate: { type: Function },
|
|
17
17
|
selection: {}
|
|
@@ -20,36 +20,30 @@ const pe = /* @__PURE__ */ R({
|
|
|
20
20
|
modelModifiers: {}
|
|
21
21
|
}),
|
|
22
22
|
emits: ["update:modelValue"],
|
|
23
|
-
setup(
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
setup(x) {
|
|
24
|
+
const h = J(x, "modelValue");
|
|
25
|
+
G(() => {
|
|
26
|
+
ee(h);
|
|
27
27
|
});
|
|
28
|
-
const
|
|
28
|
+
const o = g({
|
|
29
29
|
...D
|
|
30
|
-
}),
|
|
31
|
-
pFrame:
|
|
32
|
-
sequenceColumnPredicate:
|
|
33
|
-
}))),
|
|
34
|
-
pFrame:
|
|
35
|
-
sequenceColumnIds:
|
|
36
|
-
}))),
|
|
37
|
-
pFrame:
|
|
38
|
-
sequenceColumnIds:
|
|
39
|
-
}))),
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
labelColumnIds: e.labelColumnIds,
|
|
48
|
-
markupColumnId: y.value,
|
|
49
|
-
selection: i.selection,
|
|
50
|
-
colorScheme: e.colorScheme,
|
|
51
|
-
alignmentParams: e.alignmentParams
|
|
52
|
-
}))), k = new Intl.NumberFormat("en").format, T = v(
|
|
30
|
+
}), c = x, C = g(W(() => ({
|
|
31
|
+
pFrame: c.pFrame,
|
|
32
|
+
sequenceColumnPredicate: c.sequenceColumnPredicate
|
|
33
|
+
}))), y = g(X(() => ({
|
|
34
|
+
pFrame: c.pFrame,
|
|
35
|
+
sequenceColumnIds: o.sequenceColumnIds
|
|
36
|
+
}))), v = g(Y(() => ({
|
|
37
|
+
pFrame: c.pFrame,
|
|
38
|
+
sequenceColumnIds: o.sequenceColumnIds
|
|
39
|
+
}))), l = g(Z(() => ({
|
|
40
|
+
pframe: c.pFrame,
|
|
41
|
+
sequenceColumnIds: o.sequenceColumnIds,
|
|
42
|
+
labelColumnIds: o.labelColumnIds,
|
|
43
|
+
selection: c.selection,
|
|
44
|
+
colorScheme: o.colorScheme,
|
|
45
|
+
alignmentParams: o.alignmentParams
|
|
46
|
+
}))), w = new Intl.NumberFormat("en").format, _ = R(
|
|
53
47
|
() => [
|
|
54
48
|
{
|
|
55
49
|
label: "Chemical Properties",
|
|
@@ -59,122 +53,163 @@ const pe = /* @__PURE__ */ R({
|
|
|
59
53
|
label: "No Color",
|
|
60
54
|
value: { type: "no-color" }
|
|
61
55
|
},
|
|
62
|
-
...(
|
|
63
|
-
label:
|
|
56
|
+
...(v.data ?? []).map(({ label: t, value: n }) => ({
|
|
57
|
+
label: t,
|
|
64
58
|
value: {
|
|
65
59
|
type: "markup",
|
|
66
60
|
columnId: n
|
|
67
61
|
}
|
|
68
62
|
}))
|
|
69
63
|
]
|
|
70
|
-
),
|
|
71
|
-
() =>
|
|
64
|
+
), O = R(
|
|
65
|
+
() => C.error ?? y.error ?? v.error ?? l.error
|
|
72
66
|
);
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
Object.entries({ ...
|
|
67
|
+
function E(t) {
|
|
68
|
+
h.value = Object.fromEntries(
|
|
69
|
+
Object.entries({ ...h.value, ...t }).filter(([n, e]) => e !== void 0)
|
|
76
70
|
);
|
|
77
71
|
}
|
|
78
|
-
|
|
79
|
-
var n,
|
|
80
|
-
const
|
|
72
|
+
N(() => {
|
|
73
|
+
var n, e;
|
|
74
|
+
const t = Object.fromEntries(
|
|
81
75
|
Object.entries({
|
|
82
76
|
...D,
|
|
83
|
-
sequenceColumnIds: (n =
|
|
84
|
-
labelColumnIds: (
|
|
85
|
-
...
|
|
77
|
+
sequenceColumnIds: (n = C.data) == null ? void 0 : n.defaults,
|
|
78
|
+
labelColumnIds: (e = y.data) == null ? void 0 : e.defaults,
|
|
79
|
+
...h.value
|
|
86
80
|
}).filter(
|
|
87
|
-
([
|
|
88
|
-
|
|
89
|
-
|
|
81
|
+
([a, r]) => !I(
|
|
82
|
+
o[a],
|
|
83
|
+
r
|
|
90
84
|
)
|
|
91
85
|
)
|
|
92
86
|
);
|
|
93
|
-
Object.assign(
|
|
94
|
-
}),
|
|
95
|
-
var
|
|
96
|
-
const
|
|
97
|
-
(
|
|
98
|
-
(
|
|
87
|
+
Object.assign(o, t);
|
|
88
|
+
}), N(() => {
|
|
89
|
+
var e, a, r, m;
|
|
90
|
+
const t = [];
|
|
91
|
+
(e = o.sequenceColumnIds) != null && e.some(
|
|
92
|
+
(s) => {
|
|
99
93
|
var u;
|
|
100
|
-
return !((u =
|
|
101
|
-
({ value:
|
|
94
|
+
return !((u = C.data) != null && u.options.some(
|
|
95
|
+
({ value: d }) => I(d, s)
|
|
102
96
|
));
|
|
103
97
|
}
|
|
104
|
-
) &&
|
|
105
|
-
(
|
|
98
|
+
) && t.push("sequenceColumnIds"), (a = o.labelColumnIds) != null && a.some(
|
|
99
|
+
(s) => {
|
|
106
100
|
var u;
|
|
107
|
-
return !((u =
|
|
108
|
-
({ value:
|
|
101
|
+
return !((u = y.data) != null && u.options.some(
|
|
102
|
+
({ value: d }) => I(d, s)
|
|
109
103
|
));
|
|
110
104
|
}
|
|
111
|
-
) &&
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
105
|
+
) && t.push("labelColumnIds");
|
|
106
|
+
const n = ((r = o.colorScheme) == null ? void 0 : r.type) === "markup" ? o.colorScheme.columnId : void 0;
|
|
107
|
+
n && !((m = v.data) != null && m.some(
|
|
108
|
+
({ value: s }) => I(s, n)
|
|
109
|
+
)) && t.push("colorScheme"), t.length && E(Object.fromEntries(
|
|
110
|
+
t.map((s) => [s, void 0])
|
|
115
111
|
));
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
"
|
|
124
|
-
|
|
112
|
+
});
|
|
113
|
+
const $ = H("msa");
|
|
114
|
+
async function z() {
|
|
115
|
+
var d, F, M;
|
|
116
|
+
const t = (F = (d = Q()) == null ? void 0 : d.lsDriver) == null ? void 0 : F.exportToPdf;
|
|
117
|
+
if (!t)
|
|
118
|
+
return console.error(
|
|
119
|
+
"API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
|
|
120
|
+
);
|
|
121
|
+
const n = (M = $.value) == null ? void 0 : M.rootEl;
|
|
122
|
+
if (!n)
|
|
123
|
+
throw new Error("MSA element is not available.");
|
|
124
|
+
const e = document.createElement("div");
|
|
125
|
+
e.id = `print-target-${crypto.randomUUID()}`;
|
|
126
|
+
const a = new CSSStyleSheet();
|
|
127
|
+
document.adoptedStyleSheets.push(a), a.insertRule(`
|
|
128
|
+
@media screen {
|
|
129
|
+
#${e.id} {
|
|
130
|
+
visibility: hidden;
|
|
131
|
+
position: fixed;
|
|
132
|
+
}
|
|
133
|
+
}`), e.replaceChildren(n.cloneNode(!0)), document.body.appendChild(e);
|
|
134
|
+
const { height: r, width: m } = e.getBoundingClientRect(), s = CSS.cm(1), u = [m, r].map((p) => CSS.px(p).add(s.mul(2))).join(" ");
|
|
135
|
+
a.insertRule(`
|
|
136
|
+
@media print {
|
|
137
|
+
@page {
|
|
138
|
+
size: ${u};
|
|
139
|
+
margin: ${s};
|
|
140
|
+
}
|
|
141
|
+
body > :not(#${e.id}) {
|
|
142
|
+
display: none;
|
|
143
|
+
}
|
|
144
|
+
}`);
|
|
145
|
+
try {
|
|
146
|
+
await t();
|
|
147
|
+
} catch (p) {
|
|
148
|
+
console.error(p);
|
|
149
|
+
} finally {
|
|
150
|
+
document.body.removeChild(e);
|
|
151
|
+
const p = document.adoptedStyleSheets.indexOf(a);
|
|
152
|
+
p >= 0 && document.adoptedStyleSheets.splice(p, 1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return (t, n) => {
|
|
156
|
+
var e, a, r, m;
|
|
157
|
+
return f(), T(V, null, [
|
|
158
|
+
j(oe, {
|
|
159
|
+
settings: o,
|
|
160
|
+
"sequence-column-options": (e = C.data) == null ? void 0 : e.options,
|
|
161
|
+
"label-column-options": (a = y.data) == null ? void 0 : a.options,
|
|
162
|
+
"color-scheme-options": _.value,
|
|
163
|
+
onUpdateSettings: E,
|
|
164
|
+
onExport: z
|
|
125
165
|
}, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
|
|
126
|
-
|
|
166
|
+
O.value ? (f(), S(i(P), {
|
|
127
167
|
key: 0,
|
|
128
168
|
type: "error"
|
|
129
169
|
}, {
|
|
130
|
-
default:
|
|
131
|
-
|
|
170
|
+
default: b(() => [
|
|
171
|
+
k(q(O.value), 1)
|
|
132
172
|
]),
|
|
133
173
|
_: 1
|
|
134
|
-
})) : !
|
|
174
|
+
})) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (f(), S(i(P), {
|
|
135
175
|
key: 1,
|
|
136
176
|
type: "warn",
|
|
137
177
|
icon: ""
|
|
138
178
|
}, {
|
|
139
|
-
default:
|
|
140
|
-
|
|
179
|
+
default: b(() => n[0] || (n[0] = [
|
|
180
|
+
k(" Please select at least one sequence column and two or more rows to run alignment ")
|
|
141
181
|
])),
|
|
142
182
|
_: 1
|
|
143
|
-
})) : (
|
|
144
|
-
(
|
|
183
|
+
})) : (f(), T(V, { key: 2 }, [
|
|
184
|
+
(m = l.data) != null && m.exceedsLimit ? (f(), S(i(P), {
|
|
145
185
|
key: 0,
|
|
146
186
|
type: "warn",
|
|
147
187
|
icon: "",
|
|
148
188
|
label: "Visualization is limited"
|
|
149
189
|
}, {
|
|
150
|
-
default:
|
|
151
|
-
|
|
190
|
+
default: b(() => [
|
|
191
|
+
k(" MSA visualization supports " + q(i(w)(2)) + " to " + q(i(w)(i(B))) + " sequences. Only the first " + q(i(w)(i(B))) + " will be displayed. ", 1)
|
|
152
192
|
]),
|
|
153
193
|
_: 1
|
|
154
|
-
})) :
|
|
155
|
-
|
|
194
|
+
})) : A("", !0),
|
|
195
|
+
j(i(ne), {
|
|
156
196
|
type: "transparent",
|
|
157
|
-
class:
|
|
158
|
-
loading:
|
|
197
|
+
class: K(t.$style.splash),
|
|
198
|
+
loading: l.isLoading
|
|
159
199
|
}, {
|
|
160
|
-
default:
|
|
161
|
-
var
|
|
200
|
+
default: b(() => {
|
|
201
|
+
var s;
|
|
162
202
|
return [
|
|
163
|
-
(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
(A = e.widgets) != null && A.includes("legend") && ((B = s.data.highlightImage) != null && B.colorMap) ? (m(), h(X, {
|
|
174
|
-
key: 0,
|
|
175
|
-
colors: s.data.highlightImage.colorMap
|
|
176
|
-
}, null, 8, ["colors"])) : O("", !0)
|
|
177
|
-
], 64)) : O("", !0)
|
|
203
|
+
(s = l.data) != null && s.sequences.length ? (f(), S(te, {
|
|
204
|
+
key: 0,
|
|
205
|
+
ref: "msa",
|
|
206
|
+
sequences: l.data.sequences,
|
|
207
|
+
"sequence-names": l.data.sequenceNames,
|
|
208
|
+
"label-rows": l.data.labelRows,
|
|
209
|
+
"residue-counts": l.data.residueCounts,
|
|
210
|
+
"highlight-image": l.data.highlightImage,
|
|
211
|
+
widgets: o.widgets
|
|
212
|
+
}, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : A("", !0)
|
|
178
213
|
];
|
|
179
214
|
}),
|
|
180
215
|
_: 1
|
|
@@ -185,6 +220,6 @@ const pe = /* @__PURE__ */ R({
|
|
|
185
220
|
}
|
|
186
221
|
});
|
|
187
222
|
export {
|
|
188
|
-
|
|
223
|
+
ge as default
|
|
189
224
|
};
|
|
190
225
|
//# 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 type {\n PColumnPredicate,\n PFrameHandle,\n PlMultiSequenceAlignmentColorSchemeOption,\n PlMultiSequenceAlignmentModel,\n PlMultiSequenceAlignmentSettings,\n PlSelectionModel,\n} from '@platforma-sdk/model';\nimport { computed, onBeforeMount, reactive, watchEffect } from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport Legend from './Legend.vue';\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 markupColumnId = computed(() =>\n settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined,\n);\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pframe: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n markupColumnId: markupColumnId.value,\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 if (\n markupColumnId.value\n && !markupColumns.data?.some(\n ({ value }) => isJsonEqual(value, markupColumnId.value),\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</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 />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"\n !multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\n \"\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 :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :label-rows=\"multipleAlignmentData.data.labelsRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image-blob=\"multipleAlignmentData.data.highlightImage?.blob\"\n :consensus=\"settings.widgets?.includes('consensus') ?? false\"\n :seq-logo=\"settings.widgets?.includes('seqLogo') ?? false\"\n />\n <Legend\n v-if=\"\n settings.widgets?.includes('legend')\n && multipleAlignmentData.data.highlightImage?.colorMap\n \"\n :colors=\"multipleAlignmentData.data.highlightImage.colorMap\"\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","markupColumnId","computed","_a","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_b","key","isJsonEqual","settingsToReset","id","_c"],"mappings":"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"}
|
|
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":"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"}
|
|
@@ -7,8 +7,10 @@ type __VLS_Props = {
|
|
|
7
7
|
colorSchemeOptions: ListOptionNormalized<ColorSchemeOption>[];
|
|
8
8
|
};
|
|
9
9
|
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
10
|
+
export: () => any;
|
|
10
11
|
updateSettings: (args_0: Partial<Settings>) => any;
|
|
11
12
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onExport?: (() => any) | undefined;
|
|
12
14
|
onUpdateSettings?: ((args_0: Partial<Settings>) => any) | undefined;
|
|
13
15
|
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
14
16
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Toolbar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"names":[],"mappings":"AA+NA,OAAO,EACL,KAAK,oBAAoB,EAS1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,yCAAyC,IAAI,iBAAiB,EAC9D,gCAAgC,IAAI,QAAQ,EAC5C,SAAS,EACT,cAAc,EACf,MAAM,sBAAsB,CAAC;AAI9B,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,qBAAqB,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;IACrE,kBAAkB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAC;IACvE,kBAAkB,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC/D,CAAC;;;;;;;;AAmeF,wBAOG"}
|