indicator

Indicators are used to place an element on the corner of another element.

Base Indicator

Exported source
indicator = SingleValueFactory("indicator", "Base indicator container element") # Base indicator component
indicator_item = SingleValueFactory("indicator-item", "Indicator item part that will be placed on the corner of sibling") # Indicator item part

Indicator Placement


source

IndicatorPlacement

 IndicatorPlacement (value, names=None, module=None, qualname=None,
                     type=None, start=1, boundary=None)

*str(object=’’) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.*

Exported source
class IndicatorPlacement(str, Enum):
    START = "start"
    CENTER = "center"
    END = "end"
    TOP = "top"
    MIDDLE = "middle"
    BOTTOM = "bottom"
 
indicator_placement = enums_to_simple_factory(indicator, [IndicatorPlacement], "indicator placement (start, end)") # indicator directions

Indicator Test Examples


source

test_indicator_basic_examples

 test_indicator_basic_examples ()

Test basic indicator utilities.

Exported source
def test_indicator_basic_examples():
    """Test basic indicator utilities."""
    assert str(indicator) == "indicator"
    assert str(indicator_item) == "indicator-item"
    
    # With modifiers
    assert str(indicator.hover) == "hover:indicator"
    assert str(indicator_item.md) == "md:indicator-item"

# Run the tests
test_indicator_basic_examples()

source

test_indicator_placement_examples

 test_indicator_placement_examples ()

Test indicator placement options.

Exported source
def test_indicator_placement_examples():
    """Test indicator placement options."""
    # Horizontal alignment
    assert str(indicator_placement.start) == "indicator-start"
    assert str(indicator_placement.center) == "indicator-center"
    assert str(indicator_placement.end) == "indicator-end"
    
    # Vertical position
    assert str(indicator_placement.top) == "indicator-top"
    assert str(indicator_placement.middle) == "indicator-middle"
    assert str(indicator_placement.bottom) == "indicator-bottom"

# Run the tests
test_indicator_placement_examples()

source

test_indicator_basic_fasthtml_examples

 test_indicator_basic_fasthtml_examples ()

Test basic indicator examples from daisyUI v5 documentation.

Exported source
def test_indicator_basic_fasthtml_examples():
    """Test basic indicator examples from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span, Button
    from cjm_fasthtml_tailwind.utilities.sizing import h, w
    from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import place_items, grid_display
    from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui
    from cjm_fasthtml_daisyui.components.data_display.badge import badge, badge_colors
    from cjm_fasthtml_daisyui.components.data_display.status import status, status_colors
    from cjm_fasthtml_tailwind.utilities.layout import display_tw
    
    # Status Indicator
    status_indicator = Div(
        Span(cls=combine_classes(indicator_item, status, status_colors.success)),
        Div(
            "content",
            cls=combine_classes(bg_dui.base_300, grid_display, h._32, w._32, place_items.center)
        ),
        cls=str(indicator)
    )
    
    # Verify status indicator structure
    assert "indicator" in status_indicator.attrs['class']
    assert status_indicator.children[0].tag == "span"
    assert "indicator-item" in status_indicator.children[0].attrs['class']
    assert "status" in status_indicator.children[0].attrs['class']
    assert "status-success" in status_indicator.children[0].attrs['class']
    assert status_indicator.children[1].tag == "div"
    assert "bg-base-300" in status_indicator.children[1].attrs['class']
    assert "grid" in status_indicator.children[1].attrs['class']
    assert "h-32" in status_indicator.children[1].attrs['class']
    assert "w-32" in status_indicator.children[1].attrs['class']
    assert "place-items-center" in status_indicator.children[1].attrs['class']
    assert status_indicator.children[1].children[0] == "content"
    
    # Badge as indicator
    badge_indicator = Div(
        Span("New", cls=combine_classes(indicator_item, badge, badge_colors.primary)),
        Div(
            "content",
            cls=combine_classes(bg_dui.base_300, grid_display, h._32, w._32, place_items.center)
        ),
        cls=str(indicator)
    )
    
    # Verify badge indicator structure
    assert "indicator" in badge_indicator.attrs['class']
    assert badge_indicator.children[0].tag == "span"
    assert "indicator-item" in badge_indicator.children[0].attrs['class']
    assert "badge" in badge_indicator.children[0].attrs['class']
    assert "badge-primary" in badge_indicator.children[0].attrs['class']
    assert badge_indicator.children[0].children[0] == "New"
    assert badge_indicator.children[1].children[0] == "content"
    
    return Div(status_indicator, badge_indicator)

# Run the tests
test_indicator_basic_fasthtml_examples()
<div>
  <div class="indicator">
<span class="indicator-item status status-success"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item badge badge-primary">New</span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
</div>
test_func = test_indicator_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()

source

test_indicator_for_components_fasthtml_examples

 test_indicator_for_components_fasthtml_examples ()

Test indicator with various components from daisyUI v5 documentation.

Exported source
def test_indicator_for_components_fasthtml_examples():
    """Test indicator with various components from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span, Button, A, Img, Input
    from cjm_fasthtml_tailwind.utilities.sizing import h, w
    from cjm_fasthtml_tailwind.utilities.borders import rounded
    from cjm_fasthtml_daisyui.components.actions.button import btn
    from cjm_fasthtml_daisyui.components.data_display.badge import badge, badge_colors
    from cjm_fasthtml_daisyui.components.navigation.tabs import tabs, tabs_styles, tab, tab_modifiers
    from cjm_fasthtml_daisyui.components.data_display.avatar import avatar
    from cjm_fasthtml_daisyui.components.data_input.text_input import text_input, text_input_styles
    from cjm_fasthtml_daisyui.components.layout.divider import divider
    
    # For button
    button_indicator = Div(
        Span("12", cls=combine_classes(indicator_item, badge, badge_colors.secondary)),
        Button("inbox", cls=str(btn)),
        cls=str(indicator)
    )
    
    # Verify button indicator
    assert "indicator" in button_indicator.attrs['class']
    assert button_indicator.children[0].tag == "span"
    assert "indicator-item" in button_indicator.children[0].attrs['class']
    assert "badge" in button_indicator.children[0].attrs['class']
    assert "badge-secondary" in button_indicator.children[0].attrs['class']
    assert button_indicator.children[0].children[0] == "12"
    assert button_indicator.children[1].tag == "button"
    assert "btn" in button_indicator.children[1].attrs['class']
    assert button_indicator.children[1].children[0] == "inbox"
    
    # For tab
    tab_indicator = Div(
        A("Messages", cls=str(tab)),
        A(
            "Notifications",
            Span("8", cls=combine_classes(indicator_item, badge)),
            cls=combine_classes(indicator, tab, tab_modifiers.active)
        ),
        A("Requests", cls=str(tab)),
        cls=combine_classes(tabs, tabs_styles.lift)
    )
    
    # Verify tab indicator
    assert "tabs" in tab_indicator.attrs['class']
    assert "tabs-lift" in tab_indicator.attrs['class']
    assert tab_indicator.children[0].tag == "a"
    assert "tab" in tab_indicator.children[0].attrs['class']
    assert tab_indicator.children[0].children[0] == "Messages"
    assert tab_indicator.children[1].tag == "a"
    assert "indicator" in tab_indicator.children[1].attrs['class']
    assert "tab" in tab_indicator.children[1].attrs['class']
    assert "tab-active" in tab_indicator.children[1].attrs['class']
    assert tab_indicator.children[1].children[0] == "Notifications"
    assert tab_indicator.children[1].children[1].tag == "span"
    assert "indicator-item" in tab_indicator.children[1].children[1].attrs['class']
    assert "badge" in tab_indicator.children[1].children[1].attrs['class']
    assert tab_indicator.children[1].children[1].children[0] == "8"
    
    # For avatar
    avatar_indicator = Div(
        Span("Justice", cls=combine_classes(indicator_item, badge, badge_colors.secondary)),
        Div(
            Img(
                alt="Tailwind CSS examples",
                src="https://img.daisyui.com/images/profile/demo/[email protected]"
            ),
            cls=combine_classes(h._20, w._20, rounded.lg)
        ),
        cls=combine_classes(avatar, indicator)
    )
    
    # Verify avatar indicator
    assert "avatar" in avatar_indicator.attrs['class']
    assert "indicator" in avatar_indicator.attrs['class']
    assert avatar_indicator.children[0].tag == "span"
    assert "indicator-item" in avatar_indicator.children[0].attrs['class']
    assert "badge" in avatar_indicator.children[0].attrs['class']
    assert "badge-secondary" in avatar_indicator.children[0].attrs['class']
    assert avatar_indicator.children[0].children[0] == "Justice"
    assert avatar_indicator.children[1].tag == "div"
    assert "h-20" in avatar_indicator.children[1].attrs['class']
    assert "w-20" in avatar_indicator.children[1].attrs['class']
    assert "rounded-lg" in avatar_indicator.children[1].attrs['class']
    assert avatar_indicator.children[1].children[0].tag == "img"
    
    # For an input
    input_indicator = Div(
        Span("Required", cls=combine_classes(indicator_item, badge)),
        Input(
            type="text",
            placeholder="Your email address",
            cls=combine_classes(text_input)
        ),
        cls=str(indicator)
    )
    
    # Verify input indicator
    assert "indicator" in input_indicator.attrs['class']
    assert input_indicator.children[0].tag == "span"
    assert "indicator-item" in input_indicator.children[0].attrs['class']
    assert "badge" in input_indicator.children[0].attrs['class']
    assert input_indicator.children[0].children[0] == "Required"
    assert input_indicator.children[1].tag == "input"
    assert input_indicator.children[1].attrs['type'] == "text"
    assert input_indicator.children[1].attrs['placeholder'] == "Your email address"
    assert "input" in input_indicator.children[1].attrs['class']
    
    return Div(
        button_indicator,
        Div(cls=str(divider)),
        tab_indicator, 
        Div(cls=str(divider)),
        avatar_indicator, 
        Div(cls=str(divider)),
        input_indicator
    )

# Run the tests
test_indicator_for_components_fasthtml_examples()
<div>
  <div class="indicator">
<span class="indicator-item badge badge-secondary">12</span><button class="btn">inbox</button>  </div>
  <div class="divider"></div>
  <div class="tabs tabs-lift">
<a href="#" class="tab">Messages</a><a href="#" class="indicator tab tab-active">Notifications<span class="indicator-item badge">8</span></a><a href="#" class="tab">Requests</a>  </div>
  <div class="divider"></div>
  <div class="avatar indicator">
<span class="indicator-item badge badge-secondary">Justice</span>    <div class="h-20 w-20 rounded-lg">
<img alt="Tailwind CSS examples" src="https://img.daisyui.com/images/profile/demo/[email protected]">    </div>
  </div>
  <div class="divider"></div>
  <div class="indicator">
<span class="indicator-item badge">Required</span>    <input type="text" placeholder="Your email address" class="input">
  </div>
</div>
test_func = test_indicator_for_components_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()

source

test_indicator_card_fasthtml_examples

 test_indicator_card_fasthtml_examples ()

Test button as indicator for card from daisyUI v5 documentation.

Exported source
def test_indicator_card_fasthtml_examples():
    """Test button as indicator for card from daisyUI v5 documentation."""
    from fasthtml.common import Div, Button, H2, P
    from cjm_fasthtml_tailwind.utilities.effects import shadow
    from cjm_fasthtml_tailwind.utilities.borders import border
    from cjm_fasthtml_daisyui.components.actions.button import btn, btn_colors
    from cjm_fasthtml_daisyui.components.data_display.card import card, card_body, card_title
    from cjm_fasthtml_daisyui.utilities.semantic_colors import border_dui
    
    # A button as an indicator for a card
    card_with_indicator = Div(
        Div(
            Button("Apply", cls=combine_classes(btn, btn_colors.primary)),
            cls=combine_classes(indicator_item, indicator_placement.bottom)
        ),
        Div(
            Div(
                H2("Job Title", cls=str(card_title)),
                P("Rerum reiciendis beatae tenetur excepturi"),
                cls=str(card_body)
            ),
            cls=combine_classes(card, border_dui.base_300, border, shadow.sm)
        ),
        cls=str(indicator)
    )
    
    # Verify structure
    assert "indicator" in card_with_indicator.attrs['class']
    
    # Verify indicator item (button container)
    indicator_item_div = card_with_indicator.children[0]
    assert "indicator-item" in indicator_item_div.attrs['class']
    assert "indicator-bottom" in indicator_item_div.attrs['class']
    
    # Verify button
    apply_button = indicator_item_div.children[0]
    assert apply_button.tag == "button"
    assert "btn" in apply_button.attrs['class']
    assert "btn-primary" in apply_button.attrs['class']
    assert apply_button.children[0] == "Apply"
    
    # Verify card
    card_div = card_with_indicator.children[1]
    assert "card" in card_div.attrs['class']
    assert "border-base-300" in card_div.attrs['class']
    assert "border" in card_div.attrs['class']
    assert "shadow-sm" in card_div.attrs['class']
    
    # Verify card body
    card_body_div = card_div.children[0]
    assert "card-body" in card_body_div.attrs['class']
    
    # Verify card title
    title_element = card_body_div.children[0]
    assert title_element.tag == "h2"
    assert "card-title" in title_element.attrs['class']
    assert title_element.children[0] == "Job Title"
    
    # Verify card description
    desc_element = card_body_div.children[1]
    assert desc_element.tag == "p"
    assert desc_element.children[0] == "Rerum reiciendis beatae tenetur excepturi"
    
    return Div(card_with_indicator)

# Run the tests
test_indicator_card_fasthtml_examples()
<div>
  <div class="indicator">
    <div class="indicator-item indicator-bottom">
<button class="btn btn-primary">Apply</button>    </div>
    <div class="card border-base-300 &lt;cjm_fasthtml_tailwind.utilities.borders.BorderWidthFactory object at 0x7f16dc28abd0&gt; shadow-sm">
      <div class="card-body">
        <h2 class="card-title">Job Title</h2>
        <p>Rerum reiciendis beatae tenetur excepturi</p>
      </div>
    </div>
  </div>
</div>
test_func = test_indicator_card_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()

source

test_indicator_image_overlay_fasthtml_examples

 test_indicator_image_overlay_fasthtml_examples ()

Test indicator in center of image from daisyUI v5 documentation.

Exported source
def test_indicator_image_overlay_fasthtml_examples():
    """Test indicator in center of image from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span, Img
    
    # In center of an image
    image_overlay_indicator = Div(
        Span(
            "Only available for Pro users",
            cls=combine_classes(
                indicator_item,
                indicator_placement.center,
                indicator_placement.middle
            )
        ),
        Img(
            alt="Tailwind CSS examples",
            src="https://img.daisyui.com/images/stock/photo-1606107557195-0e29a4b5b4aa.webp"
        ),
        cls=str(indicator)
    )
    
    # Verify structure
    assert "indicator" in image_overlay_indicator.attrs['class']
    
    # Verify indicator item
    indicator_span = image_overlay_indicator.children[0]
    assert indicator_span.tag == "span"
    assert "indicator-item" in indicator_span.attrs['class']
    assert "indicator-center" in indicator_span.attrs['class']
    assert "indicator-middle" in indicator_span.attrs['class']
    assert indicator_span.children[0] == "Only available for Pro users"
    
    # Verify image
    img_element = image_overlay_indicator.children[1]
    assert img_element.tag == "img"
    assert img_element.attrs['alt'] == "Tailwind CSS examples"
    assert img_element.attrs['src'] == "https://img.daisyui.com/images/stock/photo-1606107557195-0e29a4b5b4aa.webp"
    
    return Div(image_overlay_indicator)

# Run the tests
test_indicator_image_overlay_fasthtml_examples()
<div>
  <div class="indicator">
<span class="indicator-item indicator-center indicator-middle">Only available for Pro users</span><img alt="Tailwind CSS examples" src="https://img.daisyui.com/images/stock/photo-1606107557195-0e29a4b5b4aa.webp">  </div>
</div>
test_func = test_indicator_image_overlay_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()

source

test_indicator_positions_fasthtml_examples

 test_indicator_positions_fasthtml_examples ()

Test all indicator position combinations from daisyUI v5 documentation.

Exported source
def test_indicator_positions_fasthtml_examples():
    """Test all indicator position combinations from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span
    from cjm_fasthtml_tailwind.utilities.sizing import h, w
    from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import place_items, grid_display
    from cjm_fasthtml_tailwind.utilities.layout import display_tw
    from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui
    from cjm_fasthtml_daisyui.components.data_display.badge import badge, badge_colors
    from cjm_fasthtml_daisyui.components.layout.divider import divider, divider_directions
    
    # Helper function to create indicator box
    def create_indicator_box(*position_classes):
        return Div(
            Span(cls=combine_classes(indicator_item, *position_classes, badge, badge_colors.secondary)),
            Div(
                "content",
                cls=combine_classes(bg_dui.base_300, grid_display, h._32, w._32, place_items.center)
            ),
            cls=str(indicator)
        )
    
    # indicator-top (default) indicator-start
    top_start = create_indicator_box(indicator_placement.start)
    assert "indicator" in top_start.attrs['class']
    assert "indicator-start" in top_start.children[0].attrs['class']
    assert "badge-secondary" in top_start.children[0].attrs['class']
    
    # indicator-top (default) indicator-center
    top_center = create_indicator_box(indicator_placement.center)
    assert "indicator-center" in top_center.children[0].attrs['class']
    
    # indicator-top (default) indicator-end (default)
    top_end = create_indicator_box()
    assert "indicator-item" in top_end.children[0].attrs['class']
    assert "badge" in top_end.children[0].attrs['class']
    
    # indicator-middle indicator-start
    middle_start = create_indicator_box(indicator_placement.middle, indicator_placement.start)
    assert "indicator-middle" in middle_start.children[0].attrs['class']
    assert "indicator-start" in middle_start.children[0].attrs['class']
    
    # indicator-middle indicator-center
    middle_center = create_indicator_box(indicator_placement.middle, indicator_placement.center)
    assert "indicator-middle" in middle_center.children[0].attrs['class']
    assert "indicator-center" in middle_center.children[0].attrs['class']
    
    # indicator-middle indicator-end (default)
    middle_end = create_indicator_box(indicator_placement.middle)
    assert "indicator-middle" in middle_end.children[0].attrs['class']
    
    # indicator-bottom indicator-start
    bottom_start = create_indicator_box(indicator_placement.bottom, indicator_placement.start)
    assert "indicator-bottom" in bottom_start.children[0].attrs['class']
    assert "indicator-start" in bottom_start.children[0].attrs['class']
    
    # indicator-bottom indicator-center
    bottom_center = create_indicator_box(indicator_placement.bottom, indicator_placement.center)
    assert "indicator-bottom" in bottom_center.children[0].attrs['class']
    assert "indicator-center" in bottom_center.children[0].attrs['class']
    
    # indicator-bottom indicator-end (default)
    bottom_end = create_indicator_box(indicator_placement.bottom)
    assert "indicator-bottom" in bottom_end.children[0].attrs['class']
    
    return Div(
        top_start,
        top_center,
        top_end,        
        middle_start,        
        middle_center,        
        middle_end,        
        bottom_start,        
        bottom_center,        
        bottom_end,
        cls=combine_classes(divider, h._48)
    )

# Run the tests
test_indicator_positions_fasthtml_examples()
<div class="divider h-48">
  <div class="indicator">
<span class="indicator-item indicator-start badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-center badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-middle indicator-start badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-middle indicator-center badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-middle badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-bottom indicator-start badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-bottom indicator-center badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
  <div class="indicator">
<span class="indicator-item indicator-bottom badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
</div>
test_func = test_indicator_positions_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()

source

test_indicator_multiple_fasthtml_examples

 test_indicator_multiple_fasthtml_examples ()

Test multiple indicators from daisyUI v5 documentation.

Exported source
def test_indicator_multiple_fasthtml_examples():
    """Test multiple indicators from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span
    from cjm_fasthtml_tailwind.utilities.sizing import h, w
    from cjm_fasthtml_tailwind.utilities.layout import display_tw
    from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import place_items, grid_display
    from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui
    from cjm_fasthtml_daisyui.components.data_display.badge import badge
    
    # Multiple indicators
    multiple_indicators = Div(
        Span("↖︎", cls=combine_classes(indicator_item, indicator_placement.top, indicator_placement.start, badge)),
        Span("↑", cls=combine_classes(indicator_item, indicator_placement.top, indicator_placement.center, badge)),
        Span("↗︎", cls=combine_classes(indicator_item, indicator_placement.top, indicator_placement.end, badge)),
        Span("←", cls=combine_classes(indicator_item, indicator_placement.middle, indicator_placement.start, badge)),
        Span("●", cls=combine_classes(indicator_item, indicator_placement.middle, indicator_placement.center, badge)),
        Span("→", cls=combine_classes(indicator_item, indicator_placement.middle, indicator_placement.end, badge)),
        Span("↙︎", cls=combine_classes(indicator_item, indicator_placement.bottom, indicator_placement.start, badge)),
        Span("↓", cls=combine_classes(indicator_item, indicator_placement.bottom, indicator_placement.center, badge)),
        Span("↘︎", cls=combine_classes(indicator_item, indicator_placement.bottom, indicator_placement.end, badge)),
        Div(
            "Box",
            cls=combine_classes(bg_dui.base_300, grid_display, h._32, w._60, place_items.center)
        ),
        cls=str(indicator)
    )
    
    # Verify structure
    assert "indicator" in multiple_indicators.attrs['class']
    
    # Verify all 9 indicators
    assert len(multiple_indicators.children) == 10  # 9 indicators + 1 content box
    
    # Top row indicators
    assert multiple_indicators.children[0].children[0] == "↖︎"
    assert "indicator-top" in multiple_indicators.children[0].attrs['class']
    assert "indicator-start" in multiple_indicators.children[0].attrs['class']
    
    assert multiple_indicators.children[1].children[0] == "↑"
    assert "indicator-top" in multiple_indicators.children[1].attrs['class']
    assert "indicator-center" in multiple_indicators.children[1].attrs['class']
    
    assert multiple_indicators.children[2].children[0] == "↗︎"
    assert "indicator-top" in multiple_indicators.children[2].attrs['class']
    assert "indicator-end" in multiple_indicators.children[2].attrs['class']
    
    # Middle row indicators
    assert multiple_indicators.children[3].children[0] == "←"
    assert "indicator-middle" in multiple_indicators.children[3].attrs['class']
    assert "indicator-start" in multiple_indicators.children[3].attrs['class']
    
    assert multiple_indicators.children[4].children[0] == "●"
    assert "indicator-middle" in multiple_indicators.children[4].attrs['class']
    assert "indicator-center" in multiple_indicators.children[4].attrs['class']
    
    assert multiple_indicators.children[5].children[0] == "→"
    assert "indicator-middle" in multiple_indicators.children[5].attrs['class']
    assert "indicator-end" in multiple_indicators.children[5].attrs['class']
    
    # Bottom row indicators
    assert multiple_indicators.children[6].children[0] == "↙︎"
    assert "indicator-bottom" in multiple_indicators.children[6].attrs['class']
    assert "indicator-start" in multiple_indicators.children[6].attrs['class']
    
    assert multiple_indicators.children[7].children[0] == "↓"
    assert "indicator-bottom" in multiple_indicators.children[7].attrs['class']
    assert "indicator-center" in multiple_indicators.children[7].attrs['class']
    
    assert multiple_indicators.children[8].children[0] == "↘︎"
    assert "indicator-bottom" in multiple_indicators.children[8].attrs['class']
    assert "indicator-end" in multiple_indicators.children[8].attrs['class']
    
    # Verify content box
    content_box = multiple_indicators.children[9]
    assert content_box.tag == "div"
    assert "bg-base-300" in content_box.attrs['class']
    assert "h-32" in content_box.attrs['class']
    assert "w-60" in content_box.attrs['class']
    assert "place-items-center" in content_box.attrs['class']
    assert content_box.children[0] == "Box"
    
    return Div(multiple_indicators)

# Run the tests
test_indicator_multiple_fasthtml_examples()
<div>
  <div class="indicator">
<span class="indicator-item indicator-top indicator-start badge">↖︎</span><span class="indicator-item indicator-top indicator-center badge"></span><span class="indicator-item indicator-top indicator-end badge">↗︎</span><span class="indicator-item indicator-middle indicator-start badge"></span><span class="indicator-item indicator-middle indicator-center badge"></span><span class="indicator-item indicator-middle indicator-end badge"></span><span class="indicator-item indicator-bottom indicator-start badge">↙︎</span><span class="indicator-item indicator-bottom indicator-center badge"></span><span class="indicator-item indicator-bottom indicator-end badge">↘︎</span>    <div class="bg-base-300 grid h-32 w-60 place-items-center">Box</div>
  </div>
</div>
test_func = test_indicator_multiple_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()

source

test_indicator_responsive_fasthtml_examples

 test_indicator_responsive_fasthtml_examples ()

Test responsive indicator from daisyUI v5 documentation.

Exported source
def test_indicator_responsive_fasthtml_examples():
    """Test responsive indicator from daisyUI v5 documentation."""
    from fasthtml.common import Div, Span
    from cjm_fasthtml_tailwind.utilities.sizing import h, w
    from cjm_fasthtml_tailwind.utilities.layout import display_tw
    from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import place_items, grid_display
    from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui
    from cjm_fasthtml_daisyui.components.data_display.badge import badge, badge_colors
    
    # Responsive indicator
    responsive_indicator = Div(
        Span(
            cls=combine_classes(
                indicator_item,
                indicator_placement.start,
                indicator_placement.middle.sm,
                indicator_placement.bottom.md,
                indicator_placement.center.lg,
                indicator_placement.end.xl,
                badge,
                badge_colors.secondary
            )
        ),
        Div(
            "content",
            cls=combine_classes(bg_dui.base_300, grid_display, h._32, w._32, place_items.center)
        ),
        cls=str(indicator)
    )
    
    # Verify structure
    assert "indicator" in responsive_indicator.attrs['class']
    
    # Verify indicator item with responsive classes
    indicator_span = responsive_indicator.children[0]
    assert indicator_span.tag == "span"
    assert "indicator-item" in indicator_span.attrs['class']
    assert "indicator-start" in indicator_span.attrs['class']
    assert "sm:indicator-middle" in indicator_span.attrs['class']
    assert "md:indicator-bottom" in indicator_span.attrs['class']
    assert "lg:indicator-center" in indicator_span.attrs['class']
    assert "xl:indicator-end" in indicator_span.attrs['class']
    assert "badge" in indicator_span.attrs['class']
    assert "badge-secondary" in indicator_span.attrs['class']
    
    # Verify content box
    content_box = responsive_indicator.children[1]
    assert content_box.tag == "div"
    assert "bg-base-300" in content_box.attrs['class']
    assert "grid" in content_box.attrs['class']
    assert "h-32" in content_box.attrs['class']
    assert "w-32" in content_box.attrs['class']
    assert "place-items-center" in content_box.attrs['class']
    assert content_box.children[0] == "content"
    
    return Div(responsive_indicator)

# Run the tests
test_indicator_responsive_fasthtml_examples()
<div>
  <div class="indicator">
<span class="indicator-item indicator-start sm:indicator-middle md:indicator-bottom lg:indicator-center xl:indicator-end badge badge-secondary"></span>    <div class="bg-base-300 grid h-32 w-32 place-items-center">content</div>
  </div>
</div>
test_func = test_indicator_responsive_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()