Current section

Files

Jump to
kino_excalidraw lib kino excalidraw options.ex
Raw

lib/kino/excalidraw/options.ex

defmodule Kino.Excalidraw.Options do
@moduledoc """
The options for configuring the Excalidraw editor.
| Option | Description | Default |
|--------|-------------| ------- |
| `:height` | The height of the editor in pixels. | `600` |
| `:scroll_to_content` | Whether to scroll to the content when the editor is loaded. | `true` |
| `:view_mode_enabled` | Whether the view mode is enabled. | `false` |
| `:zen_mode_enabled` | Whether the zen mode is enabled. | `false` |
| `:grid_mode_enabled` | Whether the grid mode is enabled. | `false` |
"""
@type t() :: %{
optional(:height) => pos_integer(),
optional(:scroll_to_content) => boolean(),
optional(:view_mode_enabled) => boolean(),
optional(:zen_mode_enabled) => boolean(),
optional(:grid_mode_enabled) => boolean()
}
@spec build(Enumerable.t(tuple())) :: t()
def build(options) do
options
|> Enum.map(&build_option/1)
|> Map.new()
end
defp build_option(option_value_tuple)
defp build_option({option, value}) when is_binary(option) do
build_option({String.to_existing_atom(option), value})
end
defp build_option({:height, value}) when is_integer(value) and value > 0 do
{:height, value}
end
defp build_option({:scroll_to_content, value}) when is_boolean(value) do
{:scroll_to_content, value}
end
defp build_option({:view_mode_enabled, value}) when is_boolean(value) do
{:view_mode_enabled, value}
end
defp build_option({:zen_mode_enabled, value}) when is_boolean(value) do
{:zen_mode_enabled, value}
end
defp build_option({:grid_mode_enabled, value}) when is_boolean(value) do
{:grid_mode_enabled, value}
end
end