@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.
Files changed (55) hide show
  1. package/.turbo/turbo-build.log +19 -19
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +11 -0
  4. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +2 -2
  5. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts.map +1 -1
  6. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +11 -11
  7. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +8 -8
  8. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +12 -6
  9. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
  10. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +80 -65
  11. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  12. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +14 -12
  13. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  14. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +36 -1
  15. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
  16. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +146 -111
  17. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  18. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +2 -0
  19. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts.map +1 -1
  20. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +71 -68
  21. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  22. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +42 -6
  23. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts.map +1 -1
  24. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +96 -130
  25. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +1 -1
  26. package/dist/components/PlMultiSequenceAlignment/data.d.ts +3 -9
  27. package/dist/components/PlMultiSequenceAlignment/data.d.ts.map +1 -1
  28. package/dist/components/PlMultiSequenceAlignment/data.js +198 -212
  29. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  30. package/dist/components/PlMultiSequenceAlignment/markup.d.ts +7 -5
  31. package/dist/components/PlMultiSequenceAlignment/markup.d.ts.map +1 -1
  32. package/dist/components/PlMultiSequenceAlignment/markup.js +47 -26
  33. package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
  34. package/dist/components/PlMultiSequenceAlignment/types.d.ts +1 -1
  35. package/dist/components/PlMultiSequenceAlignment/types.d.ts.map +1 -1
  36. package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
  37. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
  38. package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
  39. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
  40. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +1 -1
  41. 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
  42. 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
  43. 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
  44. package/dist/sdk/model/dist/index.js +1 -1
  45. package/package.json +5 -5
  46. package/src/components/PlMultiSequenceAlignment/Legend.vue +4 -3
  47. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +66 -46
  48. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +85 -34
  49. package/src/components/PlMultiSequenceAlignment/README.md +10 -8
  50. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +4 -1
  51. package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +154 -161
  52. package/src/components/PlMultiSequenceAlignment/data.ts +65 -85
  53. package/src/components/PlMultiSequenceAlignment/markup.ts +47 -15
  54. package/src/components/PlMultiSequenceAlignment/types.ts +1 -1
  55. 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('._root_1uteo_2{display:grid;grid-template-areas:"corner header" "labels sequences";text-wrap:nowrap;justify-content:start}._corner_1uteo_11{grid-area:corner;background-color:#fff;position:sticky;inset-inline-start:0;inset-block-start:0;z-index:2}._header_1uteo_20{grid-area:header;background-color:#fff;position:sticky;inset-block-start:0;z-index:1}._sequence-names_1uteo_28{display:flex;font-weight:700;line-height:20px;margin-block-end:4px;gap:20px}._labels_1uteo_36{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_1uteo_50{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;background-image:var(--10a70bbb);background-repeat:no-repeat;background-size:calc(100% - 5.8px) 100%;image-rendering:pixelated}')),document.head.appendChild(e)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();
2
- const e = "_root_1uteo_2", o = "_corner_1uteo_11", s = "_header_1uteo_20", t = "_labels_1uteo_36", _ = "_sequences_1uteo_50", n = {
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
- corner: o,
5
- header: s,
6
- "sequence-names": "_sequence-names_1uteo_28",
7
- labels: t,
8
- sequences: _
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
- o as corner,
12
- n as default,
13
- s as header,
14
- t as labels,
12
+ s as corner,
13
+ t as default,
14
+ _ as header,
15
+ n as labels,
15
16
  e as root,
16
- _ as sequences
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, {}, any>;
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":"AAoQA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEZ,6BAA6B,EAE7B,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAyB9B,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;AAmIF,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,6BAA6B,CAAC;CAC1C,GAAG,WAAW,CAAC;;;;;;AAyLhB,wBAOG"}
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 R, mergeModels as J, useModel as U, onBeforeMount as $, reactive as d, computed as v, watchEffect as x, createElementBlock as w, openBlock as m, Fragment as S, createVNode as M, createBlock as h, unref as a, withCtx as q, createTextVNode as F, toDisplayString as C, createCommentVNode as O, normalizeClass as G } from "vue";
2
- import { isJsonEqual as b } from "../../lib/util/helpers/dist/index.js";
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 { useSequenceColumnsOptions as H, useLabelColumnsOptions as K, useMarkupColumnsOptions as Q, useMultipleAlignmentData as W, sequenceLimit as z } from "./data.js";
5
- import X from "./Legend.vue.js";
6
- import { runMigrations as Y } from "./migrations.js";
7
- import Z from "./MultiSequenceAlignmentView.vue.js";
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 ee from "./Toolbar.vue.js";
9
+ import oe from "./Toolbar.vue.js";
10
10
  import P from "../../lib/ui/uikit/dist/components/PlAlert/PlAlert.vue.js";
11
- import oe from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
12
- const pe = /* @__PURE__ */ R({
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__ */ J({
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(V) {
24
- const p = U(V, "modelValue");
25
- $(() => {
26
- Y(p);
23
+ setup(x) {
24
+ const h = J(x, "modelValue");
25
+ G(() => {
26
+ ee(h);
27
27
  });
28
- const e = d({
28
+ const o = g({
29
29
  ...D
30
- }), i = V, g = d(H(() => ({
31
- pFrame: i.pFrame,
32
- sequenceColumnPredicate: i.sequenceColumnPredicate
33
- }))), f = d(K(() => ({
34
- pFrame: i.pFrame,
35
- sequenceColumnIds: e.sequenceColumnIds
36
- }))), I = d(Q(() => ({
37
- pFrame: i.pFrame,
38
- sequenceColumnIds: e.sequenceColumnIds
39
- }))), y = v(
40
- () => {
41
- var o;
42
- return ((o = e.colorScheme) == null ? void 0 : o.type) === "markup" ? e.colorScheme.columnId : void 0;
43
- }
44
- ), s = d(W(() => ({
45
- pframe: i.pFrame,
46
- sequenceColumnIds: e.sequenceColumnIds,
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
- ...(I.data ?? []).map(({ label: o, value: n }) => ({
63
- label: o,
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
- ), L = v(
71
- () => g.error ?? f.error ?? I.error ?? s.error
64
+ ), O = R(
65
+ () => C.error ?? y.error ?? v.error ?? l.error
72
66
  );
73
- function N(o) {
74
- p.value = Object.fromEntries(
75
- Object.entries({ ...p.value, ...o }).filter(([n, l]) => l !== void 0)
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
- return x(() => {
79
- var n, l;
80
- const o = Object.fromEntries(
72
+ N(() => {
73
+ var n, e;
74
+ const t = Object.fromEntries(
81
75
  Object.entries({
82
76
  ...D,
83
- sequenceColumnIds: (n = g.data) == null ? void 0 : n.defaults,
84
- labelColumnIds: (l = f.data) == null ? void 0 : l.defaults,
85
- ...p.value
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
- ([r, t]) => !b(
88
- e[r],
89
- t
81
+ ([a, r]) => !I(
82
+ o[a],
83
+ r
90
84
  )
91
85
  )
92
86
  );
93
- Object.assign(e, o);
94
- }), x(() => {
95
- var n, l, r;
96
- const o = [];
97
- (n = e.sequenceColumnIds) != null && n.some(
98
- (t) => {
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 = g.data) != null && u.options.some(
101
- ({ value: c }) => b(c, t)
94
+ return !((u = C.data) != null && u.options.some(
95
+ ({ value: d }) => I(d, s)
102
96
  ));
103
97
  }
104
- ) && o.push("sequenceColumnIds"), (l = e.labelColumnIds) != null && l.some(
105
- (t) => {
98
+ ) && t.push("sequenceColumnIds"), (a = o.labelColumnIds) != null && a.some(
99
+ (s) => {
106
100
  var u;
107
- return !((u = f.data) != null && u.options.some(
108
- ({ value: c }) => b(c, t)
101
+ return !((u = y.data) != null && u.options.some(
102
+ ({ value: d }) => I(d, s)
109
103
  ));
110
104
  }
111
- ) && o.push("labelColumnIds"), y.value && !((r = I.data) != null && r.some(
112
- ({ value: t }) => b(t, y.value)
113
- )) && o.push("colorScheme"), o.length && N(Object.fromEntries(
114
- o.map((t) => [t, void 0])
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
- }), (o, n) => {
117
- var l, r, t, u;
118
- return m(), w(S, null, [
119
- M(ee, {
120
- settings: e,
121
- "sequence-column-options": (l = g.data) == null ? void 0 : l.options,
122
- "label-column-options": (r = f.data) == null ? void 0 : r.options,
123
- "color-scheme-options": T.value,
124
- onUpdateSettings: N
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
- L.value ? (m(), h(a(P), {
166
+ O.value ? (f(), S(i(P), {
127
167
  key: 0,
128
168
  type: "error"
129
169
  }, {
130
- default: q(() => [
131
- F(C(L.value), 1)
170
+ default: b(() => [
171
+ k(q(O.value), 1)
132
172
  ]),
133
173
  _: 1
134
- })) : !s.isLoading && (((t = s.data) == null ? void 0 : t.sequences) ?? []).length < 2 ? (m(), h(a(P), {
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: q(() => n[0] || (n[0] = [
140
- F(" Please select at least one sequence column and two or more rows to run alignment ")
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
- })) : (m(), w(S, { key: 2 }, [
144
- (u = s.data) != null && u.exceedsLimit ? (m(), h(a(P), {
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: q(() => [
151
- F(" MSA visualization supports " + C(a(k)(2)) + " to " + C(a(k)(a(z))) + " sequences. Only the first " + C(a(k)(a(z))) + " will be displayed. ", 1)
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
- })) : O("", !0),
155
- M(a(oe), {
194
+ })) : A("", !0),
195
+ j(i(ne), {
156
196
  type: "transparent",
157
- class: G(o.$style.splash),
158
- loading: s.isLoading
197
+ class: K(t.$style.splash),
198
+ loading: l.isLoading
159
199
  }, {
160
- default: q(() => {
161
- var c, j, E, _, A, B;
200
+ default: b(() => {
201
+ var s;
162
202
  return [
163
- (c = s.data) != null && c.sequences.length ? (m(), w(S, { key: 0 }, [
164
- M(Z, {
165
- "sequence-names": s.data.sequenceNames,
166
- sequences: s.data.sequences,
167
- "label-rows": s.data.labelsRows,
168
- "residue-counts": s.data.residueCounts,
169
- "highlight-image-blob": (j = s.data.highlightImage) == null ? void 0 : j.blob,
170
- consensus: ((E = e.widgets) == null ? void 0 : E.includes("consensus")) ?? !1,
171
- "seq-logo": ((_ = e.widgets) == null ? void 0 : _.includes("seqLogo")) ?? !1
172
- }, null, 8, ["sequence-names", "sequences", "label-rows", "residue-counts", "highlight-image-blob", "consensus", "seq-logo"]),
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
- pe as default
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":";;;;;;;;;;;;;;;;;;;;;;;AA6BM,UAAAA,IAAQC,EAA0CC,GAAA,YAAgB;AAExE,IAAAC,EAAc,MAAM;AAClB,MAAAC,EAAcJ,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,IAAiBC;AAAA,MAAS,MAC9B;;AAAA,iBAAAC,IAAAZ,EAAS,gBAAT,gBAAAY,EAAsB,UAAS,WAC3BZ,EAAS,YAAY,WACrB;AAAA;AAAA,IACN,GAEMa,IAAwBZ,EAASa,EAAyB,OAAO;AAAA,MACrE,QAAQX,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,gBAAgBA,EAAS;AAAA,MACzB,gBAAgBU,EAAe;AAAA,MAC/B,WAAWP,EAAM;AAAA,MACjB,aAAaH,EAAS;AAAA,MACtB,iBAAiBA,EAAS;AAAA,MAC1B,CAAC,GAEGe,IAAe,IAAI,KAAK,aAAa,IAAI,EAAE,QAE3CC,IAAqBL;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,IAAIH,EAAc,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,OAAAS,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,IAAQR;AAAA,MAAS,MACrBP,EAAgB,SACbE,EAAa,SACbE,EAAc,SACdK,EAAsB;AAAA,IAC3B;AAEA,aAASO,EACPC,GACA;AACA,MAAA1B,EAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,EAAE,GAAGA,EAAM,OAAO,GAAG0B,EAAA,CAAe,EAChD,OAAO,CAAC,CAACC,GAAMJ,CAAK,MAAMA,MAAU,MAAS;AAAA,MAClD;AAAA,IAAA;AAGF,WAAAK,EAAY,MAAM;;AAChB,YAAMC,IAAmD,OAAO;AAAA,QAC9D,OAAO,QAAQ;AAAA,UACb,GAAGtB;AAAA,UACH,oBAAmBU,IAAAR,EAAgB,SAAhB,gBAAAQ,EAAsB;AAAA,UACzC,iBAAgBa,IAAAnB,EAAa,SAAb,gBAAAmB,EAAmB;AAAA,UACnC,GAAG9B,EAAM;AAAA,QACV,CAAA,EAAE;AAAA,UAAO,CAAC,CAAC+B,GAAKR,CAAK,MACpB,CAACS;AAAAA,YACC3B,EAAS0B,CAA6C;AAAA,YACtDR;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AACO,aAAA,OAAOlB,GAAUwB,CAAK;AAAA,IAAA,CAC9B,GAGDD,EAAY,MAAM;;AAChB,YAAMK,IAA8D,CAAC;AACrE,OACEhB,IAAAZ,EAAS,sBAAT,QAAAY,EAA4B;AAAA,QAAK,CAACiB,MAAA;;AAChC,oBAACjB,IAAAR,EAAgB,SAAhB,QAAAQ,EAAsB,QAAQ;AAAA,YAC7B,CAAC,EAAE,OAAAM,EAAA,MAAYS,EAAYT,GAAOW,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,mBAAmB,IAGxCH,IAAAzB,EAAS,mBAAT,QAAAyB,EAAyB;AAAA,QAAK,CAACI,MAAA;;AAC7B,oBAACjB,IAAAN,EAAa,SAAb,QAAAM,EAAmB,QAAQ;AAAA,YAC1B,CAAC,EAAE,OAAAM,EAAA,MAAYS,EAAYT,GAAOW,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,gBAAgB,GAGrClB,EAAe,SACZ,GAACoB,IAAAtB,EAAc,SAAd,QAAAsB,EAAoB;AAAA,QACtB,CAAC,EAAE,OAAAZ,QAAYS,EAAYT,GAAOR,EAAe,KAAK;AAAA,YAGxDkB,EAAgB,KAAK,aAAa,GAEhCA,EAAgB,UAClBR,EAAc,OAAO;AAAA,QACnBQ,EAAgB,IAAI,CAACF,MAAQ,CAACA,GAAK,MAAS,CAAC;AAAA,MAAA,CAC9C;AAAA,IACH,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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":"AA4NA,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;;;;;;AAydF,wBAOG"}
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"}