# NamedMolecule

> NamedMolecule { name: "caffeine".into(), .. } draws a molecule by its common name, like Molecule draws a SMILES string.

Page: https://fframes-kit.pages.dev/docs/chemistry/named-molecule/
Cargo feature: `chemistry` (`fframes-kit = { version = "..", features = ["chemistry"] }`)

`NamedMolecule { name: "caffeine".into(), .. }` draws a molecule by its common name, like
`Molecule` draws a SMILES string. The name is looked up in a table of about a hundred
common molecules written for the kit. It covers small inorganic molecules, hydrocarbons,
aromatics and heterocycles, alcohols, acids, sugars, amino acids, nucleobases, and drugs
and hormones (caffeine, aspirin, glucose, cholesterol, morphine). Nothing is looked up over
the network.

Case, hyphens and underscores do not matter (`"Vitamin-C"` finds `"vitamin c"`). A name
that is not in the table draws nothing, and `inspect` warns about it. `named_smiles(name)`
gives the SMILES, and `named_molecules()` lists the table. Gallery scenes: `MoleculeParade`
(five named molecules drawn in turn into a lineup) and `NamedMolecule`
(caffeine, vanillin and dopamine).

Gallery clip of `MoleculeParade`: https://fframes-kit.pages.dev/media/scenes/MoleculeParade-fe3615a1.mp4

Gallery clip of `NamedMolecule`: https://fframes-kit.pages.dev/media/scenes/NamedMolecule-3749f452.mp4

```rust
use fframes_kit::prelude::*;

fn figure<'a>(ui: &mut Ui<'a, '_, '_>) -> Svgr<'a> {
    ui.show(NamedMolecule {
        name: "glucose".into(),
        center: (0.0, 0.0),
        enter: Some(Create::default().into()),
        ..ui.defaults()
    })
}
```

## API

Components are plain structs. Set the fields you need and fill the rest with `..ui.defaults()`: the defaults below come from the current theme (`theme.` values are fields of `Theme`).

### NamedMolecule

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `name` | `Cow<str>` | `Cow::Borrowed("caffeine")` | Common name of the molecule (`"caffeine"`, `"glucose"`); case, hyphens and underscores do not matter. A name not in the table draws nothing. |
| `center` | `(f64, f64)` | `m.center` | The middle of the molecule's coordinates, in units of `ui.space`. |
| `bond_length` | `f32` | `m.bond_length` | Pixels per bond length of the laid-out structure. |
| `show_hydrogens` | `bool` | `m.show_hydrogens` | Writes the hydrogens and charge after a heteroatom's symbol (`OH`, `NH2`); `false` writes the symbol alone. |
| `color_atoms` | `bool` | `m.color_atoms` | Colours the labels of oxygen, nitrogen, sulfur, phosphorus and the halogens; `false` uses `bond_color` for all. |
| `bond_color` | `Color` | `m.bond_color` | Colour of the bonds, and of the labels of carbon and of every atom when `color_atoms` is `false`. |
| `stroke_width` | `f32` | `m.stroke_width` | Width in pixels of the bond lines. |
| `enter` | `Option<EnterAnim>` | `None` | How the bonds draw on; `None` shows them from the start. |
| `exit` | `Option<ExitAnim>` | `None` | How the bonds leave at the end of the container; `None` stays. |
| `parts_enter` | `Option<FadeIn>` | `None` | Fade in of the atom labels; `None` for none. |
| `parts_exit` | `Option<FadeOut>` | `None` | Fade out of the atom labels before the end; `None` for none. |

Feature `chemistry` · [Source](https://github.com/khanhthanhdev/fframes-kit/blob/main/fframes-kit/src/kits/chemistry/named.rs#L209)
