@platforma-sdk/ui-vue 1.42.3 → 1.42.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +16 -16
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +15 -0
  4. package/dist/aggrid.js +4 -4
  5. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +7 -7
  6. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +13 -13
  7. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
  8. package/dist/components/PlAgDataTable/sources/table-source-v2.js +88 -85
  9. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  10. package/dist/components/PlAgDataTable/sources/table-state-v2.js +6 -6
  11. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +10 -10
  12. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -2
  13. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
  14. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +37 -29
  15. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  16. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +18 -14
  17. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  18. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
  19. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +100 -98
  20. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  21. package/dist/components/PlMultiSequenceAlignment/data.d.ts +1 -1
  22. package/dist/components/PlMultiSequenceAlignment/data.js +41 -41
  23. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  24. package/dist/components/PlTableFilters/filters-state.js +2 -2
  25. package/dist/defineApp.js +16 -16
  26. package/dist/internal/createAppV2.js +9 -9
  27. package/dist/lib/model/common/dist/index.js +329 -317
  28. package/dist/lib/model/common/dist/index.js.map +1 -1
  29. package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue2.js → ExpandTransition.vue.js} +1 -1
  30. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
  31. package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
  32. package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js +16 -16
  33. package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  34. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +8 -8
  35. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
  36. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +18 -18
  37. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
  38. package/dist/sdk/model/dist/index.js +198 -206
  39. package/dist/sdk/model/dist/index.js.map +1 -1
  40. package/package.json +5 -5
  41. package/src/components/PlAgDataTable/sources/table-source-v2.ts +9 -6
  42. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +65 -18
  43. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +16 -11
  44. package/src/components/PlMultiSequenceAlignment/data.ts +10 -10
  45. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent as I, useCssVars as R, computed as v, useTemplateRef as N, createElementBlock as l, openBlock as s, normalizeClass as n, createElementVNode as r, createBlock as g, createCommentVNode as a, Fragment as o, renderList as d, normalizeStyle as q, toDisplayString as m } from "vue";
1
+ import { defineComponent as I, useCssVars as R, computed as f, useTemplateRef as N, createElementBlock as l, openBlock as s, normalizeClass as n, createElementVNode as t, createBlock as g, createCommentVNode as a, Fragment as i, renderList as d, normalizeStyle as b, toDisplayString as m } from "vue";
2
2
  import { useObjectUrl as L } from "../../node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js";
3
3
  import S from "./Consensus.vue.js";
4
4
  import V from "./Legend.vue.js";
@@ -13,48 +13,52 @@ const A = /* @__PURE__ */ I({
13
13
  highlightImage: {},
14
14
  widgets: {}
15
15
  },
16
- setup(c, { expose: k }) {
16
+ setup(c, { expose: q }) {
17
17
  R((e) => ({
18
- "3cff4522": C.value
18
+ "861533c4": k.value
19
19
  }));
20
- const b = N("rootRef");
21
- k({ rootEl: b });
20
+ const $ = N("rootRef");
21
+ q({ rootEl: $ });
22
22
  const h = L(() => {
23
23
  var e;
24
24
  return (e = c.highlightImage) == null ? void 0 : e.blob;
25
- }), C = v(
25
+ }), k = f(
26
26
  () => h.value ? `url('${h.value}')` : "none"
27
- ), $ = v(
27
+ ), C = f(
28
28
  () => {
29
29
  var e;
30
- return (e = c.sequences.at(0)) == null ? void 0 : e.split(" ").map(({ length: p }) => p);
30
+ return (e = c.sequences.at(0)) == null ? void 0 : e.split(" ").map(({ length: y }) => y);
31
31
  }
32
32
  );
33
- return (e, p) => {
34
- var y, f;
33
+ return (e, y) => {
34
+ var p, v;
35
35
  return s(), l("div", {
36
36
  ref: "rootRef",
37
37
  class: n(e.$style.root)
38
38
  }, [
39
- r("div", {
39
+ t("div", {
40
40
  class: n(["pl-scrollable", e.$style.table])
41
41
  }, [
42
- r("div", {
42
+ t("div", {
43
43
  class: n(e.$style.corner)
44
- }, null, 2),
45
- r("div", {
44
+ }, [
45
+ t("div", {
46
+ class: n(e.$style["label-scroll-indicator"])
47
+ }, null, 2)
48
+ ], 2),
49
+ t("div", {
46
50
  class: n(e.$style.header)
47
51
  }, [
48
52
  e.sequenceNames.length > 1 ? (s(), l("div", {
49
53
  key: 0,
50
54
  class: n(e.$style["sequence-names"])
51
55
  }, [
52
- (s(!0), l(o, null, d(e.sequenceNames, (u, t) => {
53
- var i;
56
+ (s(!0), l(i, null, d(e.sequenceNames, (u, r) => {
57
+ var o;
54
58
  return s(), l("span", {
55
- key: t,
56
- style: q({
57
- inlineSize: (((i = $.value) == null ? void 0 : i.at(t)) ?? 0) * 20 + "px"
59
+ key: r,
60
+ style: b({
61
+ inlineSize: (((o = C.value) == null ? void 0 : o.at(r)) ?? 0) * 20 + "px"
58
62
  })
59
63
  }, m(u), 5);
60
64
  }), 128))
@@ -68,23 +72,27 @@ const A = /* @__PURE__ */ I({
68
72
  "residue-counts": e.residueCounts
69
73
  }, null, 8, ["residue-counts"])) : a("", !0)
70
74
  ], 2),
71
- r("div", {
75
+ t("div", {
72
76
  class: n(e.$style.labels)
73
77
  }, [
74
- (s(!0), l(o, null, d(e.labelRows, (u, t) => (s(), l(o, null, [
75
- (s(!0), l(o, null, d(u, (i, w) => (s(), l("div", {
76
- key: w,
77
- style: q({ gridRow: t + 1 })
78
- }, m(i), 5))), 128))
79
- ], 64))), 256))
78
+ t("div", {
79
+ class: n(e.$style["labels-grid"])
80
+ }, [
81
+ (s(!0), l(i, null, d(e.labelRows, (u, r) => (s(), l(i, null, [
82
+ (s(!0), l(i, null, d(u, (o, w) => (s(), l("div", {
83
+ key: w,
84
+ style: b({ gridRow: r + 1 })
85
+ }, m(o), 5))), 128))
86
+ ], 64))), 256))
87
+ ], 2)
80
88
  ], 2),
81
- r("div", {
89
+ t("div", {
82
90
  class: n(e.$style.sequences)
83
91
  }, [
84
- (s(!0), l(o, null, d(e.sequences, (u, t) => (s(), l("div", { key: t }, m(u), 1))), 128))
92
+ (s(!0), l(i, null, d(e.sequences, (u, r) => (s(), l("div", { key: r }, m(u), 1))), 128))
85
93
  ], 2)
86
94
  ], 2),
87
- (y = e.widgets) != null && y.includes("legend") && ((f = e.highlightImage) != null && f.legend) ? (s(), g(V, {
95
+ (p = e.widgets) != null && p.includes("legend") && ((v = e.highlightImage) != null && v.legend) ? (s(), g(V, {
88
96
  key: 0,
89
97
  legend: e.highlightImage.legend
90
98
  }, null, 8, ["legend"])) : a("", !0)
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSequenceAlignmentView.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useObjectUrl } from '@vueuse/core';\nimport { computed, useTemplateRef } from 'vue';\nimport Consensus from './Consensus.vue';\nimport Legend from './Legend.vue';\nimport SeqLogo from './SeqLogo.vue';\nimport type { HighlightLegend, ResidueCounts } from './types';\n\nconst { sequences, highlightImage } = defineProps<{\n sequences: string[];\n sequenceNames: string[];\n labelRows: string[][];\n residueCounts: ResidueCounts;\n highlightImage: {\n blob: Blob;\n legend: HighlightLegend;\n } | undefined;\n widgets: ('consensus' | 'seqLogo' | 'legend')[];\n}>();\n\nconst rootEl = useTemplateRef('rootRef');\ndefineExpose({ rootEl });\n\nconst highlightImageObjectUrl = useObjectUrl(() => highlightImage?.blob);\nconst highlightImageCssUrl = computed(() =>\n highlightImageObjectUrl.value\n ? `url('${highlightImageObjectUrl.value}')`\n : 'none',\n);\n\nconst sequenceLengths = computed(() =>\n sequences.at(0)?.split(' ').map(({ length }) => length),\n);\n</script>\n\n<template>\n <div ref=\"rootRef\" :class=\"$style.root\">\n <div :class=\"['pl-scrollable', $style.table]\">\n <div :class=\"$style.corner\" />\n <div :class=\"$style.header\">\n <div v-if=\"sequenceNames.length > 1\" :class=\"$style['sequence-names']\">\n <span\n v-for=\"(name, index) of sequenceNames\"\n :key=\"index\"\n :style=\"{\n inlineSize: ((sequenceLengths?.at(index) ?? 0) * 20)\n + 'px',\n }\"\n >{{ name }}</span>\n </div>\n <Consensus v-if=\"widgets.includes('consensus')\" :residue-counts />\n <SeqLogo v-if=\"widgets.includes('seqLogo')\" :residue-counts />\n </div>\n <div :class=\"$style.labels\">\n <template v-for=\"(labelRow, rowIndex) of labelRows\">\n <div\n v-for=\"(label, labelIndex) of labelRow\"\n :key=\"labelIndex\"\n :style=\"{ gridRow: rowIndex + 1 }\"\n >\n {{ label }}\n </div>\n </template>\n </div>\n <div :class=\"$style.sequences\">\n <div\n v-for=\"(sequence, index) of sequences\"\n :key=\"index\"\n >\n {{ sequence }}\n </div>\n </div>\n </div>\n <Legend\n v-if=\"widgets?.includes('legend') && highlightImage?.legend\"\n :legend=\"highlightImage.legend\"\n />\n </div>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-block-size: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n}\n\n.table {\n display: grid;\n grid-template-areas:\n \"corner header\"\n \"labels sequences\";\n text-wrap: nowrap;\n justify-content: start;\n @media print {\n overflow: visible;\n }\n}\n\n.corner {\n grid-area: corner;\n background-color: white;\n position: sticky;\n inset-inline-start: 0;\n inset-block-start: 0;\n z-index: 2;\n}\n\n.header {\n grid-area: header;\n background-color: white;\n position: sticky;\n inset-block-start: 0;\n z-index: 1;\n}\n\n.sequence-names {\n display: flex;\n font-weight: 700;\n line-height: 20px;\n margin-block-end: 4px;\n gap: 20px;\n}\n\n.labels {\n grid-area: labels;\n display: grid;\n grid-auto-flow: dense;\n column-gap: 12px;\n background-color: white;\n position: sticky;\n inset-inline-start: 0;\n z-index: 1;\n padding-inline-end: 12px;\n font-family: Spline Sans Mono;\n line-height: 24px;\n}\n\n.sequences {\n grid-area: sequences;\n display: flex;\n flex-direction: column;\n font-family: Spline Sans Mono;\n font-weight: 600;\n line-height: 24px;\n letter-spacing: 11.6px;\n text-indent: 5.8px;\n margin-inline-end: -5.8px;\n background-image: v-bind(highlightImageCssUrl);\n background-repeat: no-repeat;\n background-size: calc(100% - 5.8px) 100%;\n}\n</style>\n"],"names":["rootEl","useTemplateRef","__expose","highlightImageObjectUrl","useObjectUrl","_a","__props","highlightImageCssUrl","computed","sequenceLengths","length"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBM,UAAAA,IAASC,EAAe,SAAS;AAC1B,IAAAC,EAAA,EAAE,QAAAF,GAAQ;AAEvB,UAAMG,IAA0BC,EAAa,MAAM;;AAAA,cAAAC,IAAAC,EAAA,mBAAA,gBAAAD,EAAgB;AAAA,KAAI,GACjEE,IAAuBC;AAAA,MAAS,MACpCL,EAAwB,QACpB,QAAQA,EAAwB,KAAK,OACrC;AAAA,IACN,GAEMM,IAAkBD;AAAA,MAAS,MAAA;;AAC/B,gBAAAH,IAAAC,YAAU,GAAG,CAAC,MAAd,gBAAAD,EAAiB,MAAM,KAAK,IAAI,CAAC,EAAE,QAAAK,QAAaA;AAAA;AAAA,IAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MultiSequenceAlignmentView.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useObjectUrl } from '@vueuse/core';\nimport { computed, useTemplateRef } from 'vue';\nimport Consensus from './Consensus.vue';\nimport Legend from './Legend.vue';\nimport SeqLogo from './SeqLogo.vue';\nimport type { HighlightLegend, ResidueCounts } from './types';\n\nconst { sequences, highlightImage } = defineProps<{\n sequences: string[];\n sequenceNames: string[];\n labelRows: string[][];\n residueCounts: ResidueCounts;\n highlightImage: {\n blob: Blob;\n legend: HighlightLegend;\n } | undefined;\n widgets: ('consensus' | 'seqLogo' | 'legend')[];\n}>();\n\nconst rootEl = useTemplateRef('rootRef');\ndefineExpose({ rootEl });\n\nconst highlightImageObjectUrl = useObjectUrl(() => highlightImage?.blob);\nconst highlightImageCssUrl = computed(() =>\n highlightImageObjectUrl.value\n ? `url('${highlightImageObjectUrl.value}')`\n : 'none',\n);\n\nconst sequenceLengths = computed(() =>\n sequences.at(0)?.split(' ').map(({ length }) => length),\n);\n</script>\n\n<template>\n <div ref=\"rootRef\" :class=\"$style.root\">\n <div :class=\"['pl-scrollable', $style.table]\">\n <div :class=\"$style.corner\">\n <div :class=\"$style['label-scroll-indicator']\" />\n </div>\n <div :class=\"$style.header\">\n <div v-if=\"sequenceNames.length > 1\" :class=\"$style['sequence-names']\">\n <span\n v-for=\"(name, index) of sequenceNames\"\n :key=\"index\"\n :style=\"{\n inlineSize: ((sequenceLengths?.at(index) ?? 0) * 20)\n + 'px',\n }\"\n >{{ name }}</span>\n </div>\n <Consensus v-if=\"widgets.includes('consensus')\" :residue-counts />\n <SeqLogo v-if=\"widgets.includes('seqLogo')\" :residue-counts />\n </div>\n <div :class=\"$style.labels\">\n <div :class=\"$style['labels-grid']\">\n <template v-for=\"(labelRow, rowIndex) of labelRows\">\n <div\n v-for=\"(label, labelIndex) of labelRow\"\n :key=\"labelIndex\"\n :style=\"{ gridRow: rowIndex + 1 }\"\n >\n {{ label }}\n </div>\n </template>\n </div>\n </div>\n <div :class=\"$style.sequences\">\n <div\n v-for=\"(sequence, index) of sequences\"\n :key=\"index\"\n >\n {{ sequence }}\n </div>\n </div>\n </div>\n <Legend\n v-if=\"widgets?.includes('legend') && highlightImage?.legend\"\n :legend=\"highlightImage.legend\"\n />\n </div>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-block-size: 0;\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n\n &[data-pre-print] {\n .table {\n container-type: unset;\n }\n .labels {\n max-inline-size: unset;\n }\n }\n}\n\n.table {\n container-type: inline-size;\n display: grid;\n grid-template-areas:\n \"corner header\"\n \"labels sequences\";\n justify-content: start;\n timeline-scope: --msa-labels-scroll;\n @media print {\n overflow: visible;\n }\n}\n\n.corner {\n grid-area: corner;\n background-color: #fff;\n position: sticky;\n inset-inline-start: 0;\n inset-block-start: 0;\n z-index: 2;\n}\n\n.label-scroll-indicator {\n position: absolute;\n inset-inline-end: 0;\n block-size: 100cqb;\n inline-size: 8px;\n animation-name: hide;\n animation-timeline: --msa-labels-scroll;\n visibility: hidden;\n background: #fff;\n box-shadow: -4px 0 4px -2px rgba(0, 0, 0, 0.10);\n}\n\n.header {\n grid-area: header;\n background-color: #fff;\n position: sticky;\n inset-block-start: 0;\n z-index: 1;\n}\n\n.sequence-names {\n display: flex;\n font-weight: 700;\n line-height: 20px;\n margin-block-end: 4px;\n gap: 20px;\n}\n\n.labels {\n grid-area: labels;\n background-color: #fff;\n position: sticky;\n inset-inline-start: 0;\n z-index: 1;\n inline-size: max-content;\n max-inline-size: 30cqi;\n overflow: scroll;\n scrollbar-width: none;\n overscroll-behavior-inline: none;\n scroll-timeline: --msa-labels-scroll inline;\n}\n\n.labels-grid {\n display: grid;\n grid-auto-flow: dense;\n font-family: Spline Sans Mono;\n line-height: 24px;\n text-wrap: nowrap;\n\n > * {\n padding-inline-end: 12px;\n }\n}\n\n.sequences {\n grid-area: sequences;\n display: flex;\n flex-direction: column;\n font-family: Spline Sans Mono;\n font-weight: 600;\n line-height: 24px;\n letter-spacing: 11.6px;\n text-indent: 5.8px;\n margin-inline-end: -5.8px;\n background-image: v-bind(highlightImageCssUrl);\n background-repeat: no-repeat;\n background-size: calc(100% - 5.8px) 100%;\n}\n\n@keyframes hide {\n from {\n visibility: visible;\n }\n to {\n visibility: hidden;\n }\n}\n</style>\n"],"names":["rootEl","useTemplateRef","__expose","highlightImageObjectUrl","useObjectUrl","_a","__props","highlightImageCssUrl","computed","sequenceLengths","length"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBM,UAAAA,IAASC,EAAe,SAAS;AAC1B,IAAAC,EAAA,EAAE,QAAAF,GAAQ;AAEvB,UAAMG,IAA0BC,EAAa,MAAM;;AAAA,cAAAC,IAAAC,EAAA,mBAAA,gBAAAD,EAAgB;AAAA,KAAI,GACjEE,IAAuBC;AAAA,MAAS,MACpCL,EAAwB,QACpB,QAAQA,EAAwB,KAAK,OACrC;AAAA,IACN,GAEMM,IAAkBD;AAAA,MAAS,MAAA;;AAC/B,gBAAAH,IAAAC,YAAU,GAAG,CAAC,MAAd,gBAAAD,EAAiB,MAAM,KAAK,IAAI,CAAC,EAAE,QAAAK,QAAaA;AAAA;AAAA,IAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,20 +1,24 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._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 = {
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._root_y6xw0_2{display:flex;flex-direction:column;gap:12px;min-block-size:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}._root_y6xw0_2[data-pre-print] ._table_y6xw0_11{container-type:unset}._root_y6xw0_2[data-pre-print] ._labels_y6xw0_14{max-inline-size:unset}._table_y6xw0_11{container-type:inline-size;display:grid;grid-template-areas:"corner header" "labels sequences";justify-content:start;timeline-scope:--msa-labels-scroll}@media print{._table_y6xw0_11{overflow:visible}}._corner_y6xw0_33{grid-area:corner;background-color:#fff;position:sticky;inset-inline-start:0;inset-block-start:0;z-index:2}._label-scroll-indicator_y6xw0_42{position:absolute;inset-inline-end:0;block-size:100cqb;inline-size:8px;animation-name:_hide_y6xw0_1;animation-timeline:--msa-labels-scroll;visibility:hidden;background:#fff;box-shadow:-4px 0 4px -2px #0000001a}._header_y6xw0_54{grid-area:header;background-color:#fff;position:sticky;inset-block-start:0;z-index:1}._sequence-names_y6xw0_62{display:flex;font-weight:700;line-height:20px;margin-block-end:4px;gap:20px}._labels_y6xw0_14{grid-area:labels;background-color:#fff;position:sticky;inset-inline-start:0;z-index:1;inline-size:max-content;max-inline-size:30cqi;overflow:scroll;scrollbar-width:none;overscroll-behavior-inline:none;scroll-timeline:--msa-labels-scroll inline}._labels-grid_y6xw0_84{display:grid;grid-auto-flow:dense;font-family:Spline Sans Mono;line-height:24px;text-wrap:nowrap}._labels-grid_y6xw0_84>*{padding-inline-end:12px}._sequences_y6xw0_96{grid-area:sequences;display:flex;flex-direction:column;font-family:Spline Sans Mono;font-weight:600;line-height:24px;letter-spacing:11.6px;text-indent:5.8px;margin-inline-end:-5.8px;background-image:var(--861533c4);background-repeat:no-repeat;background-size:calc(100% - 5.8px) 100%}@keyframes _hide_y6xw0_1{0%{visibility:visible}to{visibility:hidden}}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
2
+ const e = "_root_y6xw0_2", _ = "_table_y6xw0_11", s = "_labels_y6xw0_14", l = "_corner_y6xw0_33", o = "_hide_y6xw0_1", c = "_header_y6xw0_54", n = "_sequences_y6xw0_96", a = {
3
3
  root: e,
4
- table: c,
5
- corner: s,
6
- header: _,
7
- "sequence-names": "_sequence-names_cgj1q_40",
8
- labels: n,
9
- sequences: o
4
+ table: _,
5
+ labels: s,
6
+ corner: l,
7
+ "label-scroll-indicator": "_label-scroll-indicator_y6xw0_42",
8
+ hide: o,
9
+ header: c,
10
+ "sequence-names": "_sequence-names_y6xw0_62",
11
+ "labels-grid": "_labels-grid_y6xw0_84",
12
+ sequences: n
10
13
  };
11
14
  export {
12
- s as corner,
13
- t as default,
14
- _ as header,
15
- n as labels,
15
+ l as corner,
16
+ a as default,
17
+ c as header,
18
+ o as hide,
19
+ s as labels,
16
20
  e as root,
17
- o as sequences,
18
- c as table
21
+ n as sequences,
22
+ _ as table
19
23
  };
20
24
  //# sourceMappingURL=MultiSequenceAlignmentView.vue3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSequenceAlignmentView.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"MultiSequenceAlignmentView.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlMultiSequenceAlignment.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"names":[],"mappings":"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
+ {"version":3,"file":"PlMultiSequenceAlignment.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"names":[],"mappings":"AA4TA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAEjB,KAAK,6BAA6B,EAElC,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AA8B9B,KAAK,WAAW,GAAG;IACjB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC,CAAC;AA6LF,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,6BAA6B,CAAC;CAC1C,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkLhB,wBAQG"}
@@ -1,17 +1,17 @@
1
- import { defineComponent as 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";
1
+ import { defineComponent as U, mergeModels as J, useModel as G, onBeforeMount as H, reactive as h, computed as R, watchEffect as L, useTemplateRef as K, createElementBlock as N, openBlock as p, Fragment as T, createVNode as V, createBlock as S, unref as m, withCtx as b, createTextVNode as w, toDisplayString as q, createCommentVNode as j, normalizeClass as Q } from "vue";
2
+ import { isJsonEqual as v } from "../../lib/util/helpers/dist/index.js";
3
3
  import "../../lib/ui/uikit/dist/index.js";
4
- import { getRawPlatformaInstance as 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
- import { defaultSettings as D } from "./settings.js";
9
- import oe from "./Toolbar.vue.js";
4
+ import { getRawPlatformaInstance as W } from "../../sdk/model/dist/index.js";
5
+ import { useSequenceColumnsOptions as X, useLabelColumnsOptions as Y, useMarkupColumnsOptions as Z, useMultipleAlignmentData as ee, sequenceLimit as A } from "./data.js";
6
+ import { runMigrations as te } from "./migrations.js";
7
+ import oe from "./MultiSequenceAlignmentView.vue.js";
8
+ import { defaultSettings as B } from "./settings.js";
9
+ import ne from "./Toolbar.vue.js";
10
10
  import P from "../../lib/ui/uikit/dist/components/PlAlert/PlAlert.vue.js";
11
- import ne from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
12
- const ge = /* @__PURE__ */ L({
11
+ import se from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
12
+ const he = /* @__PURE__ */ U({
13
13
  __name: "PlMultiSequenceAlignment",
14
- props: /* @__PURE__ */ U({
14
+ props: /* @__PURE__ */ J({
15
15
  pFrame: {},
16
16
  sequenceColumnPredicate: { type: Function },
17
17
  selection: {}
@@ -20,30 +20,30 @@ const ge = /* @__PURE__ */ L({
20
20
  modelModifiers: {}
21
21
  }),
22
22
  emits: ["update:modelValue"],
23
- setup(x) {
24
- const h = J(x, "modelValue");
25
- G(() => {
26
- ee(h);
23
+ setup(k) {
24
+ const C = G(k, "modelValue");
25
+ H(() => {
26
+ te(C);
27
27
  });
28
- const o = g({
29
- ...D
30
- }), c = x, C = g(W(() => ({
31
- pFrame: c.pFrame,
32
- sequenceColumnPredicate: c.sequenceColumnPredicate
33
- }))), y = g(X(() => ({
34
- pFrame: c.pFrame,
28
+ const o = h({
29
+ ...B
30
+ }), u = k, f = h(X(() => ({
31
+ pFrame: u.pFrame,
32
+ sequenceColumnPredicate: u.sequenceColumnPredicate
33
+ }))), g = h(Y(() => ({
34
+ pFrame: u.pFrame,
35
35
  sequenceColumnIds: o.sequenceColumnIds
36
- }))), v = g(Y(() => ({
37
- pFrame: c.pFrame,
36
+ }))), y = h(Z(() => ({
37
+ pFrame: u.pFrame,
38
38
  sequenceColumnIds: o.sequenceColumnIds
39
- }))), l = g(Z(() => ({
40
- pframe: c.pFrame,
39
+ }))), l = h(ee(() => ({
40
+ pFrame: u.pFrame,
41
41
  sequenceColumnIds: o.sequenceColumnIds,
42
42
  labelColumnIds: o.labelColumnIds,
43
- selection: c.selection,
43
+ selection: u.selection,
44
44
  colorScheme: o.colorScheme,
45
45
  alignmentParams: o.alignmentParams
46
- }))), w = new Intl.NumberFormat("en").format, _ = R(
46
+ }))), I = new Intl.NumberFormat("en").format, D = R(
47
47
  () => [
48
48
  {
49
49
  label: "Chemical Properties",
@@ -53,7 +53,7 @@ const ge = /* @__PURE__ */ L({
53
53
  label: "No Color",
54
54
  value: { type: "no-color" }
55
55
  },
56
- ...(v.data ?? []).map(({ label: t, value: n }) => ({
56
+ ...(y.data ?? []).map(({ label: t, value: n }) => ({
57
57
  label: t,
58
58
  value: {
59
59
  type: "markup",
@@ -61,82 +61,84 @@ const ge = /* @__PURE__ */ L({
61
61
  }
62
62
  }))
63
63
  ]
64
- ), O = R(
65
- () => C.error ?? y.error ?? v.error ?? l.error
64
+ ), x = R(
65
+ () => f.error ?? g.error ?? y.error ?? l.error
66
66
  );
67
- function E(t) {
68
- h.value = Object.fromEntries(
69
- Object.entries({ ...h.value, ...t }).filter(([n, e]) => e !== void 0)
67
+ function F(t) {
68
+ C.value = Object.fromEntries(
69
+ Object.entries({ ...C.value, ...t }).filter(([n, e]) => e !== void 0)
70
70
  );
71
71
  }
72
- N(() => {
72
+ L(() => {
73
73
  var n, e;
74
74
  const t = Object.fromEntries(
75
75
  Object.entries({
76
- ...D,
77
- sequenceColumnIds: (n = C.data) == null ? void 0 : n.defaults,
78
- labelColumnIds: (e = y.data) == null ? void 0 : e.defaults,
79
- ...h.value
76
+ ...B,
77
+ sequenceColumnIds: (n = f.data) == null ? void 0 : n.defaults,
78
+ labelColumnIds: (e = g.data) == null ? void 0 : e.defaults,
79
+ ...C.value
80
80
  }).filter(
81
- ([a, r]) => !I(
82
- o[a],
81
+ ([s, r]) => !v(
82
+ o[s],
83
83
  r
84
84
  )
85
85
  )
86
86
  );
87
87
  Object.assign(o, t);
88
- }), N(() => {
89
- var e, a, r, m;
88
+ }), L(() => {
89
+ var e, s, r;
90
90
  const t = [];
91
- (e = o.sequenceColumnIds) != null && e.some(
92
- (s) => {
93
- var u;
94
- return !((u = C.data) != null && u.options.some(
95
- ({ value: d }) => I(d, s)
96
- ));
91
+ !f.isLoading && ((e = o.sequenceColumnIds) != null && e.some(
92
+ (a) => {
93
+ var i;
94
+ return (((i = f.data) == null ? void 0 : i.options) ?? []).every(
95
+ ({ value: c }) => !v(c, a)
96
+ );
97
97
  }
98
- ) && t.push("sequenceColumnIds"), (a = o.labelColumnIds) != null && a.some(
99
- (s) => {
100
- var u;
101
- return !((u = y.data) != null && u.options.some(
102
- ({ value: d }) => I(d, s)
103
- ));
98
+ )) && t.push("sequenceColumnIds"), !g.isLoading && ((s = o.labelColumnIds) != null && s.some(
99
+ (a) => {
100
+ var i;
101
+ return (((i = g.data) == null ? void 0 : i.options) ?? []).every(
102
+ ({ value: c }) => !v(c, a)
103
+ );
104
104
  }
105
- ) && t.push("labelColumnIds");
105
+ )) && t.push("labelColumnIds");
106
106
  const n = ((r = o.colorScheme) == null ? void 0 : r.type) === "markup" ? o.colorScheme.columnId : void 0;
107
- n && !((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])
107
+ !y.isLoading && n && (y.data ?? []).every(
108
+ ({ value: a }) => !v(a, n)
109
+ ) && t.push("colorScheme"), t.length && F(Object.fromEntries(
110
+ t.map((a) => [a, void 0])
111
111
  ));
112
112
  });
113
- const $ = 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;
113
+ const _ = K("msa");
114
+ async function $() {
115
+ var O, E, M;
116
+ const t = (E = (O = W()) == null ? void 0 : O.lsDriver) == null ? void 0 : E.exportToPdf;
117
117
  if (!t)
118
118
  return console.error(
119
119
  "API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
120
120
  );
121
- const n = (M = $.value) == null ? void 0 : M.rootEl;
121
+ const n = (M = _.value) == null ? void 0 : M.rootEl;
122
122
  if (!n)
123
123
  throw new Error("MSA element is not available.");
124
124
  const e = document.createElement("div");
125
125
  e.id = `print-target-${crypto.randomUUID()}`;
126
- const a = new CSSStyleSheet();
127
- document.adoptedStyleSheets.push(a), a.insertRule(`
126
+ const s = new CSSStyleSheet();
127
+ document.adoptedStyleSheets.push(s), s.insertRule(`
128
128
  @media screen {
129
129
  #${e.id} {
130
130
  visibility: hidden;
131
131
  position: fixed;
132
132
  }
133
- }`), 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(`
133
+ }`);
134
+ const r = n.cloneNode(!0);
135
+ r.dataset.prePrint = "", e.replaceChildren(r), document.body.appendChild(e);
136
+ const { height: a, width: i } = e.getBoundingClientRect(), c = CSS.cm(1), z = [i, a].map((d) => CSS.px(d).add(c.mul(2))).join(" ");
137
+ s.insertRule(`
136
138
  @media print {
137
139
  @page {
138
- size: ${u};
139
- margin: ${s};
140
+ size: ${z};
141
+ margin: ${c};
140
142
  }
141
143
  body > :not(#${e.id}) {
142
144
  display: none;
@@ -144,63 +146,63 @@ const ge = /* @__PURE__ */ L({
144
146
  }`);
145
147
  try {
146
148
  await t();
147
- } catch (p) {
148
- console.error(p);
149
+ } catch (d) {
150
+ console.error(d);
149
151
  } finally {
150
152
  document.body.removeChild(e);
151
- const p = document.adoptedStyleSheets.indexOf(a);
152
- p >= 0 && document.adoptedStyleSheets.splice(p, 1);
153
+ const d = document.adoptedStyleSheets.indexOf(s);
154
+ d >= 0 && document.adoptedStyleSheets.splice(d, 1);
153
155
  }
154
156
  }
155
157
  return (t, n) => {
156
- var e, a, r, m;
157
- return f(), T(V, null, [
158
- j(oe, {
158
+ var e, s, r, a;
159
+ return p(), N(T, null, [
160
+ V(ne, {
159
161
  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
162
+ "sequence-column-options": (e = f.data) == null ? void 0 : e.options,
163
+ "label-column-options": (s = g.data) == null ? void 0 : s.options,
164
+ "color-scheme-options": D.value,
165
+ onUpdateSettings: F,
166
+ onExport: $
165
167
  }, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
166
- O.value ? (f(), S(i(P), {
168
+ x.value ? (p(), S(m(P), {
167
169
  key: 0,
168
170
  type: "error"
169
171
  }, {
170
172
  default: b(() => [
171
- k(q(O.value), 1)
173
+ w(q(x.value), 1)
172
174
  ]),
173
175
  _: 1
174
- })) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (f(), S(i(P), {
176
+ })) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (p(), S(m(P), {
175
177
  key: 1,
176
178
  type: "warn",
177
179
  icon: ""
178
180
  }, {
179
181
  default: b(() => n[0] || (n[0] = [
180
- k(" Please select at least one sequence column and two or more rows to run alignment ")
182
+ w(" Please select at least one sequence column and two or more rows to run alignment ")
181
183
  ])),
182
184
  _: 1
183
- })) : (f(), T(V, { key: 2 }, [
184
- (m = l.data) != null && m.exceedsLimit ? (f(), S(i(P), {
185
+ })) : (p(), N(T, { key: 2 }, [
186
+ (a = l.data) != null && a.exceedsLimit ? (p(), S(m(P), {
185
187
  key: 0,
186
188
  type: "warn",
187
189
  icon: "",
188
190
  label: "Visualization is limited"
189
191
  }, {
190
192
  default: b(() => [
191
- 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)
193
+ w(" MSA visualization supports " + q(m(I)(2)) + " to " + q(m(I)(m(A))) + " sequences. Only the first " + q(m(I)(m(A))) + " will be displayed. ", 1)
192
194
  ]),
193
195
  _: 1
194
- })) : A("", !0),
195
- j(i(ne), {
196
+ })) : j("", !0),
197
+ V(m(se), {
196
198
  type: "transparent",
197
- class: K(t.$style.splash),
199
+ class: Q(t.$style.splash),
198
200
  loading: l.isLoading
199
201
  }, {
200
202
  default: b(() => {
201
- var s;
203
+ var i;
202
204
  return [
203
- (s = l.data) != null && s.sequences.length ? (f(), S(te, {
205
+ (i = l.data) != null && i.sequences.length ? (p(), S(oe, {
204
206
  key: 0,
205
207
  ref: "msa",
206
208
  sequences: l.data.sequences,
@@ -209,7 +211,7 @@ const ge = /* @__PURE__ */ L({
209
211
  "residue-counts": l.data.residueCounts,
210
212
  "highlight-image": l.data.highlightImage,
211
213
  widgets: o.widgets
212
- }, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : A("", !0)
214
+ }, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : j("", !0)
213
215
  ];
214
216
  }),
215
217
  _: 1
@@ -220,6 +222,6 @@ const ge = /* @__PURE__ */ L({
220
222
  }
221
223
  });
222
224
  export {
223
- ge as default
225
+ he as default
224
226
  };
225
227
  //# sourceMappingURL=PlMultiSequenceAlignment.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlAlert,\n PlSplash,\n} from '@milaboratories/uikit';\nimport {\n getRawPlatformaInstance,\n type PColumnPredicate,\n type PFrameHandle,\n type PlMultiSequenceAlignmentColorSchemeOption,\n type PlMultiSequenceAlignmentModel,\n type PlMultiSequenceAlignmentSettings,\n type PlSelectionModel,\n} from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n reactive,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pframe: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n settings.sequenceColumnIds?.some((id) =>\n !sequenceColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n settings.labelColumnIds?.some((id) =>\n !labelColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n markupColumnId\n && !markupColumns.data?.some(\n ({ value }) => isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n printTarget.replaceChildren(msaRoot.cloneNode(true));\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","_d","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","height","width","margin","pageSize","index"],"mappings":"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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 !sequenceColumns.isLoading\n && settings.sequenceColumnIds?.some((id) =>\n (sequenceColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n !labelColumns.isLoading\n && settings.labelColumnIds?.some((id) =>\n (labelColumns.data?.options ?? []).every(\n ({ value }) => !isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n !markupColumns.isLoading\n && markupColumnId\n && (markupColumns.data ?? []).every(\n ({ value }) => !isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n const msaClone = msaRoot.cloneNode(true) as HTMLElement;\n msaClone.dataset.prePrint = '';\n printTarget.replaceChildren(msaClone);\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","msaClone","height","width","margin","pageSize","index"],"mappings":"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"}
@@ -27,7 +27,7 @@ export declare const useMarkupColumnsOptions: (paramsGetter: () => {
27
27
  error: import('vue').Ref<Error | undefined, Error | undefined>;
28
28
  };
29
29
  export declare const useMultipleAlignmentData: (paramsGetter: () => {
30
- pframe: PFrameHandle | undefined;
30
+ pFrame: PFrameHandle | undefined;
31
31
  sequenceColumnIds: PObjectId[] | undefined;
32
32
  labelColumnIds: PTableColumnId[] | undefined;
33
33
  selection: PlSelectionModel | undefined;