breadcrumbs

Breadcrumbs helps users to navigate through the website.

test_breadcrumbs_basic_examples

 test_breadcrumbs_basic_examples ()

Test breadcrumbs utility.

Exported source
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()

source

test_breadcrumbs_basic_fasthtml_examples

 test_breadcrumbs_basic_fasthtml_examples ()

Test basic breadcrumbs example from daisyUI v5 documentation.

Exported source
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()
<div class="breadcrumbs text-sm">
  <ul>
    <li>
<a href="#">Home</a>    </li>
    <li>
<a href="#">Documents</a>    </li>
    <li>Add Document</li>
  </ul>
</div>

source

test_breadcrumbs_with_icons_fasthtml_examples

 test_breadcrumbs_with_icons_fasthtml_examples ()

Test breadcrumbs with icons from daisyUI v5 documentation.

Exported source
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>

source

test_breadcrumbs_with_max_width_fasthtml_examples

 test_breadcrumbs_with_max_width_fasthtml_examples ()

Test breadcrumbs with max-width from daisyUI v5 documentation.

Exported source
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()
<div class="breadcrumbs max-w-xs text-sm">
  <ul>
    <li>Long text 1</li>
    <li>Long text 2</li>
    <li>Long text 3</li>
    <li>Long text 4</li>
    <li>Long text 5</li>
  </ul>
</div>
test_func = test_breadcrumbs_basic_fasthtml_examples
app, rt = create_test_app(theme=DaisyUITheme.LIGHT)

@rt
def index():
    return create_test_page(test_func.__doc__.title().replace('.', ''), test_func())
server = start_test_server(app)
display(HTMX())
server.stop()
test_func = test_breadcrumbs_with_icons_fasthtml_examples
app, rt = create_test_app(theme=DaisyUITheme.LIGHT)

@rt
def index():
    return create_test_page(test_func.__doc__.title().replace('.', ''), test_func())
server = start_test_server(app)
display(HTMX())
server.stop()
test_func = test_breadcrumbs_with_max_width_fasthtml_examples
app, rt = create_test_app(theme=DaisyUITheme.LIGHT)

@rt
def index():
    return create_test_page(test_func.__doc__.title().replace('.', ''), test_func())
server = start_test_server(app)
display(HTMX())
server.stop()