defmodule LivebookWeb.SessionLive.IndicatorsComponent do use Phoenix.Component alias Phoenix.LiveView.JS alias LivebookWeb.Router.Helpers, as: Routes import LivebookWeb.LiveHelpers def render(assigns) do ~H"""
<.code_zen_indicator /> <.persistence_indicator file={@file} dirty={@dirty} autosave_interval_s={@autosave_interval_s} socket={@socket} session_id={@session_id} /> <.runtime_indicator runtime={@runtime} global_status={@global_status} socket={@socket} session_id={@session_id} /> <.insert_mode_indicator />
""" end defp code_zen_indicator(assigns) do ~H"""
<.menu id="focus-mode-menu" position="top-right"> <:toggle> <:content>
""" end defp persistence_indicator(%{file: nil} = assigns) do ~H""" <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", aria_label: "choose a file to save the notebook" do %> <.remix_icon icon="save-line" class="text-xl text-gray-400" /> <% end %> """ end defp persistence_indicator(%{dirty: false} = assigns) do ~H""" <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), class: "icon-button icon-outlined-button border-green-bright-300 hover:bg-green-bright-50 focus:bg-green-bright-50", aria_label: "notebook saved, click to open file settings" do %> <.remix_icon icon="save-line" class="text-xl text-green-bright-400" /> <% end %> """ end defp persistence_indicator(%{autosave_interval_s: nil} = assigns) do ~H""" <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), class: "icon-button icon-outlined-button border-yellow-bright-200 hover:bg-red-50 focus:bg-red-50", aria_label: "no autosave configured, click to open file settings" do %> <.remix_icon icon="save-line" class="text-xl text-yellow-bright-300" /> <% end %> """ end defp persistence_indicator(assigns) do ~H""" <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), class: "icon-button icon-outlined-button border-blue-400 hover:bg-blue-50 focus:bg-blue-50", aria_label: "autosave pending, click to open file settings" do %> <.remix_icon icon="save-line" class="text-xl text-blue-500" /> <% end %> """ end defp runtime_indicator(assigns) do ~H""" <%= if Livebook.Runtime.connected?(@runtime) do %> <.global_status status={elem(@global_status, 0)} cell_id={elem(@global_status, 1)} /> <% else %> <%= live_patch to: Routes.session_path(@socket, :runtime_settings, @session_id), class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", aria_label: "choose a runtime to run the notebook in" do %> <.remix_icon icon="loader-3-line" class="text-xl text-gray-400" /> <% end %> <% end %> """ end defp global_status(%{status: :evaluating} = assigns) do ~H""" """ end defp global_status(%{status: :evaluated} = assigns) do ~H""" """ end defp global_status(%{status: :stale} = assigns) do ~H""" """ end defp global_status(%{status: :fresh} = assigns) do ~H"""
<.remix_icon icon="loader-3-line" class="text-xl text-gray-400" />
""" end defp insert_mode_indicator(assigns) do ~H""" <% # Note: this indicator is shown/hidden using CSS based on the current mode %> ins """ end end