defmodule LiveSvelte.Reload do @moduledoc """ Utilities for easier integration with Vite in development. """ use Phoenix.Component attr :assets, :list, required: true slot :inner_block, required: true, doc: "rendered when Vite path is not defined (production)" @doc """ Renders Vite dev server assets in development, falls back to compiled assets in production. When `config :live_svelte, vite_host: "http://localhost:5173"` is set, injects: - `@vite/client` script (enables Vite HMR WebSocket) - CSS assets as `` tags - JS assets as ` """ def vite_assets(assigns) do vite_host = Application.get_env(:live_svelte, :vite_host) assigns = assigns |> assign(:vite_host, vite_host) |> assign( :stylesheets, for(path <- assigns.assets, String.ends_with?(path, ".css"), do: path) ) |> assign( :javascripts, for(path <- assigns.assets, String.ends_with?(path, ".js"), do: path) ) ~H""" <%= if @vite_host do %> <% else %> {render_slot(@inner_block)} <% end %> """ end end