Source code for bootlace.icon

from typing import ClassVar

import attrs
from dominate import svg as svg_tag
from dominate.dom_tag import dom_tag

from bootlace.endpoint import Endpoint
from bootlace.util import Tag


__all__ = ["Icon"]


[docs] @attrs.define class Icon: """A Bootstrap icon This class supports the :func:`as_tag` protocol to display itself. """ #: Endpoint name for getting the Bootstrap Icon SVG file endpoint: ClassVar[Endpoint] = Endpoint.from_name("bootlace.static", filename="icons/bootstrap-icons.svg") #: Name of the icon name: str svg: Tag = Tag( svg_tag.svg, attributes={"role": "img", "fill": "currentColor", "width": "16", "height": "16"}, classes={"bi", "me-1", "pe-none", "align-self-center", "bi-inline"}, ) use: Tag = Tag(svg_tag.use) @property def url(self) -> str: """The URL for the SVG source for the icon""" return self.endpoint(_anchor=self.name)
[docs] def __tag__(self) -> dom_tag: return self.svg( self.use(xlink_href=self.url), )