PR #1015 (SUP-342) migrated the sidebar's animated icons to Solar bold-duotone (@iconify-json/solar via @iconify/tailwind4). The rest of the app still uses Lucide via the <.icon name={...} /> component.
We want everything on Solar bold-duotone for a single visual language. These icons don't need animations - just static SVG rendering with the existing <.icon> API preserved so we don't have to touch every call site.
~98 distinct Lucide icon names used across the codebase via <.icon name={...} />. Full list captured from a grep of lib/:
arrow_down, arrow_left, arrow_right, arrow_up, arrow_up_down, arrow_up_right,
badge_check, banknote, blocks, calculator, calendar, calendar_clock, calendar_days,
chart_bar, chart_line, chart_no_axes_column, check, check_check, check_circle,
chevron_down, chevron_left, chevron_right, chevrons_up_down, circle_alert,
circle_check, circle_help, circle_minus, circle_plus, circle_user_round, circle_x,
clipboard, clipboard_copy, clipboard_list, clock, cloud_download, coins, copy,
copy_minus, credit_card, crown, download, ellipsis_vertical, eye, eye_off,
file_text, folder_tree, gift, hand_coins, history, hourglass, inbox, info, landmark,
link, loader, lock, log_out, menu, message_square, monitor, moon, more_horizontal,
party_popper, pause, pen, pen_line, pencil, play, plug, plus, receipt, receipt_text,
refresh_cw, repeat, rotate_ccw, send, settings, shield_alert, shield_check, siren,
sliders_horizontal, smile, sparkles, square_pen, sun, tag, tags, terminal, ticket,
trending_up, triangle_alert, unlink, unplug, user, wallet, x, zap
Path A: rewire <.icon> to render Solar SVGs at compile time.
Visor.SolarIcons module, modeled after VisorWeb.Components.AnimatedIcons.assets/node_modules/@iconify-json/solar/icons.json at compile time via @external_resource + Jason.decode!/1.@mappings :: %{atom() => String.t()} table mapping each Lucide name above to a Solar slug (e.g. :credit_card => "card", :circle_alert => "danger-circle"). Most map directly; ~15-20 need judgment.def icon_name(assigns) per mapping, embedding the Solar SVG body inline with currentColor fill.VisorWeb.CoreComponents.icon/1 to dispatch to Visor.SolarIcons instead of Lucideicons. Keep the same name/class/rest API so no call sites change.AnimatedIcons).lucide_icons hex dep (keep until we're sure nothing else uses it).:check_check (double check), :chevrons_up_down (double chevron), :rotate_ccw, :square_pen, :plug/:unplug, :cloud_download, :copy_minus, :folder_tree, :hourglass, :landmark, :monitor, :party_popper, :sliders_horizontal, :terminal.<.icon name={:foo}> renders a Solar bold-duotone SVG for every name in the list above.mix compile and mix test pass.Share update with 0 linked conversations as well
Completed
Feature Request
2 months ago
Get notified by email when there are changes.
Completed
Feature Request
2 months ago
Get notified by email when there are changes.