Exported source
breadcrumbs = SingleValueFactory("breadcrumbs", "Breadcrumbs component for helping users navigate.") # Breadcrumbs componenttest_breadcrumbs_basic_examples ()
Test breadcrumbs utility.
def test_breadcrumbs_basic_examples():
"""Test breadcrumbs utility."""
# Breadcrumb
assert str(breadcrumbs) == "breadcrumbs"
# Breadcrumbs with modifiers
assert str(breadcrumbs.hover) == "hover:breadcrumbs"
assert str(breadcrumbs.md) == "md:breadcrumbs"
assert str(breadcrumbs.dark) == "dark:breadcrumbs"
# Run the tests
test_breadcrumbs_basic_examples()test_breadcrumbs_basic_fasthtml_examples ()
Test basic breadcrumbs example from daisyUI v5 documentation.
def test_breadcrumbs_basic_fasthtml_examples():
"""Test basic breadcrumbs example from daisyUI v5 documentation."""
from fasthtml.common import Div, Ul, Li, A
from cjm_fasthtml_tailwind.utilities.typography import font_size, font_weight, font_family, text_color
# Basic breadcrumbs
basic_breadcrumbs = Div(
Ul(
Li(A("Home", href="#")),
Li(A("Documents", href="#")),
Li("Add Document")
),
cls=combine_classes(breadcrumbs, font_size.sm)
)
# Verify structure
assert basic_breadcrumbs.tag == "div"
assert "breadcrumbs" in basic_breadcrumbs.attrs['class']
assert "text-sm" in basic_breadcrumbs.attrs['class']
# Verify ul element
ul_element = basic_breadcrumbs.children[0]
assert ul_element.tag == "ul"
# Verify li elements
assert len(ul_element.children) == 3
# First li with link
first_li = ul_element.children[0]
assert first_li.tag == "li"
assert first_li.children[0].tag == "a"
assert first_li.children[0].attrs['href'] == "#"
assert first_li.children[0].children[0] == "Home"
# Second li with link
second_li = ul_element.children[1]
assert second_li.tag == "li"
assert second_li.children[0].tag == "a"
assert second_li.children[0].attrs['href'] == "#"
assert second_li.children[0].children[0] == "Documents"
# Third li without link (current page)
third_li = ul_element.children[2]
assert third_li.tag == "li"
assert third_li.children[0] == "Add Document"
return basic_breadcrumbs
# Run the tests
test_breadcrumbs_basic_fasthtml_examples()test_breadcrumbs_with_icons_fasthtml_examples ()
Test breadcrumbs with icons from daisyUI v5 documentation.
def test_breadcrumbs_with_icons_fasthtml_examples():
"""Test breadcrumbs with icons from daisyUI v5 documentation."""
from fasthtml.common import Div, Ul, Li, A, Span
from fasthtml.svg import Svg, Path
from cjm_fasthtml_tailwind.utilities.typography import font_size, font_weight, font_family, text_color
from cjm_fasthtml_tailwind.utilities.sizing import h, w
from cjm_fasthtml_tailwind.utilities.svg import stroke
from cjm_fasthtml_tailwind.utilities.layout import display_tw
from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import items, gap, flex_display
# Create reusable folder icon SVG
folder_icon = Svg(
Path(
stroke_linecap="round",
stroke_linejoin="round",
stroke_width="2",
d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"
),
xmlns="http://www.w3.org/2000/svg",
fill="none",
viewBox="0 0 24 24",
cls=combine_classes(h._4, w._4, stroke.current)
)
# Create add document icon SVG
add_doc_icon = Svg(
Path(
stroke_linecap="round",
stroke_linejoin="round",
stroke_width="2",
d="M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
),
xmlns="http://www.w3.org/2000/svg",
fill="none",
viewBox="0 0 24 24",
cls=combine_classes(h._4, w._4, stroke.current)
)
# Breadcrumbs with icons
breadcrumbs_with_icons = Div(
Ul(
Li(
A(
folder_icon,
"Home",
href="#"
)
),
Li(
A(
folder_icon,
"Documents",
href="#"
)
),
Li(
Span(
add_doc_icon,
"Add Document",
cls=combine_classes(flex_display.inline, items.center, gap._2)
)
)
),
cls=combine_classes(breadcrumbs, font_size.sm)
)
# Verify structure
assert breadcrumbs_with_icons.tag == "div"
assert "breadcrumbs" in breadcrumbs_with_icons.attrs['class']
assert "text-sm" in breadcrumbs_with_icons.attrs['class']
# Verify ul element
ul_element = breadcrumbs_with_icons.children[0]
assert ul_element.tag == "ul"
assert len(ul_element.children) == 3
# First li with icon and link
first_li = ul_element.children[0]
assert first_li.tag == "li"
assert first_li.children[0].tag == "a"
assert first_li.children[0].attrs['href'] == "#"
assert first_li.children[0].children[0].tag == "svg" # Icon
assert first_li.children[0].children[1] == "Home" # Text
# Second li with icon and link
second_li = ul_element.children[1]
assert second_li.tag == "li"
assert second_li.children[0].tag == "a"
assert second_li.children[0].attrs['href'] == "#"
assert second_li.children[0].children[0].tag == "svg" # Icon
assert second_li.children[0].children[1] == "Documents" # Text
# Third li with icon but no link (current page)
third_li = ul_element.children[2]
assert third_li.tag == "li"
assert third_li.children[0].tag == "span"
assert "inline-flex" in third_li.children[0].attrs['class']
assert "items-center" in third_li.children[0].attrs['class']
assert "gap-2" in third_li.children[0].attrs['class']
assert third_li.children[0].children[0].tag == "svg" # Icon
assert third_li.children[0].children[1] == "Add Document" # Text
return breadcrumbs_with_icons
# Run the tests
test_breadcrumbs_with_icons_fasthtml_examples()<div class="breadcrumbs text-sm">
<ul>
<li>
<a href="#"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" class="h-4 w-4 stroke-current"><path d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>Home</a> </li>
<li>
<a href="#"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" class="h-4 w-4 stroke-current"><path d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>Documents</a> </li>
<li>
<span class="inline-flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="none" class="h-4 w-4 stroke-current"><path d="M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>Add Document</span> </li>
</ul>
</div>test_breadcrumbs_with_max_width_fasthtml_examples ()
Test breadcrumbs with max-width from daisyUI v5 documentation.
def test_breadcrumbs_with_max_width_fasthtml_examples():
"""Test breadcrumbs with max-width from daisyUI v5 documentation."""
from fasthtml.common import Div, Ul, Li
from cjm_fasthtml_tailwind.utilities.typography import font_size, font_weight, font_family, text_color
from cjm_fasthtml_tailwind.utilities.sizing import max_w
# Breadcrumbs with max-width
max_width_breadcrumbs = Div(
Ul(
Li("Long text 1"),
Li("Long text 2"),
Li("Long text 3"),
Li("Long text 4"),
Li("Long text 5")
),
cls=combine_classes(breadcrumbs, max_w.xs, font_size.sm)
)
# Verify structure
assert max_width_breadcrumbs.tag == "div"
assert "breadcrumbs" in max_width_breadcrumbs.attrs['class']
assert "max-w-xs" in max_width_breadcrumbs.attrs['class']
assert "text-sm" in max_width_breadcrumbs.attrs['class']
# Verify ul element
ul_element = max_width_breadcrumbs.children[0]
assert ul_element.tag == "ul"
assert len(ul_element.children) == 5
# Verify all li elements
for i in range(5):
li = ul_element.children[i]
assert li.tag == "li"
assert li.children[0] == f"Long text {i + 1}"
return max_width_breadcrumbs
# Run the tests
test_breadcrumbs_with_max_width_fasthtml_examples()