From bc128388ba60e65f7026de141e629a37306631f1 Mon Sep 17 00:00:00 2001 From: Graham McIntie Date: Fri, 13 Feb 2026 19:18:28 -0600 Subject: [PATCH] feat: add loading skeletons and page transitions --- CHANGELOG.txt | 4 + lib/towerops_web.ex | 1 + .../components/layouts/root.html.heex | 15 +++- lib/towerops_web/live/config_timeline_live.ex | 6 ++ .../live/device_live/index.html.heex | 74 ++++++++++++++----- .../live/device_live/show.html.heex | 24 ++---- .../live/site_live/show.html.heex | 5 ++ .../live/trace_live/index.html.heex | 4 + 8 files changed, 94 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index a8eef338..2ae5c9d4 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,4 +1,8 @@ 2026-02-13 +feat: SEO meta tags, OG tags, favicon, theme-color in root layout +feat: global CSS polish — smooth transitions, hover effects, scrollbar styling, status pulse +feat: loading skeletons and page fade-in transitions +feat: breadcrumb navigation on device detail, site detail, config timeline, trace pages feat: nav search trigger button with ⌘K keyboard shortcut hint fix: remove experimental badges from Alerts and Network Map nav feat: polished empty states for alerts (all-clear), insights, sites pages diff --git a/lib/towerops_web.ex b/lib/towerops_web.ex index ff42afaa..b5bdbddd 100644 --- a/lib/towerops_web.ex +++ b/lib/towerops_web.ex @@ -84,6 +84,7 @@ defmodule ToweropsWeb do import Phoenix.HTML import ToweropsWeb.CoreComponents + import ToweropsWeb.Components.Breadcrumbs import ToweropsWeb.Components.Skeletons import ToweropsWeb.GettextHelpers diff --git a/lib/towerops_web/components/layouts/root.html.heex b/lib/towerops_web/components/layouts/root.html.heex index 704468e4..eba68bf4 100644 --- a/lib/towerops_web/components/layouts/root.html.heex +++ b/lib/towerops_web/components/layouts/root.html.heex @@ -4,7 +4,20 @@ - <.live_title default="Towerops"> + + + + + + + + + + + + + + <.live_title default="TowerOps"> {assigns[:page_title]} diff --git a/lib/towerops_web/live/config_timeline_live.ex b/lib/towerops_web/live/config_timeline_live.ex index 8cc31890..06fa571b 100644 --- a/lib/towerops_web/live/config_timeline_live.ex +++ b/lib/towerops_web/live/config_timeline_live.ex @@ -77,6 +77,12 @@ defmodule ToweropsWeb.ConfigTimelineLive do @impl true def render(assigns) do ~H""" + <.breadcrumb items={[ + %{label: "Dashboard", navigate: ~p"/dashboard"}, + %{label: "Devices", navigate: ~p"/devices"}, + %{label: @device.name, navigate: ~p"/devices/#{@device.id}"}, + %{label: "Config Timeline"} + ]} />
diff --git a/lib/towerops_web/live/device_live/index.html.heex b/lib/towerops_web/live/device_live/index.html.heex index f72cd2e3..b3858448 100644 --- a/lib/towerops_web/live/device_live/index.html.heex +++ b/lib/towerops_web/live/device_live/index.html.heex @@ -75,6 +75,13 @@ > <.icon name="hero-bars-3" class="h-4 w-4" /> Reorder + <.button + type="button" + phx-click="toggle_compact_mode" + variant={if @compact_mode, do: "primary", else: nil} + > + <.icon name="hero-bars-2" class="h-4 w-4" /> Compact + <% end %> <% end %> @@ -176,6 +183,24 @@
<% else %> + +
+ {@total_devices} devices + | + + + {@total_up} up + + 0} class="inline-flex items-center gap-1.5 text-red-700 dark:text-red-400"> + + {@total_down} down + + 0} class="inline-flex items-center gap-1.5 text-gray-500 dark:text-gray-400"> + + {@total_unknown} unknown + +
+
@@ -317,18 +342,19 @@ - +