"""
end
defp one!([entry], _name), do: entry
defp one!(entries, name),
do: raise(ArgumentError, "tooltip requires exactly one #{name} slot, got: #{length(entries)}")
defp validate_id!(id) do
if id == "" or String.contains?(id, <<0>>) or Regex.match?(~r/[\t\n\f\r ]/, id),
do:
raise(
ArgumentError,
"tooltip id must be a non-empty string without ASCII whitespace or NUL"
)
end
defp validate_delay!(delay) when is_integer(delay) and delay >= 0, do: :ok
defp validate_delay!(_), do: raise(ArgumentError, "tooltip delay must be a nonnegative integer")
defp validate_idrefs!(nil), do: :ok
defp validate_idrefs!(value) when is_binary(value) do
tokens = String.split(value, ~r/[\t\n\f\r ]+/, trim: true)
if tokens == [] or Enum.any?(tokens, &String.contains?(&1, <<0>>)),
do: raise(ArgumentError, "tooltip describedby must contain valid IDREF tokens")
end
defp validate_idrefs!(_),
do: raise(ArgumentError, "tooltip describedby must be an IDREF string")
defp normalize_trigger_attrs!(attrs) when is_map(attrs) do
Enum.reduce(attrs, %{}, fn {key, value}, normalized ->
name = normalize_trigger_attr_name!(key)
if Map.has_key?(normalized, name),
do: raise(ArgumentError, "tooltip trigger_attrs contains duplicate attribute #{name}")
Map.put(normalized, name, value)
end)
end
defp normalize_trigger_attrs!(_),
do: raise(ArgumentError, "tooltip trigger_attrs must be a map")
defp normalize_trigger_attr_name!(key) when is_atom(key) or is_binary(key) do
name = to_string(key)
if name in ["aria-label", "phx-click", "phx-target"] or
Regex.match?(~r/\Aphx-value-[a-z0-9_-]+\z/, name) do
name
else
raise ArgumentError,
"tooltip trigger_attrs only accepts aria-label, phx-click, phx-target, and phx-value-*"
end
end
defp normalize_trigger_attr_name!(_),
do:
raise(
ArgumentError,
"tooltip trigger_attrs only accepts aria-label, phx-click, phx-target, and phx-value-*"
)
end