# RenderableWell

> A Well profile where every feature array element may carry an optional key.

> **RenderableWell** = `Omit`\<`Well`, `"lithology"` \| `"fractures"` \| `"caves"` \| `"bore_hole"` \| `"well_case"` \| `"well_screen"` \| `"hole_fill"` \| `"surface_case"` \| `"reduction"`\> & `object`

A `Well` profile where every feature array element may carry an optional `key`.

When `key` is present the renderer uses it as the D3 data-join key,
giving fully stable DOM identity regardless of depth edits or array reordering.
When absent the renderer falls back to coordinate-based keys (`from:to` or
`depth:index`).

**`key` is runtime-only** — generate it once per feature (e.g.
`crypto.randomUUID()`) and keep it in memory across edits, but always strip
it before serializing to a `.well` file.

## Type Declaration

### bore\_hole

> **bore\_hole**: [`WithKey`](/render/api/type-aliases/WithKey)\<`BoreHole`\>[]

### caves

> **caves**: [`WithKey`](/render/api/type-aliases/WithKey)\<`Cave`\>[]

### fractures

> **fractures**: [`WithKey`](/render/api/type-aliases/WithKey)\<`Fracture`\>[]

### hole\_fill

> **hole\_fill**: [`WithKey`](/render/api/type-aliases/WithKey)\<`HoleFill`\>[]

### lithology

> **lithology**: [`WithKey`](/render/api/type-aliases/WithKey)\<`Lithology`\>[]

### reduction

> **reduction**: [`WithKey`](/render/api/type-aliases/WithKey)\<`Reduction`\>[]

### surface\_case

> **surface\_case**: [`WithKey`](/render/api/type-aliases/WithKey)\<`SurfaceCase`\>[]

### well\_case

> **well\_case**: [`WithKey`](/render/api/type-aliases/WithKey)\<`WellCase`\>[]

### well\_screen

> **well\_screen**: [`WithKey`](/render/api/type-aliases/WithKey)\<`WellScreen`\>[]
