if Code.ensure_loaded?(Surface) do defmodule Iconify.Icon do use Surface.MacroComponent # any icon from iconify: https://icones.js.org prop iconify, :string, required: false, static: true # shorthand for heroicons solid icons prop solid, :string, required: false, static: true # shorthand for heroicons outline icons prop outline, :string, required: false, static: true # pass SVG markup directly prop svg, :string, default: nil, required: false, static: true prop class, :css_class, default: "w-4 h-4" def expand(attributes, _content, meta) do static_props = Surface.MacroComponent.eval_static_props!(__MODULE__, attributes, meta.caller) svg = svg_icon(static_props) class = Surface.AST.find_attribute_value(attributes, :class) || "" icon = prepare_icon_name(static_props) # TODO? simply include the phoenix component like so instead of duplicating logic, see https://github.com/surface-ui/surface/pull/685#issuecomment-1505978390 # quote_surface caller: meta.caller do # ~F""" # # """ # end if is_nil(svg) do case Iconify.prepare(%{icon: icon}) do {:css, _fun, %{icon_name: icon_name}} -> # icon_class = "#{Iconify.css_class()} #{icon_css_name} #{class_to_string(class)}" quote_surface do ~F"""