@platforma-sdk/ui-vue 1.41.17 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.turbo/turbo-build.log +36 -71
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +18 -0
  4. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +3 -3
  5. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +2 -2
  6. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts.map +1 -1
  7. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +11 -11
  8. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +8 -8
  9. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +12 -6
  10. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
  11. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +80 -65
  12. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  13. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +14 -12
  14. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  15. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +36 -1
  16. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
  17. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +146 -111
  18. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  19. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +2 -0
  20. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts.map +1 -1
  21. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +71 -68
  22. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  23. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +42 -6
  24. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts.map +1 -1
  25. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +96 -130
  26. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +1 -1
  27. package/dist/components/PlMultiSequenceAlignment/data.d.ts +3 -9
  28. package/dist/components/PlMultiSequenceAlignment/data.d.ts.map +1 -1
  29. package/dist/components/PlMultiSequenceAlignment/data.js +198 -212
  30. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  31. package/dist/components/PlMultiSequenceAlignment/markup.d.ts +7 -5
  32. package/dist/components/PlMultiSequenceAlignment/markup.d.ts.map +1 -1
  33. package/dist/components/PlMultiSequenceAlignment/markup.js +47 -26
  34. package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
  35. package/dist/components/PlMultiSequenceAlignment/types.d.ts +1 -1
  36. package/dist/components/PlMultiSequenceAlignment/types.d.ts.map +1 -1
  37. package/dist/lib/ui/uikit/dist/components/DataTable/TableComponent.vue.js +2 -4
  38. package/dist/lib/ui/uikit/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  39. package/dist/lib/ui/uikit/dist/components/DataTable/index.js +2 -2
  40. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/createGridlines.js +6 -8
  41. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/createGridlines.js.map +1 -1
  42. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/createLabels.js.map +1 -1
  43. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/createSvgContainer.js +5 -7
  44. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/createSvgContainer.js.map +1 -1
  45. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/drawBins.js +3 -5
  46. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/drawBins.js.map +1 -1
  47. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/histogram.js +19 -21
  48. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/histogram.js.map +1 -1
  49. package/dist/lib/ui/uikit/dist/components/PlChartHistogram/normalizeBins.js.map +1 -1
  50. package/dist/lib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js +2 -4
  51. package/dist/lib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  52. package/dist/lib/ui/uikit/dist/index.js +78 -80
  53. package/dist/lib/ui/uikit/dist/index.js.map +1 -1
  54. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
  55. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js +7 -7
  56. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js.map +1 -1
  57. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js +9 -9
  58. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js.map +1 -1
  59. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js +51 -55
  60. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js.map +1 -1
  61. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +1 -1
  62. package/dist/node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js +111 -165
  63. package/dist/node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js.map +1 -1
  64. package/dist/node_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js +1 -1
  65. package/dist/sdk/model/dist/index.js +1 -1
  66. package/package.json +6 -6
  67. package/src/components/PlMultiSequenceAlignment/Legend.vue +4 -3
  68. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +66 -46
  69. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +85 -34
  70. package/src/components/PlMultiSequenceAlignment/README.md +10 -8
  71. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +4 -1
  72. package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +154 -161
  73. package/src/components/PlMultiSequenceAlignment/data.ts +65 -85
  74. package/src/components/PlMultiSequenceAlignment/markup.ts +47 -15
  75. package/src/components/PlMultiSequenceAlignment/types.ts +1 -1
  76. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js +0 -65
  77. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js.map +0 -1
  78. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js +0 -7
  79. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js.map +0 -1
  80. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js +0 -24
  81. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js.map +0 -1
  82. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js +0 -38
  83. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js.map +0 -1
  84. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js +0 -14
  85. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js.map +0 -1
  86. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js +0 -11
  87. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js.map +0 -1
  88. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js +0 -63
  89. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js.map +0 -1
  90. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js +0 -19
  91. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js.map +0 -1
  92. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js +0 -6
  93. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js.map +0 -1
  94. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js +0 -10
  95. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js.map +0 -1
  96. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js +0 -29
  97. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js.map +0 -1
  98. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js +0 -50
  99. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js.map +0 -1
  100. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js +0 -39
  101. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js.map +0 -1
  102. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js +0 -19
  103. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js.map +0 -1
  104. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js +0 -19
  105. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js.map +0 -1
  106. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js +0 -15
  107. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js.map +0 -1
  108. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js +0 -16
  109. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js.map +0 -1
  110. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js +0 -17
  111. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js.map +0 -1
  112. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js +0 -13
  113. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js.map +0 -1
  114. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js +0 -66
  115. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js.map +0 -1
  116. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js +0 -12
  117. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js.map +0 -1
  118. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js +0 -14
  119. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js.map +0 -1
  120. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js +0 -22
  121. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js.map +0 -1
  122. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js +0 -14
  123. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js.map +0 -1
  124. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js +0 -86
  125. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js.map +0 -1
  126. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js +0 -15
  127. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js.map +0 -1
  128. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js +0 -19
  129. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js.map +0 -1
  130. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js +0 -9
  131. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js.map +0 -1
  132. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js +0 -46
  133. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js.map +0 -1
  134. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js +0 -24
  135. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js.map +0 -1
  136. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js +0 -19
  137. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js.map +0 -1
  138. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js +0 -24
  139. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js.map +0 -1
  140. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js +0 -20
  141. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js.map +0 -1
  142. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js +0 -57
  143. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js.map +0 -1
  144. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js +0 -44
  145. package/dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js.map +0 -1
@@ -1,17 +1,17 @@
1
- import { defineComponent as R, mergeModels as J, useModel as U, onBeforeMount as $, reactive as d, computed as v, watchEffect as x, createElementBlock as w, openBlock as m, Fragment as S, createVNode as M, createBlock as h, unref as a, withCtx as q, createTextVNode as F, toDisplayString as C, createCommentVNode as O, normalizeClass as G } from "vue";
2
- import { isJsonEqual as b } from "../../lib/util/helpers/dist/index.js";
1
+ import { defineComponent as L, mergeModels as U, useModel as J, onBeforeMount as G, reactive as g, computed as R, watchEffect as N, useTemplateRef as H, createElementBlock as T, openBlock as f, Fragment as V, createVNode as j, createBlock as S, unref as i, withCtx as b, createTextVNode as k, toDisplayString as q, createCommentVNode as A, normalizeClass as K } from "vue";
2
+ import { isJsonEqual as I } from "../../lib/util/helpers/dist/index.js";
3
3
  import "../../lib/ui/uikit/dist/index.js";
4
- import { useSequenceColumnsOptions as H, useLabelColumnsOptions as K, useMarkupColumnsOptions as Q, useMultipleAlignmentData as W, sequenceLimit as z } from "./data.js";
5
- import X from "./Legend.vue.js";
6
- import { runMigrations as Y } from "./migrations.js";
7
- import Z from "./MultiSequenceAlignmentView.vue.js";
4
+ import { getRawPlatformaInstance as Q } from "../../sdk/model/dist/index.js";
5
+ import { useSequenceColumnsOptions as W, useLabelColumnsOptions as X, useMarkupColumnsOptions as Y, useMultipleAlignmentData as Z, sequenceLimit as B } from "./data.js";
6
+ import { runMigrations as ee } from "./migrations.js";
7
+ import te from "./MultiSequenceAlignmentView.vue.js";
8
8
  import { defaultSettings as D } from "./settings.js";
9
- import ee from "./Toolbar.vue.js";
9
+ import oe from "./Toolbar.vue.js";
10
10
  import P from "../../lib/ui/uikit/dist/components/PlAlert/PlAlert.vue.js";
11
- import oe from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
12
- const pe = /* @__PURE__ */ R({
11
+ import ne from "../../lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js";
12
+ const ge = /* @__PURE__ */ L({
13
13
  __name: "PlMultiSequenceAlignment",
14
- props: /* @__PURE__ */ J({
14
+ props: /* @__PURE__ */ U({
15
15
  pFrame: {},
16
16
  sequenceColumnPredicate: { type: Function },
17
17
  selection: {}
@@ -20,36 +20,30 @@ const pe = /* @__PURE__ */ R({
20
20
  modelModifiers: {}
21
21
  }),
22
22
  emits: ["update:modelValue"],
23
- setup(V) {
24
- const p = U(V, "modelValue");
25
- $(() => {
26
- Y(p);
23
+ setup(x) {
24
+ const h = J(x, "modelValue");
25
+ G(() => {
26
+ ee(h);
27
27
  });
28
- const e = d({
28
+ const o = g({
29
29
  ...D
30
- }), i = V, g = d(H(() => ({
31
- pFrame: i.pFrame,
32
- sequenceColumnPredicate: i.sequenceColumnPredicate
33
- }))), f = d(K(() => ({
34
- pFrame: i.pFrame,
35
- sequenceColumnIds: e.sequenceColumnIds
36
- }))), I = d(Q(() => ({
37
- pFrame: i.pFrame,
38
- sequenceColumnIds: e.sequenceColumnIds
39
- }))), y = v(
40
- () => {
41
- var o;
42
- return ((o = e.colorScheme) == null ? void 0 : o.type) === "markup" ? e.colorScheme.columnId : void 0;
43
- }
44
- ), s = d(W(() => ({
45
- pframe: i.pFrame,
46
- sequenceColumnIds: e.sequenceColumnIds,
47
- labelColumnIds: e.labelColumnIds,
48
- markupColumnId: y.value,
49
- selection: i.selection,
50
- colorScheme: e.colorScheme,
51
- alignmentParams: e.alignmentParams
52
- }))), k = new Intl.NumberFormat("en").format, T = v(
30
+ }), c = x, C = g(W(() => ({
31
+ pFrame: c.pFrame,
32
+ sequenceColumnPredicate: c.sequenceColumnPredicate
33
+ }))), y = g(X(() => ({
34
+ pFrame: c.pFrame,
35
+ sequenceColumnIds: o.sequenceColumnIds
36
+ }))), v = g(Y(() => ({
37
+ pFrame: c.pFrame,
38
+ sequenceColumnIds: o.sequenceColumnIds
39
+ }))), l = g(Z(() => ({
40
+ pframe: c.pFrame,
41
+ sequenceColumnIds: o.sequenceColumnIds,
42
+ labelColumnIds: o.labelColumnIds,
43
+ selection: c.selection,
44
+ colorScheme: o.colorScheme,
45
+ alignmentParams: o.alignmentParams
46
+ }))), w = new Intl.NumberFormat("en").format, _ = R(
53
47
  () => [
54
48
  {
55
49
  label: "Chemical Properties",
@@ -59,122 +53,163 @@ const pe = /* @__PURE__ */ R({
59
53
  label: "No Color",
60
54
  value: { type: "no-color" }
61
55
  },
62
- ...(I.data ?? []).map(({ label: o, value: n }) => ({
63
- label: o,
56
+ ...(v.data ?? []).map(({ label: t, value: n }) => ({
57
+ label: t,
64
58
  value: {
65
59
  type: "markup",
66
60
  columnId: n
67
61
  }
68
62
  }))
69
63
  ]
70
- ), L = v(
71
- () => g.error ?? f.error ?? I.error ?? s.error
64
+ ), O = R(
65
+ () => C.error ?? y.error ?? v.error ?? l.error
72
66
  );
73
- function N(o) {
74
- p.value = Object.fromEntries(
75
- Object.entries({ ...p.value, ...o }).filter(([n, l]) => l !== void 0)
67
+ function E(t) {
68
+ h.value = Object.fromEntries(
69
+ Object.entries({ ...h.value, ...t }).filter(([n, e]) => e !== void 0)
76
70
  );
77
71
  }
78
- return x(() => {
79
- var n, l;
80
- const o = Object.fromEntries(
72
+ N(() => {
73
+ var n, e;
74
+ const t = Object.fromEntries(
81
75
  Object.entries({
82
76
  ...D,
83
- sequenceColumnIds: (n = g.data) == null ? void 0 : n.defaults,
84
- labelColumnIds: (l = f.data) == null ? void 0 : l.defaults,
85
- ...p.value
77
+ sequenceColumnIds: (n = C.data) == null ? void 0 : n.defaults,
78
+ labelColumnIds: (e = y.data) == null ? void 0 : e.defaults,
79
+ ...h.value
86
80
  }).filter(
87
- ([r, t]) => !b(
88
- e[r],
89
- t
81
+ ([a, r]) => !I(
82
+ o[a],
83
+ r
90
84
  )
91
85
  )
92
86
  );
93
- Object.assign(e, o);
94
- }), x(() => {
95
- var n, l, r;
96
- const o = [];
97
- (n = e.sequenceColumnIds) != null && n.some(
98
- (t) => {
87
+ Object.assign(o, t);
88
+ }), N(() => {
89
+ var e, a, r, m;
90
+ const t = [];
91
+ (e = o.sequenceColumnIds) != null && e.some(
92
+ (s) => {
99
93
  var u;
100
- return !((u = g.data) != null && u.options.some(
101
- ({ value: c }) => b(c, t)
94
+ return !((u = C.data) != null && u.options.some(
95
+ ({ value: d }) => I(d, s)
102
96
  ));
103
97
  }
104
- ) && o.push("sequenceColumnIds"), (l = e.labelColumnIds) != null && l.some(
105
- (t) => {
98
+ ) && t.push("sequenceColumnIds"), (a = o.labelColumnIds) != null && a.some(
99
+ (s) => {
106
100
  var u;
107
- return !((u = f.data) != null && u.options.some(
108
- ({ value: c }) => b(c, t)
101
+ return !((u = y.data) != null && u.options.some(
102
+ ({ value: d }) => I(d, s)
109
103
  ));
110
104
  }
111
- ) && o.push("labelColumnIds"), y.value && !((r = I.data) != null && r.some(
112
- ({ value: t }) => b(t, y.value)
113
- )) && o.push("colorScheme"), o.length && N(Object.fromEntries(
114
- o.map((t) => [t, void 0])
105
+ ) && t.push("labelColumnIds");
106
+ const n = ((r = o.colorScheme) == null ? void 0 : r.type) === "markup" ? o.colorScheme.columnId : void 0;
107
+ n && !((m = v.data) != null && m.some(
108
+ ({ value: s }) => I(s, n)
109
+ )) && t.push("colorScheme"), t.length && E(Object.fromEntries(
110
+ t.map((s) => [s, void 0])
115
111
  ));
116
- }), (o, n) => {
117
- var l, r, t, u;
118
- return m(), w(S, null, [
119
- M(ee, {
120
- settings: e,
121
- "sequence-column-options": (l = g.data) == null ? void 0 : l.options,
122
- "label-column-options": (r = f.data) == null ? void 0 : r.options,
123
- "color-scheme-options": T.value,
124
- onUpdateSettings: N
112
+ });
113
+ const $ = H("msa");
114
+ async function z() {
115
+ var d, F, M;
116
+ const t = (F = (d = Q()) == null ? void 0 : d.lsDriver) == null ? void 0 : F.exportToPdf;
117
+ if (!t)
118
+ return console.error(
119
+ "API getPlatformaRawInstance().lsDriver.exportToPdf is not available"
120
+ );
121
+ const n = (M = $.value) == null ? void 0 : M.rootEl;
122
+ if (!n)
123
+ throw new Error("MSA element is not available.");
124
+ const e = document.createElement("div");
125
+ e.id = `print-target-${crypto.randomUUID()}`;
126
+ const a = new CSSStyleSheet();
127
+ document.adoptedStyleSheets.push(a), a.insertRule(`
128
+ @media screen {
129
+ #${e.id} {
130
+ visibility: hidden;
131
+ position: fixed;
132
+ }
133
+ }`), e.replaceChildren(n.cloneNode(!0)), document.body.appendChild(e);
134
+ const { height: r, width: m } = e.getBoundingClientRect(), s = CSS.cm(1), u = [m, r].map((p) => CSS.px(p).add(s.mul(2))).join(" ");
135
+ a.insertRule(`
136
+ @media print {
137
+ @page {
138
+ size: ${u};
139
+ margin: ${s};
140
+ }
141
+ body > :not(#${e.id}) {
142
+ display: none;
143
+ }
144
+ }`);
145
+ try {
146
+ await t();
147
+ } catch (p) {
148
+ console.error(p);
149
+ } finally {
150
+ document.body.removeChild(e);
151
+ const p = document.adoptedStyleSheets.indexOf(a);
152
+ p >= 0 && document.adoptedStyleSheets.splice(p, 1);
153
+ }
154
+ }
155
+ return (t, n) => {
156
+ var e, a, r, m;
157
+ return f(), T(V, null, [
158
+ j(oe, {
159
+ settings: o,
160
+ "sequence-column-options": (e = C.data) == null ? void 0 : e.options,
161
+ "label-column-options": (a = y.data) == null ? void 0 : a.options,
162
+ "color-scheme-options": _.value,
163
+ onUpdateSettings: E,
164
+ onExport: z
125
165
  }, null, 8, ["settings", "sequence-column-options", "label-column-options", "color-scheme-options"]),
126
- L.value ? (m(), h(a(P), {
166
+ O.value ? (f(), S(i(P), {
127
167
  key: 0,
128
168
  type: "error"
129
169
  }, {
130
- default: q(() => [
131
- F(C(L.value), 1)
170
+ default: b(() => [
171
+ k(q(O.value), 1)
132
172
  ]),
133
173
  _: 1
134
- })) : !s.isLoading && (((t = s.data) == null ? void 0 : t.sequences) ?? []).length < 2 ? (m(), h(a(P), {
174
+ })) : !l.isLoading && (((r = l.data) == null ? void 0 : r.sequences) ?? []).length < 2 ? (f(), S(i(P), {
135
175
  key: 1,
136
176
  type: "warn",
137
177
  icon: ""
138
178
  }, {
139
- default: q(() => n[0] || (n[0] = [
140
- F(" Please select at least one sequence column and two or more rows to run alignment ")
179
+ default: b(() => n[0] || (n[0] = [
180
+ k(" Please select at least one sequence column and two or more rows to run alignment ")
141
181
  ])),
142
182
  _: 1
143
- })) : (m(), w(S, { key: 2 }, [
144
- (u = s.data) != null && u.exceedsLimit ? (m(), h(a(P), {
183
+ })) : (f(), T(V, { key: 2 }, [
184
+ (m = l.data) != null && m.exceedsLimit ? (f(), S(i(P), {
145
185
  key: 0,
146
186
  type: "warn",
147
187
  icon: "",
148
188
  label: "Visualization is limited"
149
189
  }, {
150
- default: q(() => [
151
- F(" MSA visualization supports " + C(a(k)(2)) + " to " + C(a(k)(a(z))) + " sequences. Only the first " + C(a(k)(a(z))) + " will be displayed. ", 1)
190
+ default: b(() => [
191
+ k(" MSA visualization supports " + q(i(w)(2)) + " to " + q(i(w)(i(B))) + " sequences. Only the first " + q(i(w)(i(B))) + " will be displayed. ", 1)
152
192
  ]),
153
193
  _: 1
154
- })) : O("", !0),
155
- M(a(oe), {
194
+ })) : A("", !0),
195
+ j(i(ne), {
156
196
  type: "transparent",
157
- class: G(o.$style.splash),
158
- loading: s.isLoading
197
+ class: K(t.$style.splash),
198
+ loading: l.isLoading
159
199
  }, {
160
- default: q(() => {
161
- var c, j, E, _, A, B;
200
+ default: b(() => {
201
+ var s;
162
202
  return [
163
- (c = s.data) != null && c.sequences.length ? (m(), w(S, { key: 0 }, [
164
- M(Z, {
165
- "sequence-names": s.data.sequenceNames,
166
- sequences: s.data.sequences,
167
- "label-rows": s.data.labelsRows,
168
- "residue-counts": s.data.residueCounts,
169
- "highlight-image-blob": (j = s.data.highlightImage) == null ? void 0 : j.blob,
170
- consensus: ((E = e.widgets) == null ? void 0 : E.includes("consensus")) ?? !1,
171
- "seq-logo": ((_ = e.widgets) == null ? void 0 : _.includes("seqLogo")) ?? !1
172
- }, null, 8, ["sequence-names", "sequences", "label-rows", "residue-counts", "highlight-image-blob", "consensus", "seq-logo"]),
173
- (A = e.widgets) != null && A.includes("legend") && ((B = s.data.highlightImage) != null && B.colorMap) ? (m(), h(X, {
174
- key: 0,
175
- colors: s.data.highlightImage.colorMap
176
- }, null, 8, ["colors"])) : O("", !0)
177
- ], 64)) : O("", !0)
203
+ (s = l.data) != null && s.sequences.length ? (f(), S(te, {
204
+ key: 0,
205
+ ref: "msa",
206
+ sequences: l.data.sequences,
207
+ "sequence-names": l.data.sequenceNames,
208
+ "label-rows": l.data.labelRows,
209
+ "residue-counts": l.data.residueCounts,
210
+ "highlight-image": l.data.highlightImage,
211
+ widgets: o.widgets
212
+ }, null, 8, ["sequences", "sequence-names", "label-rows", "residue-counts", "highlight-image", "widgets"])) : A("", !0)
178
213
  ];
179
214
  }),
180
215
  _: 1
@@ -185,6 +220,6 @@ const pe = /* @__PURE__ */ R({
185
220
  }
186
221
  });
187
222
  export {
188
- pe as default
223
+ ge as default
189
224
  };
190
225
  //# sourceMappingURL=PlMultiSequenceAlignment.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlAlert,\n PlSplash,\n} from '@milaboratories/uikit';\nimport type {\n PColumnPredicate,\n PFrameHandle,\n PlMultiSequenceAlignmentColorSchemeOption,\n PlMultiSequenceAlignmentModel,\n PlMultiSequenceAlignmentSettings,\n PlSelectionModel,\n} from '@platforma-sdk/model';\nimport { computed, onBeforeMount, reactive, watchEffect } from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport Legend from './Legend.vue';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumnId = computed(() =>\n settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined,\n);\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pframe: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n markupColumnId: markupColumnId.value,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n settings.sequenceColumnIds?.some((id) =>\n !sequenceColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n settings.labelColumnIds?.some((id) =>\n !labelColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n if (\n markupColumnId.value\n && !markupColumns.data?.some(\n ({ value }) => isJsonEqual(value, markupColumnId.value),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"\n !multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\n \"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :label-rows=\"multipleAlignmentData.data.labelsRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image-blob=\"multipleAlignmentData.data.highlightImage?.blob\"\n :consensus=\"settings.widgets?.includes('consensus') ?? false\"\n :seq-logo=\"settings.widgets?.includes('seqLogo') ?? false\"\n />\n <Legend\n v-if=\"\n settings.widgets?.includes('legend')\n && multipleAlignmentData.data.highlightImage?.colorMap\n \"\n :colors=\"multipleAlignmentData.data.highlightImage.colorMap\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","markupColumnId","computed","_a","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_b","key","isJsonEqual","settingsToReset","id","_c"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6BM,UAAAA,IAAQC,EAA0CC,GAAA,YAAgB;AAExE,IAAAC,EAAc,MAAM;AAClB,MAAAC,EAAcJ,CAAK;AAAA,IAAA,CACpB;AAED,UAAMK,IAAWC,EAA2C;AAAA,MAC1D,GAAGC;AAAA,IAAA,CACJ,GAEKC,IAAQN,GAmBRO,IAAkBH,EAASI,EAA0B,OAAO;AAAA,MAChE,QAAQF,EAAM;AAAA,MACd,yBAAyBA,EAAM;AAAA,MAC/B,CAAC,GAEGG,IAAeL,EAASM,EAAuB,OAAO;AAAA,MAC1D,QAAQJ,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,CAAC,GAEGQ,IAAgBP,EAASQ,EAAwB,OAAO;AAAA,MAC5D,QAAQN,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,CAAC,GAEGU,IAAiBC;AAAA,MAAS,MAC9B;;AAAA,iBAAAC,IAAAZ,EAAS,gBAAT,gBAAAY,EAAsB,UAAS,WAC3BZ,EAAS,YAAY,WACrB;AAAA;AAAA,IACN,GAEMa,IAAwBZ,EAASa,EAAyB,OAAO;AAAA,MACrE,QAAQX,EAAM;AAAA,MACd,mBAAmBH,EAAS;AAAA,MAC5B,gBAAgBA,EAAS;AAAA,MACzB,gBAAgBU,EAAe;AAAA,MAC/B,WAAWP,EAAM;AAAA,MACjB,aAAaH,EAAS;AAAA,MACtB,iBAAiBA,EAAS;AAAA,MAC1B,CAAC,GAEGe,IAAe,IAAI,KAAK,aAAa,IAAI,EAAE,QAE3CC,IAAqBL;AAAA,MAGzB,MAAM;AAAA,QACJ;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,MAAM,sBAAsB;AAAA,QACvC;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,MAAM,WAAW;AAAA,QAC5B;AAAA,QACA,IAAIH,EAAc,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,OAAAS,GAAO,OAAAC,SAAa;AAAA,UACvD,OAAAD;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAUC;AAAA,UAAA;AAAA,QACZ,EACA;AAAA,MAAA;AAAA,IAEN,GAEMC,IAAQR;AAAA,MAAS,MACrBP,EAAgB,SACbE,EAAa,SACbE,EAAc,SACdK,EAAsB;AAAA,IAC3B;AAEA,aAASO,EACPC,GACA;AACA,MAAA1B,EAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,EAAE,GAAGA,EAAM,OAAO,GAAG0B,EAAA,CAAe,EAChD,OAAO,CAAC,CAACC,GAAMJ,CAAK,MAAMA,MAAU,MAAS;AAAA,MAClD;AAAA,IAAA;AAGF,WAAAK,EAAY,MAAM;;AAChB,YAAMC,IAAmD,OAAO;AAAA,QAC9D,OAAO,QAAQ;AAAA,UACb,GAAGtB;AAAA,UACH,oBAAmBU,IAAAR,EAAgB,SAAhB,gBAAAQ,EAAsB;AAAA,UACzC,iBAAgBa,IAAAnB,EAAa,SAAb,gBAAAmB,EAAmB;AAAA,UACnC,GAAG9B,EAAM;AAAA,QACV,CAAA,EAAE;AAAA,UAAO,CAAC,CAAC+B,GAAKR,CAAK,MACpB,CAACS;AAAAA,YACC3B,EAAS0B,CAA6C;AAAA,YACtDR;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AACO,aAAA,OAAOlB,GAAUwB,CAAK;AAAA,IAAA,CAC9B,GAGDD,EAAY,MAAM;;AAChB,YAAMK,IAA8D,CAAC;AACrE,OACEhB,IAAAZ,EAAS,sBAAT,QAAAY,EAA4B;AAAA,QAAK,CAACiB,MAAA;;AAChC,oBAACjB,IAAAR,EAAgB,SAAhB,QAAAQ,EAAsB,QAAQ;AAAA,YAC7B,CAAC,EAAE,OAAAM,EAAA,MAAYS,EAAYT,GAAOW,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,mBAAmB,IAGxCH,IAAAzB,EAAS,mBAAT,QAAAyB,EAAyB;AAAA,QAAK,CAACI,MAAA;;AAC7B,oBAACjB,IAAAN,EAAa,SAAb,QAAAM,EAAmB,QAAQ;AAAA,YAC1B,CAAC,EAAE,OAAAM,EAAA,MAAYS,EAAYT,GAAOW,CAAE;AAAA;AAAA;AAAA,WAIxCD,EAAgB,KAAK,gBAAgB,GAGrClB,EAAe,SACZ,GAACoB,IAAAtB,EAAc,SAAd,QAAAsB,EAAoB;AAAA,QACtB,CAAC,EAAE,OAAAZ,QAAYS,EAAYT,GAAOR,EAAe,KAAK;AAAA,YAGxDkB,EAAgB,KAAK,aAAa,GAEhCA,EAAgB,UAClBR,EAAc,OAAO;AAAA,QACnBQ,EAAgB,IAAI,CAACF,MAAQ,CAACA,GAAK,MAAS,CAAC;AAAA,MAAA,CAC9C;AAAA,IACH,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlMultiSequenceAlignment.vue2.js","sources":["../../../src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n type ListOptionNormalized,\n PlAlert,\n PlSplash,\n} from '@milaboratories/uikit';\nimport {\n getRawPlatformaInstance,\n type PColumnPredicate,\n type PFrameHandle,\n type PlMultiSequenceAlignmentColorSchemeOption,\n type PlMultiSequenceAlignmentModel,\n type PlMultiSequenceAlignmentSettings,\n type PlSelectionModel,\n} from '@platforma-sdk/model';\nimport {\n computed,\n onBeforeMount,\n reactive,\n useTemplateRef,\n watchEffect,\n} from 'vue';\nimport {\n sequenceLimit,\n useLabelColumnsOptions,\n useMarkupColumnsOptions,\n useMultipleAlignmentData,\n useSequenceColumnsOptions,\n} from './data';\nimport { runMigrations } from './migrations';\nimport MultiSequenceAlignmentView from './MultiSequenceAlignmentView.vue';\nimport { defaultSettings } from './settings';\nimport Toolbar from './Toolbar.vue';\n\nconst model = defineModel<PlMultiSequenceAlignmentModel>({ default: {} });\n\nonBeforeMount(() => {\n runMigrations(model);\n});\n\nconst settings = reactive<PlMultiSequenceAlignmentSettings>({\n ...defaultSettings,\n});\n\nconst props = defineProps<{\n /**\n * Handle to PFrame created using `createPFrameForGraphs`.\n * Should contain all desired sequence and label columns.\n */\n readonly pFrame: PFrameHandle | undefined;\n /**\n * Return true if column should be shown in sequence columns dropdown.\n * By default, all sequence columns are selected.\n */\n readonly sequenceColumnPredicate: PColumnPredicate;\n /**\n * Row selection model (from `PlAgDataTableV2` or `GraphMaker`).\n * If not provided or empty, all rows will be considered selected.\n * Warning: should be forwarded as a field of `reactive` object\n */\n readonly selection?: PlSelectionModel;\n}>();\n\nconst sequenceColumns = reactive(useSequenceColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnPredicate: props.sequenceColumnPredicate,\n})));\n\nconst labelColumns = reactive(useLabelColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst markupColumns = reactive(useMarkupColumnsOptions(() => ({\n pFrame: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n})));\n\nconst multipleAlignmentData = reactive(useMultipleAlignmentData(() => ({\n pframe: props.pFrame,\n sequenceColumnIds: settings.sequenceColumnIds,\n labelColumnIds: settings.labelColumnIds,\n selection: props.selection,\n colorScheme: settings.colorScheme,\n alignmentParams: settings.alignmentParams,\n})));\n\nconst formatNumber = new Intl.NumberFormat('en').format;\n\nconst colorSchemeOptions = computed<\n ListOptionNormalized<PlMultiSequenceAlignmentColorSchemeOption>[]\n>(\n () => [\n {\n label: 'Chemical Properties',\n value: { type: 'chemical-properties' },\n },\n {\n label: 'No Color',\n value: { type: 'no-color' },\n },\n ...(markupColumns.data ?? []).map(({ label, value }) => ({\n label,\n value: {\n type: 'markup' as const,\n columnId: value,\n },\n })),\n ],\n);\n\nconst error = computed(() =>\n sequenceColumns.error\n ?? labelColumns.error\n ?? markupColumns.error\n ?? multipleAlignmentData.error,\n);\n\nfunction applySettings(\n settingsPatch: Partial<PlMultiSequenceAlignmentSettings>,\n) {\n model.value = Object.fromEntries(\n Object.entries({ ...model.value, ...settingsPatch })\n .filter(([_key, value]) => value !== undefined),\n );\n}\n\nwatchEffect(() => {\n const patch: Partial<PlMultiSequenceAlignmentSettings> = Object.fromEntries(\n Object.entries({\n ...defaultSettings,\n sequenceColumnIds: sequenceColumns.data?.defaults,\n labelColumnIds: labelColumns.data?.defaults,\n ...model.value,\n }).filter(([key, value]) =>\n !isJsonEqual(\n settings[key as keyof PlMultiSequenceAlignmentSettings],\n value,\n ),\n ),\n );\n Object.assign(settings, patch);\n});\n\n// Reset stale settings\nwatchEffect(() => {\n const settingsToReset: (keyof PlMultiSequenceAlignmentSettings)[] = [];\n if (\n settings.sequenceColumnIds?.some((id) =>\n !sequenceColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('sequenceColumnIds');\n }\n if (\n settings.labelColumnIds?.some((id) =>\n !labelColumns.data?.options.some(\n ({ value }) => isJsonEqual(value, id),\n ),\n )\n ) {\n settingsToReset.push('labelColumnIds');\n }\n\n const markupColumnId = settings.colorScheme?.type === 'markup'\n ? settings.colorScheme.columnId\n : undefined;\n\n if (\n markupColumnId\n && !markupColumns.data?.some(\n ({ value }) => isJsonEqual(value, markupColumnId),\n )\n ) {\n settingsToReset.push('colorScheme');\n }\n if (settingsToReset.length) {\n applySettings(Object.fromEntries(\n settingsToReset.map((key) => [key, undefined]),\n ));\n }\n});\n\nconst msaEl = useTemplateRef('msa');\n\nasync function exportPdf() {\n const exportToPdf = getRawPlatformaInstance()?.lsDriver\n ?.exportToPdf;\n if (!exportToPdf) {\n return console.error(\n 'API getPlatformaRawInstance().lsDriver.exportToPdf is not available',\n );\n }\n const msaRoot = msaEl.value?.rootEl;\n if (!msaRoot) {\n throw new Error('MSA element is not available.');\n }\n const printTarget = document.createElement('div');\n printTarget.id = `print-target-${crypto.randomUUID()}`;\n const printStyleSheet = new CSSStyleSheet();\n document.adoptedStyleSheets.push(printStyleSheet);\n printStyleSheet.insertRule(`\n@media screen {\n #${printTarget.id} {\n visibility: hidden;\n position: fixed;\n }\n}`);\n printTarget.replaceChildren(msaRoot.cloneNode(true));\n document.body.appendChild(printTarget);\n const { height, width } = printTarget.getBoundingClientRect();\n const margin = CSS.cm(1);\n const pageSize = [width, height]\n .map((value) => CSS.px(value).add(margin.mul(2)))\n .join(' ');\n printStyleSheet.insertRule(`\n@media print {\n @page {\n size: ${pageSize};\n margin: ${margin};\n }\n body > :not(#${printTarget.id}) {\n display: none;\n }\n}`);\n try {\n await exportToPdf();\n } catch (error) {\n console.error(error);\n } finally {\n document.body.removeChild(printTarget);\n const index = document.adoptedStyleSheets.indexOf(printStyleSheet);\n if (index >= 0) {\n document.adoptedStyleSheets.splice(index, 1);\n }\n }\n}\n</script>\n\n<template>\n <Toolbar\n :settings=\"settings\"\n :sequence-column-options=\"sequenceColumns.data?.options\"\n :label-column-options=\"labelColumns.data?.options\"\n :color-scheme-options=\"colorSchemeOptions\"\n @update-settings=\"applySettings\"\n @export=\"exportPdf\"\n />\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <PlAlert\n v-else-if=\"!multipleAlignmentData.isLoading\n && (multipleAlignmentData.data?.sequences ?? []).length < 2\"\n type=\"warn\"\n icon\n >\n Please select at least one sequence column and two or more rows to run\n alignment\n </PlAlert>\n <template v-else>\n <PlAlert\n v-if=\"multipleAlignmentData.data?.exceedsLimit\"\n type=\"warn\"\n icon\n label=\"Visualization is limited\"\n >\n MSA visualization supports {{ formatNumber(2) }} to\n {{ formatNumber(sequenceLimit) }} sequences. Only the first\n {{ formatNumber(sequenceLimit) }} will be displayed.\n </PlAlert>\n <PlSplash\n type=\"transparent\"\n :class=\"$style.splash\"\n :loading=\"multipleAlignmentData.isLoading\"\n >\n <template v-if=\"multipleAlignmentData.data?.sequences.length\">\n <MultiSequenceAlignmentView\n ref=\"msa\"\n :sequences=\"multipleAlignmentData.data.sequences\"\n :sequence-names=\"multipleAlignmentData.data.sequenceNames\"\n :label-rows=\"multipleAlignmentData.data.labelRows\"\n :residue-counts=\"multipleAlignmentData.data.residueCounts\"\n :highlight-image=\"multipleAlignmentData.data.highlightImage\"\n :widgets=\"settings.widgets\"\n />\n </template>\n </PlSplash>\n </template>\n</template>\n\n<style module>\n.splash {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n}\n</style>\n"],"names":["model","_useModel","__props","onBeforeMount","runMigrations","settings","reactive","defaultSettings","props","sequenceColumns","useSequenceColumnsOptions","labelColumns","useLabelColumnsOptions","markupColumns","useMarkupColumnsOptions","multipleAlignmentData","useMultipleAlignmentData","formatNumber","colorSchemeOptions","computed","label","value","error","applySettings","settingsPatch","_key","watchEffect","patch","_a","_b","key","isJsonEqual","settingsToReset","id","markupColumnId","_c","_d","msaEl","useTemplateRef","exportPdf","exportToPdf","getRawPlatformaInstance","msaRoot","printTarget","printStyleSheet","height","width","margin","pageSize","index"],"mappings":"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"}
@@ -7,8 +7,10 @@ type __VLS_Props = {
7
7
  colorSchemeOptions: ListOptionNormalized<ColorSchemeOption>[];
8
8
  };
9
9
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
10
+ export: () => any;
10
11
  updateSettings: (args_0: Partial<Settings>) => any;
11
12
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
13
+ onExport?: (() => any) | undefined;
12
14
  onUpdateSettings?: ((args_0: Partial<Settings>) => any) | undefined;
13
15
  }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
14
16
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"names":[],"mappings":"AA4NA,OAAO,EACL,KAAK,oBAAoB,EAS1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,yCAAyC,IAAI,iBAAiB,EAC9D,gCAAgC,IAAI,QAAQ,EAC5C,SAAS,EACT,cAAc,EACf,MAAM,sBAAsB,CAAC;AAI9B,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,qBAAqB,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;IACrE,kBAAkB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAC;IACvE,kBAAkB,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC/D,CAAC;;;;;;AAydF,wBAOG"}
1
+ {"version":3,"file":"Toolbar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/Toolbar.vue"],"names":[],"mappings":"AA+NA,OAAO,EACL,KAAK,oBAAoB,EAS1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,yCAAyC,IAAI,iBAAiB,EAC9D,gCAAgC,IAAI,QAAQ,EAC5C,SAAS,EACT,cAAc,EACf,MAAM,sBAAsB,CAAC;AAI9B,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,qBAAqB,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;IACrE,kBAAkB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAC;IACvE,kBAAkB,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC/D,CAAC;;;;;;;;AAmeF,wBAOG"}