From 8a3b5fd14f8cf1e4fe727cd266ce9755e35760ca Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Wed, 25 Mar 2026 21:17:21 -0600 Subject: [PATCH] updates --- lib/cobblemon_ui_web/live/dashboard_live.ex | 13 +- .../live/pokemon_components.ex | 260 +++++------------- 2 files changed, 65 insertions(+), 208 deletions(-) diff --git a/lib/cobblemon_ui_web/live/dashboard_live.ex b/lib/cobblemon_ui_web/live/dashboard_live.ex index f17e3c9..ca932b6 100644 --- a/lib/cobblemon_ui_web/live/dashboard_live.ex +++ b/lib/cobblemon_ui_web/live/dashboard_live.ex @@ -27,8 +27,7 @@ defmodule CobblemonUiWeb.DashboardLive do species_info: %{}, view_mode: :party, loading: false, - error: nil, - selected_type: nil + error: nil )} end @@ -101,14 +100,6 @@ defmodule CobblemonUiWeb.DashboardLive do {:noreply, assign(socket, view_mode: String.to_existing_atom(mode), selected_pokemon: nil)} end - def handle_event("select_type", %{"type" => ""}, socket) do - {:noreply, assign(socket, selected_type: nil)} - end - - def handle_event("select_type", %{"type" => type}, socket) do - {:noreply, assign(socket, selected_type: type)} - end - @impl true def handle_info(:tick, socket) do {:noreply, do_refresh(socket)} @@ -326,7 +317,7 @@ defmodule CobblemonUiWeb.DashboardLive do /> <%!-- Type Chart --%> - <.type_chart selected_type={@selected_type} /> + <.type_chart /> diff --git a/lib/cobblemon_ui_web/live/pokemon_components.ex b/lib/cobblemon_ui_web/live/pokemon_components.ex index 3e6bf91..012dc7b 100644 --- a/lib/cobblemon_ui_web/live/pokemon_components.ex +++ b/lib/cobblemon_ui_web/live/pokemon_components.ex @@ -355,14 +355,11 @@ defmodule CobblemonUiWeb.PokemonComponents do alias CobblemonUi.TypeChart - attr :selected_type, :string, default: nil - def type_chart(assigns) do chart = TypeChart.defensive_chart() - offense = TypeChart.offensive_chart() types = TypeChart.types() - assigns = assign(assigns, chart: chart, offense: offense, types: types) + assigns = assign(assigns, chart: chart, types: types) ~H"""
@@ -372,215 +369,84 @@ defmodule CobblemonUiWeb.PokemonComponents do

Type Chart

-

- Tap a type to see its matchups -

+

Weaknesses & Resistances

- <%!-- Type picker grid --%> -
-
-
+ """ + end + + attr :type_name, :string, required: true + attr :matchups, :map, required: true + + def type_chart_card(assigns) do + ~H""" +
+ <%!-- Type icon circle --%> +
+ {@type_name} +
+ <%!-- Weakness / Resistance rows --%> +
+

{@type_name}

+ <%!-- Weakness row --%> +
+ + Weak + +
+ <.type_mini_icon :for={t <- @matchups.weak_to} type_name={t} /> + + — - {t} - +
+
+ <%!-- Resistance row --%> +
+ + Resist + +
+ <.type_mini_icon :for={t <- @matchups.resists} type_name={t} /> + + — + +
+
+ <%!-- Immune row (only if applicable) --%> +
+ + Immune + +
+ <.type_mini_icon :for={t <- @matchups.immune_to} type_name={t} /> +
- - <%!-- Selected type detail --%> - <%= if @selected_type do %> -
-
-
- {@selected_type} -
-
-

{@selected_type}

-

Defensive & Offensive matchups

-
- -
- -
- <%!-- Defensive --%> -
-
- <.icon name="hero-shield-check" class="size-3.5" /> Defensive -
- - <%!-- Weak to --%> -
-

- <.icon name="hero-exclamation-triangle" class="size-3" /> Weak to (2×) -

-
- <.type_pill - :for={t <- @chart[@selected_type].weak_to} - type_name={t} - /> - - None - -
-
- - <%!-- Resists --%> -
-

- <.icon name="hero-shield-check" class="size-3" /> Resists (½×) -

-
- <.type_pill - :for={t <- @chart[@selected_type].resists} - type_name={t} - /> - - None - -
-
- - <%!-- Immune to --%> -
-

- <.icon name="hero-no-symbol" class="size-3" /> Immune to (0×) -

-
- <.type_pill - :for={t <- @chart[@selected_type].immune_to} - type_name={t} - /> -
-
-
- - <%!-- Offensive --%> -
-
- <.icon name="hero-bolt" class="size-3.5" /> Offensive -
- - <%!-- Super effective --%> -
-

- <.icon name="hero-bolt" class="size-3" /> Super effective (2×) -

-
- <.type_pill - :for={t <- @offense[@selected_type].strong_against} - type_name={t} - /> - - None - -
-
- - <%!-- Not very effective --%> -
-

- <.icon name="hero-shield-exclamation" class="size-3" /> Not very effective (½×) -

-
- <.type_pill - :for={t <- @offense[@selected_type].not_effective} - type_name={t} - /> - - None - -
-
- - <%!-- No effect --%> -
-

- <.icon name="hero-no-symbol" class="size-3" /> No effect (0×) -

-
- <.type_pill - :for={t <- @offense[@selected_type].no_effect} - type_name={t} - /> -
-
-
-
-
- <% else %> - <%!-- Compact overview when no type selected --%> -
-

Select a type above to view matchups

-
- <% end %>
""" end attr :type_name, :string, required: true - def type_pill(assigns) do + def type_mini_icon(assigns) do ~H""" - + {@type_name} + """ end