# `Kreuzberg.ElementMetadata`
[🔗](https://github.com/kreuzberg-dev/kreuzberg/blob/main/lib/kreuzberg/element.ex#L150)

Metadata for a semantic element extracted from a document.

Contains information about where and how an element appears in the source
document, including position, page number, and custom metadata fields.

## Fields

  * `:page_number` - Page number where element appears (1-indexed), or nil
  * `:filename` - Source filename or document name, or nil
  * `:coordinates` - Bounding box coordinates if available, or nil
  * `:element_index` - Position index in the element sequence, or nil
  * `:additional` - Map of custom metadata fields (defaults to empty map)

## Examples

    iex> metadata = %Kreuzberg.ElementMetadata{
    ...>   page_number: 1,
    ...>   filename: "document.pdf",
    ...>   coordinates: %Kreuzberg.BoundingBox{x0: 10.0, y0: 20.0, x1: 100.0, y1: 50.0},
    ...>   element_index: 0,
    ...>   additional: %{"section" => "Introduction"}
    ...> }
    iex> metadata.page_number
    1

# `t`

```elixir
@type t() :: %Kreuzberg.ElementMetadata{
  additional: map(),
  coordinates: Kreuzberg.BoundingBox.t() | nil,
  element_index: integer() | nil,
  filename: String.t() | nil,
  page_number: integer() | nil
}
```

# `from_map`

```elixir
@spec from_map(map()) :: t()
```

Creates an ElementMetadata struct from a map.

Converts a plain map (typically from NIF/Rust) into a proper struct,
handling nested bounding box data.

## Parameters

  * `data` - A map containing metadata fields

## Returns

An `ElementMetadata` struct with properly typed fields.

## Examples

    iex> metadata_map = %{
    ...>   "page_number" => 1,
    ...>   "filename" => "document.pdf",
    ...>   "coordinates" => %{"x0" => 10.0, "y0" => 20.0, "x1" => 100.0, "y1" => 50.0},
    ...>   "element_index" => 0,
    ...>   "additional" => %{"section" => "Introduction"}
    ...> }
    iex> metadata = Kreuzberg.ElementMetadata.from_map(metadata_map)
    iex> metadata.page_number
    1

# `to_map`

```elixir
@spec to_map(t()) :: map()
```

Converts an ElementMetadata struct to a map.

Useful for serialization and passing to external systems.

## Parameters

  * `metadata` - An `ElementMetadata` struct

## Returns

A map with string keys representing all fields.

## Examples

    iex> metadata = %Kreuzberg.ElementMetadata{
    ...>   page_number: 1,
    ...>   filename: "doc.pdf",
    ...>   additional: %{"section" => "intro"}
    ...> }
    iex> Kreuzberg.ElementMetadata.to_map(metadata)
    %{
      "page_number" => 1,
      "filename" => "doc.pdf",
      "coordinates" => nil,
      ...
    }

---

*Consult [api-reference.md](api-reference.md) for complete listing*
