From 6681b33993bb0d923472651418a2a187b4efdb32 Mon Sep 17 00:00:00 2001 From: Luc Patiny Date: Tue, 4 Jun 2024 10:00:32 +0200 Subject: [PATCH] first commit --- .eslintrc.yml | 5 + .github/workflows/nodejs-ts.yml | 14 + .github/workflows/npm-prerelease.yml | 14 + .github/workflows/release.yml | 16 + .github/workflows/typedoc.yml | 32 + .gitignore | 27 + .npmrc | 1 + .prettierrc.json | 7 + CHANGELOG.md | 1 + LICENSE | 21 + README.md | 23 + demo/Fragmentation.tsx | 14 + demo/data/reactionTree.ts | 353 ++++ demo/data/taxonomiesWithUrl.ts | 2098 +++++++++++++++++++++++ demo/main.tsx | 11 + index.html | 12 + package.json | 56 + src/.npmignore | 2 + src/components/SVGMassFragmentation.tsx | 21 + src/index.tsx | 1 + src/render.tsx | 14 + src/vite-env.d.ts | 1 + tsconfig.cjs.json | 19 + tsconfig.esm.json | 7 + tsconfig.json | 21 + vite.config.mts | 9 + 26 files changed, 2800 insertions(+) create mode 100644 .eslintrc.yml create mode 100644 .github/workflows/nodejs-ts.yml create mode 100644 .github/workflows/npm-prerelease.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/typedoc.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierrc.json create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 demo/Fragmentation.tsx create mode 100644 demo/data/reactionTree.ts create mode 100644 demo/data/taxonomiesWithUrl.ts create mode 100644 demo/main.tsx create mode 100644 index.html create mode 100644 package.json create mode 100644 src/.npmignore create mode 100644 src/components/SVGMassFragmentation.tsx create mode 100644 src/index.tsx create mode 100644 src/render.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.esm.json create mode 100644 tsconfig.json create mode 100644 vite.config.mts diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..638e7e6 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,5 @@ +extends: + - cheminfo-react/base + - cheminfo-typescript/base +parserOptions: + sourceType: module diff --git a/.github/workflows/nodejs-ts.yml b/.github/workflows/nodejs-ts.yml new file mode 100644 index 0000000..71e0af2 --- /dev/null +++ b/.github/workflows/nodejs-ts.yml @@ -0,0 +1,14 @@ +name: Node.js CI + +on: + push: + branches: + - main + pull_request: + +jobs: + nodejs: + # Documentation: https://github.com/zakodium/workflows#nodejs-ci + uses: zakodium/workflows/.github/workflows/nodejs.yml@nodejs-v1 + with: + lint-check-types: true diff --git a/.github/workflows/npm-prerelease.yml b/.github/workflows/npm-prerelease.yml new file mode 100644 index 0000000..b5a7ad1 --- /dev/null +++ b/.github/workflows/npm-prerelease.yml @@ -0,0 +1,14 @@ +name: Prerelease package on npm + +on: + pull_request: + types: [labeled] + workflow_dispatch: + +jobs: + prerelease: + # Documentation: https://github.com/zakodium/workflows#npm-prerelease + uses: zakodium/workflows/.github/workflows/npm-prerelease.yml@npm-prerelease-v1 + secrets: + github-token: ${{ secrets.BOT_TOKEN }} + npm-token: ${{ secrets.NPM_BOT_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..7f5db58 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,16 @@ +name: Release + +on: + push: + branches: + - main + +jobs: + release: + # Documentation: https://github.com/zakodium/workflows#release + uses: zakodium/workflows/.github/workflows/release.yml@release-v1 + with: + npm: true + secrets: + github-token: ${{ secrets.BOT_TOKEN }} + npm-token: ${{ secrets.NPM_BOT_TOKEN }} diff --git a/.github/workflows/typedoc.yml b/.github/workflows/typedoc.yml new file mode 100644 index 0000000..540b6a6 --- /dev/null +++ b/.github/workflows/typedoc.yml @@ -0,0 +1,32 @@ +name: Deploy TypeDoc on GitHub pages + +on: + workflow_dispatch: + release: + types: [published] + +env: + NODE_VERSION: 20.x + ENTRY_FILE: 'src/index.ts' + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - name: Install dependencies + run: npm install + - name: Build documentation + uses: zakodium/typedoc-action@v2 + with: + entry: ${{ env.ENTRY_FILE }} + - name: Deploy to GitHub pages + uses: JamesIves/github-pages-deploy-action@releases/v4 + with: + token: ${{ secrets.BOT_TOKEN }} + branch: gh-pages + folder: docs + clean: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62516e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +lib +lib-esm diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..9cf9495 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..a23e760 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "always", + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "all" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..825c32f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..95a5dbf --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 cheminfo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bba85f0 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# react-mass-fragmentation + +[![NPM version][npm-image]][npm-url] +[![build status][ci-image]][ci-url] +[![Test coverage][codecov-image]][codecov-url] +[![npm download][download-image]][download-url] + +## Introduction + +This project allows to display mass fragmentation of peptide or nucleotides. + +## License + +[MIT](./LICENSE) + +[npm-image]: https://img.shields.io/npm/v/react-mass-fragmentation.svg +[npm-url]: https://www.npmjs.com/package/react-mass-fragmentation +[ci-image]: https://github.com/cheminfo/react-mass-fragmentation/workflows/Node.js%20CI/badge.svg?branch=main +[ci-url]: https://github.com/cheminfo/react-mass-fragmentation/actions?query=workflow%3A%22Node.js+CI%22 +[codecov-image]: https://img.shields.io/codecov/c/github/cheminfo/react-mass-fragmentation.svg +[codecov-url]: https://codecov.io/gh/cheminfo/react-mass-fragmentation +[download-image]: https://img.shields.io/npm/dm/react-mass-fragmentation.svg +[download-url]: https://www.npmjs.com/package/react-mass-fragmentation diff --git a/demo/Fragmentation.tsx b/demo/Fragmentation.tsx new file mode 100644 index 0000000..12f240d --- /dev/null +++ b/demo/Fragmentation.tsx @@ -0,0 +1,14 @@ +import { SVGMassFragmentation } from '../src/components/SVGMassFragmentation'; + +export default function Fragmentation() { + return ( +
+ +
+ ); +} diff --git a/demo/data/reactionTree.ts b/demo/data/reactionTree.ts new file mode 100644 index 0000000..98baebf --- /dev/null +++ b/demo/data/reactionTree.ts @@ -0,0 +1,353 @@ +export const reactionTree = [ + { + molecules: [ + { + idCode: 'dg~D@MBdie]v\\kahHBjh@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 1 0 0 0 0\n 4 5 2 0 0 0 0\n 5 6 1 0 0 0 0\n 6 7 2 0 0 0 0\n 7 8 1 0 0 0 0\n 8 9 2 0 0 0 0\n 4 9 1 0 0 0 0\n 7 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 6 12 1 0 0 0 0\n 2 13 1 0 0 0 0\n 13 14 1 0 0 0 0\nM END\n', + asReagent: true, + info: { + mf: 'C11H15NO2', + mw: 193.24271923500675, + em: 193.11027872702, + charge: 0, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: + 'gCh@AGj@vTTUHXECAdEzh`!eF``fLGtP#QP` QX#!Ro`BHoY^}GXk| !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 1, + molecules: [ + { + idCode: 'dg~DBMBmeJYW]gJxZB@jj@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 34.6674 -4.4294 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4007 -5.9055 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.1537 -4.2269 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7222 -6.6153 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1254 -6.6951 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.8056 -5.5779 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7683 -8.1146 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1714 -8.1944 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4929 -8.9041 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.8960 -8.9839 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.9421 -10.4832 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.6667 -11.2727 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 33.2635 -11.1930 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.7127 -12.7720 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 12 11 1 0 0 0 0\nM CHG 1 12 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H16NO2(+)', + mw: 194.2506599890625, + em: 194.11810375925, + mz: 194.11755517934094, + charge: 1, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: + 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 2, + molecules: [ + { + idCode: 'dg~DAMB`gYRfUwYrnF``Jj`@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 1 2 1 0 0 0 0\nM CHG 2 1 1 12 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H17NO2(+2)', + mw: 195.25860074311828, + em: 195.12592879148, + mz: 97.56241581583093, + charge: 2, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: + 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 3, + molecules: [ + { + idCode: 'dg~DCMB`fivTie]v\\kahHBjh@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 6 3 1 0 0 0 0\nM CHG 3 1 1 6 1 12 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H18NO2(+3)', + mw: 196.2665414971741, + em: 196.13375382371, + mz: 65.3773693613276, + charge: 3, + }, + }, + ], + }, + ], + }, + { + reaction: { + label: 'Ionization', + rxnCode: + 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 2, + molecules: [ + { + idCode: 'dg~DAMB`gYRfU}YrnF``Jj`@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 6 3 1 0 0 0 0\nM CHG 2 6 1 12 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H17NO2(+2)', + mw: 195.25860074311828, + em: 195.12592879148, + mz: 97.56241581583093, + charge: 2, + }, + }, + ], + }, + ], + }, + { + reaction: { + label: 'Ionization', + rxnCode: 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 1, + molecules: [ + { + idCode: 'dg~DBMB`eJYW]gJxZB@jj@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 1 2 1 0 0 0 0\nM CHG 1 1 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H16NO2(+)', + mw: 194.2506599890625, + em: 194.11810375925, + mz: 194.11755517934094, + charge: 1, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: + 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 2, + molecules: [ + { + idCode: 'dg~DAMB`fiRfUwYrnF``Jj`@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 6 3 1 0 0 0 0\nM CHG 2 1 1 6 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H17NO2(+2)', + mw: 195.25860074311828, + em: 195.12592879148, + mz: 97.56241581583093, + charge: 2, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: + 'eM`BN`vktQFhXO}h!eF``zLD#Qa Qd#!Ro`BWoQvJ?@ !R_tp]Ngp', + ionization: '[M-H]-', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 3, + molecules: [ + { + idCode: 'dg~DCMB`fiwdie]v\\kahHBjh@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 34.6674 -4.4294 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4007 -5.9055 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.1537 -4.2269 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7222 -6.6153 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1254 -6.6951 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.8056 -5.5779 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7683 -8.1146 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1714 -8.1944 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4929 -8.9041 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.8960 -8.9839 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.9421 -10.4832 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.6667 -11.2727 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 33.2635 -11.1930 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.7127 -12.7720 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 12 11 1 0 0 0 0\nM CHG 3 1 1 6 1 12 -1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H16NO2(+)', + mw: 194.2506599890625, + em: 194.11810375925, + mz: 194.11755517934094, + charge: 1, + }, + }, + ], + }, + ], + }, + { + reaction: { + label: 'Ionization', + rxnCode: 'eM`BN`vktQFhXO}h!eF``zLD#Qa Qd#!Ro`BWoQvJ?@ !R_tp]Ngp', + ionization: '[M-H]-', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 2, + molecules: [ + { + idCode: 'dg~DAMB`g^RfUwYrnF``Jj`@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 34.6674 -4.4294 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4007 -5.9055 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.1537 -4.2269 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7222 -6.6153 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1254 -6.6951 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.8056 -5.5779 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7683 -8.1146 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1714 -8.1944 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4929 -8.9041 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.8960 -8.9839 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.9421 -10.4832 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.6667 -11.2727 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 33.2635 -11.1930 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.7127 -12.7720 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 12 11 1 0 0 0 0\nM CHG 2 1 1 12 -1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H15NO2', + mw: 193.24271923500675, + em: 193.11027872702, + charge: 0, + }, + }, + ], + }, + ], + }, + { + reaction: { + label: 'Ionization', + rxnCode: 'eMHBN`vjMPp_yE{P!eFH`fLGtP#QR QX#!R@BM_HqvJo@ !R_tp]Ngp', + ionization: '[M+H]+', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 1, + molecules: [ + { + idCode: 'dg~DBMB`eJYWugJxZB@jj@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 6.1472 -0.1910 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7350 -1.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.1962 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.1472 -1.8090 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3301 -2.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4641 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5981 -0.0000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8660 -0.0000 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7321 -1.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0000 -0.5000 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 6 3 1 0 0 0 0\nM CHG 1 6 1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H16NO2(+)', + mw: 194.2506599890625, + em: 194.11810375925, + mz: 194.11755517934094, + charge: 1, + }, + }, + ], + children: [ + { + reaction: { + label: 'Ionization', + rxnCode: 'eM`BN`vktQFhXO}h!eF``zLD#Qa Qd#!Ro`BWoQvJ?@ !R_tp]Ngp', + ionization: '[M-H]-', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 2, + molecules: [ + { + idCode: 'dg~DAMB`g^RfU}YrnF``Jj`@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 37.1339 -6.1082 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7222 -6.6153 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 38.0524 -7.2941 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7683 -8.1146 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4007 -5.9055 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 37.2084 -8.5341 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4929 -8.9041 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1254 -6.6951 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1714 -8.1944 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.8960 -8.9839 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.9421 -10.4832 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.6667 -11.2727 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 33.2635 -11.1930 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.7127 -12.7720 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 9 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 12 11 1 0 0 0 0\nM CHG 2 1 1 12 -1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H15NO2', + mw: 193.24271923500675, + em: 193.11027872702, + charge: 0, + }, + }, + ], + }, + ], + }, + { + reaction: { + label: 'Ionization', + rxnCode: 'eM`BN`vktQFhXO}h!eF``zLD#Qa Qd#!Ro`BWoQvJ?@ !R_tp]Ngp', + ionization: '[M-H]-', + reaction: '', + doi: 'https://www.researchgate.net/profile/Bin_Zhou/publication/228114152/figure/tbl1/AS:669624521740299@1536662335423/Common-types-of-adducts-in-LC-MS.png', + section: '', + description: '', + kind: 'ionization', + }, + depth: 1, + molecules: [ + { + idCode: 'dg~DBMBmyJYW]gJxZB@jj@@', + molfile: + '\nActelion Java MolfileCreator 1.0\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 34.6674 -4.4294 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4007 -5.9055 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.1537 -4.2269 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7222 -6.6153 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1254 -6.6951 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 36.8056 -5.5779 -0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 35.7683 -8.1146 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 33.1714 -8.1944 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 34.4929 -8.9041 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.8960 -8.9839 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 31.9421 -10.4832 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.6667 -11.2727 -0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 33.2635 -11.1930 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 30.7127 -12.7720 -0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 1 3 1 0 0 0 0\n 2 4 2 0 0 0 0\n 2 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 4 7 1 0 0 0 0\n 5 8 2 0 0 0 0\n 7 9 2 0 0 0 0\n 8 10 1 0 0 0 0\n 10 11 1 0 0 0 0\n 11 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 4 6 1 0 0 0 0\n 8 9 1 0 0 0 0\n 12 11 1 0 0 0 0\nM CHG 1 12 -1\nM END\n', + asReagent: true, + asProduct: true, + info: { + mf: 'C11H14NO2(-)', + mw: 192.23477848095098, + em: 192.10245369479, + mz: 192.10300227469907, + charge: -1, + }, + }, + ], + }, + ], + }, +]; diff --git a/demo/data/taxonomiesWithUrl.ts b/demo/data/taxonomiesWithUrl.ts new file mode 100644 index 0000000..b6574d7 --- /dev/null +++ b/demo/data/taxonomiesWithUrl.ts @@ -0,0 +1,2098 @@ +const taxonomies = [ + { + name: 'Bacteria', + rank: 'superkingdom', + count: 3, + children: [ + { + name: '', + rank: 'kingdom', + count: 3, + children: [ + { + name: 'Actinomycetota', + rank: 'phylum', + count: 3, + children: [ + { + name: 'Actinomycetes', + rank: 'class', + count: 3, + children: [ + { + name: 'Kitasatosporales', + rank: 'order', + count: 2, + children: [ + { + name: 'Streptomycetaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Streptomyces', + rank: 'genus', + count: 2, + children: [ + { + name: 'Streptomyces melanogenes', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + { + name: 'Streptomyces parvisporogenes', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Micromonosporales', + rank: 'order', + count: 1, + children: [ + { + name: 'Micromonosporaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Micromonospora', + rank: 'genus', + count: 1, + children: [ + { + name: 'Micromonospora echinospora', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 3, + }, + ], + nbTaxonomies: 3, + }, + ], + nbTaxonomies: 3, + }, + ], + nbTaxonomies: 3, + }, + { + name: 'Eukaryota', + rank: 'superkingdom', + count: 80, + children: [ + { + name: '', + rank: 'kingdom', + count: 2, + children: [ + { + name: 'Rhodophyta', + rank: 'phylum', + count: 2, + children: [ + { + name: 'Florideophyceae', + rank: 'class', + count: 2, + children: [ + { + name: 'Bonnemaisoniales', + rank: 'order', + count: 1, + children: [ + { + name: 'Bonnemaisoniaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Delisea', + rank: 'genus', + count: 1, + children: [ + { + name: 'Delisea elegans', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Gigartinales', + rank: 'order', + count: 1, + children: [ + { + name: 'Gigartinaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Mazzaella', + rank: 'genus', + count: 1, + children: [ + { + name: 'Mazzaella laminarioides', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Fungi', + rank: 'kingdom', + count: 6, + children: [ + { + name: 'Ascomycota', + rank: 'phylum', + count: 6, + children: [ + { + name: 'Eurotiomycetes', + rank: 'class', + count: 1, + children: [ + { + name: 'Eurotiales', + rank: 'order', + count: 1, + children: [ + { + name: 'Aspergillaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Aspergillus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Aspergillus microcysticus', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lecanoromycetes', + rank: 'class', + count: 2, + children: [ + { + name: 'Lecanorales', + rank: 'order', + count: 1, + children: [ + { + name: 'Stereocaulaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Stereocaulon', + rank: 'genus', + count: 1, + children: [ + { + name: 'Stereocaulon sterile', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Peltigerales', + rank: 'order', + count: 1, + children: [ + { + name: 'Lobariaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Pseudocyphellaria', + rank: 'genus', + count: 1, + children: [ + { + name: 'Pseudocyphellaria australiensis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Sordariomycetes', + rank: 'class', + count: 3, + children: [ + { + name: 'Hypocreales', + rank: 'order', + count: 1, + children: [ + { + name: '', + rank: 'family', + count: 1, + children: [ + { + name: 'Emericellopsis', + rank: 'genus', + count: 1, + children: [ + { + name: 'Emericellopsis minima', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Xylariales', + rank: 'order', + count: 2, + children: [ + { + name: 'Sporocadaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Pestalotiopsis', + rank: 'genus', + count: 1, + children: [ + { + name: 'Pestalotiopsis oenotherae', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Xylariaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Creosphaeria', + rank: 'genus', + count: 1, + children: [ + { + name: 'Creosphaeria sassafras', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 3, + }, + ], + nbTaxonomies: 6, + }, + ], + nbTaxonomies: 6, + }, + { + name: 'Metazoa', + rank: 'kingdom', + count: 5, + children: [ + { + name: 'Arthropoda', + rank: 'phylum', + count: 2, + children: [ + { + name: 'Insecta', + rank: 'class', + count: 2, + children: [ + { + name: 'Diptera', + rank: 'order', + count: 1, + children: [ + { + name: 'Limoniidae', + rank: 'family', + count: 1, + children: [ + { + name: 'Ormosia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Ormosia dasycarpa', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lepidoptera', + rank: 'order', + count: 1, + children: [ + { + name: 'Tineidae', + rank: 'family', + count: 1, + children: [ + { + name: 'Lindera', + rank: 'genus', + count: 1, + children: [ + { + name: 'Lindera megaphylla', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Cnidaria', + rank: 'phylum', + count: 1, + children: [ + { + name: 'Anthozoa', + rank: 'class', + count: 1, + children: [ + { + name: 'Malacalcyonacea', + rank: 'order', + count: 1, + children: [ + { + name: 'Alcyoniidae', + rank: 'family', + count: 1, + children: [ + { + name: 'Sarcophyton', + rank: 'genus', + count: 1, + children: [ + { + name: 'Sarcophyton flexuosum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Echinodermata', + rank: 'phylum', + count: 1, + children: [ + { + name: 'Ophiuroidea', + rank: 'class', + count: 1, + children: [ + { + name: 'Euryalida', + rank: 'order', + count: 1, + children: [ + { + name: 'Asteronychidae', + rank: 'family', + count: 1, + children: [ + { + name: 'Asteronyx', + rank: 'genus', + count: 1, + children: [ + { + name: 'Asteronyx loveni', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Mollusca', + rank: 'phylum', + count: 1, + children: [ + { + name: 'Gastropoda', + rank: 'class', + count: 1, + children: [ + { + name: '', + rank: 'order', + count: 1, + children: [ + { + name: 'Costasiellidae', + rank: 'family', + count: 1, + children: [ + { + name: 'Costasiella', + rank: 'genus', + count: 1, + children: [ + { + name: 'Costasiella ocellifera', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 5, + }, + { + name: 'Viridiplantae', + rank: 'kingdom', + count: 67, + children: [ + { + name: 'Streptophyta', + rank: 'phylum', + count: 67, + children: [ + { + name: 'Magnoliopsida', + rank: 'class', + count: 65, + children: [ + { + name: 'Apiales', + rank: 'order', + count: 1, + children: [ + { + name: 'Apiaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Selinum', + rank: 'genus', + count: 1, + children: [ + { + name: 'Selinum libanotis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Asparagales', + rank: 'order', + count: 1, + children: [ + { + name: 'Amaryllidaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Zephyranthes', + rank: 'genus', + count: 1, + children: [ + { + name: 'Zephyranthes flava', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Asterales', + rank: 'order', + count: 12, + children: [ + { + name: 'Asteraceae', + rank: 'family', + count: 12, + children: [ + { + name: 'Artemisia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Artemisia pectinata', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Baccharis', + rank: 'genus', + count: 1, + children: [ + { + name: 'Baccharis grandicapitulata', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Gutierrezia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Gutierrezia dracunculoides', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Helenium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Helenium integrifolium', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Helichrysum', + rank: 'genus', + count: 1, + children: [ + { + name: 'Helichrysum fulvum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Hymenothrix', + rank: 'genus', + count: 1, + children: [ + { + name: 'Hymenothrix wislizeni', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lasianthaea', + rank: 'genus', + count: 1, + children: [ + { + name: 'Lasianthaea podocephala', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Melampodium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Melampodium leucanthum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Nassauvia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Nassauvia uniflora', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Pentzia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Pentzia albida', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Senecio', + rank: 'genus', + count: 1, + children: [ + { + name: 'Senecio congestus', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Tephroseris', + rank: 'genus', + count: 1, + children: [ + { + name: 'Tephroseris kirilowii', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 12, + }, + ], + nbTaxonomies: 12, + }, + { + name: 'Boraginales', + rank: 'order', + count: 1, + children: [ + { + name: 'Heliotropiaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Euploca', + rank: 'genus', + count: 1, + children: [ + { + name: 'Euploca racemosa', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Brassicales', + rank: 'order', + count: 1, + children: [ + { + name: 'Brassicaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Cardamine', + rank: 'genus', + count: 1, + children: [ + { + name: 'Cardamine amara', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Caryophyllales', + rank: 'order', + count: 2, + children: [ + { + name: 'Caryophyllaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Silene', + rank: 'genus', + count: 1, + children: [ + { + name: 'Silene viridiflora', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Stellaria', + rank: 'genus', + count: 1, + children: [ + { + name: 'Stellaria media', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Celastrales', + rank: 'order', + count: 1, + children: [ + { + name: 'Celastraceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Euonymus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Euonymus fortunei', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Dipsacales', + rank: 'order', + count: 1, + children: [ + { + name: 'Caprifoliaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Valeriana', + rank: 'genus', + count: 1, + children: [ + { + name: 'Valeriana ficariifolia', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Ericales', + rank: 'order', + count: 1, + children: [ + { + name: 'Ericaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Rhododendron', + rank: 'genus', + count: 1, + children: [ + { + name: 'Rhododendron mucronulatum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Fabales', + rank: 'order', + count: 4, + children: [ + { + name: 'Fabaceae', + rank: 'family', + count: 4, + children: [ + { + name: 'Baptisia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Baptisia australis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Crotalaria', + rank: 'genus', + count: 1, + children: [ + { + name: 'Crotalaria stolzii', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Hedysarum', + rank: 'genus', + count: 1, + children: [ + { + name: 'Hedysarum gmelini', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lupinus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Lupinus cosentinii', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 4, + }, + ], + nbTaxonomies: 4, + }, + { + name: 'Fagales', + rank: 'order', + count: 1, + children: [ + { + name: 'Myricaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Morella', + rank: 'genus', + count: 1, + children: [ + { + name: 'Morella pensylvanica', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Gentianales', + rank: 'order', + count: 2, + children: [ + { + name: 'Apocynaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Alstonia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Alstonia angustiloba', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Rubiaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Coffea', + rank: 'genus', + count: 1, + children: [ + { + name: 'Coffea liberica', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Lamiales', + rank: 'order', + count: 7, + children: [ + { + name: 'Acanthaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Clinacanthus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Clinacanthus nutans', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lamiaceae', + rank: 'family', + count: 3, + children: [ + { + name: 'Clerodendrum', + rank: 'genus', + count: 1, + children: [ + { + name: 'Clerodendrum trichotomum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Phlomis', + rank: 'genus', + count: 1, + children: [ + { + name: 'Phlomis crinita', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Sideritis', + rank: 'genus', + count: 1, + children: [ + { + name: 'Sideritis dasygnaphala', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 3, + }, + { + name: 'Oleaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Phillyrea', + rank: 'genus', + count: 1, + children: [ + { + name: 'Phillyrea latifolia', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Orobanchaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Boschniakia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Boschniakia rossica', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Verbenaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Verbena', + rank: 'genus', + count: 1, + children: [ + { + name: 'Verbena littoralis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 7, + }, + { + name: 'Laurales', + rank: 'order', + count: 4, + children: [ + { + name: 'Hernandiaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Illigera', + rank: 'genus', + count: 1, + children: [ + { + name: 'Illigera luzonensis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Lauraceae', + rank: 'family', + count: 3, + children: [ + { + name: 'Litsea', + rank: 'genus', + count: 1, + children: [ + { + name: 'Litsea sericea', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Ocotea', + rank: 'genus', + count: 2, + children: [ + { + name: 'Ocotea leucoxylon', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + { + name: 'Ocotea macropoda', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 3, + }, + ], + nbTaxonomies: 4, + }, + { + name: 'Magnoliales', + rank: 'order', + count: 6, + children: [ + { + name: 'Annonaceae', + rank: 'family', + count: 5, + children: [ + { + name: 'Annona', + rank: 'genus', + count: 1, + children: [ + { + name: 'Annona cherimola', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Desmos', + rank: 'genus', + count: 1, + children: [ + { + name: 'Desmos dasymachalus', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Duguetia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Duguetia surinamensis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Xylopia', + rank: 'genus', + count: 2, + children: [ + { + name: 'Xylopia championi', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + { + name: 'Xylopia championii', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 5, + }, + { + name: 'Magnoliaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Magnolia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Magnolia coco', + rank: 'species', + count: 1, + url: 'https://lotus.naturalproducts.net/compound/lotus_id/LTS0151114', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 6, + }, + { + name: 'Malpighiales', + rank: 'order', + count: 1, + children: [ + { + name: 'Rhizophoraceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Pellacalyx', + rank: 'genus', + count: 1, + children: [ + { + name: 'Pellacalyx axillaris', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Malvales', + rank: 'order', + count: 1, + children: [ + { + name: 'Thymelaeaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Wikstroemia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Wikstroemia hainanensis', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Myrtales', + rank: 'order', + count: 2, + children: [ + { + name: 'Myrtaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Eucalyptus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Eucalyptus albens', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Psidium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Psidium acutangulum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Piperales', + rank: 'order', + count: 2, + children: [ + { + name: 'Piperaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Piper', + rank: 'genus', + count: 2, + children: [ + { + name: 'Piper brachystachyum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + { + name: 'Piper sylvaticum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + { + name: 'Poales', + rank: 'order', + count: 1, + children: [ + { + name: 'Poaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Avena', + rank: 'genus', + count: 1, + children: [ + { + name: 'Avena fatua', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Ranunculales', + rank: 'order', + count: 10, + children: [ + { + name: 'Menispermaceae', + rank: 'family', + count: 7, + children: [ + { + name: 'Sinomenium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Sinomenium acutum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Stephania', + rank: 'genus', + count: 6, + children: [ + { + name: 'Stephania abyssinica Walp.', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + { + name: 'Stephania dinklagei', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + { + name: 'Stephania mashanica H.S.Lo & B.N.', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + { + name: 'Stephania mashanica H.S.Lo.et.B.N.Chang', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + { + name: 'Stephania tetrandra', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + { + name: 'Stephania zippeliana Miq.', + rank: 'species', + count: 1, + url: 'https://coconut.naturalproducts.net/compound/coconut_id/CNP0233468', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 6, + }, + ], + nbTaxonomies: 7, + }, + { + name: 'Papaveraceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Papaver', + rank: 'genus', + count: 1, + children: [ + { + name: 'Papaver pseudocanescens', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Ranunculaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Beesia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Beesia calthifolia', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Delphinium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Delphinium giraldii', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 10, + }, + { + name: 'Sapindales', + rank: 'order', + count: 1, + children: [ + { + name: 'Burseraceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Bursera', + rank: 'genus', + count: 1, + children: [ + { + name: 'Bursera kerberi', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Zingiberales', + rank: 'order', + count: 2, + children: [ + { + name: 'Zingiberaceae', + rank: 'family', + count: 2, + children: [ + { + name: 'Curcuma', + rank: 'genus', + count: 1, + children: [ + { + name: 'Curcuma aeruginosa', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Renealmia', + rank: 'genus', + count: 1, + children: [ + { + name: 'Renealmia alpinia', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 2, + }, + ], + nbTaxonomies: 65, + }, + { + name: 'Pinopsida', + rank: 'class', + count: 1, + children: [ + { + name: 'Cupressales', + rank: 'order', + count: 1, + children: [ + { + name: 'Cupressaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Juniperus', + rank: 'genus', + count: 1, + children: [ + { + name: 'Juniperus scopulorum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + { + name: 'Polypodiopsida', + rank: 'class', + count: 1, + children: [ + { + name: 'Ophioglossales', + rank: 'order', + count: 1, + children: [ + { + name: 'Ophioglossaceae', + rank: 'family', + count: 1, + children: [ + { + name: 'Botrychium', + rank: 'genus', + count: 1, + children: [ + { + name: 'Botrychium ternatum', + rank: 'species', + count: 1, + url: 'http://bidd.group/NPASS/compound.php?compoundID=NPC189903', + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 1, + }, + ], + nbTaxonomies: 67, + }, + ], + nbTaxonomies: 67, + }, + ], + nbTaxonomies: 80, + }, +]; +export function getDataTaxonomy() { + return taxonomies; +} diff --git a/demo/main.tsx b/demo/main.tsx new file mode 100644 index 0000000..243ee11 --- /dev/null +++ b/demo/main.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; + +import Fragmentation from './Fragmentation'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + +

Fragmentation

+ +
, +); diff --git a/index.html b/index.html new file mode 100644 index 0000000..4d3c062 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + Molecules graph + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..09f4101 --- /dev/null +++ b/package.json @@ -0,0 +1,56 @@ +{ + "name": "react-mass-fragmentation", + "version": "0.0.1", + "description": "React component to display mass fragmentation of peptides and nucleotides", + "main": "lib/index.js", + "module": "lib-esm/index.js", + "types": "lib-esm/index.d.ts", + "files": [ + "lib", + "lib-esm", + "src" + ], + "scripts": { + "check-types": "tsc --noEmit", + "build": "npm run tsc-esm && cheminfo-build --entry lib-esm/index.js --root MassSequenceSVG", + "dev": "vite", + "clean": "rimraf lib lib-esm", + "prettier": "prettier --check src demo", + "prettier-write": "prettier --write src demo", + "preview": "vite preview", + "eslint": "eslint src demo", + "eslint-fix": "npm run eslint -- --fix", + "prepack": "npm run tsc", + "tsc": "npm run clean && npm run tsc-cjs && npm run tsc-esm", + "tsc-cjs": "tsc --project tsconfig.cjs.json", + "tsc-esm": "tsc --project tsconfig.esm.json", + "test": "vitest && npm run eslint && npm run prettier && npm run check-types", + "test-only": "vitest " + }, + "peerDependencies": { + "react": ">=18.2.0", + "react-dom": ">=18.2.0" + }, + "dependencies": { + "chemical-groups": "^2.1.1", + "mf-utilities": "^3.1.1", + "nucleotide": "^3.0.3", + "peptide": "^2.1.2" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.0", + "cheminfo-build": "^1.2.0", + "eslint": "^8.57.0", + "eslint-config-cheminfo-react": "^11.0.1", + "eslint-config-cheminfo-typescript": "^12.4.0", + "jsdom": "^24.1.0", + "prettier": "^3.3.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "typescript": "^5.4.5", + "vite": "^5.2.12", + "vitest": "^1.6.0" + } +} diff --git a/src/.npmignore b/src/.npmignore new file mode 100644 index 0000000..e75adf4 --- /dev/null +++ b/src/.npmignore @@ -0,0 +1,2 @@ +__tests__ +.npmignore \ No newline at end of file diff --git a/src/components/SVGMassFragmentation.tsx b/src/components/SVGMassFragmentation.tsx new file mode 100644 index 0000000..bd32d63 --- /dev/null +++ b/src/components/SVGMassFragmentation.tsx @@ -0,0 +1,21 @@ +export function SVGMassFragmentation(props) { + const { tree, ...options } = props; + + const svgSize = { + width: 500, + height: 500, + }; + + return ( + + + + ); +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..5392708 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1 @@ +export { render } from './render'; diff --git a/src/render.tsx b/src/render.tsx new file mode 100644 index 0000000..feeafc3 --- /dev/null +++ b/src/render.tsx @@ -0,0 +1,14 @@ +import { flushSync } from 'react-dom'; +import { createRoot } from 'react-dom/client'; + +import { SVGMassFragmentation } from './components/SVGMassFragmentation'; + +export function render(tree, options) { + const element = ; + const div = document.createElement('div'); + const root = createRoot(div); + flushSync(() => { + root.render(element); + }); + return div.innerHTML; +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..20c26ce --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "allowJs": true, + "declaration": true, + "esModuleInterop": true, + "moduleResolution": "node", + "noImplicitAny": false, + "sourceMap": true, + "strict": true, + "target": "es2020", + "skipLibCheck": true, + "module": "commonjs", + "declarationMap": true, + "outDir": "lib", + "jsx": "react-jsx" + }, + "include": ["src"], + "exclude": ["./src/**/__tests__"] +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..050b45d --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "module": "es2020", + "outDir": "lib-esm" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..4d2a05d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noImplicitAny": false, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["demo", "src", "vite.config.mts"] +} diff --git a/vite.config.mts b/vite.config.mts new file mode 100644 index 0000000..70abec4 --- /dev/null +++ b/vite.config.mts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + test: { + environment: 'jsdom' + } +});