@platforma-sdk/ui-vue 1.42.53 → 1.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.turbo/turbo-build.log +213 -207
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +20 -0
  4. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  5. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  6. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +6 -0
  7. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +1 -0
  8. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +5 -0
  9. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +1 -0
  10. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +2 -3
  11. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  12. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +11 -12
  13. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  14. package/dist/components/PlAgRowNumHeader.vue.js +8 -9
  15. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  16. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.d.ts +1 -0
  17. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js +48 -46
  18. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js.map +1 -1
  19. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js +5 -7
  20. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js.map +1 -1
  21. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +14 -13
  22. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js.map +1 -1
  23. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +9 -8
  24. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +16 -9
  25. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +117 -85
  26. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  27. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +25 -18
  28. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  29. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.d.ts +8 -0
  30. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js +10 -0
  31. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js.map +1 -0
  32. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js +77 -0
  33. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js.map +1 -0
  34. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js +9 -0
  35. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js.map +1 -0
  36. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +26 -18
  37. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +119 -120
  38. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  39. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js +7 -124
  40. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js.map +1 -1
  41. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js +124 -2
  42. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js.map +1 -1
  43. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js +9 -0
  44. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js.map +1 -0
  45. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +90 -90
  46. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  47. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js +9 -7
  48. package/dist/components/PlMultiSequenceAlignment/cell-size.d.ts +4 -0
  49. package/dist/components/PlMultiSequenceAlignment/cell-size.js +8 -0
  50. package/dist/components/PlMultiSequenceAlignment/cell-size.js.map +1 -0
  51. package/dist/components/PlMultiSequenceAlignment/data.d.ts +15 -10
  52. package/dist/components/PlMultiSequenceAlignment/data.js +309 -202
  53. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  54. package/dist/components/PlMultiSequenceAlignment/markup.js +9 -7
  55. package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
  56. package/dist/components/PlMultiSequenceAlignment/migrations.js +15 -13
  57. package/dist/components/PlMultiSequenceAlignment/migrations.js.map +1 -1
  58. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.d.ts +6 -0
  59. package/dist/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.d.ts +7 -0
  60. package/dist/components/PlMultiSequenceAlignment/settings.js +3 -4
  61. package/dist/components/PlMultiSequenceAlignment/settings.js.map +1 -1
  62. package/dist/index.js +25 -27
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib.d.ts +1 -2
  65. package/package.json +6 -6
  66. package/src/components/PlMultiSequenceAlignment/Consensus.vue +38 -39
  67. package/src/components/PlMultiSequenceAlignment/Legend.vue +9 -9
  68. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +222 -126
  69. package/src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue +110 -0
  70. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +28 -22
  71. package/src/components/PlMultiSequenceAlignment/SeqLogo.vue +77 -69
  72. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +47 -39
  73. package/src/components/PlMultiSequenceAlignment/cell-size.ts +4 -0
  74. package/src/components/PlMultiSequenceAlignment/data.ts +361 -149
  75. package/src/components/PlMultiSequenceAlignment/markup.ts +10 -8
  76. package/src/components/PlMultiSequenceAlignment/migrations.ts +6 -1
  77. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.ts +54 -0
  78. package/src/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.ts +89 -0
  79. package/src/components/PlMultiSequenceAlignment/settings.ts +1 -2
  80. package/src/lib.ts +1 -3
  81. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.d.ts +0 -7
  82. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.js +0 -51
  83. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.js.map +0 -1
  84. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.ts +0 -101
@@ -1,16 +1,16 @@
1
- import { defineComponent as U, mergeModels as J, useModel as G, onBeforeMount as H, reactive as h, computed as R, watchEffect as A, useTemplateRef as K, createElementBlock as L, openBlock as p, Fragment as N, createVNode as T, createBlock as S, unref as m, withCtx as b, createTextVNode as w, toDisplayString as q, createCommentVNode as V, normalizeClass as Q } from "vue";
2
- import { isJsonEqual as v } from "../../lib/util/helpers/dist/objects.js";
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 "../../lib/util/helpers/dist/objects.js";
3
3
  import "../../lib/util/helpers/dist/test_timeouts.js";
4
- import { PlAlert as P, PlSplash as W } from "@milaboratories/uikit";
5
- import { getRawPlatformaInstance as X } from "@platforma-sdk/model";
6
- import { useSequenceColumnsOptions as Y, useLabelColumnsOptions as Z, useMarkupColumnsOptions as ee, useMultipleAlignmentData as te, sequenceLimit as j } from "./data.js";
7
- import { runMigrations as oe } from "./migrations.js";
8
- import ne from "./MultiSequenceAlignmentView.vue.js";
9
- import { defaultSettings as D } from "./settings.js";
10
- import se from "./Toolbar.vue.js";
11
- const ge = /* @__PURE__ */ U({
4
+ import { PlAlert as P, PlSplash as Z } from "@milaboratories/uikit";
5
+ import { getRawPlatformaInstance as ee } from "@platforma-sdk/model";
6
+ import { useSequenceColumnsOptions as te, useLabelColumnsOptions as oe, useMarkupColumnsOptions as ne, useMultipleAlignmentData as le, SEQUENCE_LIMIT as _ } from "./data.js";
7
+ import { runMigrations as se } from "./migrations.js";
8
+ import ae from "./MultiSequenceAlignmentView.vue.js";
9
+ import { defaultSettings as j } from "./settings.js";
10
+ import re from "./Toolbar.vue.js";
11
+ const Ce = /* @__PURE__ */ J({
12
12
  __name: "PlMultiSequenceAlignment",
13
- props: /* @__PURE__ */ J({
13
+ props: /* @__PURE__ */ Q({
14
14
  pFrame: {},
15
15
  sequenceColumnPredicate: { type: Function },
16
16
  selection: {}
@@ -20,29 +20,30 @@ const ge = /* @__PURE__ */ U({
20
20
  }),
21
21
  emits: ["update:modelValue"],
22
22
  setup(k) {
23
- const C = G(k, "modelValue");
23
+ const y = G(k, "modelValue");
24
24
  H(() => {
25
- oe(C);
25
+ se(y);
26
26
  });
27
- const o = h({
28
- ...D
29
- }), u = k, f = h(Y(() => ({
30
- pFrame: u.pFrame,
31
- sequenceColumnPredicate: u.sequenceColumnPredicate
32
- }))), g = h(Z(() => ({
33
- pFrame: u.pFrame,
34
- sequenceColumnIds: o.sequenceColumnIds
35
- }))), y = h(ee(() => ({
36
- pFrame: u.pFrame,
37
- sequenceColumnIds: o.sequenceColumnIds
38
- }))), l = h(te(() => ({
39
- pFrame: u.pFrame,
40
- sequenceColumnIds: o.sequenceColumnIds,
41
- labelColumnIds: o.labelColumnIds,
42
- selection: u.selection,
43
- colorScheme: o.colorScheme,
44
- alignmentParams: o.alignmentParams
45
- }))), I = new Intl.NumberFormat("en").format, _ = R(
27
+ const t = h({
28
+ ...j
29
+ }), c = k, B = K(), g = h(te(() => ({
30
+ pFrame: c.pFrame,
31
+ sequenceColumnPredicate: c.sequenceColumnPredicate
32
+ }))), f = h(oe(() => ({
33
+ pFrame: c.pFrame,
34
+ sequenceColumnIds: t.sequenceColumnIds
35
+ }))), C = h(ne(() => ({
36
+ pFrame: c.pFrame,
37
+ sequenceColumnIds: t.sequenceColumnIds
38
+ }))), s = h(le(() => ({
39
+ pFrame: c.pFrame,
40
+ sequenceColumnIds: t.sequenceColumnIds,
41
+ labelColumnIds: t.labelColumnIds,
42
+ selection: c.selection,
43
+ colorScheme: t.colorScheme,
44
+ alignmentParams: t.alignmentParams,
45
+ shouldBuildPhylogeneticTree: t.widgets.includes("tree")
46
+ }))), I = new Intl.NumberFormat("en").format, D = T(
46
47
  () => [
47
48
  {
48
49
  label: "Chemical Properties",
@@ -52,127 +53,129 @@ const ge = /* @__PURE__ */ U({
52
53
  label: "No Color",
53
54
  value: { type: "no-color" }
54
55
  },
55
- ...(y.data ?? []).map(({ label: t, value: n }) => ({
56
- label: t,
56
+ ...(C.data ?? []).map(({ label: o, value: n }) => ({
57
+ label: o,
57
58
  value: {
58
59
  type: "markup",
59
- columnId: n
60
+ columnIds: n
60
61
  }
61
62
  }))
62
63
  ]
63
- ), x = R(
64
- () => f.error ?? g.error ?? y.error ?? l.error
64
+ ), x = T(
65
+ () => g.error ?? f.error ?? C.error ?? s.error
65
66
  );
66
- function F(t) {
67
- C.value = Object.fromEntries(
68
- Object.entries({ ...C.value, ...t }).filter(([n, e]) => e !== void 0)
67
+ function E(o) {
68
+ y.value = Object.fromEntries(
69
+ Object.entries({ ...y.value, ...o }).filter(([n, e]) => e !== void 0)
69
70
  );
70
71
  }
71
- A(() => {
72
+ L(() => {
72
73
  var n, e;
73
- const t = Object.fromEntries(
74
+ const o = Object.fromEntries(
74
75
  Object.entries({
75
- ...D,
76
- sequenceColumnIds: (n = f.data) == null ? void 0 : n.defaults,
77
- labelColumnIds: (e = g.data) == null ? void 0 : e.defaults,
78
- ...C.value
76
+ ...j,
77
+ sequenceColumnIds: (n = g.data) == null ? void 0 : n.defaults,
78
+ labelColumnIds: (e = f.data) == null ? void 0 : e.defaults,
79
+ ...y.value
79
80
  }).filter(
80
- ([s, r]) => !v(
81
- o[s],
82
- r
81
+ ([l, a]) => !q(
82
+ t[l],
83
+ a
83
84
  )
84
85
  )
85
86
  );
86
- Object.assign(o, t);
87
- }), A(() => {
88
- var e, s, r;
89
- const t = [];
90
- !f.isLoading && ((e = o.sequenceColumnIds) != null && e.some(
91
- (a) => {
92
- var i;
93
- return (((i = f.data) == null ? void 0 : i.options) ?? []).every(
94
- ({ value: c }) => !v(c, a)
87
+ Object.assign(t, o);
88
+ }), L(() => {
89
+ var e, l, a;
90
+ const o = [];
91
+ !g.isLoading && ((e = t.sequenceColumnIds) != null && e.some(
92
+ (i) => {
93
+ var m;
94
+ return (((m = g.data) == null ? void 0 : m.options) ?? []).every(
95
+ ({ value: u }) => !q(u, i)
95
96
  );
96
97
  }
97
- )) && t.push("sequenceColumnIds"), !g.isLoading && ((s = o.labelColumnIds) != null && s.some(
98
- (a) => {
99
- var i;
100
- return (((i = g.data) == null ? void 0 : i.options) ?? []).every(
101
- ({ value: c }) => !v(c, a)
98
+ )) && o.push("sequenceColumnIds"), !f.isLoading && ((l = t.labelColumnIds) != null && l.some(
99
+ (i) => {
100
+ var m;
101
+ return (((m = f.data) == null ? void 0 : m.options) ?? []).every(
102
+ ({ value: u }) => !q(u, i)
102
103
  );
103
104
  }
104
- )) && t.push("labelColumnIds");
105
- const n = ((r = o.colorScheme) == null ? void 0 : r.type) === "markup" ? o.colorScheme.columnId : void 0;
106
- !y.isLoading && n && (y.data ?? []).every(
107
- ({ value: a }) => !v(a, n)
108
- ) && t.push("colorScheme"), t.length && F(Object.fromEntries(
109
- t.map((a) => [a, void 0])
105
+ )) && o.push("labelColumnIds");
106
+ const n = ((a = t.colorScheme) == null ? void 0 : a.type) === "markup" ? t.colorScheme.columnIds : void 0;
107
+ !C.isLoading && n && (C.data ?? []).every(
108
+ ({ value: i }) => !q(i, n)
109
+ ) && o.push("colorScheme"), o.length && E(Object.fromEntries(
110
+ o.map((i) => [i, void 0])
110
111
  ));
111
112
  });
112
- const $ = K("msa");
113
- async function z() {
114
- var O, E, M;
115
- const t = (E = (O = X()) == null ? void 0 : O.lsDriver) == null ? void 0 : E.exportToPdf;
116
- if (!t)
113
+ const z = W("msa");
114
+ async function U() {
115
+ var M, F, O;
116
+ const o = (F = (M = ee()) == null ? void 0 : M.lsDriver) == null ? void 0 : F.exportToPdf;
117
+ if (!o)
117
118
  return console.error(
118
119
  "API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
119
120
  );
120
- const n = (M = $.value) == null ? void 0 : M.rootEl;
121
+ const n = (O = z.value) == null ? void 0 : O.rootEl;
121
122
  if (!n)
122
123
  throw new Error("MSA element is not available.");
123
124
  const e = document.createElement("div");
124
125
  e.id = `print-target-${crypto.randomUUID()}`;
125
- const s = new CSSStyleSheet();
126
- document.adoptedStyleSheets.push(s), s.insertRule(`
126
+ const l = new CSSStyleSheet();
127
+ document.adoptedStyleSheets.push(l), l.insertRule(`
127
128
  @media screen {
128
129
  #${e.id} {
129
130
  visibility: hidden;
130
131
  position: fixed;
131
132
  }
132
133
  }`);
133
- const r = n.cloneNode(!0);
134
- r.dataset.prePrint = "", e.replaceChildren(r), document.body.appendChild(e);
135
- const { height: a, width: i } = e.getBoundingClientRect(), c = CSS.cm(1), B = [i, a].map((d) => CSS.px(d).add(c.mul(2))).join(" ");
136
- s.insertRule(`
134
+ const a = n.cloneNode(!0);
135
+ a.dataset.prePrint = "", e.replaceChildren(a), document.body.appendChild(e);
136
+ const { height: i, width: m } = e.getBoundingClientRect(), u = CSS.cm(1), $ = [m, i].map((d) => CSS.px(d).add(u.mul(2))).join(" ");
137
+ l.insertRule(`
137
138
  @media print {
138
139
  @page {
139
- size: ${B};
140
- margin: ${c};
140
+ size: ${$};
141
+ margin: ${u};
141
142
  }
142
143
  body > :not(#${e.id}) {
143
144
  display: none;
144
145
  }
145
146
  }`);
146
147
  try {
147
- await t();
148
+ await o();
148
149
  } catch (d) {
149
150
  console.error(d);
150
151
  } finally {
151
152
  document.body.removeChild(e);
152
- const d = document.adoptedStyleSheets.indexOf(s);
153
+ const d = document.adoptedStyleSheets.indexOf(l);
153
154
  d >= 0 && document.adoptedStyleSheets.splice(d, 1);
154
155
  }
155
156
  }
156
- return (t, n) => {
157
- var e, s, r, a;
158
- return p(), L(N, null, [
159
- T(se, {
160
- settings: o,
161
- "sequence-column-options": (e = f.data) == null ? void 0 : e.options,
162
- "label-column-options": (s = g.data) == null ? void 0 : s.options,
163
- "color-scheme-options": _.value,
164
- onUpdateSettings: F,
165
- onExport: z
157
+ return X(() => {
158
+ s.data = void 0;
159
+ }), (o, n) => {
160
+ var e, l, a;
161
+ return p(), A(N, null, [
162
+ R(re, {
163
+ settings: t,
164
+ "sequence-column-options": (e = g.data) == null ? void 0 : e.options,
165
+ "label-column-options": (l = f.data) == null ? void 0 : l.options,
166
+ "color-scheme-options": D.value,
167
+ onUpdateSettings: E,
168
+ onExport: U
166
169
  }, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
167
- x.value ? (p(), S(m(P), {
170
+ x.value ? (p(), S(r(P), {
168
171
  key: 0,
169
172
  type: "error"
170
173
  }, {
171
174
  default: b(() => [
172
- w(q(x.value), 1)
175
+ w(v(x.value), 1)
173
176
  ]),
174
177
  _: 1
175
- })) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (p(), S(m(P), {
178
+ })) : !s.isLoading && !s.data ? (p(), S(r(P), {
176
179
  key: 1,
177
180
  type: "warn",
178
181
  icon: ""
@@ -181,38 +184,34 @@ const ge = /* @__PURE__ */ U({
181
184
  w(" Please select at least one sequence column and two or more rows to run alignment ")
182
185
  ])),
183
186
  _: 1
184
- })) : (p(), L(N, { key: 2 }, [
185
- (a = l.data) != null && a.exceedsLimit ? (p(), S(m(P), {
187
+ })) : (p(), A(N, { key: 2 }, [
188
+ (a = s.data) != null && a.exceedsLimit ? (p(), S(r(P), {
186
189
  key: 0,
187
190
  type: "warn",
188
191
  icon: "",
189
192
  label: "Visualization is limited"
190
193
  }, {
191
194
  default: b(() => [
192
- w(" MSA visualization supports " + q(m(I)(2)) + " to " + q(m(I)(m(j))) + " sequences. Only the first " + q(m(I)(m(j))) + " will be displayed. ", 1)
195
+ 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)
193
196
  ]),
194
197
  _: 1
195
198
  })) : V("", !0),
196
- T(m(W), {
199
+ R(r(Z), {
197
200
  type: "transparent",
198
- class: Q(t.$style.splash),
199
- loading: l.isLoading
201
+ class: Y(r(B).splash),
202
+ loading: s.isLoading
200
203
  }, {
201
- default: b(() => {
202
- var i;
203
- return [
204
- (i = l.data) != null && i.sequences.length ? (p(), S(ne, {
205
- key: 0,
206
- ref: "msa",
207
- sequences: l.data.sequences,
208
- "sequence-names": l.data.sequenceNames,
209
- "label-rows": l.data.labelRows,
210
- "residue-counts": l.data.residueCounts,
211
- "highlight-image": l.data.highlightImage,
212
- widgets: o.widgets
213
- }, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : V("", !0)
214
- ];
215
- }),
204
+ default: b(() => [
205
+ s.data ? (p(), S(ae, {
206
+ key: 0,
207
+ ref: "msa",
208
+ sequences: s.data.sequences,
209
+ labels: s.data.labels,
210
+ "highlight-legend": s.data.highlightLegend,
211
+ "phylogenetic-tree": s.data.phylogeneticTree,
212
+ widgets: t.widgets
213
+ }, null, 8, ["sequences", "labels", "highlight-legend", "phylogenetic-tree", "widgets"])) : V("", !0)
214
+ ]),
216
215
  _: 1
217
216
  }, 8, ["class", "loading"])
218
217
  ], 64))
@@ -221,6 +220,6 @@ const ge = /* @__PURE__ */ U({
221
220
  }
222
221
  });
223
222
  export {
224
- ge as default
223
+ Ce as default
225
224
  };
226
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 {\n getRawPlatformaInstance,\n type PColumnPredicate,\n type PFrameHandle,\n type PlMultiSequenceAlignmentColorSchemeOption,\n type PlMultiSequenceAlignmentModel,\n type PlMultiSequenceAlignmentSettings,\n type PlSelectionModel,\n} from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n reactive,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n !sequenceColumns.isLoading\n && settings.sequenceColumnIds?.some((id) =>\n (sequenceColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n !labelColumns.isLoading\n && settings.labelColumnIds?.some((id) =>\n (labelColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n !markupColumns.isLoading\n && markupColumnId\n && (markupColumns.data ?? []).every(\n ({ value }) => !isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n const msaClone = msaRoot.cloneNode(true) as HTMLElement;\n msaClone.dataset.prePrint = '';\n printTarget.replaceChildren(msaClone);\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","msaClone","height","width","margin","pageSize","index"],"mappings":"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"}
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 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"],"mappings":"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"}
@@ -1,127 +1,10 @@
1
- import { defineComponent as b, useTemplateRef as k, computed as f, shallowRef as w, watchEffect as C, onBeforeUnmount as E, createBlock as x, createElementBlock as D, unref as r, openBlock as d, withCtx as K, createTextVNode as B, toDisplayString as _ } from "vue";
2
- import { PlAlert as A } from "@milaboratories/uikit";
3
- import { useMiPlots as G } from "./useMiPlots.js";
4
- const P = /* @__PURE__ */ b({
5
- __name: "SeqLogo",
6
- props: {
7
- residueCounts: {}
8
- },
9
- setup(s) {
10
- const l = k("plotEl"), e = {
11
- blue: "#549EE7",
12
- red: "#E85456",
13
- green: "#65BF65",
14
- magenta: "#9178E1",
15
- pink: "#D568D5",
16
- orange: "#C59445",
17
- cyan: "#62C7CC",
18
- yellow: "#D5D549",
19
- black: "#000000"
20
- }, y = {
21
- A: e.blue,
22
- R: e.red,
23
- N: e.green,
24
- D: e.magenta,
25
- C: e.pink,
26
- Q: e.green,
27
- E: e.magenta,
28
- G: e.orange,
29
- H: e.cyan,
30
- I: e.blue,
31
- L: e.blue,
32
- K: e.red,
33
- M: e.blue,
34
- F: e.blue,
35
- P: e.yellow,
36
- S: e.green,
37
- T: e.green,
38
- W: e.blue,
39
- Y: e.cyan,
40
- V: e.blue,
41
- B: e.black,
42
- X: e.black,
43
- Z: e.black
44
- }, n = f(() => ({
45
- type: "discrete",
46
- title: {
47
- name: "",
48
- show: !1
49
- },
50
- size: {
51
- width: s.residueCounts.length * 20,
52
- height: 80,
53
- innerOffset: 0,
54
- outerOffset: 0
55
- },
56
- frame: {
57
- type: "empty"
58
- },
59
- xAxis: {
60
- title: "",
61
- showGrid: !1,
62
- showTicks: !1,
63
- hiddenLabels: !0
64
- },
65
- yAxis: {
66
- title: "",
67
- showGrid: !1,
68
- showTicks: !1,
69
- hiddenLabels: !0
70
- },
71
- y: {
72
- type: "column",
73
- value: "countKey"
74
- },
75
- primaryGrouping: {
76
- columnName: {
77
- type: "column",
78
- value: "columnKey"
79
- }
80
- },
81
- secondaryGrouping: {
82
- columnName: {
83
- type: "column",
84
- value: "residueKey"
85
- }
86
- },
87
- layers: [{
88
- type: "logo",
89
- aes: { fillColor: y }
90
- }]
91
- })), a = f(
92
- () => {
93
- const t = [], u = [], m = [];
94
- for (const [g, v] of s.residueCounts.entries())
95
- for (const [p, h] of Object.entries(v))
96
- p !== "-" && (t.push(h), u.push(g), m.push(p));
97
- return {
98
- type: "columns",
99
- id: `seq-logo-${crypto.randomUUID()}`,
100
- values: { countKey: t, columnKey: u, residueKey: m }
101
- };
102
- }
103
- ), { miplots: c, error: i } = G(), o = w();
104
- return C(async () => {
105
- !n.value || !l.value || !c.value || (o.value ? o.value.updateSettingsAndData(a.value, n.value) : (o.value = c.value.newPlot(a.value, n.value), o.value.mount(l.value)));
106
- }), E(() => {
107
- var t;
108
- (t = o.value) == null || t.unmount();
109
- }), (t, u) => r(i) ? (d(), x(r(A), {
110
- key: 0,
111
- type: "error"
112
- }, {
113
- default: K(() => [
114
- B(_(r(i).message), 1)
115
- ]),
116
- _: 1
117
- })) : (d(), D("div", {
118
- key: 1,
119
- ref_key: "plotEl",
120
- ref: l
121
- }, null, 512));
122
- }
123
- });
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]]);
124
7
  export {
125
- P as default
8
+ f as default
126
9
  };
127
10
  //# sourceMappingURL=SeqLogo.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SeqLogo.vue.js","sources":["../../../src/components/PlMultiSequenceAlignment/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 useTemplateRef,\n watchEffect,\n} from 'vue';\nimport type { ResidueCounts } from './types';\nimport { useMiPlots } from './useMiPlots';\n\nconst { residueCounts } = defineProps<{\n residueCounts: ResidueCounts;\n}>();\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<Settings | undefined>(() => {\n return ({\n type: 'discrete',\n title: {\n name: '',\n show: false,\n },\n size: {\n width: residueCounts.length * 20,\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 });\n});\n\nconst data = computed<DataByColumns>(\n () => {\n const countKey: number[] = [];\n const columnKey: number[] = [];\n const residueKey: string[] = [];\n for (const [columnIndex, column] of 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);\n\nconst { miplots, error } = useMiPlots();\n\nconst plot = shallowRef<ChartInterface>();\n\nwatchEffect(async () => {\n if (!settings.value || !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\" />\n</template>\n"],"names":["plotEl","useTemplateRef","palette","residueColors","settings","computed","__props","data","countKey","columnKey","residueKey","columnIndex","column","residue","count","miplots","error","useMiPlots","plot","shallowRef","watchEffect","onBeforeUnmount","_a"],"mappings":"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"}
1
+ {"version":3,"file":"SeqLogo.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}