@platforma-sdk/ui-vue 1.45.34 → 1.45.36

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 (150) hide show
  1. package/.turbo/turbo-build.log +216 -222
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +16 -0
  4. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  5. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  6. package/dist/components/{PlMultiSequenceAlignment/Legend.vue.d.ts → PlAdvancedFilter/OperandButton.vue.d.ts} +4 -2
  7. package/dist/components/{PlMultiSequenceAlignment/Toolbar.vue.js → PlAdvancedFilter/OperandButton.vue.js} +3 -3
  8. package/dist/components/PlAdvancedFilter/OperandButton.vue.js.map +1 -0
  9. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +25 -0
  10. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -0
  11. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js +13 -0
  12. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js.map +1 -0
  13. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +39 -0
  14. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js +10 -0
  15. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js.map +1 -0
  16. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +199 -0
  17. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -0
  18. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js +17 -0
  19. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js.map +1 -0
  20. package/dist/components/PlAdvancedFilter/SingleFilter.vue.d.ts +37 -0
  21. package/dist/components/{PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js → PlAdvancedFilter/SingleFilter.vue.js} +3 -3
  22. package/dist/components/PlAdvancedFilter/SingleFilter.vue.js.map +1 -0
  23. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +306 -0
  24. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +1 -0
  25. package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js +35 -0
  26. package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js.map +1 -0
  27. package/dist/components/PlAdvancedFilter/constants.d.ts +4 -0
  28. package/dist/components/PlAdvancedFilter/constants.js +41 -0
  29. package/dist/components/PlAdvancedFilter/constants.js.map +1 -0
  30. package/dist/components/PlAdvancedFilter/index.d.ts +1 -0
  31. package/dist/components/PlAdvancedFilter/types.d.ts +57 -0
  32. package/dist/components/PlAdvancedFilter/types.js +8 -0
  33. package/dist/components/PlAdvancedFilter/types.js.map +1 -0
  34. package/dist/components/PlAdvancedFilter/utils.js +150 -0
  35. package/dist/components/PlAdvancedFilter/utils.js.map +1 -0
  36. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -8
  37. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  38. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +9 -10
  39. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  40. package/dist/components/PlAgRowNumHeader.vue.js +2 -3
  41. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  42. package/dist/index.js +32 -32
  43. package/dist/lib.d.ts +1 -1
  44. package/package.json +6 -7
  45. package/src/components/PlAdvancedFilter/OperandButton.vue +53 -0
  46. package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +209 -0
  47. package/src/components/PlAdvancedFilter/SingleFilter.vue +425 -0
  48. package/src/components/PlAdvancedFilter/constants.ts +42 -0
  49. package/src/components/PlAdvancedFilter/index.ts +1 -0
  50. package/src/components/PlAdvancedFilter/types.ts +77 -0
  51. package/src/components/PlAdvancedFilter/utils.ts +215 -0
  52. package/src/lib.ts +2 -2
  53. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +0 -6
  54. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +0 -1
  55. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +0 -5
  56. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +0 -1
  57. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.d.ts +0 -9
  58. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js +0 -10
  59. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js.map +0 -1
  60. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js +0 -122
  61. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js.map +0 -1
  62. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js +0 -9
  63. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js.map +0 -1
  64. package/dist/components/PlMultiSequenceAlignment/Legend.vue.js +0 -10
  65. package/dist/components/PlMultiSequenceAlignment/Legend.vue.js.map +0 -1
  66. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +0 -28
  67. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js.map +0 -1
  68. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +0 -13
  69. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js.map +0 -1
  70. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +0 -25
  71. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js +0 -10
  72. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js.map +0 -1
  73. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +0 -138
  74. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +0 -1
  75. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +0 -31
  76. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +0 -1
  77. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.d.ts +0 -8
  78. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js +0 -10
  79. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js.map +0 -1
  80. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js +0 -77
  81. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js.map +0 -1
  82. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js +0 -9
  83. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js.map +0 -1
  84. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +0 -71
  85. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js.map +0 -1
  86. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +0 -224
  87. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +0 -1
  88. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js +0 -9
  89. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js.map +0 -1
  90. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.d.ts +0 -8
  91. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js +0 -10
  92. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js.map +0 -1
  93. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js +0 -127
  94. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js.map +0 -1
  95. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js +0 -9
  96. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js.map +0 -1
  97. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +0 -16
  98. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.js.map +0 -1
  99. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +0 -228
  100. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +0 -1
  101. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js +0 -19
  102. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js.map +0 -1
  103. package/dist/components/PlMultiSequenceAlignment/cell-size.d.ts +0 -4
  104. package/dist/components/PlMultiSequenceAlignment/cell-size.js +0 -8
  105. package/dist/components/PlMultiSequenceAlignment/cell-size.js.map +0 -1
  106. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +0 -44
  107. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +0 -132
  108. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +0 -1
  109. package/dist/components/PlMultiSequenceAlignment/data.d.ts +0 -61
  110. package/dist/components/PlMultiSequenceAlignment/data.js +0 -370
  111. package/dist/components/PlMultiSequenceAlignment/data.js.map +0 -1
  112. package/dist/components/PlMultiSequenceAlignment/index.d.ts +0 -1
  113. package/dist/components/PlMultiSequenceAlignment/markup.d.ts +0 -16
  114. package/dist/components/PlMultiSequenceAlignment/markup.js +0 -84
  115. package/dist/components/PlMultiSequenceAlignment/markup.js.map +0 -1
  116. package/dist/components/PlMultiSequenceAlignment/migrations.d.ts +0 -3
  117. package/dist/components/PlMultiSequenceAlignment/migrations.js +0 -24
  118. package/dist/components/PlMultiSequenceAlignment/migrations.js.map +0 -1
  119. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.d.ts +0 -6
  120. package/dist/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.d.ts +0 -7
  121. package/dist/components/PlMultiSequenceAlignment/residue-counts.d.ts +0 -2
  122. package/dist/components/PlMultiSequenceAlignment/residue-counts.js +0 -13
  123. package/dist/components/PlMultiSequenceAlignment/residue-counts.js.map +0 -1
  124. package/dist/components/PlMultiSequenceAlignment/settings.d.ts +0 -2
  125. package/dist/components/PlMultiSequenceAlignment/settings.js +0 -9
  126. package/dist/components/PlMultiSequenceAlignment/settings.js.map +0 -1
  127. package/dist/components/PlMultiSequenceAlignment/types.d.ts +0 -5
  128. package/dist/components/PlMultiSequenceAlignment/useMiPlots.d.ts +0 -4
  129. package/dist/components/PlMultiSequenceAlignment/useMiPlots.js +0 -19
  130. package/dist/components/PlMultiSequenceAlignment/useMiPlots.js.map +0 -1
  131. package/src/components/PlMultiSequenceAlignment/Consensus.vue +0 -165
  132. package/src/components/PlMultiSequenceAlignment/Legend.vue +0 -44
  133. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +0 -299
  134. package/src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue +0 -110
  135. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +0 -314
  136. package/src/components/PlMultiSequenceAlignment/README.md +0 -216
  137. package/src/components/PlMultiSequenceAlignment/SeqLogo.vue +0 -166
  138. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +0 -228
  139. package/src/components/PlMultiSequenceAlignment/cell-size.ts +0 -4
  140. package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +0 -199
  141. package/src/components/PlMultiSequenceAlignment/data.ts +0 -661
  142. package/src/components/PlMultiSequenceAlignment/index.ts +0 -1
  143. package/src/components/PlMultiSequenceAlignment/markup.ts +0 -141
  144. package/src/components/PlMultiSequenceAlignment/migrations.ts +0 -46
  145. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.ts +0 -54
  146. package/src/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.ts +0 -89
  147. package/src/components/PlMultiSequenceAlignment/residue-counts.ts +0 -124
  148. package/src/components/PlMultiSequenceAlignment/settings.ts +0 -7
  149. package/src/components/PlMultiSequenceAlignment/types.ts +0 -3
  150. package/src/components/PlMultiSequenceAlignment/useMiPlots.ts +0 -23
@@ -1,9 +0,0 @@
1
- import { ResidueCounts } from './types';
2
- type __VLS_Props = {
3
- residueCounts: ResidueCounts;
4
- labelsClass: string;
5
- };
6
- declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
7
- plotEl: HTMLDivElement;
8
- }, any>;
9
- export default _default;
@@ -1,10 +0,0 @@
1
- import s from "./Consensus.vue2.js";
2
- import o from "./Consensus.vue3.js";
3
- import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const e = {
5
- $style: o
6
- }, f = /* @__PURE__ */ t(s, [["__cssModules", e]]);
7
- export {
8
- f as default
9
- };
10
- //# sourceMappingURL=Consensus.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Consensus.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,122 +0,0 @@
1
- import { defineComponent as x, useCssModule as k, useTemplateRef as E, computed as c, shallowRef as _, watchEffect as A, onBeforeUnmount as O, createBlock as S, createElementBlock as j, unref as u, openBlock as y, withCtx as B, createTextVNode as D, toDisplayString as C, normalizeClass as v, createElementVNode as b } from "vue";
2
- import { PlAlert as G } from "@milaboratories/uikit";
3
- import { cellSize as K } from "./cell-size.js";
4
- import { useMiPlots as T } from "./useMiPlots.js";
5
- const U = /* @__PURE__ */ x({
6
- __name: "Consensus",
7
- props: {
8
- residueCounts: {},
9
- labelsClass: {}
10
- },
11
- setup(g) {
12
- const s = g, w = k(), a = E("plotEl"), f = c(
13
- () => s.residueCounts.map((e) => {
14
- let o = 0, t = { label: "", count: 0 };
15
- for (const [r, n] of Object.entries(e))
16
- o += n, r !== "-" && n > t.count && (t = { label: r, count: n });
17
- const i = CSS.percent(t.count / o * 100);
18
- return {
19
- label: t.label,
20
- color: `color-mix(in oklab, ${i} #3056AE, #C1CDE9)`
21
- };
22
- })
23
- ), m = c(() => {
24
- const e = s.residueCounts.length * K.inline;
25
- return {
26
- type: "discrete",
27
- y: {
28
- type: "column",
29
- value: "countKey"
30
- },
31
- legend: { show: !1 },
32
- primaryGrouping: {
33
- columnName: {
34
- type: "column",
35
- value: "columnKey"
36
- },
37
- order: s.residueCounts.map((o, t) => t),
38
- inheritedAes: Object.fromEntries(
39
- f.value.map(({ color: o }) => ({ fillColor: o })).entries()
40
- )
41
- },
42
- layers: [{
43
- type: "bar",
44
- height: "max",
45
- aes: {
46
- ...s.residueCounts.length && {
47
- width: (e - s.residueCounts.length + 1) / s.residueCounts.length
48
- },
49
- fillColor: {
50
- type: "primaryGrouping"
51
- },
52
- lineColor: "#ffffff"
53
- }
54
- }],
55
- title: {
56
- name: "",
57
- show: !1
58
- },
59
- size: {
60
- width: e,
61
- height: 60,
62
- outerOffset: 0,
63
- innerOffset: 0
64
- },
65
- xAxis: {
66
- title: "",
67
- showGrid: !1,
68
- showTicks: !1,
69
- hiddenLabels: !0
70
- },
71
- yAxis: {
72
- title: "",
73
- showGrid: !1,
74
- showTicks: !1,
75
- hiddenLabels: !0
76
- },
77
- frame: {
78
- type: "empty"
79
- }
80
- };
81
- }), p = c(() => {
82
- const e = [], o = [];
83
- for (const [t, i] of s.residueCounts.entries())
84
- for (const [r, n] of Object.entries(i))
85
- r !== "-" && (e.push(n), o.push(t));
86
- return {
87
- type: "columns",
88
- id: `consensus-${crypto.randomUUID()}`,
89
- values: { countKey: e, columnKey: o }
90
- };
91
- }), l = _(), { miplots: d, error: h } = T();
92
- return A(async () => {
93
- !a.value || !d.value || (l.value ? l.value.updateSettingsAndData(p.value, m.value) : (l.value = d.value.newPlot(p.value, m.value), l.value.mount(a.value)));
94
- }), O(() => {
95
- var e;
96
- (e = l.value) == null || e.unmount();
97
- }), (e, o) => u(h) ? (y(), S(u(G), {
98
- key: 0,
99
- type: "error"
100
- }, {
101
- default: B(() => [
102
- D(C(u(h).message), 1)
103
- ]),
104
- _: 1
105
- })) : (y(), j("div", {
106
- key: 1,
107
- class: v(u(w).container)
108
- }, [
109
- b("div", {
110
- class: v(s.labelsClass)
111
- }, C(f.value.map((t) => t.label).join("")), 3),
112
- b("div", {
113
- ref_key: "plotEl",
114
- ref: a
115
- }, null, 512)
116
- ], 2));
117
- }
118
- });
119
- export {
120
- U as default
121
- };
122
- //# sourceMappingURL=Consensus.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Consensus.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/Consensus.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n Settings,\n} from '@milaboratories/miplots4';\nimport { PlAlert } from '@milaboratories/uikit';\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useCssModule,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport { cellSize } from './cell-size';\nimport type { ResidueCounts } from './types';\nimport { useMiPlots } from './useMiPlots';\n\nconst props = defineProps<{\n residueCounts: ResidueCounts;\n labelsClass: string;\n}>();\n\nconst classes = useCssModule();\n\nconst plotEl = useTemplateRef('plotEl');\n\nconst columns = computed(() =>\n props.residueCounts.map((column) => {\n let totalCount = 0;\n let topResidue = { label: '', count: 0 };\n for (const [residue, count] of Object.entries(column)) {\n totalCount += count;\n if (residue === '-') continue;\n if (count > topResidue.count) topResidue = { label: residue, count };\n }\n const confidence = CSS.percent(topResidue.count / totalCount * 100);\n return {\n label: topResidue.label,\n color: `color-mix(in oklab, ${confidence} #3056AE, #C1CDE9)`,\n };\n }),\n);\n\nconst settings = computed(() => {\n const width = props.residueCounts.length * cellSize.inline;\n return ({\n type: 'discrete',\n y: {\n type: 'column',\n value: 'countKey',\n },\n legend: { show: false },\n primaryGrouping: {\n columnName: {\n type: 'column',\n value: 'columnKey',\n },\n order: props.residueCounts.map((_, i) => i),\n inheritedAes: Object.fromEntries(\n columns.value.map(({ color }) => ({ fillColor: color })).entries(),\n ),\n },\n layers: [{\n type: 'bar',\n height: 'max',\n aes: {\n ...props.residueCounts.length && {\n width: (width - props.residueCounts.length + 1)\n / props.residueCounts.length,\n },\n fillColor: {\n type: 'primaryGrouping',\n },\n lineColor: '#ffffff',\n },\n }],\n title: {\n name: '',\n show: false,\n },\n size: {\n width,\n height: 60,\n outerOffset: 0,\n innerOffset: 0,\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 frame: {\n type: 'empty',\n },\n } satisfies Settings);\n});\n\nconst data = computed<DataByColumns>(() => {\n const countKey: number[] = [];\n const columnKey: number[] = [];\n for (const [columnIndex, column] of props.residueCounts.entries()) {\n for (const [residue, count] of Object.entries(column)) {\n if (residue === '-') continue;\n countKey.push(count);\n columnKey.push(columnIndex);\n }\n }\n return ({\n type: 'columns',\n id: `consensus-${crypto.randomUUID()}`,\n values: { countKey, columnKey },\n });\n});\n\nconst plot = shallowRef<ChartInterface>();\n\nconst { miplots, error } = useMiPlots();\n\nwatchEffect(async () => {\n if (!plotEl.value || !miplots.value) return;\n if (!plot.value) {\n plot.value = miplots.value.newPlot(data.value, settings.value);\n plot.value.mount(plotEl.value);\n } else {\n plot.value.updateSettingsAndData(data.value, settings.value);\n }\n});\n\nonBeforeUnmount(() => {\n plot.value?.unmount();\n});\n</script>\n\n<template>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error.message }}\n </PlAlert>\n <div v-else :class=\"classes.container\">\n <div :class=\"props.labelsClass\">\n {{ columns.map(column => column.label).join('') }}\n </div>\n <div ref=\"plotEl\" />\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n svg {\n display: block;\n }\n}\n</style>\n"],"names":["props","__props","classes","useCssModule","plotEl","useTemplateRef","columns","computed","column","totalCount","topResidue","residue","count","confidence","settings","width","cellSize","_","i","color","data","countKey","columnKey","columnIndex","plot","shallowRef","miplots","error","useMiPlots","watchEffect","onBeforeUnmount","_a"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_1vnon_2{display:flex;flex-direction:column;gap:4px}._container_1vnon_2 svg{display:block}")),document.head.appendChild(e)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();
2
- const n = "_container_1vnon_2", t = {
3
- container: n
4
- };
5
- export {
6
- n as container,
7
- t as default
8
- };
9
- //# sourceMappingURL=Consensus.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Consensus.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,10 +0,0 @@
1
- import s from "./Legend.vue2.js";
2
- import o from "./Legend.vue3.js";
3
- import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const e = {
5
- $style: o
6
- }, f = /* @__PURE__ */ t(s, [["__cssModules", e]]);
7
- export {
8
- f as default
9
- };
10
- //# sourceMappingURL=Legend.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Legend.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,28 +0,0 @@
1
- import { defineComponent as i, useCssModule as m, createElementBlock as n, openBlock as t, normalizeClass as r, unref as l, Fragment as u, renderList as p, createElementVNode as g, createTextVNode as _, normalizeStyle as f, toDisplayString as C } from "vue";
2
- const y = /* @__PURE__ */ i({
3
- __name: "Legend",
4
- props: {
5
- legend: {}
6
- },
7
- setup(o) {
8
- const s = o, e = m();
9
- return (k, v) => (t(), n("div", {
10
- class: r(l(e).container)
11
- }, [
12
- (t(!0), n(u, null, p(s.legend, ({ label: a, color: c }, d) => (t(), n("div", {
13
- key: d,
14
- class: r(l(e).item)
15
- }, [
16
- g("div", {
17
- class: r(l(e).colorSample),
18
- style: f({ backgroundColor: c })
19
- }, null, 6),
20
- _(" " + C(a), 1)
21
- ], 2))), 128))
22
- ], 2));
23
- }
24
- });
25
- export {
26
- y as default
27
- };
28
- //# sourceMappingURL=Legend.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Legend.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/Legend.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useCssModule } from 'vue';\nimport type { HighlightLegend } from './types';\n\nconst props = defineProps<{\n legend: HighlightLegend;\n}>();\n\nconst classes = useCssModule();\n</script>\n\n<template>\n <div :class=\"classes.container\">\n <div\n v-for=\"({ label, color }, key) of props.legend\"\n :key=\"key\"\n :class=\"classes.item\"\n >\n <div :class=\"classes.colorSample\" :style=\"{ backgroundColor: color }\" />\n {{ label }}\n </div>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n max-inline-size: fit-content;\n}\n\n.item {\n display: flex;\n gap: 4px;\n}\n\n.colorSample {\n display: inline-block;\n block-size: 18px;\n inline-size: 18px;\n border-radius: 3px;\n}\n</style>\n"],"names":["props","__props","classes","useCssModule"],"mappings":";;;;;;;AAIA,UAAMA,IAAQC,GAIRC,IAAUC,EAAA;;;;;;;;;;;;;;;;;"}
@@ -1,13 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_5klj5_2{display:flex;flex-wrap:wrap;gap:12px;max-inline-size:fit-content}._item_5klj5_9{display:flex;gap:4px}._colorSample_5klj5_14{display:inline-block;block-size:18px;inline-size:18px;border-radius:3px}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
2
- const o = "_container_5klj5_2", t = "_item_5klj5_9", e = "_colorSample_5klj5_14", l = {
3
- container: o,
4
- item: t,
5
- colorSample: e
6
- };
7
- export {
8
- e as colorSample,
9
- o as container,
10
- l as default,
11
- t as item
12
- };
13
- //# sourceMappingURL=Legend.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Legend.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -1,25 +0,0 @@
1
- import { PlMultiSequenceAlignmentWidget } from '@platforma-sdk/model';
2
- import { TreeNodeData } from './phylogenetic-tree.worker';
3
- import { HighlightLegend, ResidueCounts } from './types';
4
- type __VLS_Props = {
5
- sequences: {
6
- name: string;
7
- rows: string[];
8
- residueCounts: ResidueCounts;
9
- highlightImageUrl?: string;
10
- }[];
11
- labels: {
12
- rows: string[];
13
- }[];
14
- highlightLegend: HighlightLegend | undefined;
15
- phylogeneticTree: TreeNodeData[] | undefined;
16
- widgets: PlMultiSequenceAlignmentWidget[];
17
- };
18
- declare const _default: import('vue').DefineComponent<__VLS_Props, {
19
- rootEl: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
20
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
21
- rootRef: HTMLDivElement;
22
- referenceCell: HTMLDivElement;
23
- corner: HTMLDivElement;
24
- }, HTMLDivElement>;
25
- export default _default;
@@ -1,10 +0,0 @@
1
- import s from "./MultiSequenceAlignmentView.vue2.js";
2
- import e from "./MultiSequenceAlignmentView.vue3.js";
3
- import o from "../../_virtual/_plugin-vue_export-helper.js";
4
- const t = {
5
- $style: e
6
- }, i = /* @__PURE__ */ o(s, [["__cssModules", t]]);
7
- export {
8
- i as default
9
- };
10
- //# sourceMappingURL=MultiSequenceAlignmentView.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiSequenceAlignmentView.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,138 +0,0 @@
1
- import { defineComponent as M, useCssVars as U, unref as n, computed as C, useCssModule as D, useTemplateRef as b, ref as I, onBeforeMount as E, onBeforeUnmount as A, watch as F, onWatcherCleanup as H, createElementBlock as c, openBlock as t, normalizeClass as l, createElementVNode as i, createBlock as f, createCommentVNode as u, Fragment as d, renderList as v, toDisplayString as y, withDirectives as O, vShow as P, normalizeStyle as W } from "vue";
2
- import { cellSize as k } from "./cell-size.js";
3
- import $ from "./Consensus.vue.js";
4
- import j from "./Legend.vue.js";
5
- import G from "./PhylogeneticTree.vue.js";
6
- import J from "./SeqLogo.vue.js";
7
- const ne = /* @__PURE__ */ M({
8
- __name: "MultiSequenceAlignmentView",
9
- props: {
10
- sequences: {},
11
- labels: {},
12
- highlightLegend: {},
13
- phylogeneticTree: {},
14
- widgets: {}
15
- },
16
- setup(R, { expose: B }) {
17
- U((o) => ({
18
- e405b06c: n(N),
19
- "0c44921e": s.sequences.length,
20
- "6aab37c6": _.value,
21
- "2e72cab4": s.labels.length,
22
- "1ad5abe9": V.value,
23
- "3c16a76c": x.value,
24
- "1406981e": n(T)
25
- }));
26
- const s = R, r = D(), L = b("rootRef");
27
- B({ rootEl: L });
28
- const _ = C(() => {
29
- var o;
30
- return ((o = s.sequences.at(0)) == null ? void 0 : o.rows.length) ?? 0;
31
- }), T = CSS.px(k.inline).toString(), N = CSS.px(k.block).toString(), w = b("referenceCell"), h = I(), q = b("corner"), z = I(), x = C(
32
- () => h.value ? CSS.px(k.inline - h.value).toString() : void 0
33
- ), V = C(
34
- () => CSS.px(z.value ?? 0).toString()
35
- );
36
- let g;
37
- E(() => {
38
- const o = (a) => {
39
- var e;
40
- return (e = a.borderBoxSize.find(Boolean)) == null ? void 0 : e.inlineSize;
41
- };
42
- g = new ResizeObserver((a) => {
43
- for (const e of a)
44
- switch (e.target) {
45
- case w.value:
46
- h.value = o(e);
47
- break;
48
- case q.value:
49
- z.value = o(e);
50
- break;
51
- }
52
- });
53
- }), A(() => {
54
- g.disconnect();
55
- });
56
- for (const o of [w, q])
57
- F(o, (a, e) => {
58
- a && g.observe(a), H(() => {
59
- e && g.unobserve(e);
60
- });
61
- });
62
- return (o, a) => (t(), c("div", {
63
- ref: "rootRef",
64
- class: l(n(r).root)
65
- }, [
66
- i("div", {
67
- ref: "referenceCell",
68
- class: l(n(r).referenceCell)
69
- }, "x", 2),
70
- i("div", {
71
- class: l(["pl-scrollable", n(r).table])
72
- }, [
73
- i("div", {
74
- class: l(n(r).sidebar)
75
- }, [
76
- s.widgets.includes("tree") && s.phylogeneticTree ? (t(), f(G, {
77
- key: 0,
78
- tree: s.phylogeneticTree,
79
- class: l(n(r).phylogeneticTree)
80
- }, null, 8, ["tree", "class"])) : u("", !0),
81
- i("div", {
82
- class: l(n(r).labels)
83
- }, [
84
- (t(!0), c(d, null, v(s.labels, ({ rows: e }, m) => (t(), c(d, { key: m }, [
85
- (t(!0), c(d, null, v(e, (p, S) => (t(), c("div", { key: S }, y(p), 1))), 128))
86
- ], 64))), 128))
87
- ], 2)
88
- ], 2),
89
- x.value !== void 0 ? (t(!0), c(d, { key: 0 }, v(s.sequences, (e, m) => (t(), c("div", {
90
- key: m,
91
- class: l(n(r).sequenceColumn)
92
- }, [
93
- i("div", {
94
- class: l(n(r).sequenceHeader)
95
- }, [
96
- O(i("div", {
97
- class: l(n(r).sequenceName)
98
- }, y(e.name), 3), [
99
- [P, s.sequences.length > 1]
100
- ]),
101
- s.widgets.includes("consensus") ? (t(), f($, {
102
- key: 0,
103
- "residue-counts": e.residueCounts,
104
- "labels-class": n(r).sequenceRow
105
- }, null, 8, ["residue-counts", "labels-class"])) : u("", !0),
106
- s.widgets.includes("seqLogo") ? (t(), f(J, {
107
- key: 1,
108
- "residue-counts": e.residueCounts
109
- }, null, 8, ["residue-counts"])) : u("", !0)
110
- ], 2),
111
- i("div", {
112
- class: l(n(r).sequenceRowsContainer),
113
- style: W({
114
- backgroundImage: e.highlightImageUrl ? `url(${e.highlightImageUrl})` : void 0
115
- })
116
- }, [
117
- (t(!0), c(d, null, v(e.rows, (p, S) => (t(), c("div", {
118
- key: S,
119
- class: l(n(r).sequenceRow)
120
- }, y(p), 3))), 128))
121
- ], 6)
122
- ], 2))), 128)) : u("", !0),
123
- i("div", {
124
- ref: "corner",
125
- class: l(n(r).corner)
126
- }, null, 2)
127
- ], 2),
128
- s.widgets.includes("legend") && s.highlightLegend ? (t(), f(j, {
129
- key: 0,
130
- legend: s.highlightLegend
131
- }, null, 8, ["legend"])) : u("", !0)
132
- ], 2));
133
- }
134
- });
135
- export {
136
- ne as default
137
- };
138
- //# sourceMappingURL=MultiSequenceAlignmentView.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiSequenceAlignmentView.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { PlMultiSequenceAlignmentWidget } from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n onBeforeUnmount,\n onWatcherCleanup,\n ref,\n useCssModule,\n useTemplateRef,\n watch,\n} from 'vue';\nimport { cellSize } from './cell-size';\nimport Consensus from './Consensus.vue';\nimport Legend from './Legend.vue';\nimport type { TreeNodeData } from './phylogenetic-tree.worker';\nimport PhylogeneticTree from './PhylogeneticTree.vue';\nimport SeqLogo from './SeqLogo.vue';\nimport type { HighlightLegend, ResidueCounts } from './types';\n\nconst props = defineProps<{\n sequences: {\n name: string;\n rows: string[];\n residueCounts: ResidueCounts;\n highlightImageUrl?: string;\n }[];\n labels: {\n rows: string[];\n }[];\n highlightLegend: HighlightLegend | undefined;\n phylogeneticTree: TreeNodeData[] | undefined;\n widgets: PlMultiSequenceAlignmentWidget[];\n}>();\n\nconst classes = useCssModule();\n\nconst rootEl = useTemplateRef('rootRef');\ndefineExpose({ rootEl });\n\nconst rowCount = computed(() => props.sequences.at(0)?.rows.length ?? 0);\n\nconst targetCellInlineSize = CSS.px(cellSize.inline).toString();\nconst targetCellBlockSize = CSS.px(cellSize.block).toString();\n\nconst referenceCellRef = useTemplateRef('referenceCell');\nconst referenceCellInlineSize = ref<number>();\n\nconst cornerRef = useTemplateRef('corner');\nconst cornerInlineSize = ref<number>();\n\nconst letterSpacing = computed(() =>\n referenceCellInlineSize.value\n ? CSS.px(cellSize.inline - referenceCellInlineSize.value).toString()\n : undefined,\n);\n\nconst sequenceNameInsetInlineStart = computed(() =>\n CSS.px(cornerInlineSize.value ?? 0).toString(),\n);\n\nlet observer: ResizeObserver;\n\nonBeforeMount(() => {\n const getInlineSize = (entry: ResizeObserverEntry) =>\n entry.borderBoxSize.find(Boolean)?.inlineSize;\n\n observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n switch (entry.target) {\n case referenceCellRef.value:\n referenceCellInlineSize.value = getInlineSize(entry);\n break;\n case cornerRef.value:\n cornerInlineSize.value = getInlineSize(entry);\n break;\n }\n }\n });\n});\n\nonBeforeUnmount(() => {\n observer.disconnect();\n});\n\nfor (const ref of [referenceCellRef, cornerRef]) {\n watch(ref, (el, prevEl) => {\n if (el) observer.observe(el);\n onWatcherCleanup(() => {\n if (prevEl) observer.unobserve(prevEl);\n });\n });\n}\n</script>\n\n<template>\n <div ref=\"rootRef\" :class=\"classes.root\">\n <div ref=\"referenceCell\" :class=\"classes.referenceCell\">x</div>\n <div :class=\"['pl-scrollable', classes.table]\">\n <div :class=\"classes.sidebar\">\n <PhylogeneticTree\n v-if=\"props.widgets.includes('tree') && props.phylogeneticTree\"\n :tree=\"props.phylogeneticTree\"\n :class=\"classes.phylogeneticTree\"\n />\n <div :class=\"classes.labels\">\n <template\n v-for=\"({ rows }, columnIndex) of props.labels\"\n :key=\"columnIndex\"\n >\n <div v-for=\"(row, rowIndex) of rows\" :key=\"rowIndex\">\n {{ row }}\n </div>\n </template>\n </div>\n </div>\n <template v-if=\"letterSpacing !== undefined\">\n <div\n v-for=\"(column, columnIndex) of props.sequences\"\n :key=\"columnIndex\"\n :class=\"classes.sequenceColumn\"\n >\n <div :class=\"classes.sequenceHeader\">\n <div\n v-show=\"props.sequences.length > 1\"\n :class=\"classes.sequenceName\"\n >\n {{ column.name }}\n </div>\n <Consensus\n v-if=\"props.widgets.includes('consensus')\"\n :residue-counts=\"column.residueCounts\"\n :labels-class=\"classes.sequenceRow\"\n />\n <SeqLogo\n v-if=\"props.widgets.includes('seqLogo')\"\n :residue-counts=\"column.residueCounts\"\n />\n </div>\n <div\n :class=\"classes.sequenceRowsContainer\"\n :style=\"{\n backgroundImage: column.highlightImageUrl\n ? `url(${column.highlightImageUrl})`\n : undefined,\n }\"\n >\n <div\n v-for=\"(row, rowIndex) of column.rows\"\n :key=\"rowIndex\"\n :class=\"classes.sequenceRow\"\n >\n {{ row }}\n </div>\n </div>\n </div>\n </template>\n <div ref=\"corner\" :class=\"classes.corner\" />\n </div>\n <Legend\n v-if=\"props.widgets.includes('legend') && props.highlightLegend\"\n :legend=\"props.highlightLegend\"\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 container-type: inline-size;\n\n &[data-pre-print] {\n container-type: unset;\n\n .sidebar {\n max-inline-size: unset;\n }\n }\n}\n\n.referenceCell {\n position: fixed;\n visibility: hidden;\n font-family: Spline Sans Mono;\n font-weight: 600;\n line-height: v-bind('targetCellBlockSize');\n}\n\n.table {\n display: grid;\n grid-template-columns:\n [sidebar-start] auto [sidebar-end] repeat(\n v-bind('props.sequences.length'),\n [column-start] auto [column-end]\n );\n grid-template-rows:\n [header-start] auto [header-end]\n repeat(v-bind('rowCount'), [row-start] auto [row-end]);\n justify-content: start;\n position: relative;\n @media print {\n overflow: visible;\n }\n}\n\n.sidebar {\n grid-column: sidebar;\n grid-row: 1 row-start / -1 row-end;\n display: grid;\n grid-template-rows: subgrid;\n position: sticky;\n inset-inline-start: 0;\n background-color: #fff;\n inline-size: min-content;\n max-inline-size: 30cqi;\n overflow: scroll;\n overscroll-behavior-inline: none;\n scrollbar-width: none;\n}\n\n.phylogeneticTree {\n grid-row: 1 row-start / -1 row-end;\n}\n\n.labels {\n grid-row: 1 row-start / -1 row-end;\n display: grid;\n grid-template-columns: repeat(v-bind('props.labels.length'), auto);\n grid-template-rows: subgrid;\n grid-auto-flow: column;\n column-gap: 12px;\n padding-inline-end: 12px;\n font-family: Spline Sans Mono;\n line-height: v-bind('targetCellBlockSize');\n white-space: nowrap;\n}\n\n.sequenceColumn {\n grid-row: header-start / -1 row-end;\n display: grid;\n grid-template-rows: subgrid;\n & + & {\n margin-inline-start: 24px;\n }\n}\n\n.sequenceHeader {\n grid-row: header;\n display: flex;\n flex-direction: column;\n justify-content: end;\n min-inline-size: 0;\n position: sticky;\n inset-block-start: 0;\n background-color: #fff;\n}\n\n.sequenceName {\n margin-block-end: 4px;\n font-weight: 700;\n line-height: 20px;\n inline-size: fit-content;\n position: sticky;\n inset-inline-start: v-bind('sequenceNameInsetInlineStart');\n}\n\n.sequenceRowsContainer {\n grid-row: 1 row-start / -1 row-end;\n display: grid;\n grid-template-rows: subgrid;\n}\n\n.sequenceRow {\n font-family: Spline Sans Mono;\n font-weight: 600;\n line-height: v-bind('targetCellBlockSize');\n letter-spacing: v-bind('letterSpacing');\n text-indent: calc(v-bind('letterSpacing') / 2);\n inline-size: calc-size(\n min-content,\n round(down, size, v-bind('targetCellInlineSize'))\n );\n white-space: nowrap;\n}\n\n.corner {\n grid-column: sidebar;\n grid-row: header;\n position: sticky;\n inset-inline-start: 0;\n inset-block-start: 0;\n background-color: #fff;\n}\n</style>\n"],"names":["props","__props","classes","useCssModule","rootEl","useTemplateRef","__expose","rowCount","computed","_a","targetCellInlineSize","cellSize","targetCellBlockSize","referenceCellRef","referenceCellInlineSize","ref","cornerRef","cornerInlineSize","letterSpacing","sequenceNameInsetInlineStart","observer","onBeforeMount","getInlineSize","entry","entries","onBeforeUnmount","watch","el","prevEl","onWatcherCleanup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,UAAMA,IAAQC,GAeRC,IAAUC,EAAA,GAEVC,IAASC,EAAe,SAAS;AACvC,IAAAC,EAAa,EAAE,QAAAF,GAAQ;AAEvB,UAAMG,IAAWC,EAAS,MAAA;;AAAM,eAAAC,IAAAT,EAAM,UAAU,GAAG,CAAC,MAApB,gBAAAS,EAAuB,KAAK,WAAU;AAAA,KAAC,GAEjEC,IAAuB,IAAI,GAAGC,EAAS,MAAM,EAAE,SAAA,GAC/CC,IAAsB,IAAI,GAAGD,EAAS,KAAK,EAAE,SAAA,GAE7CE,IAAmBR,EAAe,eAAe,GACjDS,IAA0BC,EAAA,GAE1BC,IAAYX,EAAe,QAAQ,GACnCY,IAAmBF,EAAA,GAEnBG,IAAgBV;AAAA,MAAS,MAC7BM,EAAwB,QACpB,IAAI,GAAGH,EAAS,SAASG,EAAwB,KAAK,EAAE,aACxD;AAAA,IAAA,GAGAK,IAA+BX;AAAA,MAAS,MAC5C,IAAI,GAAGS,EAAiB,SAAS,CAAC,EAAE,SAAA;AAAA,IAAS;AAG/C,QAAIG;AAEJ,IAAAC,EAAc,MAAM;AAClB,YAAMC,IAAgB,CAACC,MAAA;;AACrB,gBAAAd,IAAAc,EAAM,cAAc,KAAK,OAAO,MAAhC,gBAAAd,EAAmC;AAAA;AAErC,MAAAW,IAAW,IAAI,eAAe,CAACI,MAAY;AACzC,mBAAWD,KAASC;AAClB,kBAAQD,EAAM,QAAA;AAAA,YACZ,KAAKV,EAAiB;AACpB,cAAAC,EAAwB,QAAQQ,EAAcC,CAAK;AACnD;AAAA,YACF,KAAKP,EAAU;AACb,cAAAC,EAAiB,QAAQK,EAAcC,CAAK;AAC5C;AAAA,UAAA;AAAA,MAGR,CAAC;AAAA,IACH,CAAC,GAEDE,EAAgB,MAAM;AACpB,MAAAL,EAAS,WAAA;AAAA,IACX,CAAC;AAED,eAAWL,KAAO,CAACF,GAAkBG,CAAS;AAC5C,MAAAU,EAAMX,GAAK,CAACY,GAAIC,MAAW;AACzB,QAAID,KAAIP,EAAS,QAAQO,CAAE,GAC3BE,EAAiB,MAAM;AACrB,UAAID,KAAQR,EAAS,UAAUQ,CAAM;AAAA,QACvC,CAAC;AAAA,MACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,31 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._root_34869_2{display:flex;flex-direction:column;gap:12px;min-block-size:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;container-type:inline-size}._root_34869_2[data-pre-print]{container-type:unset}._root_34869_2[data-pre-print] ._sidebar_34869_14{max-inline-size:unset}._referenceCell_34869_20{position:fixed;visibility:hidden;font-family:Spline Sans Mono;font-weight:600;line-height:var(--e405b06c)}._table_34869_28{display:grid;grid-template-columns:[sidebar-start] auto [sidebar-end] repeat(var(--0c44921e),[column-start] auto [column-end]);grid-template-rows:[header-start] auto [header-end] repeat(var(--6aab37c6),[row-start] auto [row-end]);justify-content:start;position:relative}@media print{._table_34869_28{overflow:visible}}._sidebar_34869_14{grid-column:sidebar;grid-row:1 row-start / -1 row-end;display:grid;grid-template-rows:subgrid;position:sticky;inset-inline-start:0;background-color:#fff;inline-size:min-content;max-inline-size:30cqi;overflow:scroll;overscroll-behavior-inline:none;scrollbar-width:none}._phylogeneticTree_34869_60{grid-row:1 row-start / -1 row-end}._labels_34869_64{grid-row:1 row-start / -1 row-end;display:grid;grid-template-columns:repeat(var(--2e72cab4),auto);grid-template-rows:subgrid;grid-auto-flow:column;column-gap:12px;padding-inline-end:12px;font-family:Spline Sans Mono;line-height:var(--e405b06c);white-space:nowrap}._sequenceColumn_34869_77{grid-row:header-start / -1 row-end;display:grid;grid-template-rows:subgrid}._sequenceColumn_34869_77+._sequenceColumn_34869_77{margin-inline-start:24px}._sequenceHeader_34869_86{grid-row:header;display:flex;flex-direction:column;justify-content:end;min-inline-size:0;position:sticky;inset-block-start:0;background-color:#fff}._sequenceName_34869_97{margin-block-end:4px;font-weight:700;line-height:20px;inline-size:fit-content;position:sticky;inset-inline-start:var(--1ad5abe9)}._sequenceRowsContainer_34869_106{grid-row:1 row-start / -1 row-end;display:grid;grid-template-rows:subgrid}._sequenceRow_34869_106{font-family:Spline Sans Mono;font-weight:600;line-height:var(--e405b06c);letter-spacing:var(--3c16a76c);text-indent:calc(var(--3c16a76c) / 2);inline-size:calc-size(min-content,round(down,size,var(--1406981e)));white-space:nowrap}._corner_34869_125{grid-column:sidebar;grid-row:header;position:sticky;inset-inline-start:0;inset-block-start:0;background-color:#fff}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
2
- const e = "_root_34869_2", n = "_sidebar_34869_14", s = "_referenceCell_34869_20", o = "_table_34869_28", c = "_phylogeneticTree_34869_60", _ = "_labels_34869_64", r = "_sequenceColumn_34869_77", t = "_sequenceHeader_34869_86", l = "_sequenceName_34869_97", a = "_sequenceRowsContainer_34869_106", u = "_sequenceRow_34869_106", q = "_corner_34869_125", b = {
3
- root: e,
4
- sidebar: n,
5
- referenceCell: s,
6
- table: o,
7
- phylogeneticTree: c,
8
- labels: _,
9
- sequenceColumn: r,
10
- sequenceHeader: t,
11
- sequenceName: l,
12
- sequenceRowsContainer: a,
13
- sequenceRow: u,
14
- corner: q
15
- };
16
- export {
17
- q as corner,
18
- b as default,
19
- _ as labels,
20
- c as phylogeneticTree,
21
- s as referenceCell,
22
- e as root,
23
- r as sequenceColumn,
24
- t as sequenceHeader,
25
- l as sequenceName,
26
- u as sequenceRow,
27
- a as sequenceRowsContainer,
28
- n as sidebar,
29
- o as table
30
- };
31
- //# sourceMappingURL=MultiSequenceAlignmentView.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiSequenceAlignmentView.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -1,8 +0,0 @@
1
- import { TreeNodeData } from './phylogenetic-tree.worker';
2
- type __VLS_Props = {
3
- tree: TreeNodeData[];
4
- };
5
- declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
6
- plotEl: HTMLDivElement;
7
- }, any>;
8
- export default _default;
@@ -1,10 +0,0 @@
1
- import o from "./PhylogeneticTree.vue2.js";
2
- import s from "./PhylogeneticTree.vue3.js";
3
- import e from "../../_virtual/_plugin-vue_export-helper.js";
4
- const t = {
5
- $style: s
6
- }, f = /* @__PURE__ */ e(o, [["__cssModules", t]]);
7
- export {
8
- f as default
9
- };
10
- //# sourceMappingURL=PhylogeneticTree.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PhylogeneticTree.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,77 +0,0 @@
1
- import { defineComponent as v, useCssModule as g, useTemplateRef as y, computed as w, shallowRef as k, watchEffect as _, onBeforeUnmount as I, createBlock as x, createElementBlock as C, unref as o, openBlock as p, withCtx as L, createTextVNode as T, toDisplayString as B, normalizeClass as E } from "vue";
2
- import { PlAlert as P } from "@milaboratories/uikit";
3
- import { cellSize as d } from "./cell-size.js";
4
- import { useMiPlots as b } from "./useMiPlots.js";
5
- const N = /* @__PURE__ */ v({
6
- __name: "PhylogeneticTree",
7
- props: {
8
- tree: {}
9
- },
10
- setup(m) {
11
- const f = m, h = g(), l = y("plotEl"), a = {
12
- type: "dendro",
13
- title: { show: !1, name: "" },
14
- size: {
15
- width: 149,
16
- minCellHeight: d.block,
17
- maxCellHeight: d.block,
18
- marginLeft: 1,
19
- marginRight: 0,
20
- marginTop: 0,
21
- marginBottom: 0
22
- },
23
- mode: "normal",
24
- leavesMode: "alignLeavesToLine",
25
- leavesOrder: "indexAsc",
26
- legend: { show: !1 },
27
- id: {
28
- type: "column",
29
- value: "nodeId"
30
- },
31
- parentId: {
32
- type: "column",
33
- value: "parentId"
34
- },
35
- height: {
36
- type: "column",
37
- value: "distance"
38
- },
39
- showNodes: !1,
40
- showNodesLabels: !1,
41
- showLeavesLabels: !1,
42
- rootPosition: "left"
43
- }, r = w(() => {
44
- const e = [], n = [], u = [];
45
- for (const s of f.tree)
46
- e.push(s.id), n.push(s.parentId ?? null), u.push(s.length ?? 0);
47
- return {
48
- type: "columns",
49
- id: `phylogeneticTree-${crypto.randomUUID()}`,
50
- values: { nodeId: e, parentId: n, distance: u }
51
- };
52
- }), { miplots: i, error: c } = b(), t = k();
53
- return _(async () => {
54
- !l.value || !i.value || (t.value ? t.value.updateSettingsAndData(r.value, a) : (t.value = i.value.newPlot(r.value, a), t.value.mount(l.value)));
55
- }), I(() => {
56
- var e;
57
- (e = t.value) == null || e.unmount();
58
- }), (e, n) => o(c) ? (p(), x(o(P), {
59
- key: 0,
60
- type: "error"
61
- }, {
62
- default: L(() => [
63
- T(B(o(c).message), 1)
64
- ]),
65
- _: 1
66
- })) : (p(), C("div", {
67
- key: 1,
68
- ref_key: "plotEl",
69
- ref: l,
70
- class: E(o(h).container)
71
- }, null, 2));
72
- }
73
- });
74
- export {
75
- N as default
76
- };
77
- //# sourceMappingURL=PhylogeneticTree.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PhylogeneticTree.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n Settings,\n} from '@milaboratories/miplots4';\nimport { PlAlert } from '@milaboratories/uikit';\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useCssModule,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport { cellSize } from './cell-size';\nimport type { TreeNodeData } from './phylogenetic-tree.worker';\nimport { useMiPlots } from './useMiPlots';\n\nconst props = defineProps<{\n tree: TreeNodeData[];\n}>();\n\nconst classes = useCssModule();\n\nconst plotEl = useTemplateRef('plotEl');\n\nconst settings: Settings = {\n type: 'dendro',\n title: { show: false, name: '' },\n size: {\n width: 149,\n minCellHeight: cellSize.block,\n maxCellHeight: cellSize.block,\n marginLeft: 1,\n marginRight: 0,\n marginTop: 0,\n marginBottom: 0,\n },\n mode: 'normal',\n leavesMode: 'alignLeavesToLine',\n leavesOrder: 'indexAsc',\n legend: { show: false },\n id: {\n type: 'column',\n value: 'nodeId',\n },\n parentId: {\n type: 'column',\n value: 'parentId',\n },\n height: {\n type: 'column',\n value: 'distance',\n },\n showNodes: false,\n showNodesLabels: false,\n showLeavesLabels: false,\n rootPosition: 'left',\n};\n\nconst data = computed<DataByColumns>(() => {\n const nodeId: number[] = [];\n const parentId: (number | null)[] = [];\n const distance: number[] = [];\n for (const node of props.tree) {\n nodeId.push(node.id);\n parentId.push(node.parentId ?? null);\n distance.push(node.length ?? 0);\n }\n return ({\n type: 'columns',\n id: `phylogeneticTree-${crypto.randomUUID()}`,\n values: { nodeId, parentId, distance },\n });\n});\n\nconst { miplots, error } = useMiPlots();\n\nconst plot = shallowRef<ChartInterface>();\n\nwatchEffect(async () => {\n if (!plotEl.value || !miplots.value) return;\n if (!plot.value) {\n plot.value = miplots.value.newPlot(data.value, settings);\n plot.value.mount(plotEl.value);\n } else {\n plot.value.updateSettingsAndData(data.value, settings);\n }\n});\n\nonBeforeUnmount(() => {\n plot.value?.unmount();\n});\n</script>\n\n<template>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error.message }}\n </PlAlert>\n <div v-else ref=\"plotEl\" :class=\"classes.container\" />\n</template>\n\n<style module>\n.container {\n svg {\n display: block;\n }\n}\n</style>\n"],"names":["props","__props","classes","useCssModule","plotEl","useTemplateRef","settings","cellSize","data","computed","nodeId","parentId","distance","node","miplots","error","useMiPlots","plot","shallowRef","watchEffect","onBeforeUnmount","_a"],"mappings":";;;;;;;;;;AAmBA,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAASC,EAAe,QAAQ,GAEhCC,IAAqB;AAAA,MACzB,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,IAAO,MAAM,GAAA;AAAA,MAC5B,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,eAAeC,EAAS;AAAA,QACxB,eAAeA,EAAS;AAAA,QACxB,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,WAAW;AAAA,QACX,cAAc;AAAA,MAAA;AAAA,MAEhB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,QAAQ,EAAE,MAAM,GAAA;AAAA,MAChB,IAAI;AAAA,QACF,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAAA,GAGVC,IAAOC,EAAwB,MAAM;AACzC,YAAMC,IAAmB,CAAA,GACnBC,IAA8B,CAAA,GAC9BC,IAAqB,CAAA;AAC3B,iBAAWC,KAAQb,EAAM;AACvB,QAAAU,EAAO,KAAKG,EAAK,EAAE,GACnBF,EAAS,KAAKE,EAAK,YAAY,IAAI,GACnCD,EAAS,KAAKC,EAAK,UAAU,CAAC;AAEhC,aAAQ;AAAA,QACN,MAAM;AAAA,QACN,IAAI,oBAAoB,OAAO,WAAA,CAAY;AAAA,QAC3C,QAAQ,EAAE,QAAAH,GAAQ,UAAAC,GAAU,UAAAC,EAAA;AAAA,MAAS;AAAA,IAEzC,CAAC,GAEK,EAAE,SAAAE,GAAS,OAAAC,EAAA,IAAUC,EAAA,GAErBC,IAAOC,EAAA;AAEb,WAAAC,EAAY,YAAY;AACtB,MAAI,CAACf,EAAO,SAAS,CAACU,EAAQ,UACzBG,EAAK,QAIRA,EAAK,MAAM,sBAAsBT,EAAK,OAAOF,CAAQ,KAHrDW,EAAK,QAAQH,EAAQ,MAAM,QAAQN,EAAK,OAAOF,CAAQ,GACvDW,EAAK,MAAM,MAAMb,EAAO,KAAK;AAAA,IAIjC,CAAC,GAEDgB,EAAgB,MAAM;;AACpB,OAAAC,IAAAJ,EAAK,UAAL,QAAAI,EAAY;AAAA,IACd,CAAC;;;;;;;;;;;;;;;;"}
@@ -1,9 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_1uo2b_2 svg{display:block}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- const n = "_container_1uo2b_2", t = {
3
- container: n
4
- };
5
- export {
6
- n as container,
7
- t as default
8
- };
9
- //# sourceMappingURL=PhylogeneticTree.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PhylogeneticTree.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}