Current section
Files
Jump to
Current section
Files
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.flat_map(&build_option/1)
|> Map.new()
end
defp build_option(option_value_tuple)
defp build_option({"height", value}) when is_integer(value) and value > 0 do
[{:height, value}]
end
defp build_option({:height, value}) when is_integer(value) and value > 0 do
[{:height, value}]
end
boolean_options = ~w[scroll_to_content view_mode_enabled zen_mode_enabled grid_mode_enabled]a
for option <- boolean_options do
option_str = Atom.to_string(option)
defp build_option({unquote(option_str), value}) when is_boolean(value) do
[{unquote(option), value}]
end
defp build_option({unquote(option), value}) when is_boolean(value) do
[{unquote(option), value}]
end
end
defp build_option(_other), do: []
end