lightweight tag 204549e082cbeb531686249ae9d13915d0634c45 v2026.05.19.1
Author:	BAThomp24 <bathomp24@gmail.com>
Date:	Tue May 19 16:09:57 2026 -0400

commit 204549e082cbeb531686249ae9d13915d0634c45
Author: BAThomp24 <bathomp24@gmail.com>
Date:   Tue May 19 16:09:57 2026 -0400

    swap popup: paired picks/drops, icons, spell tooltips, auto-pair non-choice swaps
    
    Data pipeline:
    - update-data.ts now emits dungeonSwaps as { picks, drops } instead of a
      flat list (matches the website's new TalentSwap split).
    - Falls back to splitting the deprecated `swaps` field by direction so it
      works against both old and new API blobs.
    
    Popup (Suggest.lua):
    - Shows picks first (▲ green) then drops (▼ red), so the "take X, drop Y"
      pairing is visible at a glance.
    - Each row now has a spell icon next to the talent name; hover the icon
      for the full WoW spell tooltip via GameTooltip:SetSpellByID.
    - Re-fires when on the recommended build *if* dungeon swaps exist
      (rebranded as "Dungeon tweaks: [Dungeon]").
    - Adds an "Apply Swaps" button: applies only the swap delta on top of the
      current loadout without resetting the tree.
    
    Apply logic (UI.lua):
    - New ZZ:GetTalentLookup() walks the active spec tree, mapping talent
      names to spellID/iconID/nodeID/entryID.
    - ZZ:ApplySwaps now takes { picks, drops }. For non-choice picks it
      refunds a non-choice drop first when out of points (the auto-pair
      the website's new "fill drops anyway" logic makes actionable).
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

