@platforma-sdk/ui-vue 1.41.19 → 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 (55) hide show
  1. package/.turbo/turbo-build.log +19 -19
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +11 -0
  4. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +2 -2
  5. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts.map +1 -1
  6. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +11 -11
  7. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +8 -8
  8. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +12 -6
  9. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts.map +1 -1
  10. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +80 -65
  11. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +1 -1
  12. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +14 -12
  13. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +1 -1
  14. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +36 -1
  15. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts.map +1 -1
  16. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +146 -111
  17. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  18. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +2 -0
  19. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts.map +1 -1
  20. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +71 -68
  21. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  22. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +42 -6
  23. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts.map +1 -1
  24. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +96 -130
  25. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +1 -1
  26. package/dist/components/PlMultiSequenceAlignment/data.d.ts +3 -9
  27. package/dist/components/PlMultiSequenceAlignment/data.d.ts.map +1 -1
  28. package/dist/components/PlMultiSequenceAlignment/data.js +198 -212
  29. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  30. package/dist/components/PlMultiSequenceAlignment/markup.d.ts +7 -5
  31. package/dist/components/PlMultiSequenceAlignment/markup.d.ts.map +1 -1
  32. package/dist/components/PlMultiSequenceAlignment/markup.js +47 -26
  33. package/dist/components/PlMultiSequenceAlignment/markup.js.map +1 -1
  34. package/dist/components/PlMultiSequenceAlignment/types.d.ts +1 -1
  35. package/dist/components/PlMultiSequenceAlignment/types.d.ts.map +1 -1
  36. package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
  37. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
  38. package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
  39. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
  40. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +1 -1
  41. 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
  42. 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
  43. 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
  44. package/dist/sdk/model/dist/index.js +1 -1
  45. package/package.json +5 -5
  46. package/src/components/PlMultiSequenceAlignment/Legend.vue +4 -3
  47. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +66 -46
  48. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +85 -34
  49. package/src/components/PlMultiSequenceAlignment/README.md +10 -8
  50. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +4 -1
  51. package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +154 -161
  52. package/src/components/PlMultiSequenceAlignment/data.ts +65 -85
  53. package/src/components/PlMultiSequenceAlignment/markup.ts +47 -15
  54. package/src/components/PlMultiSequenceAlignment/types.ts +1 -1
  55. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chemical-properties.js","sources":["../../../src/components/PlMultiSequenceAlignment/chemical-properties.ts"],"sourcesContent":["import type { ColorMap, ResidueCounts } from './types';\n\nexport const chemicalPropertiesColorMap: ColorMap = {\n hydrophobic: {\n label: 'Hydrophobic',\n color: '#99CCFF',\n },\n positiveCharge: {\n label: 'Positive Charged',\n color: '#FFA2A3',\n },\n negativeCharge: {\n label: 'Negative Charged',\n color: '#C1ADFF',\n },\n polar: {\n label: 'Polar',\n color: '#99E099',\n },\n cysteine: {\n label: 'Cysteines',\n color: '#FAAAFA',\n },\n glycine: {\n label: 'Glycines',\n color: '#F7BC5D',\n },\n proline: {\n label: 'Prolines',\n color: '#FFFF8F',\n },\n aromatic: {\n label: 'Aromatic',\n color: '#A2F5FA',\n },\n};\n\nexport type ChemicalCategory = keyof typeof chemicalPropertiesColorMap;\n\nexport function colorizeSequencesByChemicalProperties(\n { sequences, residueCounts, colorMap }: {\n sequences: string[];\n residueCounts: ResidueCounts;\n colorMap: ColorMap;\n },\n): Promise<Blob> {\n const canvas = new OffscreenCanvas(\n sequences[0]?.length ?? 0,\n sequences.length,\n );\n const context = canvas.getContext('2d')!;\n const chemicalProperties = getAlignmentChemicalProperties({\n residueCounts,\n rowCount: sequences.length,\n });\n for (const [rowIndex, sequence] of sequences.entries()) {\n for (const [columnIndex, residue] of sequence.split('').entries()) {\n const category = chemicalProperties\n .at(columnIndex)\n ?.find(({ residues }) => residues.includes(residue))\n ?.category;\n if (!category) continue;\n const color = colorMap[category]?.color;\n if (!color) continue;\n context.fillStyle = colorMap[category].color;\n context.fillRect(columnIndex, rowIndex, 1, 1);\n }\n }\n return canvas.convertToBlob();\n}\n\nconst getAlignmentChemicalProperties = (\n { residueCounts, rowCount }: {\n residueCounts: ResidueCounts;\n rowCount: number;\n },\n): ColumnChemicalProperties[] =>\n // for every column in a residue counts table\n // (e.g. table = [{ A: 3, R: 5, Q: 1}, { E: 4, T: 2 }, ...])\n residueCounts.map((column) => (\n // find all matching criterion\n categoryCriterion\n .filter(({ rules }) =>\n // by matching at least one rule\n rules.some(({ groups, threshold }) =>\n // where at least one residue group\n groups.some((group) => {\n // combined\n const groupCount = group.split('').reduce(\n (acc, residue) => acc + (column[residue] ?? 0),\n 0,\n );\n // is above the required threshold\n return groupCount > rowCount * threshold;\n }),\n ),\n )\n .map(({ residues, category }) => ({ residues, category }))\n ));\n\ntype ColumnChemicalProperties = {\n residues: string;\n category: ChemicalCategory;\n}[];\n\n/** @see {@link https://www.jalview.org/help/html/colourSchemes/clustal.html} */\nconst categoryCriterion: Criteria[] = [\n {\n residues: 'ACILMFWV',\n category: 'hydrophobic',\n rules: [\n { groups: ['WLVIMAFCYHP'], threshold: 0.6 },\n ],\n },\n {\n residues: 'KR',\n category: 'positiveCharge',\n rules: [\n { groups: ['KR'], threshold: 0.6 },\n { groups: [...'KRQ'], threshold: 0.8 },\n ],\n },\n {\n residues: 'E',\n category: 'negativeCharge',\n rules: [\n { groups: ['KR'], threshold: 0.6 },\n { groups: ['QE'], threshold: 0.5 },\n { groups: ['ED'], threshold: 0.5 },\n { groups: [...'EQD'], threshold: 0.85 },\n ],\n },\n {\n residues: 'D',\n category: 'negativeCharge',\n rules: [\n { groups: ['KR'], threshold: 0.6 },\n { groups: [...'DEN'], threshold: 0.85 },\n { groups: ['ED'], threshold: 0.5 },\n ],\n },\n {\n residues: 'N',\n category: 'polar',\n rules: [\n { groups: ['N'], threshold: 0.5 },\n { groups: [...'ND'], threshold: 0.85 },\n ],\n },\n {\n residues: 'Q',\n category: 'polar',\n rules: [\n { groups: ['KR'], threshold: 0.6 },\n { groups: ['QE'], threshold: 0.5 },\n { groups: [...'QTKR'], threshold: 0.85 },\n ],\n },\n {\n residues: 'ST',\n category: 'polar',\n rules: [\n { groups: ['WLVIMAFCYHP'], threshold: 0.6 },\n { groups: ['TS'], threshold: 0.5 },\n { groups: [...'ST'], threshold: 0.85 },\n ],\n },\n {\n residues: 'C',\n category: 'cysteine',\n rules: [\n { groups: ['C'], threshold: 0.85 },\n ],\n },\n {\n residues: 'G',\n category: 'glycine',\n rules: [\n { groups: ['G'], threshold: 0 },\n ],\n },\n {\n residues: 'P',\n category: 'proline',\n rules: [\n { groups: ['P'], threshold: 0 },\n ],\n },\n {\n residues: 'HY',\n category: 'aromatic',\n rules: [\n { groups: ['WLVIMAFCYHP'], threshold: 0.6 },\n { groups: [...'WYACPQFHILMV'], threshold: 0.85 },\n ],\n },\n];\n\ntype Criteria = {\n residues: string;\n category: ChemicalCategory;\n rules: {\n groups: string[];\n threshold: number;\n }[];\n};\n"],"names":["chemicalPropertiesColorMap","colorizeSequencesByChemicalProperties","sequences","residueCounts","colorMap","_a","_b","_c","_d","canvas","context","chemicalProperties","getAlignmentChemicalProperties","rowIndex","sequence","columnIndex","residue","category","residues","rowCount","column","categoryCriterion","rules","groups","threshold","group","acc"],"mappings":"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"}
1
+ {"version":3,"file":"chemical-properties.js","sources":["../../../src/components/PlMultiSequenceAlignment/chemical-properties.ts"],"sourcesContent":["import type { HighlightLegend, ResidueCounts } from './types';\n\nexport function highlightByChemicalProperties(\n { sequences, residueCounts }: {\n sequences: string[];\n residueCounts: ResidueCounts;\n },\n): { blob: Blob; legend: HighlightLegend } {\n const lines: {\n category: ChemicalCategory;\n column: number;\n start: number;\n length: number;\n }[] = [];\n const chemicalProperties = getAlignmentChemicalProperties({\n residueCounts,\n rowCount: sequences.length,\n });\n const width = sequences.at(0)?.length ?? 0;\n const height = sequences.length;\n for (let column = 0; column < width; column += 1) {\n for (let row = 0; row < height; row += 1) {\n const residue = sequences[row][column];\n const category = chemicalProperties\n .at(column)\n ?.find(({ residues }) => residues.includes(residue))\n ?.category;\n if (!category) continue;\n const lastLine = lines.at(-1);\n if (\n lastLine\n && lastLine.category === category\n && lastLine.column === column\n && lastLine.start + lastLine.length === row\n ) {\n lastLine.length += 1;\n } else {\n lines.push({ category, column, start: row, length: 1 });\n }\n }\n }\n const linesByCategory = Map.groupBy(lines, ({ category }) => category);\n const blob = new Blob(\n (function*() {\n const viewBox = `0 0 ${width * 2} ${height}`;\n yield `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" stroke-width=\"2\" preserveAspectRatio=\"none\">`;\n for (const [category, lines] of linesByCategory) {\n const color = chemicalPropertiesColorScheme[category]?.color;\n if (!color) continue;\n yield `<path stroke=\"${color}\" d=\"`;\n let x = 0, y = 0;\n for (const { column, start, length } of lines) {\n yield `m${column * 2 + 1 - x},${start - y}v${length}`;\n x = column * 2 + 1;\n y = start + length;\n }\n yield '\"/>';\n }\n yield '</svg>';\n })().toArray(),\n { type: 'image/svg+xml' },\n );\n const legend = Object.fromEntries(\n Object.entries(chemicalPropertiesColorScheme)\n .filter(([color]) => linesByCategory.has(color as ChemicalCategory)),\n );\n return { blob, legend };\n}\n\nconst getAlignmentChemicalProperties = (\n { residueCounts, rowCount }: {\n residueCounts: ResidueCounts;\n rowCount: number;\n },\n): ColumnChemicalProperties[] =>\n residueCounts.map((column) => {\n const matchedRules = new Set<string>();\n return categoryCriterion.filter(({ residues, rules }) =>\n residues.split('').some((residue) => residue in column)\n && (!rules || rules.split('').map((ruleName) =>\n [ruleName, ruleDefinitions[ruleName as RuleName]] as const,\n ).some(([ruleName, { residues, threshold }]) => {\n if (matchedRules.has(ruleName)) return true;\n const groupCount = residues.split('')\n .reduce((acc, residue) => acc + (column[residue] ?? 0), 0);\n const matches = groupCount >= rowCount * threshold;\n if (matches) matchedRules.add(ruleName);\n return matches;\n })),\n );\n });\n\ntype ColumnChemicalProperties = {\n residues: string;\n category: ChemicalCategory;\n}[];\n\nconst chemicalPropertiesColorScheme = {\n hydrophobic: {\n label: 'Hydrophobic',\n color: '#99CCFF',\n },\n positiveCharge: {\n label: 'Positive Charged',\n color: '#FFA2A3',\n },\n negativeCharge: {\n label: 'Negative Charged',\n color: '#C1ADFF',\n },\n polar: {\n label: 'Polar',\n color: '#99E099',\n },\n cysteine: {\n label: 'Cysteines',\n color: '#FAAAFA',\n },\n glycine: {\n label: 'Glycines',\n color: '#F7BC5D',\n },\n proline: {\n label: 'Prolines',\n color: '#FFFF8F',\n },\n aromatic: {\n label: 'Aromatic',\n color: '#A2F5FA',\n },\n} satisfies HighlightLegend;\n\nexport type ChemicalCategory = keyof typeof chemicalPropertiesColorScheme;\n\n/*\n * Below taken mostly from\n * https://www.rbvi.ucsf.edu/chimera/1.2065/docs/ContributedSoftware/multalignviewer/colprot.par}\n */\n\nconst ruleDefinitions = {\n '%': { residues: 'WLVIMAFCYHP', threshold: 0.6 },\n '#': { residues: 'WLVIMAFCYHP', threshold: 0.8 },\n '-': { residues: 'ED', threshold: 0.5 },\n '+': { residues: 'KR', threshold: 0.6 },\n 'g': { residues: 'G', threshold: 0.5 },\n 'n': { residues: 'N', threshold: 0.5 },\n 'q': { residues: 'QE', threshold: 0.5 },\n 'p': { residues: 'P', threshold: 0.5 },\n 't': { residues: 'TS', threshold: 0.5 },\n 'A': { residues: 'A', threshold: 0.85 },\n 'C': { residues: 'C', threshold: 0.85 },\n 'D': { residues: 'D', threshold: 0.85 },\n 'E': { residues: 'E', threshold: 0.85 },\n 'F': { residues: 'F', threshold: 0.85 },\n 'G': { residues: 'G', threshold: 0.85 },\n 'H': { residues: 'H', threshold: 0.85 },\n 'I': { residues: 'I', threshold: 0.85 },\n 'K': { residues: 'K', threshold: 0.85 },\n 'L': { residues: 'L', threshold: 0.85 },\n 'M': { residues: 'M', threshold: 0.85 },\n 'N': { residues: 'N', threshold: 0.85 },\n 'P': { residues: 'P', threshold: 0.85 },\n 'Q': { residues: 'Q', threshold: 0.85 },\n 'R': { residues: 'R', threshold: 0.85 },\n 'S': { residues: 'S', threshold: 0.85 },\n 'T': { residues: 'T', threshold: 0.85 },\n 'V': { residues: 'V', threshold: 0.85 },\n 'W': { residues: 'W', threshold: 0.85 },\n 'Y': { residues: 'Y', threshold: 0.85 },\n};\n\ntype RuleName = keyof typeof ruleDefinitions;\n\nconst categoryCriterion: Criteria[] = [\n { residues: 'G', category: 'glycine', rules: '' },\n { residues: 'P', category: 'proline', rules: '' },\n { residues: 'T', category: 'polar', rules: 'tST%#' },\n { residues: 'S', category: 'polar', rules: 'tST#' },\n { residues: 'N', category: 'polar', rules: 'nND' },\n { residues: 'Q', category: 'polar', rules: 'qQE+KR' },\n // criteria below has to go before the other criteria for C,\n // otherwise it will never match\n { residues: 'C', category: 'cysteine', rules: 'C' },\n { residues: 'WLVIMF', category: 'hydrophobic', rules: '%#ACFHILMVWYPp' },\n // below there was an 's' rule too,\n // but no definition of such rule was provided\n { residues: 'A', category: 'hydrophobic', rules: '%#ACFHILMVWYPpTSG' },\n { residues: 'C', category: 'hydrophobic', rules: '%#AFHILMVWYSPp' },\n { residues: 'HY', category: 'aromatic', rules: '%#ACFHILMVWYPp' },\n { residues: 'E', category: 'negativeCharge', rules: '-DEqQ' },\n { residues: 'D', category: 'negativeCharge', rules: '-DEnN' },\n { residues: 'KR', category: 'positiveCharge', rules: '+KRQ' },\n];\n\ntype Criteria = {\n residues: string;\n category: ChemicalCategory;\n rules: string;\n};\n"],"names":["highlightByChemicalProperties","sequences","residueCounts","_a","_b","_c","lines","chemicalProperties","getAlignmentChemicalProperties","width","height","column","row","residue","category","residues","lastLine","linesByCategory","blob","color","chemicalPropertiesColorScheme","x","y","start","length","legend","rowCount","matchedRules","categoryCriterion","rules","ruleName","ruleDefinitions","threshold","matches","acc"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { ListOptionNormalized } from '@milaboratories/uikit';
2
2
  import { PColumnIdAndSpec, PFrameHandle, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentSettings, PlSelectionModel, PObjectId, PTableColumnId } from '@platforma-sdk/model';
3
- import { Markup } from './markup';
4
- import { ColorMap, ResidueCounts } from './types';
3
+ import { HighlightLegend, ResidueCounts } from './types';
5
4
  export declare const sequenceLimit = 1000;
6
5
  export declare const useSequenceColumnsOptions: (paramsGetter: () => {
7
6
  pFrame: PFrameHandle | undefined;
@@ -31,7 +30,6 @@ export declare const useMultipleAlignmentData: (paramsGetter: () => {
31
30
  pframe: PFrameHandle | undefined;
32
31
  sequenceColumnIds: PObjectId[] | undefined;
33
32
  labelColumnIds: PTableColumnId[] | undefined;
34
- markupColumnId: PObjectId | undefined;
35
33
  selection: PlSelectionModel | undefined;
36
34
  colorScheme: PlMultiSequenceAlignmentColorSchemeOption;
37
35
  alignmentParams: PlMultiSequenceAlignmentSettings["alignmentParams"];
@@ -43,15 +41,11 @@ export declare const useMultipleAlignmentData: (paramsGetter: () => {
43
41
  type MultipleAlignmentData = {
44
42
  sequences: string[];
45
43
  sequenceNames: string[];
46
- labelsRows: string[][];
44
+ labelRows: string[][];
47
45
  residueCounts: ResidueCounts;
48
- markup?: {
49
- labels: Record<string, string>;
50
- data: Markup[];
51
- };
52
46
  highlightImage?: {
53
47
  blob: Blob;
54
- colorMap: ColorMap;
48
+ legend: HighlightLegend;
55
49
  };
56
50
  exceedsLimit: boolean;
57
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAaL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,yCAAyC,EAC9C,KAAK,gCAAgC,EACrC,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EAGpB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAEL,KAAK,MAAM,EAIZ,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIvD,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,eAAO,MAAM,yBAAyB;YAoB5B,YAAY,GAAG,SAAS;6BACP,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO;;;;;CAnB/D,CAAC;AAEF,eAAO,MAAM,sBAAsB;YAqCzB,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;;;;;CApC3C,CAAC;AAEF,eAAO,MAAM,uBAAuB;YAsG1B,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;;;;;CArG3C,CAAC;AAEF,eAAO,MAAM,wBAAwB;YAuI3B,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;oBAC1B,cAAc,EAAE,GAAG,SAAS;oBAC5B,SAAS,GAAG,SAAS;eAC1B,gBAAgB,GAAG,SAAS;iBAC1B,yCAAyC;qBACrC,gCAAgC,CAAC,iBAAiB,CAAC;;;;;CA3IrE,CAAC;AAsYF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/components/PlMultiSequenceAlignment/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAaL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,yCAAyC,EAC9C,KAAK,gCAAgC,EACrC,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EAGpB,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI9D,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,eAAO,MAAM,yBAAyB;YAoB5B,YAAY,GAAG,SAAS;6BACP,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO;;;;;CAnB/D,CAAC;AAEF,eAAO,MAAM,sBAAsB;YAsCzB,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;;;;;CArC3C,CAAC;AAEF,eAAO,MAAM,uBAAuB;YAyG1B,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;;;;;CAxG3C,CAAC;AAEF,eAAO,MAAM,wBAAwB;YA0I3B,YAAY,GAAG,SAAS;uBACb,SAAS,EAAE,GAAG,SAAS;oBAC1B,cAAc,EAAE,GAAG,SAAS;eACjC,gBAAgB,GAAG,SAAS;iBAC1B,yCAAyC;qBACrC,gCAAgC,CAAC,iBAAiB,CAAC;;;;;CA7IrE,CAAC;AA2XF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC;QACX,MAAM,EAAE,eAAe,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf,CAAC"}
@@ -1,293 +1,279 @@
1
- import { isJsonEqual as L } from "../../lib/util/helpers/dist/index.js";
2
- import { getRawPlatformaInstance as K, isLabelColumn as B, isLinkerColumn as Q, createRowSelectionColumn as Y } from "../../sdk/model/dist/index.js";
3
- import { ref as O, watch as Z } from "vue";
4
- import { chemicalPropertiesColorMap as I, colorizeSequencesByChemicalProperties as ee } from "./chemical-properties.js";
5
- import { parseMarkup as te, markupAlignedSequence as ne, markupColors as T, colorizeSequencesByMarkup as oe } from "./markup.js";
6
- import { multiSequenceAlignment as ae } from "./multi-sequence-alignment.js";
7
- import { getResidueCounts as re } from "./residue-counts.js";
8
- import { ensureError as se, canonicalizeJson as A, getAxisId as J, parseJson as D, matchAxisId as ie, pTableValue as q } from "../../lib/model/common/dist/index.js";
9
- const M = () => K().pFrameDriver, E = 1e3, Se = k(
10
- le
11
- ), xe = k(
12
- ce
13
- ), Ae = k(
14
- pe
15
- ), ve = k(
16
- ue
1
+ import { isJsonEqual as J } from "../../lib/util/helpers/dist/index.js";
2
+ import { getRawPlatformaInstance as z, isLabelColumn as N, isLinkerColumn as W, createRowSelectionColumn as X } from "../../sdk/model/dist/index.js";
3
+ import { ref as M, watch as G } from "vue";
4
+ import { highlightByChemicalProperties as H } from "./chemical-properties.js";
5
+ import { parseMarkup as K, markupAlignedSequence as Q, highlightByMarkup as Y } from "./markup.js";
6
+ import { multiSequenceAlignment as Z } from "./multi-sequence-alignment.js";
7
+ import { getResidueCounts as nn } from "./residue-counts.js";
8
+ import { ensureError as tn, canonicalizeJson as A, getAxisId as E, parseJson as D, matchAxisId as en, pTableValue as O } from "../../lib/model/common/dist/index.js";
9
+ const S = () => z().pFrameDriver, q = 1e3, gn = C(
10
+ an
11
+ ), hn = C(
12
+ on
13
+ ), wn = C(
14
+ rn
15
+ ), bn = C(
16
+ sn
17
17
  );
18
- async function le({
18
+ async function an({
19
19
  pFrame: c,
20
- sequenceColumnPredicate: t
20
+ sequenceColumnPredicate: e
21
21
  }) {
22
22
  if (!c) return;
23
- const a = (await M().listColumns(c)).filter((i) => t(i)).map(({ spec: i, columnId: p }) => {
23
+ const t = (await S().listColumns(c)).values().filter((o) => e(o)).map(({ spec: o, columnId: u }) => {
24
24
  var m;
25
25
  return {
26
- label: ((m = i.annotations) == null ? void 0 : m["pl7.app/label"]) ?? "Unlabelled column",
27
- value: p
26
+ label: ((m = o.annotations) == null ? void 0 : m["pl7.app/label"]) ?? "Unlabelled column",
27
+ value: u
28
28
  };
29
- }), s = a.map(({ value: i }) => i);
30
- return { options: a, defaults: s };
29
+ }).toArray(), l = t.map(({ value: o }) => o);
30
+ return { options: t, defaults: l };
31
31
  }
32
- async function ce({
32
+ async function on({
33
33
  pFrame: c,
34
- sequenceColumnIds: t
34
+ sequenceColumnIds: e
35
35
  }) {
36
- var f, x, w;
37
- if (!c || !t) return;
38
- const d = M(), l = await d.listColumns(c), a = /* @__PURE__ */ new Map(), s = new Map(t.flatMap((r) => {
39
- const y = l.find(({ columnId: u }) => u === r);
40
- if (!y)
41
- throw new Error(`Couldn't find sequence column (ID: \`${r}\`).`);
42
- return y.spec.axesSpec.map((u) => [A(J(u)), u]);
43
- }));
44
- for (const [r, y] of s.entries()) {
45
- const u = D(r), g = l.find(
46
- ({ spec: b }) => B(b) && ie(u, J(b.axesSpec[0]))
36
+ var f, h, b;
37
+ if (!c || !e) return;
38
+ const y = S(), p = await y.listColumns(c), t = /* @__PURE__ */ new Map(), l = new Map(
39
+ e.values().flatMap((i) => {
40
+ const d = p.find(({ columnId: a }) => a === i);
41
+ if (!d)
42
+ throw new Error(`Couldn't find sequence column (ID: \`${i}\`).`);
43
+ return d.spec.axesSpec.values().map((a) => [A(E(a)), a]);
44
+ })
45
+ );
46
+ for (const [i, d] of l.entries()) {
47
+ const a = D(i), g = p.find(
48
+ ({ spec: v }) => N(v) && en(a, E(v.axesSpec[0]))
47
49
  );
48
- a.set(
49
- g ? A({ type: "column", id: g.columnId }) : A({ type: "axis", id: u }),
50
- ((f = g == null ? void 0 : g.spec.annotations) == null ? void 0 : f["pl7.app/label"]) ?? ((x = y.annotations) == null ? void 0 : x["pl7.app/label"]) ?? "Unlabelled axis"
50
+ t.set(
51
+ g ? A({ type: "column", id: g.columnId }) : A({ type: "axis", id: a }),
52
+ ((f = g == null ? void 0 : g.spec.annotations) == null ? void 0 : f["pl7.app/label"]) ?? ((h = d.annotations) == null ? void 0 : h["pl7.app/label"]) ?? "Unlabelled axis"
51
53
  );
52
54
  }
53
- const { hits: i } = await d.findColumns(c, {
55
+ const { hits: o } = await y.findColumns(c, {
54
56
  columnFilter: {},
55
- compatibleWith: Array.from(
56
- s.keys(),
57
- (r) => D(r)
58
- ),
57
+ compatibleWith: l.keys().map((i) => D(i)).toArray(),
59
58
  strictlyCompatible: !1
60
59
  });
61
- for (const { columnId: r, spec: y } of i) {
62
- const u = A({ type: "column", id: r });
63
- a.has(u) || a.set(
64
- u,
65
- ((w = y.annotations) == null ? void 0 : w["pl7.app/label"]) ?? "Unlabelled column"
60
+ for (const { columnId: i, spec: d } of o) {
61
+ const a = A({ type: "column", id: i });
62
+ t.has(a) || t.set(
63
+ a,
64
+ ((b = d.annotations) == null ? void 0 : b["pl7.app/label"]) ?? "Unlabelled column"
66
65
  );
67
66
  }
68
- const p = Array.from(a).map(
69
- ([r, y]) => ({ label: y, value: D(r) })
70
- ), m = p.filter(({ value: r }) => {
71
- if (r.type === "axis") return !0;
72
- const y = l.find(({ columnId: u }) => u === r.id);
73
- return y && B(y.spec);
74
- }).map(({ value: r }) => r);
75
- return { options: p, defaults: m };
67
+ const u = t.entries().map(([i, d]) => ({ label: d, value: D(i) })).toArray(), m = u.values().filter(({ value: i }) => {
68
+ if (i.type === "axis") return !0;
69
+ const d = p.find(({ columnId: a }) => a === i.id);
70
+ return d && N(d.spec);
71
+ }).map(({ value: i }) => i).toArray();
72
+ return { options: u, defaults: m };
76
73
  }
77
- async function pe({
74
+ async function rn({
78
75
  pFrame: c,
79
- sequenceColumnIds: t
76
+ sequenceColumnIds: e
80
77
  }) {
81
- if (!c || (t == null ? void 0 : t.length) !== 1) return;
82
- const l = await M().listColumns(c), a = l.find(
83
- (s) => s.columnId === t[0]
78
+ if (!c || (e == null ? void 0 : e.length) !== 1) return;
79
+ const p = await S().listColumns(c), t = p.find(
80
+ (l) => l.columnId === e[0]
84
81
  );
85
- if (!a)
82
+ if (!t)
86
83
  throw new Error(
87
- `Couldn't find sequence column (ID: \`${t[0]}\`).`
84
+ `Couldn't find sequence column (ID: \`${e[0]}\`).`
88
85
  );
89
- return l.filter(
90
- (s) => {
91
- var i;
92
- return ((i = s.spec.annotations) == null ? void 0 : i["pl7.app/sequence/isAnnotation"]) === "true" && L(a.spec.axesSpec, s.spec.axesSpec) && Object.entries(a.spec.domain ?? {}).every(([p, m]) => {
86
+ return p.values().filter(
87
+ (l) => {
88
+ var o;
89
+ return ((o = l.spec.annotations) == null ? void 0 : o["pl7.app/sequence/isAnnotation"]) === "true" && J(t.spec.axesSpec, l.spec.axesSpec) && Object.entries(t.spec.domain ?? {}).every(([u, m]) => {
93
90
  var f;
94
- return ((f = s.spec.domain) == null ? void 0 : f[p]) === m;
91
+ return ((f = l.spec.domain) == null ? void 0 : f[u]) === m;
95
92
  });
96
93
  }
97
- ).map(({ columnId: s, spec: i }) => {
98
- var p;
94
+ ).map(({ columnId: l, spec: o }) => {
95
+ var u;
99
96
  return {
100
- value: s,
101
- label: ((p = i.annotations) == null ? void 0 : p["pl7.app/label"]) ?? "Unlabelled column"
97
+ value: l,
98
+ label: ((u = o.annotations) == null ? void 0 : u["pl7.app/label"]) ?? "Unlabelled column"
102
99
  };
103
- });
100
+ }).toArray();
104
101
  }
105
- async function ue({
102
+ async function sn({
106
103
  pframe: c,
107
- sequenceColumnIds: t,
108
- labelColumnIds: d,
109
- markupColumnId: l,
110
- selection: a,
111
- colorScheme: s,
112
- alignmentParams: i
104
+ sequenceColumnIds: e,
105
+ labelColumnIds: y,
106
+ selection: p,
107
+ colorScheme: t,
108
+ alignmentParams: l
113
109
  }) {
114
- var $, j, N, _;
115
- if (!c || !(t != null && t.length) || !d) return;
116
- const p = M(), m = await p.listColumns(c), f = m.filter((e) => Q(e.spec)), x = Y({ selection: a });
117
- let w = {
110
+ var $, F;
111
+ if (!c || !(e != null && e.length) || !y) return;
112
+ const o = S(), u = await o.listColumns(c), m = u.filter((n) => W(n.spec)), f = X({ selection: p });
113
+ let h = {
118
114
  type: "inner",
119
- entries: t.map((e) => ({
115
+ entries: e.map((n) => ({
120
116
  type: "column",
121
- column: e
117
+ column: n
122
118
  }))
123
119
  };
124
- f.length > 0 && (w = {
120
+ m.length > 0 && (h = {
125
121
  type: "outer",
126
- primary: w,
127
- secondary: f.map(({ columnId: e }) => ({
122
+ primary: h,
123
+ secondary: m.map(({ columnId: n }) => ({
128
124
  type: "column",
129
- column: e
125
+ column: n
130
126
  }))
131
- }), x && (w = {
127
+ }), f && (h = {
132
128
  type: "inner",
133
129
  entries: [
134
- w,
130
+ h,
135
131
  {
136
132
  type: "inlineColumn",
137
- column: x
133
+ column: f
138
134
  }
139
135
  ]
140
136
  });
141
- const r = d.flatMap((e) => e.type !== "column" ? [] : { type: "column", column: e.id });
142
- l && r.push({ type: "column", column: l });
143
- const y = Array.from(
144
- new Set(t.flatMap((e) => {
145
- const n = m.find(({ columnId: o }) => o === e);
146
- if (!n)
147
- throw new Error(`Couldn't find sequence column (ID: ${e})`);
148
- return n.spec.axesSpec.map((o) => A(J(o)));
149
- }))
150
- ).sort().map((e) => ({
151
- column: { type: "axis", id: D(e) },
137
+ const b = y.flatMap((n) => n.type !== "column" ? [] : { type: "column", column: n.id });
138
+ t.type === "markup" && b.push({ type: "column", column: t.columnId });
139
+ const i = Array.from(
140
+ new Set(
141
+ e.values().flatMap((n) => {
142
+ const r = u.find(({ columnId: s }) => s === n);
143
+ if (!r)
144
+ throw new Error(`Couldn't find sequence column (ID: ${n})`);
145
+ return r.spec.axesSpec.map((s) => A(E(s)));
146
+ })
147
+ )
148
+ ).sort().map((n) => ({
149
+ column: { type: "axis", id: D(n) },
152
150
  ascending: !0,
153
151
  naAndAbsentAreLeastValues: !0
154
- })), u = {
152
+ })), d = {
155
153
  src: {
156
154
  type: "outer",
157
- primary: w,
158
- secondary: r
155
+ primary: h,
156
+ secondary: b
159
157
  },
160
158
  filters: [],
161
- sorting: y
162
- }, g = await p.calculateTableData(
159
+ sorting: i
160
+ }, a = await o.calculateTableData(
163
161
  c,
164
- JSON.parse(JSON.stringify(u)),
162
+ JSON.parse(JSON.stringify(d)),
165
163
  {
166
164
  offset: 0,
167
165
  // +1 is a hack to check whether the selection is over the limit
168
- length: E + 1
166
+ length: q + 1
169
167
  }
170
168
  );
171
- let b = (g == null ? void 0 : g[0].data.data.length) ?? 0, P = !1;
172
- b > E && (b = E, P = !0);
173
- const R = t.map((e) => {
174
- const n = g.find(({ spec: o }) => o.id === e);
175
- if (!n)
176
- throw new Error(`Couldn't find sequence column (ID: \`${e}\`).`);
177
- return n;
178
- }), V = d.map((e) => {
179
- const n = g.find(({ spec: o }) => {
180
- if (e.type === "axis" && o.type === "axis")
181
- return L(e.id, o.id);
182
- if (e.type === "column" && o.type === "column")
183
- return e.id === o.id;
169
+ let g = (a == null ? void 0 : a[0].data.data.length) ?? 0, v = !1;
170
+ g > q && (g = q, v = !0);
171
+ const L = e.map((n) => {
172
+ const r = a.find(({ spec: s }) => s.id === n);
173
+ if (!r)
174
+ throw new Error(`Couldn't find sequence column (ID: \`${n}\`).`);
175
+ return r;
176
+ }), _ = y.map((n) => {
177
+ const r = a.find(({ spec: s }) => {
178
+ if (n.type === "axis" && s.type === "axis")
179
+ return J(n.id, s.id);
180
+ if (n.type === "column" && s.type === "column")
181
+ return n.id === s.id;
184
182
  });
185
- if (!n)
186
- throw new Error(`Couldn't find label column (ID: \`${e}\`).`);
187
- return n;
188
- }), C = l && g.find(({ spec: e }) => e.id === l), W = await Promise.all(
189
- R.map(
190
- (e) => ae(
183
+ if (!r)
184
+ throw new Error(`Couldn't find label column (ID: \`${n}\`).`);
185
+ return r;
186
+ }), j = await Promise.all(
187
+ L.map(
188
+ (n) => Z(
191
189
  Array.from(
192
- { length: b },
193
- (n, o) => {
194
- var h;
195
- return ((h = q(e.data, o, { na: "", absent: "" })) == null ? void 0 : h.toString()) ?? "";
190
+ { length: g },
191
+ (r, s) => {
192
+ var w;
193
+ return ((w = O(n.data, s, { na: "", absent: "" })) == null ? void 0 : w.toString()) ?? "";
196
194
  }
197
195
  ),
198
- i
196
+ l
199
197
  )
200
198
  )
201
- ), F = Array.from(
202
- { length: b },
203
- (e, n) => W.map((o) => o[n])
204
- ), X = R.map(
205
- (e) => {
206
- var n;
207
- return ((n = e.spec.spec.annotations) == null ? void 0 : n["pl7.app/label"]) ?? "Unlabelled column";
199
+ ), P = Array.from(
200
+ { length: g },
201
+ (n, r) => j.map((s) => s[r])
202
+ ), B = L.map(
203
+ (n) => {
204
+ var r;
205
+ return ((r = n.spec.spec.annotations) == null ? void 0 : r["pl7.app/label"]) ?? "Unlabelled column";
208
206
  }
209
- ), G = Array.from(
210
- { length: b },
211
- (e, n) => V.map(
212
- (o) => {
213
- var h;
214
- return ((h = q(o.data, n, { na: "", absent: "" })) == null ? void 0 : h.toString()) ?? "";
207
+ ), T = Array.from(
208
+ { length: g },
209
+ (n, r) => _.map(
210
+ (s) => {
211
+ var w;
212
+ return ((w = O(s.data, r, { na: "", absent: "" })) == null ? void 0 : w.toString()) ?? "";
215
213
  }
216
214
  )
217
- ), v = F.map((e) => e.join(" ")), U = re(v), S = {
218
- sequences: v,
219
- sequenceNames: X,
220
- labelsRows: G,
221
- exceedsLimit: P,
222
- residueCounts: U
215
+ ), x = P.map((n) => n.join(" ")), R = nn(x), k = {
216
+ sequences: x,
217
+ sequenceNames: B,
218
+ labelRows: T,
219
+ exceedsLimit: v,
220
+ residueCounts: R
223
221
  };
224
- if (C) {
225
- const e = JSON.parse(
226
- (($ = C.spec.spec.annotations) == null ? void 0 : $["pl7.app/sequence/annotation/mapping"]) ?? "{}"
227
- ), n = Array.from(
228
- { length: b },
229
- (o, h) => {
230
- var z;
231
- const H = te(
232
- ((z = q(C.data, h, { na: "", absent: "" })) == null ? void 0 : z.toString()) ?? ""
222
+ if (t.type === "chemical-properties")
223
+ k.highlightImage = H({
224
+ sequences: x,
225
+ residueCounts: R
226
+ });
227
+ else if (t.type === "markup") {
228
+ const n = a.find(
229
+ ({ spec: w }) => w.id === t.columnId
230
+ );
231
+ if (!n)
232
+ throw new Error(
233
+ `Couldn't find markup column (ID: \`${t.columnId}\`).`
234
+ );
235
+ const r = Array.from(
236
+ { length: g },
237
+ (w, I) => {
238
+ var U;
239
+ const V = K(
240
+ ((U = O(n.data, I, { na: "", absent: "" })) == null ? void 0 : U.toString()) ?? ""
233
241
  );
234
- return ne(F[h][0], H);
242
+ return Q(P[I][0], V);
235
243
  }
244
+ ), s = JSON.parse(
245
+ (($ = n.spec.spec.annotations) == null ? void 0 : $["pl7.app/sequence/annotation/mapping"]) ?? "{}"
236
246
  );
237
- S.markup = { labels: e, data: n };
238
- }
239
- if (s.type === "chemical-properties") {
240
- const e = I;
241
- S.highlightImage = {
242
- blob: await ee({
243
- sequences: v,
244
- residueCounts: U,
245
- colorMap: e
246
- }),
247
- colorMap: e
248
- };
249
- } else if (s.type === "markup") {
250
- const e = Object.fromEntries(
251
- Object.entries(
252
- ((j = S.markup) == null ? void 0 : j.labels) ?? {}
253
- ).map(([n, o], h) => [
254
- n,
255
- { label: o, color: T[h % T.length] }
256
- ])
257
- );
258
- S.highlightImage = {
259
- blob: await oe({
260
- markupRows: ((N = S.markup) == null ? void 0 : N.data) ?? [],
261
- colorMap: e,
262
- columnCount: ((_ = v.at(0)) == null ? void 0 : _.length) ?? 0
263
- }),
264
- colorMap: e
265
- };
247
+ k.highlightImage = Y({
248
+ markupRows: r,
249
+ columnCount: ((F = x.at(0)) == null ? void 0 : F.length) ?? 0,
250
+ labels: s
251
+ });
266
252
  }
267
- return S;
253
+ return k;
268
254
  }
269
- function k(c) {
270
- const t = O(), d = O(!0), l = O();
271
- let a;
272
- return (s) => (Z(s, async (i, p) => {
273
- if (L(i, p)) return;
274
- const m = a = Symbol();
255
+ function C(c) {
256
+ const e = M(), y = M(!0), p = M();
257
+ let t;
258
+ return (l) => (G(l, async (o, u) => {
259
+ if (J(o, u)) return;
260
+ const m = t = Symbol();
275
261
  try {
276
- l.value = void 0, d.value = !0;
277
- const f = await c(i);
278
- m === a && (t.value = f);
262
+ p.value = void 0, y.value = !0;
263
+ const f = await c(o);
264
+ m === t && (e.value = f);
279
265
  } catch (f) {
280
- console.error(f), m === a && (l.value = se(f));
266
+ console.error(f), m === t && (p.value = tn(f));
281
267
  } finally {
282
- m === a && (d.value = !1);
268
+ m === t && (y.value = !1);
283
269
  }
284
- }, { immediate: !0 }), { data: t, isLoading: d, error: l });
270
+ }, { immediate: !0 }), { data: e, isLoading: y, error: p });
285
271
  }
286
272
  export {
287
- E as sequenceLimit,
288
- xe as useLabelColumnsOptions,
289
- Ae as useMarkupColumnsOptions,
290
- ve as useMultipleAlignmentData,
291
- Se as useSequenceColumnsOptions
273
+ q as sequenceLimit,
274
+ hn as useLabelColumnsOptions,
275
+ wn as useMarkupColumnsOptions,
276
+ bn as useMultipleAlignmentData,
277
+ gn as useSequenceColumnsOptions
292
278
  };
293
279
  //# sourceMappingURL=data.js.map