# `Expresso.Builder`
[🔗](https://github.com/rellen/expresso/blob/main/lib/expresso/builder.ex#L1)

Makes a deck with functions, in place of the DSL

Each entity of the DSL has a function with the same name, such as `slide`,
`text_box` and `list`. `Expresso.Builder.Generator` makes the functions from
`Expresso.Extension`, so they take the same options as the DSL and they give
the same errors. A function takes the arguments of the entity, then a keyword
list with the options and the children:

```elixir
import Expresso.Builder

deck(
  [
    slide("first",
      heading: "Hello",
      elements: [
        text_box(elements: [text_area(text: "A text area in a text box")]),
        list(reveal: true, elements: [item("One"), item("Two")])
      ]
    )
  ],
  name: "my deck"
)
```

`deck/2` runs the transformers and the verifiers of the DSL. Therefore an
overlay, a `pause` and an `on` entity give the same steps as in the DSL. A
script can return the deck, and `mix expresso` renders it.

The functions are for a deck that a program makes at runtime. A deck of many
slides is one example: the DSL compiles a module of 2000 slides in
approximately 30 seconds, and these functions make the same deck in
approximately 0.1 seconds. `docs/overlays.md` gives the reasons for this
design.

# `audio`

```elixir
@spec audio(term(), term()) :: struct()
```

Make the `audio` entity of the DSL

The function takes `src`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:src` - Required. The path of a .mp3, .m4a, .ogg, .oga or .wav file. The document holds the sound one time. See docs/reference/audio-element.md.

* `:title` (`t:String.t/0`) - Required. The name of the sound for a screen reader. The handout view and paper show it.

* `:loop` (`t:boolean/0`) - Play the sound again from the start at its end. The default value is `false`.

* `:controls` (`t:boolean/0`) - Show the controls of the browser on the slide. The default is false, so the present view shows nothing in the place of the element. The default value is `false`.

# `callout`

```elixir
@spec callout(term(), term()) :: struct()
```

Make the `callout` entity of the DSL

The function takes `kind`, then a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:kind` - Required. The kind of the callout: :note, :tip, :important, :warning, :caution, :definition or :example. See docs/reference/callout-element.md. Valid values are :note, :tip, :important, :warning, :caution, :definition, :example

* `:title` - The text of the header in place of the name of the kind, such as "Before you start". The value false removes the header.

# `chart`

```elixir
@spec chart(term(), term()) :: struct()
```

Make the `chart` entity of the DSL

The function takes `kind`, then a keyword list. The keys `elements` and `timeline` and `flows` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:kind` - Required. The kind of the chart: :bar, :line, :pie, :treemap, :sunburst, :voronoi, :sankey, :alluvial, :parallel_sets, :chord, :scatter, :bubble, :waterfall. See docs/reference/chart-element.md. Valid values are :bar, :line, :pie, :treemap, :sunburst, :voronoi, :sankey, :alluvial, :parallel_sets, :chord, :scatter, :bubble, :waterfall

* `:title` (`t:String.t/0`) - Required. The name of the chart for a screen reader, and the caption of its table.

* `:category_label` (`t:String.t/0`) - The name of the categories, such as "Year". It goes under the axis of the categories and into the corner of the table. A chart with src takes the first heading of its file by default.

* `:value_label` (`t:String.t/0`) - The name of the values, such as "Widgets an hour". It goes beside the axis of the values and into the caption of the table.

* `:categories` - The name of each category, such as ["2023", "2024"]. A category of a treemap or a sunburst can be a list of its levels, such as ["Production", "Press"]. A category of a sankey is a path of nodes, such as ["Coal", "Electricity"].

* `:src` (`t:String.t/0`) - The path of a CSV file with the categories and the series, from the root option of the deck or from the working directory of the command. A file that ends in .tsv has a tab between two cells.

* `:delimiter` (`t:String.t/0`) - The character between two cells of the src file, such as ";" or "|". The default is a comma, or a tab for a file that ends in .tsv. Requires the src option.

* `:width` (`t:String.t/0`) - The width of the chart, such as 900px or 70%. The default is 80%.

* `:values` (`t:boolean/0`) - Show the value of each bar. The default is true. The default value is `true`.

* `:reveal` (`t:boolean/0`) - Show the series one after the other. A sankey and an alluvial chart show their links one column at a time. A parallel sets chart shows its nodes first, then the ribbons of one first node at a time. A chord chart shows its ring first, then the chords of one source at a time. A pie takes no reveal option. The default value is `false`.

* `:dim` (`t:boolean/0`) - Dim each series when a later series shows. The default value is `false`.

* `:highlight` - Groups of series or of categories, one group in focus at each step, such as ["Returns", ["Orders", "Returns"], "2024"]. Each item is the name of a series or of a category, or a list of names. Each series shows at each step, and the rest of the chart dims. A category of a treemap or a sunburst is a part or a group, such as "Production/Press" or "Production". A chart of flows takes the names of nodes in place of categories. See docs/reference/chart-element.md.

* `:whole_first` (`t:boolean/0`) - With highlight, show the whole chart in full color for one step before the first group comes into focus. The default is false. The default value is `false`.

* `:separator` (`t:String.t/0`) - The text between two levels of a category of a treemap or a sunburst, such as "Production/Press". The default is a slash. The default value is `"/"`.

* `:shape` - The container of a voronoi chart: :rectangle, :circle, :hexagon, or a list of points in a unit box, such as [{0, 0}, {1, 0}, {0.5, 1}]. The y axis goes down, so {0.5, 1} is at the bottom. The polygon must be convex. The default is :rectangle.

* `:levels` (list of `t:String.t/0`) - For a treemap or a sunburst, the headings of the CSV columns that hold the levels, from the top level down. For a chart of flows, the headings of the CSV columns that hold the nodes of each path. Requires the src option, but an alluvial chart or a parallel sets chart can take levels without src to give the title of each column.

* `:frames` (`t:String.t/0`) - The heading of the column of a CSV file that names the frame of each row. Requires the src option.

* `:frame_label` - The place of the label of the frame in a chart with frames. Valid values are :top_right, :top_left, :none The default value is `:top_right`.

* `:sort` (`t:boolean/0`) - Put the categories of a bar chart in order of their totals, from the largest, in each frame. The default value is `false`.

* `:count` (`t:boolean/0`) - Count each value from the value of one frame to the value of the next. The default is a fade. The default value is `false`.

* `:thumbnail` - The frame that the overview and the menu of the slides show: :first, :last or the number of a frame. The default value is `:first`.

* `:x_label` (`t:String.t/0`) - The name of the x axis of a scatter plot, such as "Cost per month". It goes under the axis and into the header of the table.

* `:y_label` (`t:String.t/0`) - The name of the y axis of a scatter plot, such as "Requests per second". It goes beside the axis and into the header of the table.

* `:x_range` (tuple of ,  values) - The low end and the high end of the x axis of a scatter plot, such as {0, 100}. The default comes from the points.

* `:y_range` (tuple of ,  values) - The low end and the high end of the y axis of a scatter plot, such as {0, 100}. The default comes from the points.

* `:direction` - The direction of the columns of a waterfall chart: :vertical, columns from the bottom up, or :horizontal, bars from left to right with the categories down the left side, for long names. The default is :vertical. Valid values are :vertical, :horizontal The default value is `:vertical`.

* `:spans` (`t:boolean/0`) - Draw an arrow over the columns of a waterfall chart from each total to the next total, with the sum of the changes between them. The default is false. The default value is `false`.

* `:totals` - The story of a total of a waterfall chart with reveal: :grow, the total shows from the first step and grows or shrinks with each change that shows; or :complete, the total shows at the step of the change before it, with its final value. The default is :grow. Valid values are :grow, :complete The default value is `:grow`.

* `:value_range` (tuple of ,  values) - The low end and the high end of the value axis of a waterfall chart, such as {900, 1050}. An axis that does not hold zero gets a break mark at its base. The default holds zero and each column.

* `:label` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot that names each point. The default is the first column. Requires the src option.

* `:x` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot with the x values. The default is "x". Requires the src option.

* `:y` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot with the y values. The default is "y". Requires the src option.

* `:symbol` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot with the category of the symbol. Requires the src option.

* `:color` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot with the category of the color. Requires the src option.

* `:size` (`t:String.t/0`) - The heading of the column of the CSV file of a scatter plot with the size of each point. Requires the src option.

* `:labels` - The points of a scatter plot with a label: :all, :none, or a list of the names of points, such as ["api", "web"]. A label goes next to its mark and does not cover another label. The default is :none. The default value is `:none`.

* `:symbol_label` (`t:String.t/0`) - The title of the legend of the symbols of a scatter plot, such as "Region", and the header of its column in the table.

* `:color_label` (`t:String.t/0`) - The title of the legend of the colors of a scatter plot, and the header of its column in the table.

* `:size_label` (`t:String.t/0`) - The title of the legend of the sizes of a scatter plot, such as "Users", and the header of its column in the table.

* `:trend` - Draw the least-squares line of each group of a scatter plot: :linear. A series and a category of the color are groups. A line shows at the step of the last point of its group. Valid values are :linear

* `:jitter` - Move each mark of a scatter plot by at most this part of the range of each axis, such as 0.02, so marks with the same values do not hide each other. The move comes from the name of the point, so each render gives the same chart.

* `:color_scale` - The scale of a color from a number in a scatter plot: :sequential, from a light mix of --accent to --accent; :diverging, from --danger through a neutral middle to --success; or two roles of the theme, such as {:chart_1, :chart_4}. The default is :sequential.

* `:color_mid` - The value at the neutral middle of color_scale :diverging. The default is 0.

* `:opacity` - The opacity of each mark of a scatter plot, from 0 to 1, such as 0.6. An area with many marks then looks darker.

* `:x_scale` - The scale of the x axis of a scatter plot: :linear or :log. Valid values are :linear, :log The default value is `:linear`.

* `:y_scale` - The scale of the y axis of a scatter plot: :linear or :log. Valid values are :linear, :log The default value is `:linear`.

# `code`

```elixir
@spec code(term(), term()) :: struct()
```

Make the `code` entity of the DSL

The function takes `lang`, then a keyword list. The key `on` takes the children. You can leave out the optional arguments and the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:window` - A frame that looks like a window of an operating system: :macos, :terminal, :plain or :none. The default is the window option of the deck. See docs/reference/window-option.md. Valid values are :macos, :terminal, :plain, :none

* `:window_title` (`t:String.t/0`) - The text of the bar of the window. A code element with src shows the name of its file without this option.

* `:lang` (`t:String.t/0`) - The name of the language, such as elixir. See Expresso.Highlight.

* `:text` (`t:String.t/0`) - The source code. Give this option or the src option, and not both.

* `:src` (`t:String.t/0`) - The path of a file that holds the source code, from the root option of the deck or from the working directory of the command. See docs/reference/code-element.md.

* `:lines` - The lines of the src file that the element shows: a range, such as 10..24, or a start text and an end text, such as [from: "def start(", to: "end"]. to: :block ends the lines at the end of the block of the start line. The default is each line of the file. See docs/reference/code-element.md.

* `:line_numbers` (`t:boolean/0`) - Show the number of each line. With src, the number of a line is its number in the file. The default value is `false`.

* `:reveal` - Groups of lines, one group at each step: line numbers, ranges, and texts such as [from: "def start(", to: "end"] or [from: "def start(", to: :block]. With src, a number is the number of the line in the file, unless relative is true. See docs/reference/code-element.md.

* `:dim` (`t:boolean/0`) - Dim each group of lines when a later group shows. See docs/overlays.md. The default value is `false`.

* `:highlight` - Groups of lines in the form of reveal, one group in focus at each step. Each line shows at each step, and the lines that are not in focus dim. A group can also be [each: "count"], each token with the text count. See docs/reference/code-element.md.

* `:trailing_comments` (`t:boolean/0`) - false removes a comment at the end of a line that has code before it. A line that is only a comment stays. The default is true. See docs/reference/code-element.md. The default value is `true`.

* `:wrap` (`t:boolean/0`) - Break a line that is too long for the slide, with its next parts indented under its start. The layout check then does not report the line. The default is false. The default value is `false`.

* `:relative` (`t:boolean/0`) - Count the numbers of reveal and highlight from the first line that the element shows, so 1 is the first line of the excerpt. The default is false: a number is the number of the line in the file. The default value is `false`.

* `:whole_first` (`t:boolean/0`) - With highlight, show the whole code in full color for one step before the first group comes into focus. The default is false. The default value is `false`.

# `column`

```elixir
@spec column(term()) :: struct()
```

Make the `column` entity of the DSL

The function takes a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:width` (`t:String.t/0`) - The width of the column, such as 30%. The default is an equal part.

# `columns`

```elixir
@spec columns(term()) :: struct()
```

Make the `columns` entity of the DSL

The function takes a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

# `copy`

```elixir
@spec copy(term(), term()) :: struct()
```

Make the `copy` entity of the DSL

The function takes `target`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:target` (`t:String.t/0`) - Required. The id of the element of the SVG file where the copy goes. See docs/reference/overlay-options.md.

* `:as` (`t:String.t/0`) - The name of the copy. The default is the part, @ and the target, such as "arg@hole1".

* `:at` - Required. The steps that show the copy. At its first step, the copy fades in at its part and then moves to its target.

* `:effect` (`t:atom/0`) - How the copy shows and hides. The default is the effect of the part.

# `deck`

```elixir
@spec deck([Expresso.Slide.t()], keyword()) :: Expresso.Deck.t()
```

Make a deck from slides and the options of the deck

The options are the options of the DSL, such as `name`, `duration` and
`transition`. The function runs the transformers and the verifiers of the
DSL. It writes each warning of a verifier to the standard error, and it
raises an exception for an error.

# `diagram`

```elixir
@spec diagram(term(), term()) :: struct()
```

Make the `diagram` entity of the DSL

The function takes `src`, then a keyword list. The keys `elements` and `on` take the children. You can leave out the optional arguments and the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:src` (`t:String.t/0`) - The path of the SVG file, or of the source of a graph such as a .dot, a .d2 or a .mmd file, from the root option of the deck or from the working directory of the command. Give this argument or the source option.

* `:source` (`t:String.t/0`) - The text of a graph in the deck, in place of a file, such as "flowchart LR\n  a --> b". It needs the lang option. See docs/reference/diagram-element.md.

* `:lang` - The language of the source option: :mermaid. A file gives its language with its extension. Valid values are :mermaid

* `:width` (`t:String.t/0`) - The width of the diagram, such as 900px or 60%. See docs/architecture.md.

* `:layout` - The layout engine of the tool that draws a graph, such as :neato for Graphviz or :dagre for D2. See docs/reference/diagram-element.md. Valid values are :dot, :neato, :fdp, :sfdp, :circo, :twopi, :elk, :dagre

* `:edges` - When an edge of a graph without its own part shows. :follow, the default, shows it from the step where both of its ends show. :own shows it at each step. See docs/reference/diagram-element.md. Valid values are :follow, :own

* `:colors` - The colors of a graph. :theme, the default, gives the graph the colors of the theme. :tool keeps the colors of the tool. See docs/reference/diagram-element.md. Valid values are :theme, :tool

* `:font` (`t:String.t/0`) - A directory with the TTF files of the font of a graph, from the root option of the deck. The default is the font of the built-in theme. See docs/reference/diagram-element.md.

* `:alt` (`t:String.t/0`) - The text of the diagram for a screen reader. The diagram then has the role img, and a screen reader reads this text in the place of the text of the SVG. See docs/reference/diagram-element.md.

# `dsl_state`

```elixir
@spec dsl_state([struct()], keyword()) :: {map(), [String.t()]}
```

Make the state of a DSL module from the entities and the options of the section

The function validates the options, then it runs the transformers and the
verifiers of the extension. It returns the state and the warnings of the
verifiers. It raises an exception for an error.

# `embed`

```elixir
@spec embed(term(), term()) :: struct()
```

Make the `embed` entity of the DSL

The function takes `src`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:window` - A frame that looks like a window of an operating system: :macos, :terminal, :plain or :none. The default is the window option of the deck. See docs/reference/window-option.md. Valid values are :macos, :terminal, :plain, :none

* `:window_title` (`t:String.t/0`) - The text of the bar of the window. A code element with src shows the name of its file without this option.

* `:src` - Required. The page: an address that starts with https:// or http://, or the path of a local .html file. See docs/reference/embed-element.md.

* `:title` (`t:String.t/0`) - Required. The name of the page for a screen reader.

* `:fallback` (`t:String.t/0`) - The path of an image that shows on paper, in the handout view and while the page loads.

* `:width` (`t:String.t/0`) - The width of the page, such as 900px or 80%. The default is 80%.

* `:aspect` - The ratio of the width to the height, such as "16/9". The default is "16/9".

* `:interactive` (`t:boolean/0`) - Let the page take clicks and keys. The default is false, so the keys and the clicks of the presenter work on the slide. The default value is `false`.

# `flow`

```elixir
@spec flow(term(), term(), term(), term()) :: struct()
```

Make the `flow` entity of the DSL

The function takes `from`, `to`, `value`, then a keyword list. You can leave out the keyword list. These are the options:

* `:from` (`t:String.t/0`) - Required. The node where the flow starts.

* `:to` (`t:String.t/0`) - Required. The node where the flow ends.

* `:value` - Required. The value of the flow, zero or more.

# `footnote`

```elixir
@spec footnote(term(), term()) :: struct()
```

Make the `footnote` entity of the DSL

The function takes `text`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:text` (`t:String.t/0`) - Required. The text of the footnote, such as a source. It can contain HTML. The renderer puts it at the bottom of the slide, with a number. See docs/reference/footnote-element.md.

# `frame`

```elixir
@spec frame(term(), term()) :: struct()
```

Make the `frame` entity of the DSL

The function takes `label`, then a keyword list. The keys `elements` and `flows` take the children. You can leave out the keyword list. These are the options:

* `:label` (`t:String.t/0`) - Required. The name of the point in time, such as "2024".

# `icon`

```elixir
@spec icon(term(), term()) :: struct()
```

Make the `icon` entity of the DSL

The function takes `name`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:name` (`t:String.t/0`) - Required. The name of a Lucide icon, such as "rocket", or a name of the icons option of the deck. See docs/reference/icon-element.md.

* `:label` (`t:String.t/0`) - The text under the icon. A screen reader reads it.

* `:size` (`t:String.t/0`) - The width and the height of the icon, as a CSS length. The default is 3em. The default value is `"3em"`.

* `:color` - The role of the theme that gives the color: :text, :muted, :accent, :success, :emphasis, :warning or :danger. The default is :text. Valid values are :text, :muted, :accent, :success, :emphasis, :warning, :danger The default value is `:text`.

# `image`

```elixir
@spec image(term(), term()) :: struct()
```

Make the `image` entity of the DSL

The function takes `src`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:goto` - Make the element a link to a slide and a step, such as [slide: 5], [slide: 5, step: 2] or [slide: "summary"]. The slide is a number or the name of a slide. See Expresso.Goto.

* `:window` - A frame that looks like a window of an operating system: :macos, :terminal, :plain or :none. The default is the window option of the deck. See docs/reference/window-option.md. Valid values are :macos, :terminal, :plain, :none

* `:window_title` (`t:String.t/0`) - The text of the bar of the window. A code element with src shows the name of its file without this option.

* `:src` (`t:String.t/0`) - Required. The path of the image file, from the root option of the deck or from the working directory of the command.

* `:alt` (`t:String.t/0`) - The text of the image for a screen reader.

* `:width` (`t:String.t/0`) - The width of the image, such as 900px or 60%. See docs/architecture.md.

# `item`

```elixir
@spec item(term(), term()) :: struct()
```

Make the `item` entity of the DSL

The function takes `text`, then a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:goto` - Make the element a link to a slide and a step, such as [slide: 5], [slide: 5, step: 2] or [slide: "summary"]. The slide is a number or the name of a slide. See Expresso.Goto.

* `:text` (`t:String.t/0`) - Required. The text of the item.

# `line`

```elixir
@spec line(term(), term()) :: struct()
```

Make the `line` entity of the DSL

The function takes `relation`, then a keyword list. You can leave out the optional arguments and the keyword list. These are the options:

* `:relation` (`t:String.t/0`) - The relation of the line in LaTeX, such as "=" or ~S"\to_\beta". The first line usually has none.

* `:tex` (`t:String.t/0`) - Required. The term of the line in LaTeX.

* `:why` (`t:String.t/0`) - The reason of the line, as plain text, in a column at the right.

* `:name` (`t:String.t/0`) - The name of the part of the line. The default is line1, line2 and so on.

* `:steps` - With 2, the \from links of the line move at its first step, and the other symbols show at the next step. It needs reveal true. Valid values are 1, 2 The default value is `1`.

# `list`

```elixir
@spec list(term()) :: struct()
```

Make the `list` entity of the DSL

The function takes a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:ordered` (`t:boolean/0`) - Number the items. The default is a bullet for each item. The default value is `false`.

* `:reveal` (`t:boolean/0`) - Show the items one after the other. See docs/overlays.md. The default value is `false`.

* `:dim` (`t:boolean/0`) - Dim each child when a later child shows. See docs/overlays.md. The default value is `false`.

# `math`

```elixir
@spec math(term(), term()) :: struct()
```

Make the `math` entity of the DSL

The function takes `text`, then a keyword list. The keys `elements` and `lines` and `on` take the children. You can leave out the optional arguments and the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:text` (`t:String.t/0`) - The MathML, from <math> to </math>. Give this argument or the tex option.

* `:tex` (`t:String.t/0`) - The formula in LaTeX, such as ~S"x^2 + 1". Temml makes its MathML in Node at render time. See docs/reference/math-element.md.

* `:reveal` (`t:boolean/0`) - With line entities, show each line at its own step. The first line shows at the first step of the element. The default value is `false`.

# `node`

```elixir
@spec node(term(), term()) :: struct()
```

Make the `node` entity of the DSL

The function takes `name`, then a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:name` (`t:String.t/0`) - Required. The name of the node in the flows of a chart, or the identity of the node in a tree.

* `:label` (`t:String.t/0`) - The text of the label of the node. The default is the name.

* `:detail` (`t:String.t/0`) - The second line of the box of a node in a tree, such as a role. Only a tree takes this option.

* `:image` (`t:String.t/0`) - The path of an image that the box of a node in a tree shows in a circle, such as "ana.jpg". Only a tree takes this option.

* `:icon` (`t:String.t/0`) - The name of an icon that the box of a node in a tree shows, in place of an image. See the icon element. Only a tree takes this option.

* `:fields` - Short facts under the detail of the box of a node in a tree, one line each, such as [team: "42 people"]. Only a tree takes this option.

* `:parent` (`t:String.t/0`) - The name of the node above a node in a tree, in place of nesting, such as "Ana". Only a node at the top of the tree takes this option. Only a tree takes this option.

* `:layout` - How the nodes under a node in a tree go, and the nodes under them: :top_down, :left_right or :stacked. The default is the layout of the tree. Only a tree takes this option. Valid values are :top_down, :left_right, :stacked

* `:value` - A number of a node in a tree that is not negative, such as a size or a count. Only a tree takes this option.

* `:color` - The role of the theme that gives the color of the box of a node in a tree, and of the boxes under it: :text, :muted, :accent, :success, :emphasis, :warning or :danger. Only a tree takes this option. Valid values are :text, :muted, :accent, :success, :emphasis, :warning, :danger

* `:column` (`t:pos_integer/0`) - The column of the node, from 1 at the left. The default is one column after its last source. Only a sankey takes this option.

* `:order` (`t:integer/0`) - The place of the node in its column, from the top. The default is its place in the data.

# `on`

```elixir
@spec on(term(), term()) :: struct()
```

Make the `on` entity of the DSL

The function takes `at`, then a keyword list. You can leave out the keyword list. These are the options:

* `:at` - Required. The steps that give the state.

* `:state` (`t:atom/0`) - A state of the theme, such as :alert.

* `:set` (`t:keyword/0`) - Custom properties, such as [x: "400px"].

* `:move_to` (`t:String.t/0`) - The id of an element of the SVG file, or the name of a different part of the formula. The part moves to the center of that element. Only an on entity of a part takes it. See docs/reference/overlay-options.md.

* `:copy_to` (list of `t:String.t/0`) - The ids of elements of the SVG file. From the first step of the entity, a copy of the part goes to each one. Only an on entity of a part takes it. See docs/reference/overlay-options.md.

# `part`

```elixir
@spec part(term(), term()) :: struct()
```

Make the `part` entity of the DSL

The function takes `id`, then a keyword list. The keys `on` and `copies` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:id` (`t:String.t/0`) - Required. The id of an element of the SVG file of a diagram, or the name of a part of a formula.

* `:each` (`t:String.t/0`) - A symbol of a formula, such as "x". The part names each occurrence of the symbol. See docs/reference/math-element.md.

* `:within` (`t:String.t/0`) - With each, the name of the part of the formula that holds the occurrences. The default is the whole formula.

* `:bare` (`t:boolean/0`) - With each, select only a symbol with no index, so the x of x_1 and of x^2 is not an occurrence. The default is false.

# `pause`

```elixir
@spec pause(term()) :: struct()
```

Make the `pause` entity of the DSL

The function takes a keyword list. You can leave out the keyword list. These are the options:

* `:label` (`t:String.t/0`) - The name of the step that the pause starts. The speaker view shows it. See docs/reference/step-labels.md.

# `point`

```elixir
@spec point(term(), term()) :: struct()
```

Make the `point` entity of the DSL

The function takes `name`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:name` (`t:String.t/0`) - Required. The name of the point. It names the mark, and the table holds it.

* `:x` - Required. The value of the point on the x axis.

* `:y` - Required. The value of the point on the y axis.

* `:symbol` - The symbol of the mark: a category, such as "EU", or a symbol, such as :square. The categories take :circle, :square, :triangle, :diamond, :cross and :star, in this order. The default is :circle.

* `:color` - The color of the mark: a category, such as "EU", a number on the scale of the color_scale option, or a role of the theme, such as :chart_3 or :accent. The categories take the colors of the series in order.

* `:size` - A number more than zero. The area of the mark grows in proportion to it. A bubble chart needs a size for each point.

# `qr_code`

```elixir
@spec qr_code(term(), term()) :: struct()
```

Make the `qr_code` entity of the DSL

The function takes `text`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:text` (`t:String.t/0`) - Required. The text of the code, such as the address of the slides. See docs/reference/qr-code-element.md.

* `:size` (`t:String.t/0`) - The width and the height of the code, such as 300px or 25%. A percentage is a part of the width of the slide.

* `:label` (`t:String.t/0`) - A line of text under the code.

* `:title` (`t:String.t/0`) - The name of the code for a screen reader. The default is the text of the code.

* `:level` - The error correction level: :l, :m, :q or :h. A higher level makes a larger code that a scanner reads when a part of it is not clear. Valid values are :l, :m, :q, :h The default value is `:m`.

# `quotation`

```elixir
@spec quotation(term(), term()) :: struct()
```

Make the `quotation` entity of the DSL

The function takes `text`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:text` (`t:String.t/0`) - Required. The text of the quotation.

* `:by` (`t:String.t/0`) - The name of the source of the quotation.

# `reduce`

```elixir
@spec reduce(term(), term()) :: struct()
```

Make the `reduce` entity of the DSL

The function takes `redex`, then a keyword list. You can leave out the keyword list. These are the options:

* `:redex` - Required. The name of a part of the old line that holds the redex, or :leftmost for the leftmost outermost redex. See docs/reference/math-element.md.

* `:relation` (`t:String.t/0`) - The relation of the new line in LaTeX. The default is ~S"\to_\beta".

* `:from` (`t:String.t/0`) - The name of the line that the reduction reads. The default is the line before it.

* `:why` (`t:String.t/0`) - The reason of the new line, as plain text. The default is the variable, := and the argument.

* `:steps` - The steps of the reduction, as a list of groups of its phases, :redex, :bound, :body and :argument, in this order. Each group is one step. The default is [:redex, :bound, :body, :argument].

* `:name` (`t:String.t/0`) - The name of the part of the new line. The default is line1, line2 and so on.

# `rewrite`

```elixir
@spec rewrite(term(), term()) :: struct()
```

Make the `rewrite` entity of the DSL

The function takes `relation`, then a keyword list. You can leave out the optional arguments and the keyword list. These are the options:

* `:relation` (`t:String.t/0`) - The relation of the new line in LaTeX, such as ~S"\to_\beta". The default is "=".

* `:from` (`t:String.t/0`) - The name of the line that the rewrite reads. The default is the line before it.

* `:replace` (`t:String.t/0`) - The name of a part of the old line, or a symbol, such as "f" or ~S"\alpha". Each occurrence becomes the new content. See docs/reference/math-element.md.

* `:within` (`t:String.t/0`) - With a symbol in replace, the name of the part of the old line that holds the occurrences.

* `:by` (`t:String.t/0`) - The name of a part of an earlier line. A copy of it goes into the place of each occurrence.

* `:by_tex` (`t:String.t/0`) - New LaTeX for the place of each occurrence, in place of by. It fades in.

* `:rule` (tuple of `t:String.t/0`, `t:String.t/0` values) - A rule as a left side and a right side in LaTeX, such as {~S"a\,(b + c)", ~S"a\,b + a\,c"}. The first match of the left side in the old line, or in the part of replace, becomes the right side.

* `:vars` (list of `t:String.t/0`) - The variables of a rule, such as ["a", "b", "c"]. A variable binds one symbol, one group or one group in parentheses. The default value is `[]`.

* `:to` (`t:String.t/0`) - A template in LaTeX for the part of replace, or for the whole line without replace. Each \use{name} in it is a copy of the part name.

* `:drop` (list of `t:String.t/0`) - The names of the parts of the old line that the new line does not hold. The default value is `[]`.

* `:why` (`t:String.t/0`) - The reason of the new line, as plain text, in a column at the right.

* `:steps` - The steps of the rewrite, as a list of groups of its phases, :occurrences, :kept and :copies, in this order. Each group is one step. The default is [:occurrences, :kept, :copies].

* `:name` (`t:String.t/0`) - The name of the part of the new line. The default is line1, line2 and so on.

# `row`

```elixir
@spec row(term(), term()) :: struct()
```

Make the `row` entity of the DSL

The function takes `cells`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:cells` (list of `t:String.t/0`) - Required. The text of each cell.

# `series`

```elixir
@spec series(term(), term(), term()) :: struct()
```

Make the `series` entity of the DSL

The function takes `name`, `values`, then a keyword list. The keys `elements` and `on` take the children. You can leave out the optional arguments and the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:name` (`t:String.t/0`) - Required. The name of the series.

* `:values` - One number for each category of the chart, in the order of the categories. A series of a scatter plot holds point entities in place of values. A series of a waterfall chart marks a total column with :total, or with {:total, value} to give the value that the sum must agree with.

* `:symbol` - The symbol of each point of a series of a scatter plot, such as :square. A point can replace it. The default is :circle. Valid values are :circle, :square, :triangle, :diamond, :cross, :star

* `:color` - The color of each point of a series of a scatter plot: a role of the theme, such as :chart_3 or :accent. A point can replace it. The default is the color of the place of the series, from :chart_1. Valid values are :chart_1, :chart_2, :chart_3, :chart_4, :chart_5, :chart_6, :chart_7, :chart_8, :text, :muted, :accent, :success, :emphasis, :warning, :danger

# `shape`

```elixir
@spec shape(term(), term()) :: struct()
```

Make the `shape` entity of the DSL

The function takes `kind`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:kind` - Required. The kind of the shape: :rect, :ellipse, :line or :arrow. See docs/reference/shape-element.md. Valid values are :rect, :ellipse, :line, :arrow

* `:x` (`t:String.t/0`) - The left edge of a rectangle or an ellipse, such as 10%. A percentage is a part of the width of the slide.

* `:y` (`t:String.t/0`) - The top edge of a rectangle or an ellipse, such as 20%. A percentage is a part of the height of the slide.

* `:width` (`t:String.t/0`) - The width of a rectangle or an ellipse, such as 30%.

* `:height` (`t:String.t/0`) - The height of a rectangle or an ellipse, such as 15%.

* `:from` - The start of a line or an arrow, such as ["10%", "50%"].

* `:to` - The end of a line or an arrow. The head of an arrow is at this point.

* `:text` (`t:String.t/0`) - A short text in the center of a rectangle or an ellipse.

* `:fill` (`t:boolean/0`) - Fill a rectangle or an ellipse with a light tint of its color. The default value is `false`.

# `slide`

```elixir
@spec slide(term(), term()) :: struct()
```

Make the `slide` entity of the DSL

The function takes `name`, then a keyword list. The key `elements` takes the children. You can leave out the optional arguments and the keyword list. These are the options:

* `:name` (`t:String.t/0`) - A name for the slide.

* `:class` - CSS class names for the slide, such as "dense". The present view and each page of the handout view get them. See docs/reference/class-option.md.

* `:heading` (`t:String.t/0`) - The heading that the slide template shows.

* `:sr_heading` (`t:boolean/0`) - false gives the slide no hidden heading. A slide with no h1 otherwise gets an h1 that only a screen reader reads, with the name of the slide. See docs/reference/accessibility.md.

* `:section` (`t:String.t/0`) - The title of the section that starts at this slide. The section runs to the next slide with a section. A toc lists the sections. See docs/reference/toc-element.md.

* `:template` - The slide template: a module, or {:builtins, name}. See docs/architecture.md. The default is {:builtins, :default}.

* `:notes` (`t:String.t/0`) - The notes of the speaker. The handout view shows them under each page.

* `:meta` (`t:keyword/0`) - Values of your own for the templates, such as [section: "Part 3"]. A template reads them from @metadata[:meta]. See docs/reference/template-option.md.

* `:steps` (`t:pos_integer/0`) - The maximum step number of the slide.

* `:labels` - The name of each step, from step 1, such as ["The question", nil, "The answer"]. nil gives a step no name. See docs/reference/step-labels.md.

* `:handout` - The steps that the handout view and a printer show, such as [2, :last]. See Expresso.Handout.

* `:auto_reveal` (`t:boolean/0`) - Show each element of the slide one after the other. See docs/overlays.md. The default value is `false`.

* `:transition` (`t:atom/0`) - The transition between the slide before and this slide, in the two directions. The default is the transition of the deck.

* `:morph` - The morph between the slide before and this slide, in the two directions: :auto, :named or :off. The default is the morph of the deck. See docs/reference/morph-option.md. Valid values are :auto, :named, :off

* `:effect` (`t:atom/0`) - How each element with an at option shows and hides. An element or its parent can replace it. The default is the effect of the deck.

* `:speed` - The time of each animation of the slide. An element or its parent can replace it. The default is the speed of the deck.

* `:easing` - The easing of each animation of the slide. An element or its parent can replace it. The default is the easing of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

# `spacer`

```elixir
@spec spacer(term()) :: struct()
```

Make the `spacer` entity of the DSL

The function takes a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

# `stat`

```elixir
@spec stat(term(), term()) :: struct()
```

Make the `stat` entity of the DSL

The function takes `value`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:value` - Required. The number, such as 1250 or 99.5. See docs/reference/stat-element.md.

* `:label` (`t:String.t/0`) - The text under the number, such as "orders this year".

* `:prefix` (`t:String.t/0`) - The text before the number, such as "$".

* `:suffix` (`t:String.t/0`) - The text after the number, such as "%" or "k".

* `:decimals` (`t:non_neg_integer/0`) - The number of digits after the point. The default is the decimals of the value: 0 for an integer.

* `:group` (`t:boolean/0`) - Put a comma between each group of three digits, such as 1,250. The default value is `true`.

* `:count` (`t:boolean/0`) - Count from the from option to the value when the stat shows. The default value is `false`.

* `:from` - The number at the start of the count. The default is 0. The default value is `0`.

# `table`

```elixir
@spec table(term()) :: struct()
```

Make the `table` entity of the DSL

The function takes a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:caption` (`t:String.t/0`) - The name of the table, as text. It shows above the table, and a screen reader reads it when it moves into the table. See docs/reference/table-element.md.

* `:caption_hidden` (`t:boolean/0`) - Hide the caption from the eye and not from a screen reader. The table needs the caption option. The default value is `false`.

* `:header` (`t:boolean/0`) - Make the first row the header of the table. The default value is `false`.

* `:row_header` (`t:boolean/0`) - Make the first cell of each row the header of its row. The default value is `false`.

* `:reveal` (`t:boolean/0`) - Show the rows one after the other. See docs/overlays.md. The default value is `false`.

* `:dim` (`t:boolean/0`) - Dim each child when a later child shows. See docs/overlays.md. The default value is `false`.

# `text_area`

```elixir
@spec text_area(term()) :: struct()
```

Make the `text_area` entity of the DSL

The function takes a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:goto` - Make the element a link to a slide and a step, such as [slide: 5], [slide: 5, step: 2] or [slide: "summary"]. The slide is a number or the name of a slide. See Expresso.Goto.

* `:text` (`t:String.t/0`) - 

# `text_box`

```elixir
@spec text_box(term()) :: struct()
```

Make the `text_box` entity of the DSL

The function takes a keyword list. The keys `elements` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

# `toc`

```elixir
@spec toc(term()) :: struct()
```

Make the `toc` entity of the DSL

The function takes a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:reveal` (`t:boolean/0`) - Show the entries one after the other, one at each step. The default value is `false`.

* `:dim` (`t:boolean/0`) - Dim each entry when a later entry shows. The default value is `false`.

* `:progress` - How the entries other than the current section look: :dim_rest, :dim_earlier, :check_earlier or :strike_earlier. See docs/reference/toc-element.md. Valid values are :dim_rest, :dim_earlier, :check_earlier, :strike_earlier The default value is `:dim_rest`.

# `tree`

```elixir
@spec tree(term()) :: struct()
```

Make the `tree` entity of the DSL

The function takes a keyword list. The keys `elements` and `timeline` and `on` take the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:title` (`t:String.t/0`) - Required. The name of the tree for a screen reader.

* `:width` (`t:String.t/0`) - The width of the tree, such as 900px or 70%. The default is 80%.

* `:color` - The colors of the boxes from the palette: :branch gives each node under the root and its boxes a color, and {:field, "name"} gives each value of a field a color and adds a legend. The color option of a node comes first. The default is no color.

* `:reveal` - Show the nodes in steps: :levels shows one level at each step, :branches shows the root and then one branch at each step, and :nodes shows one node at each step. A node with its own at option keeps it. Valid values are :levels, :branches, :nodes

* `:dim` (`t:boolean/0`) - Dim the boxes of the earlier steps when a later box shows. The default is false. The default value is `false`.

* `:highlight` - Groups of nodes, one group in focus at each step, such as ["Ben", branch("Ben"), ["Cy", "Di"]]. An item is the name of a node, branch(name) for a node and each node under it, or a list of those. The rest of the tree dims. See docs/reference/tree-element.md.

* `:whole_first` (`t:boolean/0`) - With highlight, show the whole tree in full color for one step before the first group comes into focus. The default is false. The default value is `false`.

* `:reflow` (`t:boolean/0`) - Calculate the layout at each step from the boxes that show, and move the boxes when a box shows. The default is false: the layout keeps a place for each box from the first step, and no box moves. The default value is `false`.

* `:src` (`t:String.t/0`) - The path of a CSV file with a row for each node, from the root option of the deck or from the working directory of the command. The file has the columns id and parent, or the column path. See docs/reference/tree-element.md.

* `:delimiter` (`t:String.t/0`) - The character between two cells of the src file, such as ";". The default is a comma, or a tab for a file that ends in .tsv. Requires the src option.

* `:frames` (`t:String.t/0`) - The heading of the column of the src file that names the frame of each row, such as "year". Each value of the column is a frame, in the order of the file. Requires the src option.

* `:separator` (`t:String.t/0`) - The text between two levels of a path in the column path of the src file, such as "home/photos". The default is a slash. The default value is `"/"`.

* `:fields` (list of `t:String.t/0`) - The headings of the columns of the src file that become the fields of each box, in that order, such as ["team", "site"]. Requires the src option.

* `:layout` - How the nodes under each node go: :top_down puts them in a row under the node, :left_right puts them in a column at its right, and :stacked puts them one under the other below it. The default is :top_down. Valid values are :top_down, :left_right, :stacked The default value is `:top_down`.

* `:stack_from` - The first level that the tree puts in the layout :stacked, with 1 for the root. The default is no stacked level.

* `:sum` (`t:boolean/0`) - Give a node with no value the sum of the values of the nodes under it. The default is true. The default value is `true`.

* `:value_format` - The text of a value: :number gives 1,250, :bytes gives 412 GB, and :percent gives the part of the value of the root, such as 12.5%. The default is :number. Valid values are :number, :bytes, :percent The default value is `:number`.

* `:sort` - The order of the nodes under each node: :value puts the largest value first, and :none keeps the order of the data. The default is :none. Valid values are :value, :none The default value is `:none`.

* `:bar` (`t:boolean/0`) - Show a bar along the bottom of each box, with a length in proportion to the part of the value of the root. The default is false. The default value is `false`.

* `:limit` (`t:pos_integer/0`) - The most nodes under each node. One more node holds the rest, with the sum of their values.

* `:depth` (`t:pos_integer/0`) - The most levels of the tree, with 1 for the root only. A node at the last level shows the total of the values under it.

* `:box` - The size of the boxes of each level, from the root down, in the units of the drawing, such as [[width: 280, height: 120], [width: 220, height: 96]]. The last size applies to each deeper level. The default is [width: 220, height: 96] for each level. See docs/reference/tree-element.md.

# `video`

```elixir
@spec video(term(), term()) :: struct()
```

Make the `video` entity of the DSL

The function takes `src`, then a keyword list. The key `on` takes the children. You can leave out the keyword list. These are the options:

* `:at` - The steps that show the element. See docs/overlays.md.

* `:effect` (`t:atom/0`) - How the element shows and hides: :fade, :grow, :fly_up, :fly_down, :fly_left, :fly_right, :wipe, :blur, or an effect of the css option of the deck. The default is the effect of the nearest parent, of the slide or of the deck.

* `:speed` - The time of each animation of the element: :fast, :normal, :slow or a number of milliseconds. The default is the speed of the nearest parent, of the slide or of the deck.

* `:easing` - The easing of each animation of the element: :ease_in_out, :ease_out, :linear, :spring. The default is the easing of the nearest parent, of the slide or of the deck. Valid values are :ease_in_out, :ease_out, :linear, :spring

* `:morph` (`t:String.t/0`) - A key of the morph between two slides. The element with this key on the next slide takes its place and its size from this element. See docs/reference/morph-option.md.

* `:class` - CSS class names for the element, such as "dense". A rule of the css option of the deck can then select the element. See docs/reference/class-option.md.

* `:src` - Required. The path of a .webm or a .mp4 file. The document holds the video one time. See docs/reference/video-element.md.

* `:title` (`t:String.t/0`) - Required. The name of the video for a screen reader.

* `:captions` - The path of a WebVTT file with the captions of the video, from the root option of the deck. The browser shows the captions on the video. See docs/reference/video-element.md.

* `:poster` (`t:String.t/0`) - Required. The path of an image that shows on paper, in the handout view, in the speaker view and while the video loads.

* `:width` (`t:String.t/0`) - The width of the video, such as 900px or 80%. The default is 80%.

* `:aspect` - The ratio of the width to the height, such as "16/9". The default is "16/9".

* `:loop` (`t:boolean/0`) - Play the video again from the start at its end. The default value is `true`.

* `:controls` (`t:boolean/0`) - Show the controls of the browser, so the presenter can turn the sound on. The default is false, so the clicks of the presenter work on the slide. The default value is `false`.

---

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