def test_tabs_special_fasthtml_examples():
"""Test special tabs variations from daisyUI v5 documentation."""
from fasthtml.common import Div, Input, A
from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, border_dui, text_dui
from cjm_fasthtml_tailwind.utilities.spacing import p
from cjm_fasthtml_tailwind.utilities.sizing import max_w, min_w
from cjm_fasthtml_tailwind.utilities.layout import overflow, position, z, start
# Radio tabs-lift + tab content on bottom
bottom_tabs = Div(
Input(type="radio", name="my_tabs_5", aria_label="Tab 1", cls=str(tab)),
Div(
"Tab content 1",
cls=combine_classes(tab_content, bg_dui.base_100, border_dui.base_300, p._6)
),
Input(type="radio", name="my_tabs_5", aria_label="Tab 2", checked="checked", cls=str(tab)),
Div(
"Tab content 2",
cls=combine_classes(tab_content, bg_dui.base_100, border_dui.base_300, p._6)
),
Input(type="radio", name="my_tabs_5", aria_label="Tab 3", cls=str(tab)),
Div(
"Tab content 3",
cls=combine_classes(tab_content, bg_dui.base_100, border_dui.base_300, p._6)
),
cls=combine_classes(tabs, tabs_styles.lift, tabs_placement.bottom)
)
# Verify bottom tabs structure
assert "tabs" in bottom_tabs.attrs['class']
assert "tabs-lift" in bottom_tabs.attrs['class']
assert "tabs-bottom" in bottom_tabs.attrs['class']
# Tabs with horizontal scroll when there's no space
scrollable_tabs = Div(
Div(
Input(type="radio", name="my_tabs_7", aria_label="Tab title 1", cls=combine_classes(tab, z(1))),
Div(
"Tab content 1",
cls=combine_classes(position.sticky, start(0), tab_content, max_w._60, border_dui.base_300, bg_dui.base_100, p._6)
),
Input(type="radio", name="my_tabs_7", aria_label="Tab title 2", checked="checked", cls=combine_classes(tab, z(1))),
Div(
"Tab content 2",
cls=combine_classes(position.sticky, start(0), tab_content, max_w._60, border_dui.base_300, bg_dui.base_100, p._6)
),
Input(type="radio", name="my_tabs_7", aria_label="Tab title 3", cls=combine_classes(tab, z(1))),
Div(
"Tab content 3",
cls=combine_classes(position.sticky, start(0), tab_content, max_w._60, border_dui.base_300, bg_dui.base_100, p._6)
),
Input(type="radio", name="my_tabs_7", aria_label="Tab title 4", cls=combine_classes(tab, z(1))),
Div(
"Tab content 4",
cls=combine_classes(position.sticky, start(0), tab_content, max_w._60, border_dui.base_300, bg_dui.base_100, p._6)
),
cls=combine_classes(tabs_styles.lift, tabs, min_w.max)
),
cls=combine_classes(overflow.x.auto, max_w._60)
)
# Verify scrollable tabs structure
assert "overflow-x-auto" in scrollable_tabs.attrs['class']
assert "max-w-60" in scrollable_tabs.attrs['class']
inner_div = scrollable_tabs.children[0]
assert "tabs-lift" in inner_div.attrs['class']
assert "tabs" in inner_div.attrs['class']
assert "min-w-max" in inner_div.attrs['class']
assert "z-1" in inner_div.children[0].attrs['class']
assert "sticky" in inner_div.children[1].attrs['class']
assert "start-0" in inner_div.children[1].attrs['class']
# Tabs with custom color
custom_color_tabs = Div(
A("Tab 1", role="tab", cls=str(tab)),
A(
"Tab 2",
role="tab",
cls=combine_classes(tab, tab_modifiers.active, text_dui.primary),
style="--tab-bg:orange; --tab-border-color:red"
),
A("Tab 3", role="tab", cls=str(tab)),
role="tablist",
cls=combine_classes(tabs, tabs_styles.lift)
)
# Verify custom color tabs
assert "tabs" in custom_color_tabs.attrs['class']
assert "tabs-lift" in custom_color_tabs.attrs['class']
second_tab = custom_color_tabs.children[1]
assert "tab-active" in second_tab.attrs['class']
assert "text-primary" in second_tab.attrs['class']
assert second_tab.attrs['style'] == "--tab-bg:orange; --tab-border-color:red"
return Div(bottom_tabs, scrollable_tabs, custom_color_tabs)
# Run the tests
test_tabs_special_fasthtml_examples()