defmodule LivebookWeb.Output.GridComponent do use LivebookWeb, :live_component @impl true def mount(socket) do {:ok, stream(socket, :outputs, [])} end @impl true def update(assigns, socket) do {outputs, assigns} = Map.pop!(assigns, :outputs) socket = assign(socket, assigns) stream_items = for {idx, output} <- outputs do id = "#{idx}-grid-item" %{id: id, idx: idx, output: output} end socket = stream(socket, :outputs, stream_items) {:ok, socket} end @impl true def render(assigns) do ~H"""
""" end defp make_template(columns) when is_tuple(columns) do columns = Tuple.to_list(columns) if Enum.all?(columns, &is_integer/1) do Enum.map_join(columns, " ", fn n -> "minmax(0, #{n}fr)" end) else "" end end defp make_template(columns) when is_integer(columns), do: "repeat(#{columns}, minmax(0, 1fr))" defp make_template(_columns), do: "" end