# This file is auto-generated by alef — DO NOT EDIT.
# alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
# To regenerate: alef generate
# To verify freshness: alef verify --exit-code
# Issues & docs: https://github.com/kreuzberg-dev/alef
defmodule Kreuzberg.NodeContent do
  @moduledoc """
  Tagged enum for node content. Each variant carries only type-specific data.

  Uses `#[serde(tag = "node_type")]` to avoid "type" keyword collision in
  Go/Java/TypeScript bindings.
  """

  @typedoc "Tagged enum for node content. Each variant carries only type-specific data."
  @type t :: term()

  @typedoc "Document title."
  @type title :: %{type: :title, text: String.t()}
  @typedoc "Section heading with level (1-6)."
  @type heading :: %{type: :heading, level: non_neg_integer(), text: String.t()}
  @typedoc "Body text paragraph."
  @type paragraph :: %{type: :paragraph, text: String.t()}
  @typedoc "List container — children are `ListItem` nodes."
  @type list_variant :: %{type: :list, ordered: boolean()}
  @typedoc "Individual list item."
  @type list_item :: %{type: :list_item, text: String.t()}
  @typedoc "Table with structured cell grid."
  @type table :: %{type: :table, grid: Kreuzberg.TableGrid.t()}
  @typedoc "Image reference."
  @type image :: %{type: :image, description: String.t(), image_index: non_neg_integer(), src: String.t()}
  @typedoc "Code block."
  @type code :: %{type: :code, text: String.t(), language: String.t()}
  @typedoc "Block quote — container, children carry the quoted content."
  @type quote :: :quote
  @typedoc "Mathematical formula / equation."
  @type formula :: %{type: :formula, text: String.t()}
  @typedoc "Footnote reference content."
  @type footnote :: %{type: :footnote, text: String.t()}
  @typedoc "Logical grouping container (section, key-value area)."
  @type group :: %{type: :group, label: String.t(), heading_level: non_neg_integer(), heading_text: String.t()}
  @typedoc "Page break marker."
  @type page_break :: :page_break
  @typedoc "Presentation slide container — children are the slide's content nodes."
  @type slide :: %{type: :slide, number: non_neg_integer(), title: String.t()}
  @typedoc "Definition list container — children are `DefinitionItem` nodes."
  @type definition_list :: :definition_list
  @typedoc "Individual definition list entry with term and definition."
  @type definition_item :: %{type: :definition_item, term: String.t(), definition: String.t()}
  @typedoc "Citation or bibliographic reference."
  @type citation :: %{type: :citation, key: String.t(), text: String.t()}
  @typedoc "Admonition / callout container (note, warning, tip, etc.)."
  @type admonition :: %{type: :admonition, kind: String.t(), title: String.t()}
  @typedoc "Raw block preserved verbatim from the source format."
  @type raw_block :: %{type: :raw_block, format: String.t(), content: String.t()}
  @typedoc "Structured metadata block (email headers, YAML frontmatter, etc.)."
  @type metadata_block :: %{type: :metadata_block, entries: [[String.t()]]}
end
