@platforma-sdk/ui-vue 1.42.53 → 1.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.turbo/turbo-build.log +213 -207
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +14 -0
  4. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  5. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  6. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +6 -0
  7. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +1 -0
  8. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +5 -0
  9. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +1 -0
  10. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +2 -3
  11. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  12. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +11 -12
  13. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  14. package/dist/components/PlAgRowNumHeader.vue.js +8 -9
  15. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  16. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.d.ts +1 -0
  17. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js +48 -46
  18. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js.map +1 -1
  19. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js +5 -7
  20. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js.map +1 -1
  21. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +14 -13
  22. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js.map +1 -1
  23. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +9 -8
  24. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +16 -9
  25. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +117 -85
  26. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  27. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +25 -18
  28. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  29. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.d.ts +8 -0
  30. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js +10 -0
  31. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js.map +1 -0
  32. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js +77 -0
  33. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js.map +1 -0
  34. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js +9 -0
  35. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js.map +1 -0
  36. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +26 -18
  37. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +119 -120
  38. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  39. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js +7 -124
  40. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js.map +1 -1
  41. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js +124 -2
  42. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js.map +1 -1
  43. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js +9 -0
  44. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js.map +1 -0
  45. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +90 -90
  46. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  47. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js +9 -7
  48. package/dist/components/PlMultiSequenceAlignment/cell-size.d.ts +4 -0
  49. package/dist/components/PlMultiSequenceAlignment/cell-size.js +8 -0
  50. package/dist/components/PlMultiSequenceAlignment/cell-size.js.map +1 -0
  51. package/dist/components/PlMultiSequenceAlignment/data.d.ts +15 -10
  52. package/dist/components/PlMultiSequenceAlignment/data.js +309 -202
  53. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  54. package/dist/components/PlMultiSequenceAlignment/markup.js +9 -7
  55. package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
  56. package/dist/components/PlMultiSequenceAlignment/migrations.js +15 -13
  57. package/dist/components/PlMultiSequenceAlignment/migrations.js.map +1 -1
  58. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.d.ts +6 -0
  59. package/dist/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.d.ts +7 -0
  60. package/dist/components/PlMultiSequenceAlignment/settings.js +3 -4
  61. package/dist/components/PlMultiSequenceAlignment/settings.js.map +1 -1
  62. package/dist/index.js +25 -27
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib.d.ts +1 -2
  65. package/package.json +6 -6
  66. package/src/components/PlMultiSequenceAlignment/Consensus.vue +38 -39
  67. package/src/components/PlMultiSequenceAlignment/Legend.vue +9 -9
  68. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +222 -126
  69. package/src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue +110 -0
  70. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +28 -22
  71. package/src/components/PlMultiSequenceAlignment/SeqLogo.vue +77 -69
  72. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +47 -39
  73. package/src/components/PlMultiSequenceAlignment/cell-size.ts +4 -0
  74. package/src/components/PlMultiSequenceAlignment/data.ts +361 -149
  75. package/src/components/PlMultiSequenceAlignment/markup.ts +10 -8
  76. package/src/components/PlMultiSequenceAlignment/migrations.ts +6 -1
  77. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.ts +54 -0
  78. package/src/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.ts +89 -0
  79. package/src/components/PlMultiSequenceAlignment/settings.ts +1 -2
  80. package/src/lib.ts +1 -3
  81. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.d.ts +0 -7
  82. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.js +0 -51
  83. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.js.map +0 -1
  84. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.ts +0 -101
@@ -1,5 +1,127 @@
1
- import f from "./SeqLogo.vue.js";
1
+ import { defineComponent as C, useCssModule as w, useTemplateRef as E, computed as f, shallowRef as x, watchEffect as D, onBeforeUnmount as _, createBlock as K, createElementBlock as B, unref as l, openBlock as d, withCtx as A, createTextVNode as G, toDisplayString as S, normalizeClass as T } from "vue";
2
+ import { PlAlert as L } from "@milaboratories/uikit";
3
+ import { cellSize as N } from "./cell-size.js";
4
+ import { useMiPlots as P } from "./useMiPlots.js";
5
+ const R = /* @__PURE__ */ C({
6
+ __name: "SeqLogo",
7
+ props: {
8
+ residueCounts: {}
9
+ },
10
+ setup(y) {
11
+ const u = y, g = w(), n = E("plotEl"), e = {
12
+ blue: "#549EE7",
13
+ red: "#E85456",
14
+ green: "#65BF65",
15
+ magenta: "#9178E1",
16
+ pink: "#D568D5",
17
+ orange: "#C59445",
18
+ cyan: "#62C7CC",
19
+ yellow: "#D5D549",
20
+ black: "#000000"
21
+ }, h = {
22
+ A: e.blue,
23
+ R: e.red,
24
+ N: e.green,
25
+ D: e.magenta,
26
+ C: e.pink,
27
+ Q: e.green,
28
+ E: e.magenta,
29
+ G: e.orange,
30
+ H: e.cyan,
31
+ I: e.blue,
32
+ L: e.blue,
33
+ K: e.red,
34
+ M: e.blue,
35
+ F: e.blue,
36
+ P: e.yellow,
37
+ S: e.green,
38
+ T: e.green,
39
+ W: e.blue,
40
+ Y: e.cyan,
41
+ V: e.blue,
42
+ B: e.black,
43
+ X: e.black,
44
+ Z: e.black
45
+ }, r = f(() => ({
46
+ type: "discrete",
47
+ title: {
48
+ name: "",
49
+ show: !1
50
+ },
51
+ size: {
52
+ width: u.residueCounts.length * N.inline,
53
+ height: 80,
54
+ innerOffset: 0,
55
+ outerOffset: 0
56
+ },
57
+ frame: {
58
+ type: "empty"
59
+ },
60
+ xAxis: {
61
+ title: "",
62
+ showGrid: !1,
63
+ showTicks: !1,
64
+ hiddenLabels: !0
65
+ },
66
+ yAxis: {
67
+ title: "",
68
+ showGrid: !1,
69
+ showTicks: !1,
70
+ hiddenLabels: !0
71
+ },
72
+ y: {
73
+ type: "column",
74
+ value: "countKey"
75
+ },
76
+ primaryGrouping: {
77
+ columnName: {
78
+ type: "column",
79
+ value: "columnKey"
80
+ }
81
+ },
82
+ secondaryGrouping: {
83
+ columnName: {
84
+ type: "column",
85
+ value: "residueKey"
86
+ }
87
+ },
88
+ layers: [{
89
+ type: "logo",
90
+ aes: { fillColor: h }
91
+ }]
92
+ })), a = f(() => {
93
+ const t = [], s = [], m = [];
94
+ for (const [v, b] of u.residueCounts.entries())
95
+ for (const [p, k] of Object.entries(b))
96
+ p !== "-" && (t.push(k), s.push(v), m.push(p));
97
+ return {
98
+ type: "columns",
99
+ id: `seq-logo-${crypto.randomUUID()}`,
100
+ values: { countKey: t, columnKey: s, residueKey: m }
101
+ };
102
+ }), { miplots: c, error: i } = P(), o = x();
103
+ return D(async () => {
104
+ !n.value || !c.value || (o.value ? o.value.updateSettingsAndData(a.value, r.value) : (o.value = c.value.newPlot(a.value, r.value), o.value.mount(n.value)));
105
+ }), _(() => {
106
+ var t;
107
+ (t = o.value) == null || t.unmount();
108
+ }), (t, s) => l(i) ? (d(), K(l(L), {
109
+ key: 0,
110
+ type: "error"
111
+ }, {
112
+ default: A(() => [
113
+ G(S(l(i).message), 1)
114
+ ]),
115
+ _: 1
116
+ })) : (d(), B("div", {
117
+ key: 1,
118
+ ref_key: "plotEl",
119
+ ref: n,
120
+ class: T(l(g).container)
121
+ }, null, 2));
122
+ }
123
+ });
2
124
  export {
3
- f as default
125
+ R as default
4
126
  };
5
127
  //# sourceMappingURL=SeqLogo.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SeqLogo.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"SeqLogo.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/SeqLogo.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n Settings,\n} from '@milaboratories/miplots4';\nimport { PlAlert } from '@milaboratories/uikit';\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n 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}>();\n\nconst classes = useCssModule();\n\nconst plotEl = useTemplateRef('plotEl');\n\nconst palette = {\n blue: '#549EE7',\n red: '#E85456',\n green: '#65BF65',\n magenta: '#9178E1',\n pink: '#D568D5',\n orange: '#C59445',\n cyan: '#62C7CC',\n yellow: '#D5D549',\n black: '#000000',\n};\n\nconst residueColors = {\n A: palette.blue,\n R: palette.red,\n N: palette.green,\n D: palette.magenta,\n C: palette.pink,\n Q: palette.green,\n E: palette.magenta,\n G: palette.orange,\n H: palette.cyan,\n I: palette.blue,\n L: palette.blue,\n K: palette.red,\n M: palette.blue,\n F: palette.blue,\n P: palette.yellow,\n S: palette.green,\n T: palette.green,\n W: palette.blue,\n Y: palette.cyan,\n V: palette.blue,\n B: palette.black,\n X: palette.black,\n Z: palette.black,\n};\n\nconst settings = computed(() => ({\n type: 'discrete',\n title: {\n name: '',\n show: false,\n },\n size: {\n width: props.residueCounts.length * cellSize.inline,\n height: 80,\n innerOffset: 0,\n outerOffset: 0,\n },\n frame: {\n type: 'empty',\n },\n xAxis: {\n title: '',\n showGrid: false,\n showTicks: false,\n hiddenLabels: true,\n },\n yAxis: {\n title: '',\n showGrid: false,\n showTicks: false,\n hiddenLabels: true,\n },\n y: {\n type: 'column',\n value: 'countKey',\n },\n primaryGrouping: {\n columnName: {\n type: 'column',\n value: 'columnKey',\n },\n },\n secondaryGrouping: {\n columnName: {\n type: 'column',\n value: 'residueKey',\n },\n },\n layers: [{\n type: 'logo',\n aes: { fillColor: residueColors },\n }],\n} satisfies Settings));\n\nconst data = computed<DataByColumns>(() => {\n const countKey: number[] = [];\n const columnKey: number[] = [];\n const residueKey: string[] = [];\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 residueKey.push(residue);\n }\n }\n return ({\n type: 'columns',\n id: `seq-logo-${crypto.randomUUID()}`,\n values: { countKey, columnKey, residueKey },\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.value);\n plot.value.mount(plotEl.value);\n } else {\n plot.value.updateSettingsAndData(data.value, settings.value);\n }\n});\n\nonBeforeUnmount(() => {\n plot.value?.unmount();\n});\n</script>\n\n<template>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error.message }}\n </PlAlert>\n <div v-else ref=\"plotEl\" :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","palette","residueColors","settings","computed","cellSize","data","countKey","columnKey","residueKey","columnIndex","column","residue","count","miplots","error","useMiPlots","plot","shallowRef","watchEffect","onBeforeUnmount","_a"],"mappings":"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"}
@@ -0,0 +1,9 @@
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=SeqLogo.vue3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeqLogo.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,9 +1,9 @@
1
- import { defineComponent as E, ref as b, watchEffect as I, computed as V, createElementBlock as $, openBlock as f, Fragment as K, createElementVNode as r, createVNode as o, normalizeClass as u, unref as n, withModifiers as S, withCtx as s, createTextVNode as a, createCommentVNode as k, createBlock as L, withKeys as P } from "vue";
2
- import { isJsonEqual as w } from "../../lib/util/helpers/dist/objects.js";
1
+ import { defineComponent as I, useCssModule as K, ref as S, watchEffect as L, computed as x, createElementBlock as w, openBlock as P, Fragment as M, createElementVNode as r, createVNode as o, normalizeClass as m, unref as t, withModifiers as k, withCtx as s, createTextVNode as a, createCommentVNode as U, createBlock as T, withKeys as C } from "vue";
2
+ import { isJsonEqual as q } from "../../lib/util/helpers/dist/objects.js";
3
3
  import "../../lib/util/helpers/dist/test_timeouts.js";
4
- import { PlDropdownMulti as q, PlDropdown as T, PlBtnGhost as y, PlCheckbox as g, PlSlideModal as A, PlNumberField as C, PlBtnPrimary as D, PlBtnSecondary as G } from "@milaboratories/uikit";
5
- import { defaultAlignmentParams as M } from "./multi-sequence-alignment.js";
6
- const j = /* @__PURE__ */ E({
4
+ import { PlDropdownMulti as $, PlDropdown as D, PlBtnGhost as V, PlCheckbox as g, PlSlideModal as G, PlNumberField as b, PlBtnPrimary as A, PlBtnSecondary as F } from "@milaboratories/uikit";
5
+ import { defaultSettings as R } from "./settings.js";
6
+ const Q = /* @__PURE__ */ I({
7
7
  __name: "Toolbar",
8
8
  props: {
9
9
  settings: {},
@@ -12,74 +12,74 @@ const j = /* @__PURE__ */ E({
12
12
  colorSchemeOptions: {}
13
13
  },
14
14
  emits: ["updateSettings", "export"],
15
- setup(m, { emit: U }) {
16
- const O = U, p = b(!1);
17
- function d(t, e) {
18
- O("updateSettings", { [t]: e });
15
+ setup(B, { emit: O }) {
16
+ const n = B, y = O, u = K(), f = S(!1);
17
+ function d(p, e) {
18
+ y("updateSettings", { [p]: e });
19
19
  }
20
- function v(t, e) {
20
+ function v(p, e) {
21
21
  d(
22
22
  "widgets",
23
- e ? [...m.settings.widgets, t] : m.settings.widgets.filter((l) => t !== l)
23
+ e ? [...n.settings.widgets, p] : n.settings.widgets.filter((l) => p !== l)
24
24
  );
25
25
  }
26
- const i = b({ ...m.settings.alignmentParams });
27
- I(() => {
28
- i.value = { ...m.settings.alignmentParams };
26
+ const i = S({ ...n.settings.alignmentParams });
27
+ L(() => {
28
+ i.value = { ...n.settings.alignmentParams };
29
29
  });
30
- const B = V(
31
- () => !w(m.settings.alignmentParams, i.value)
32
- ), N = V(
33
- () => !w(m.settings.alignmentParams, M)
30
+ const N = x(
31
+ () => !q(n.settings.alignmentParams, i.value)
32
+ ), E = x(
33
+ () => !q(n.settings.alignmentParams, R.alignmentParams)
34
34
  );
35
- return (t, e) => (f(), $(K, null, [
35
+ return (p, e) => (P(), w(M, null, [
36
36
  r("div", {
37
- class: u(t.$style.container)
37
+ class: m(t(u).container)
38
38
  }, [
39
39
  r("div", {
40
- class: u(t.$style.line)
40
+ class: m(t(u).line)
41
41
  }, [
42
42
  r("div", {
43
- class: u(t.$style.section)
43
+ class: m(t(u).section)
44
44
  }, [
45
- o(n(q), {
45
+ o(t($), {
46
46
  label: "Sequence Columns",
47
- "model-value": t.settings.sequenceColumnIds ?? [],
48
- options: t.sequenceColumnOptions,
47
+ "model-value": n.settings.sequenceColumnIds ?? [],
48
+ options: n.sequenceColumnOptions,
49
49
  clearable: "",
50
50
  "onUpdate:modelValue": e[0] || (e[0] = (l) => d("sequenceColumnIds", l))
51
51
  }, null, 8, ["model-value", "options"]),
52
- o(n(q), {
53
- "model-value": t.settings.labelColumnIds ?? [],
52
+ o(t($), {
53
+ "model-value": n.settings.labelColumnIds ?? [],
54
54
  label: "Label Columns",
55
- options: t.labelColumnOptions,
55
+ options: n.labelColumnOptions,
56
56
  clearable: "",
57
57
  "onUpdate:modelValue": e[1] || (e[1] = (l) => d("labelColumnIds", l))
58
58
  }, null, 8, ["model-value", "options"]),
59
- o(n(T), {
60
- "model-value": t.settings.colorScheme,
59
+ o(t(D), {
60
+ "model-value": n.settings.colorScheme,
61
61
  label: "Color Scheme",
62
- options: t.colorSchemeOptions,
62
+ options: n.colorSchemeOptions,
63
63
  "onUpdate:modelValue": e[2] || (e[2] = (l) => d("colorScheme", l))
64
64
  }, null, 8, ["model-value", "options"])
65
65
  ], 2),
66
66
  r("div", {
67
- class: u(t.$style.buttons)
67
+ class: m(t(u).buttons)
68
68
  }, [
69
- o(n(y), {
69
+ o(t(V), {
70
70
  icon: "settings",
71
- onClick: e[3] || (e[3] = S((l) => p.value = !0, ["stop"]))
71
+ onClick: e[3] || (e[3] = k((l) => f.value = !0, ["stop"]))
72
72
  }, {
73
- default: s(() => e[18] || (e[18] = [
73
+ default: s(() => e[19] || (e[19] = [
74
74
  a(" Settings ")
75
75
  ])),
76
76
  _: 1
77
77
  }),
78
- o(n(y), {
78
+ o(t(V), {
79
79
  icon: "export",
80
- onClick: e[4] || (e[4] = S((l) => t.$emit("export"), ["stop"]))
80
+ onClick: e[4] || (e[4] = k((l) => y("export"), ["stop"]))
81
81
  }, {
82
- default: s(() => e[19] || (e[19] = [
82
+ default: s(() => e[20] || (e[20] = [
83
83
  a(" Export ")
84
84
  ])),
85
85
  _: 1
@@ -87,53 +87,53 @@ const j = /* @__PURE__ */ E({
87
87
  ], 2)
88
88
  ], 2),
89
89
  r("div", {
90
- class: u(t.$style.line)
90
+ class: m(t(u).line)
91
91
  }, [
92
92
  r("div", {
93
- class: u(t.$style.section)
93
+ class: m(t(u).section)
94
94
  }, [
95
- o(n(g), {
96
- "model-value": t.settings.widgets.includes("seqLogo"),
95
+ o(t(g), {
96
+ "model-value": n.settings.widgets.includes("seqLogo"),
97
97
  "onUpdate:modelValue": e[5] || (e[5] = (l) => v("seqLogo", l))
98
98
  }, {
99
- default: s(() => e[20] || (e[20] = [
99
+ default: s(() => e[21] || (e[21] = [
100
100
  a(" Seq logo ")
101
101
  ])),
102
102
  _: 1
103
103
  }, 8, ["model-value"]),
104
- o(n(g), {
105
- "model-value": t.settings.widgets.includes("consensus"),
104
+ o(t(g), {
105
+ "model-value": n.settings.widgets.includes("consensus"),
106
106
  "onUpdate:modelValue": e[6] || (e[6] = (l) => v("consensus", l))
107
107
  }, {
108
- default: s(() => e[21] || (e[21] = [
108
+ default: s(() => e[22] || (e[22] = [
109
109
  a(" Consensus ")
110
110
  ])),
111
111
  _: 1
112
112
  }, 8, ["model-value"]),
113
- o(n(g), {
113
+ o(t(g), {
114
114
  "model-value": !1,
115
115
  disabled: ""
116
116
  }, {
117
- default: s(() => e[22] || (e[22] = [
117
+ default: s(() => e[23] || (e[23] = [
118
118
  a("Navigator")
119
119
  ])),
120
120
  _: 1
121
121
  }),
122
- o(n(g), {
123
- "model-value": !1,
124
- disabled: ""
122
+ o(t(g), {
123
+ "model-value": n.settings.widgets.includes("tree"),
124
+ "onUpdate:modelValue": e[7] || (e[7] = (l) => v("tree", l))
125
125
  }, {
126
- default: s(() => e[23] || (e[23] = [
127
- a("Tree")
126
+ default: s(() => e[24] || (e[24] = [
127
+ a(" Tree ")
128
128
  ])),
129
129
  _: 1
130
- }),
131
- o(n(g), {
132
- "model-value": t.settings.widgets.includes("legend"),
133
- disabled: t.settings.colorScheme.type === "no-color",
134
- "onUpdate:modelValue": e[7] || (e[7] = (l) => v("legend", l))
130
+ }, 8, ["model-value"]),
131
+ o(t(g), {
132
+ "model-value": n.settings.widgets.includes("legend"),
133
+ disabled: n.settings.colorScheme.type === "no-color",
134
+ "onUpdate:modelValue": e[8] || (e[8] = (l) => v("legend", l))
135
135
  }, {
136
- default: s(() => e[24] || (e[24] = [
136
+ default: s(() => e[25] || (e[25] = [
137
137
  a(" Legend ")
138
138
  ])),
139
139
  _: 1
@@ -141,82 +141,82 @@ const j = /* @__PURE__ */ E({
141
141
  ], 2)
142
142
  ], 2)
143
143
  ], 2),
144
- o(n(A), {
145
- modelValue: p.value,
146
- "onUpdate:modelValue": e[17] || (e[17] = (l) => p.value = l)
144
+ o(t(G), {
145
+ modelValue: f.value,
146
+ "onUpdate:modelValue": e[18] || (e[18] = (l) => f.value = l)
147
147
  }, {
148
- title: s(() => e[25] || (e[25] = [
148
+ title: s(() => e[26] || (e[26] = [
149
149
  a("Settings")
150
150
  ])),
151
151
  default: s(() => [
152
- o(n(C), {
152
+ o(t(b), {
153
153
  modelValue: i.value.gpo,
154
- "onUpdate:modelValue": e[8] || (e[8] = (l) => i.value.gpo = l),
154
+ "onUpdate:modelValue": e[9] || (e[9] = (l) => i.value.gpo = l),
155
155
  label: "Gap open penalty",
156
156
  step: 0.1,
157
- onKeyup: e[9] || (e[9] = P((l) => d("alignmentParams", i.value), ["enter"]))
157
+ onKeyup: e[10] || (e[10] = C((l) => d("alignmentParams", i.value), ["enter"]))
158
158
  }, {
159
- tooltip: s(() => e[26] || (e[26] = [
159
+ tooltip: s(() => e[27] || (e[27] = [
160
160
  a(" Penalty score assigned to the introduction of a gap in the alignment ")
161
161
  ])),
162
162
  _: 1
163
163
  }, 8, ["modelValue"]),
164
- o(n(C), {
164
+ o(t(b), {
165
165
  modelValue: i.value.gpe,
166
- "onUpdate:modelValue": e[10] || (e[10] = (l) => i.value.gpe = l),
166
+ "onUpdate:modelValue": e[11] || (e[11] = (l) => i.value.gpe = l),
167
167
  label: "Gap extension penalty",
168
168
  step: 0.1,
169
- onKeyup: e[11] || (e[11] = P((l) => d("alignmentParams", i.value), ["enter"]))
169
+ onKeyup: e[12] || (e[12] = C((l) => d("alignmentParams", i.value), ["enter"]))
170
170
  }, {
171
- tooltip: s(() => e[27] || (e[27] = [
171
+ tooltip: s(() => e[28] || (e[28] = [
172
172
  a(" Penalty score assigned to each additional residue added to an existing gap ")
173
173
  ])),
174
174
  _: 1
175
175
  }, 8, ["modelValue"]),
176
- o(n(C), {
176
+ o(t(b), {
177
177
  modelValue: i.value.tgpe,
178
- "onUpdate:modelValue": e[12] || (e[12] = (l) => i.value.tgpe = l),
178
+ "onUpdate:modelValue": e[13] || (e[13] = (l) => i.value.tgpe = l),
179
179
  label: "Terminal gap extension penalty",
180
180
  step: 0.1,
181
- onKeyup: e[13] || (e[13] = P((l) => d("alignmentParams", i.value), ["enter"]))
181
+ onKeyup: e[14] || (e[14] = C((l) => d("alignmentParams", i.value), ["enter"]))
182
182
  }, {
183
- tooltip: s(() => e[28] || (e[28] = [
183
+ tooltip: s(() => e[29] || (e[29] = [
184
184
  a(" Penalty score assigned to extending gaps at the ends of sequences ")
185
185
  ])),
186
186
  _: 1
187
187
  }, 8, ["modelValue"]),
188
- B.value ? (f(), $("div", {
188
+ N.value ? (P(), w("div", {
189
189
  key: 0,
190
- class: u(t.$style["pending-changes"])
190
+ class: m(t(u).pendingChanges)
191
191
  }, [
192
- o(n(D), {
193
- onClick: e[14] || (e[14] = (l) => d("alignmentParams", i.value))
192
+ o(t(A), {
193
+ onClick: e[15] || (e[15] = (l) => d("alignmentParams", i.value))
194
194
  }, {
195
- default: s(() => e[29] || (e[29] = [
195
+ default: s(() => e[30] || (e[30] = [
196
196
  a(" Apply ")
197
197
  ])),
198
198
  _: 1
199
199
  }),
200
- o(n(y), {
201
- onClick: e[15] || (e[15] = (l) => i.value = t.settings.alignmentParams)
200
+ o(t(V), {
201
+ onClick: e[16] || (e[16] = (l) => i.value = n.settings.alignmentParams)
202
202
  }, {
203
- default: s(() => e[30] || (e[30] = [
203
+ default: s(() => e[31] || (e[31] = [
204
204
  a(" Cancel ")
205
205
  ])),
206
206
  _: 1
207
207
  })
208
- ], 2)) : k("", !0),
209
- N.value ? (f(), L(n(G), {
208
+ ], 2)) : U("", !0),
209
+ E.value ? (P(), T(t(F), {
210
210
  key: 1,
211
- class: u(t.$style["reset-button"]),
211
+ class: m(t(u).resetButton),
212
212
  icon: "reverse",
213
- onClick: e[16] || (e[16] = (l) => d("alignmentParams", void 0))
213
+ onClick: e[17] || (e[17] = (l) => d("alignmentParams", void 0))
214
214
  }, {
215
- default: s(() => e[31] || (e[31] = [
215
+ default: s(() => e[32] || (e[32] = [
216
216
  a(" Reset to Default ")
217
217
  ])),
218
218
  _: 1
219
- }, 8, ["class"])) : k("", !0)
219
+ }, 8, ["class"])) : U("", !0)
220
220
  ]),
221
221
  _: 1
222
222
  }, 8, ["modelValue"])
@@ -224,6 +224,6 @@ const j = /* @__PURE__ */ E({
224
224
  }
225
225
  });
226
226
  export {
227
- j as default
227
+ Q as default
228
228
  };
229
229
  //# sourceMappingURL=Toolbar.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlBtnGhost,\n PlBtnPrimary,\n PlBtnSecondary,\n PlCheckbox,\n PlDropdown,\n PlDropdownMulti,\n PlNumberField,\n PlSlideModal,\n} from '@milaboratories/uikit';\nimport type {\n PlMultiSequenceAlignmentColorSchemeOption as ColorSchemeOption,\n PlMultiSequenceAlignmentSettings as Settings,\n PObjectId,\n PTableColumnId,\n} from '@platforma-sdk/model';\nimport { computed, ref, watchEffect } from 'vue';\nimport { defaultAlignmentParams } from './multi-sequence-alignment';\n\nconst { settings } = defineProps<{\n settings: Settings;\n sequenceColumnOptions: ListOptionNormalized<PObjectId>[] | undefined;\n labelColumnOptions: ListOptionNormalized<PTableColumnId>[] | undefined;\n colorSchemeOptions: ListOptionNormalized<ColorSchemeOption>[];\n}>();\n\nconst emit = defineEmits<{\n updateSettings: [Partial<Settings>];\n export: [];\n}>();\n\nconst settingsOpen = ref(false);\n\nfunction updateSetting<K extends keyof Settings>(\n key: K,\n value: Settings[K] | undefined,\n) {\n emit('updateSettings', { [key]: value });\n}\n\nfunction toggleWidget(\n widget: 'seqLogo' | 'consensus' | 'legend',\n checked: boolean,\n) {\n updateSetting(\n 'widgets',\n checked\n ? [...settings.widgets, widget]\n : settings.widgets.filter((w) => widget !== w),\n );\n}\n\nconst alignmentParams = ref({ ...settings.alignmentParams });\nwatchEffect(() => {\n alignmentParams.value = { ...settings.alignmentParams };\n});\n\nconst alignmentParamsChangesPending = computed(() =>\n !isJsonEqual(settings.alignmentParams, alignmentParams.value),\n);\n\nconst canResetAlignmentParams = computed(() =>\n !isJsonEqual(settings.alignmentParams, defaultAlignmentParams),\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <div :class=\"$style.line\">\n <div :class=\"$style.section\">\n <PlDropdownMulti\n label=\"Sequence Columns\"\n :model-value=\"settings.sequenceColumnIds ?? []\"\n :options=\"sequenceColumnOptions\"\n clearable\n @update:model-value=\"updateSetting('sequenceColumnIds', $event)\"\n />\n <PlDropdownMulti\n :model-value=\"settings.labelColumnIds ?? []\"\n label=\"Label Columns\"\n :options=\"labelColumnOptions\"\n clearable\n @update:model-value=\"updateSetting('labelColumnIds', $event)\"\n />\n <PlDropdown\n :model-value=\"settings.colorScheme\"\n label=\"Color Scheme\"\n :options=\"colorSchemeOptions\"\n @update:model-value=\"updateSetting('colorScheme', $event)\"\n />\n </div>\n <div :class=\"$style.buttons\">\n <PlBtnGhost icon=\"settings\" @click.stop=\"settingsOpen = true\">\n Settings\n </PlBtnGhost>\n <PlBtnGhost icon=\"export\" @click.stop=\"$emit('export')\">\n Export\n </PlBtnGhost>\n </div>\n </div>\n <div :class=\"$style.line\">\n <div :class=\"$style.section\">\n <PlCheckbox\n :model-value=\"settings.widgets.includes('seqLogo')\"\n @update:model-value=\"toggleWidget('seqLogo', $event)\"\n >\n Seq logo\n </PlCheckbox>\n <PlCheckbox\n :model-value=\"settings.widgets.includes('consensus')\"\n @update:model-value=\"toggleWidget('consensus', $event)\"\n >\n Consensus\n </PlCheckbox>\n <PlCheckbox :model-value=\"false\" disabled>Navigator</PlCheckbox>\n <PlCheckbox :model-value=\"false\" disabled>Tree</PlCheckbox>\n <PlCheckbox\n :model-value=\"settings.widgets.includes('legend')\"\n :disabled=\"settings.colorScheme.type === 'no-color'\"\n @update:model-value=\"toggleWidget('legend', $event)\"\n >\n Legend\n </PlCheckbox>\n </div>\n </div>\n </div>\n <PlSlideModal v-model=\"settingsOpen\">\n <template #title>Settings</template>\n <PlNumberField\n v-model=\"alignmentParams.gpo\"\n label=\"Gap open penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to the introduction of a gap in the alignment\n </template>\n </PlNumberField>\n <PlNumberField\n v-model=\"alignmentParams.gpe\"\n label=\"Gap extension penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to each additional residue added to an existing\n gap\n </template>\n </PlNumberField>\n <PlNumberField\n v-model=\"alignmentParams.tgpe\"\n label=\"Terminal gap extension penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to extending gaps at the ends of sequences\n </template>\n </PlNumberField>\n <div\n v-if=\"alignmentParamsChangesPending\"\n :class=\"$style['pending-changes']\"\n >\n <PlBtnPrimary @click=\"updateSetting('alignmentParams', alignmentParams)\">\n Apply\n </PlBtnPrimary>\n <PlBtnGhost @click=\"alignmentParams = settings.alignmentParams\">\n Cancel\n </PlBtnGhost>\n </div>\n <PlBtnSecondary\n v-if=\"canResetAlignmentParams\"\n :class=\"$style['reset-button']\"\n icon=\"reverse\"\n @click=\"updateSetting('alignmentParams', undefined)\"\n >\n Reset to Default\n </PlBtnSecondary>\n </PlSlideModal>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.line {\n display: flex;\n justify-content: space-between;\n}\n\n.section {\n display: flex;\n flex-wrap: wrap;\n gap: 24px;\n}\n\n.buttons {\n display: flex;\n}\n\n.pending-changes {\n display: flex;\n button {\n min-width: 160px;\n }\n}\n\n.reset-button {\n margin-block-start: auto;\n span {\n text-transform: none;\n }\n}\n</style>\n"],"names":["emit","__emit","settingsOpen","ref","updateSetting","key","value","toggleWidget","widget","checked","__props","w","alignmentParams","watchEffect","alignmentParamsChangesPending","computed","isJsonEqual","canResetAlignmentParams","defaultAlignmentParams"],"mappings":";;;;;;;;;;;;;;;AA6BA,UAAMA,IAAOC,GAKPC,IAAeC,EAAI,EAAK;AAE9B,aAASC,EACPC,GACAC,GACA;AACA,MAAAN,EAAK,kBAAkB,EAAE,CAACK,CAAG,GAAGC,GAAO;AAAA,IACzC;AAEA,aAASC,EACPC,GACAC,GACA;AACA,MAAAL;AAAA,QACE;AAAA,QACAK,IACI,CAAC,GAAGC,EAAA,SAAS,SAASF,CAAM,IAC5BE,EAAA,SAAS,QAAQ,OAAO,CAACC,MAAMH,MAAWG,CAAC;AAAA,MAAA;AAAA,IAEnD;AAEA,UAAMC,IAAkBT,EAAI,EAAE,GAAGO,WAAS,iBAAiB;AAC3D,IAAAG,EAAY,MAAM;AAChB,MAAAD,EAAgB,QAAQ,EAAE,GAAGF,WAAS,gBAAA;AAAA,IACxC,CAAC;AAED,UAAMI,IAAgCC;AAAA,MAAS,MAC7C,CAACC,EAAYN,EAAA,SAAS,iBAAiBE,EAAgB,KAAK;AAAA,IAAA,GAGxDK,IAA0BF;AAAA,MAAS,MACvC,CAACC,EAAYN,EAAA,SAAS,iBAAiBQ,CAAsB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Toolbar.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlBtnGhost,\n PlBtnPrimary,\n PlBtnSecondary,\n PlCheckbox,\n PlDropdown,\n PlDropdownMulti,\n PlNumberField,\n PlSlideModal,\n} from '@milaboratories/uikit';\nimport type {\n PlMultiSequenceAlignmentColorSchemeOption as ColorSchemeOption,\n PlMultiSequenceAlignmentSettings as Settings,\n PlMultiSequenceAlignmentWidget,\n PObjectId,\n PTableColumnId,\n} from '@platforma-sdk/model';\nimport { computed, ref, useCssModule, watchEffect } from 'vue';\nimport { defaultSettings } from './settings';\n\nconst props = defineProps<{\n settings: Settings;\n sequenceColumnOptions: ListOptionNormalized<PObjectId>[] | undefined;\n labelColumnOptions: ListOptionNormalized<PTableColumnId>[] | undefined;\n colorSchemeOptions: ListOptionNormalized<ColorSchemeOption>[];\n}>();\n\nconst emit = defineEmits<{\n updateSettings: [Partial<Settings>];\n export: [];\n}>();\n\nconst classes = useCssModule();\n\nconst settingsOpen = ref(false);\n\nfunction updateSetting<K extends keyof Settings>(\n key: K,\n value: Settings[K] | undefined,\n) {\n emit('updateSettings', { [key]: value });\n}\n\nfunction toggleWidget(\n widget: PlMultiSequenceAlignmentWidget,\n checked: boolean,\n) {\n updateSetting(\n 'widgets',\n checked\n ? [...props.settings.widgets, widget]\n : props.settings.widgets.filter((w) => widget !== w),\n );\n}\n\nconst alignmentParams = ref({ ...props.settings.alignmentParams });\nwatchEffect(() => {\n alignmentParams.value = { ...props.settings.alignmentParams };\n});\n\nconst alignmentParamsChangesPending = computed(() =>\n !isJsonEqual(props.settings.alignmentParams, alignmentParams.value),\n);\n\nconst canResetAlignmentParams = computed(() =>\n !isJsonEqual(props.settings.alignmentParams, defaultSettings.alignmentParams),\n);\n</script>\n\n<template>\n <div :class=\"classes.container\">\n <div :class=\"classes.line\">\n <div :class=\"classes.section\">\n <PlDropdownMulti\n label=\"Sequence Columns\"\n :model-value=\"props.settings.sequenceColumnIds ?? []\"\n :options=\"props.sequenceColumnOptions\"\n clearable\n @update:model-value=\"event => updateSetting('sequenceColumnIds', event)\"\n />\n <PlDropdownMulti\n :model-value=\"props.settings.labelColumnIds ?? []\"\n label=\"Label Columns\"\n :options=\"props.labelColumnOptions\"\n clearable\n @update:model-value=\"event => updateSetting('labelColumnIds', event)\"\n />\n <PlDropdown\n :model-value=\"props.settings.colorScheme\"\n label=\"Color Scheme\"\n :options=\"props.colorSchemeOptions\"\n @update:model-value=\"event => updateSetting('colorScheme', event)\"\n />\n </div>\n <div :class=\"classes.buttons\">\n <PlBtnGhost icon=\"settings\" @click.stop=\"settingsOpen = true\">\n Settings\n </PlBtnGhost>\n <PlBtnGhost icon=\"export\" @click.stop=\"emit('export')\">\n Export\n </PlBtnGhost>\n </div>\n </div>\n <div :class=\"classes.line\">\n <div :class=\"classes.section\">\n <PlCheckbox\n :model-value=\"props.settings.widgets.includes('seqLogo')\"\n @update:model-value=\"event => toggleWidget('seqLogo', event)\"\n >\n Seq logo\n </PlCheckbox>\n <PlCheckbox\n :model-value=\"props.settings.widgets.includes('consensus')\"\n @update:model-value=\"event => toggleWidget('consensus', event)\"\n >\n Consensus\n </PlCheckbox>\n <PlCheckbox :model-value=\"false\" disabled>Navigator</PlCheckbox>\n <PlCheckbox\n :model-value=\"props.settings.widgets.includes('tree')\"\n @update:model-value=\"event => toggleWidget('tree', event)\"\n >\n Tree\n </PlCheckbox>\n <PlCheckbox\n :model-value=\"props.settings.widgets.includes('legend')\"\n :disabled=\"props.settings.colorScheme.type === 'no-color'\"\n @update:model-value=\"event => toggleWidget('legend', event)\"\n >\n Legend\n </PlCheckbox>\n </div>\n </div>\n </div>\n <PlSlideModal v-model=\"settingsOpen\">\n <template #title>Settings</template>\n <PlNumberField\n v-model=\"alignmentParams.gpo\"\n label=\"Gap open penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to the introduction of a gap in the alignment\n </template>\n </PlNumberField>\n <PlNumberField\n v-model=\"alignmentParams.gpe\"\n label=\"Gap extension penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to each additional residue added to an existing\n gap\n </template>\n </PlNumberField>\n <PlNumberField\n v-model=\"alignmentParams.tgpe\"\n label=\"Terminal gap extension penalty\"\n :step=\"0.1\"\n @keyup.enter=\"updateSetting('alignmentParams', alignmentParams)\"\n >\n <template #tooltip>\n Penalty score assigned to extending gaps at the ends of sequences\n </template>\n </PlNumberField>\n <div\n v-if=\"alignmentParamsChangesPending\"\n :class=\"classes.pendingChanges\"\n >\n <PlBtnPrimary @click=\"updateSetting('alignmentParams', alignmentParams)\">\n Apply\n </PlBtnPrimary>\n <PlBtnGhost @click=\"alignmentParams = props.settings.alignmentParams\">\n Cancel\n </PlBtnGhost>\n </div>\n <PlBtnSecondary\n v-if=\"canResetAlignmentParams\"\n :class=\"classes.resetButton\"\n icon=\"reverse\"\n @click=\"updateSetting('alignmentParams', undefined)\"\n >\n Reset to Default\n </PlBtnSecondary>\n </PlSlideModal>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.line {\n display: flex;\n justify-content: space-between;\n}\n\n.section {\n display: flex;\n flex-wrap: wrap;\n gap: 24px;\n}\n\n.buttons {\n display: flex;\n}\n\n.pendingChanges {\n display: flex;\n button {\n min-width: 160px;\n }\n}\n\n.resetButton {\n margin-block-start: auto;\n span {\n text-transform: none;\n }\n}\n</style>\n"],"names":["props","__props","emit","__emit","classes","useCssModule","settingsOpen","ref","updateSetting","key","value","toggleWidget","widget","checked","w","alignmentParams","watchEffect","alignmentParamsChangesPending","computed","isJsonEqual","canResetAlignmentParams","defaultSettings"],"mappings":";;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GAORC,IAAOC,GAKPC,IAAUC,EAAA,GAEVC,IAAeC,EAAI,EAAK;AAE9B,aAASC,EACPC,GACAC,GACA;AACA,MAAAR,EAAK,kBAAkB,EAAE,CAACO,CAAG,GAAGC,GAAO;AAAA,IACzC;AAEA,aAASC,EACPC,GACAC,GACA;AACA,MAAAL;AAAA,QACE;AAAA,QACAK,IACI,CAAC,GAAGb,EAAM,SAAS,SAASY,CAAM,IAClCZ,EAAM,SAAS,QAAQ,OAAO,CAACc,MAAMF,MAAWE,CAAC;AAAA,MAAA;AAAA,IAEzD;AAEA,UAAMC,IAAkBR,EAAI,EAAE,GAAGP,EAAM,SAAS,iBAAiB;AACjE,IAAAgB,EAAY,MAAM;AAChB,MAAAD,EAAgB,QAAQ,EAAE,GAAGf,EAAM,SAAS,gBAAA;AAAA,IAC9C,CAAC;AAED,UAAMiB,IAAgCC;AAAA,MAAS,MAC7C,CAACC,EAAYnB,EAAM,SAAS,iBAAiBe,EAAgB,KAAK;AAAA,IAAA,GAG9DK,IAA0BF;AAAA,MAAS,MACvC,CAACC,EAAYnB,EAAM,SAAS,iBAAiBqB,EAAgB,eAAe;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,17 +1,19 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_8w0jf_2{display:flex;flex-direction:column;gap:24px}._line_8w0jf_8{display:flex;justify-content:space-between}._section_8w0jf_13{display:flex;flex-wrap:wrap;gap:24px}._buttons_8w0jf_19,._pending-changes_8w0jf_23{display:flex}._pending-changes_8w0jf_23 button{min-width:160px}._reset-button_8w0jf_30{margin-block-start:auto}._reset-button_8w0jf_30 span{text-transform:none}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- const n = "_container_8w0jf_2", t = "_line_8w0jf_8", e = "_section_8w0jf_13", _ = "_buttons_8w0jf_19", o = {
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._container_ypn45_2{display:flex;flex-direction:column;gap:24px}._line_ypn45_8{display:flex;justify-content:space-between}._section_ypn45_13{display:flex;flex-wrap:wrap;gap:24px}._buttons_ypn45_19,._pendingChanges_ypn45_23{display:flex}._pendingChanges_ypn45_23 button{min-width:160px}._resetButton_ypn45_30{margin-block-start:auto}._resetButton_ypn45_30 span{text-transform:none}")),document.head.appendChild(e)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();
2
+ const n = "_container_ypn45_2", t = "_line_ypn45_8", e = "_section_ypn45_13", s = "_buttons_ypn45_19", o = "_pendingChanges_ypn45_23", _ = "_resetButton_ypn45_30", c = {
3
3
  container: n,
4
4
  line: t,
5
5
  section: e,
6
- buttons: _,
7
- "pending-changes": "_pending-changes_8w0jf_23",
8
- "reset-button": "_reset-button_8w0jf_30"
6
+ buttons: s,
7
+ pendingChanges: o,
8
+ resetButton: _
9
9
  };
10
10
  export {
11
- _ as buttons,
11
+ s as buttons,
12
12
  n as container,
13
- o as default,
13
+ c as default,
14
14
  t as line,
15
+ o as pendingChanges,
16
+ _ as resetButton,
15
17
  e as section
16
18
  };
17
19
  //# sourceMappingURL=Toolbar.vue3.js.map
@@ -0,0 +1,4 @@
1
+ export declare const cellSize: {
2
+ inline: number;
3
+ block: number;
4
+ };
@@ -0,0 +1,8 @@
1
+ const e = {
2
+ inline: 20,
3
+ block: 24
4
+ };
5
+ export {
6
+ e as cellSize
7
+ };
8
+ //# sourceMappingURL=cell-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-size.js","sources":["../../../src/components/PlMultiSequenceAlignment/cell-size.ts"],"sourcesContent":["export const cellSize = {\n inline: 20,\n block: 24,\n};\n"],"names":["cellSize"],"mappings":"AAAO,MAAMA,IAAW;AAAA,EACtB,QAAQ;AAAA,EACR,OAAO;AACT;"}
@@ -1,7 +1,8 @@
1
1
  import { ListOptionNormalized } from '@milaboratories/uikit';
2
2
  import { PColumnIdAndSpec, PFrameHandle, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentSettings, PlSelectionModel, PObjectId, PTableColumnId } from '@platforma-sdk/model';
3
3
  import { HighlightLegend, ResidueCounts } from './types';
4
- export declare const sequenceLimit = 1000;
4
+ import type * as PhylogeneticTreeWorker from './phylogenetic-tree.worker';
5
+ export declare const SEQUENCE_LIMIT = 1000;
5
6
  export declare const useSequenceColumnsOptions: (paramsGetter: () => {
6
7
  pFrame: PFrameHandle | undefined;
7
8
  sequenceColumnPredicate: (column: PColumnIdAndSpec) => boolean;
@@ -22,7 +23,7 @@ export declare const useMarkupColumnsOptions: (paramsGetter: () => {
22
23
  pFrame: PFrameHandle | undefined;
23
24
  sequenceColumnIds: PObjectId[] | undefined;
24
25
  }) => {
25
- data: import('vue').Ref<ListOptionNormalized<PObjectId>[] | undefined, ListOptionNormalized<PObjectId>[] | undefined>;
26
+ data: import('vue').Ref<ListOptionNormalized<PObjectId[]>[] | undefined, ListOptionNormalized<PObjectId[]>[] | undefined>;
26
27
  isLoading: import('vue').Ref<boolean, boolean>;
27
28
  error: import('vue').Ref<Error | undefined, Error | undefined>;
28
29
  };
@@ -33,20 +34,24 @@ export declare const useMultipleAlignmentData: (paramsGetter: () => {
33
34
  selection: PlSelectionModel | undefined;
34
35
  colorScheme: PlMultiSequenceAlignmentColorSchemeOption;
35
36
  alignmentParams: PlMultiSequenceAlignmentSettings["alignmentParams"];
37
+ shouldBuildPhylogeneticTree: boolean;
36
38
  }) => {
37
39
  data: import('vue').Ref<MultipleAlignmentData | undefined, MultipleAlignmentData | undefined>;
38
40
  isLoading: import('vue').Ref<boolean, boolean>;
39
41
  error: import('vue').Ref<Error | undefined, Error | undefined>;
40
42
  };
41
43
  type MultipleAlignmentData = {
42
- sequences: string[];
43
- sequenceNames: string[];
44
- labelRows: string[][];
45
- residueCounts: ResidueCounts;
46
- highlightImage?: {
47
- blob: Blob;
48
- legend: HighlightLegend;
49
- };
44
+ sequences: {
45
+ name: string;
46
+ rows: string[];
47
+ residueCounts: ResidueCounts;
48
+ highlightImageUrl?: string;
49
+ }[];
50
+ labels: {
51
+ rows: string[];
52
+ }[];
53
+ highlightLegend?: HighlightLegend;
54
+ phylogeneticTree?: PhylogeneticTreeWorker.TreeNodeData[];
50
55
  exceedsLimit: boolean;
51
56
  };
52
57
  type OptionsWithDefaults<T> = {