from nbdev.showdoc import *avatar
Avatars are used to show a thumbnail representation of an individual or business in the interface.
Base Avatar
The base avatar components:
Exported source
avatar = SingleValueFactory("avatar", "Avatar container component") # Avatar container
avatar_group = SingleValueFactory("avatar-group", "Container for multiple avatars") # Avatar groupAvatar Modifiers
Avatar modifier utilities:
Exported source
avatar_modifiers = SimpleFactory(
{
"online": "avatar-online",
"offline": "avatar-offline",
"placeholder": "avatar-placeholder"
},
"Avatar modifiers (online/offline indicators, placeholder)"
) # Avatar modifiersAvatar Test Examples
test_avatar_basic_examples
test_avatar_basic_examples ()
Test basic avatar utilities.
Exported source
def test_avatar_basic_examples():
"""Test basic avatar utilities."""
# Basic components
assert str(avatar) == "avatar"
assert str(avatar_group) == "avatar-group"
# With modifiers
assert str(avatar.hover) == "hover:avatar"
assert str(avatar_group.md) == "md:avatar-group"
# Run the tests
test_avatar_basic_examples()test_avatar_modifiers_examples
test_avatar_modifiers_examples ()
Test avatar modifier utilities.
Exported source
def test_avatar_modifiers_examples():
"""Test avatar modifier utilities."""
assert str(avatar_modifiers.online) == "avatar-online"
assert str(avatar_modifiers.offline) == "avatar-offline"
assert str(avatar_modifiers.placeholder) == "avatar-placeholder"
# With responsive modifiers
assert str(avatar_modifiers.online.hover) == "hover:avatar-online"
assert str(avatar_modifiers.placeholder.md) == "md:avatar-placeholder"
# Run the tests
test_avatar_modifiers_examples()test_avatar_basic_fasthtml_examples
test_avatar_basic_fasthtml_examples ()
Test basic avatar and avatar in custom sizes from daisyUI v5 documentation.
Exported source
def test_avatar_basic_fasthtml_examples():
"""Test basic avatar and avatar in custom sizes from daisyUI v5 documentation."""
from fasthtml.common import Div, Img
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.borders import rounded
# Basic avatar
basic_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"),
cls=combine_classes(w._24, rounded())
),
cls=str(avatar)
)
assert "avatar" in basic_avatar.attrs['class']
assert basic_avatar.children[0].tag == "div"
assert "w-24" in basic_avatar.children[0].attrs['class']
assert "rounded" in basic_avatar.children[0].attrs['class']
assert basic_avatar.children[0].children[0].tag == "img"
assert basic_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/batperson@192.webp"
# Avatar in custom sizes
size_32_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/superperson@192.webp"),
cls=combine_classes(w._32, rounded())
),
cls=str(avatar)
)
assert "avatar" in size_32_avatar.attrs['class']
assert "w-32" in size_32_avatar.children[0].attrs['class']
assert size_32_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/superperson@192.webp"
size_20_avatar = Div(
Div(
Img(
src="https://img.daisyui.com/images/profile/demo/superperson@192.webp",
alt="Tailwind-CSS-Avatar-component"
),
cls=combine_classes(w._20, rounded())
),
cls=str(avatar)
)
assert "w-20" in size_20_avatar.children[0].attrs['class']
assert size_20_avatar.children[0].children[0].attrs['alt'] == "Tailwind-CSS-Avatar-component"
size_16_avatar = Div(
Div(
Img(
src="https://img.daisyui.com/images/profile/demo/superperson@192.webp",
alt="Tailwind-CSS-Avatar-component"
),
cls=combine_classes(w._16, rounded())
),
cls=str(avatar)
)
assert "w-16" in size_16_avatar.children[0].attrs['class']
size_8_avatar = Div(
Div(
Img(
src="https://img.daisyui.com/images/profile/demo/superperson@192.webp",
alt="Tailwind-CSS-Avatar-component"
),
cls=combine_classes(w._8, rounded())
),
cls=str(avatar)
)
assert "w-8" in size_8_avatar.children[0].attrs['class']
# Return all examples in a Div
return Div(
basic_avatar,
size_32_avatar,
size_20_avatar,
size_16_avatar,
size_8_avatar
)
# Run the tests
test_avatar_basic_fasthtml_examples()<div>
<div class="avatar">
<div class="w-24 rounded">
<img src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-32 rounded">
<img src="https://img.daisyui.com/images/profile/demo/superperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-20 rounded">
<img src="https://img.daisyui.com/images/profile/demo/superperson@192.webp" alt="Tailwind-CSS-Avatar-component"> </div>
</div>
<div class="avatar">
<div class="w-16 rounded">
<img src="https://img.daisyui.com/images/profile/demo/superperson@192.webp" alt="Tailwind-CSS-Avatar-component"> </div>
</div>
<div class="avatar">
<div class="w-8 rounded">
<img src="https://img.daisyui.com/images/profile/demo/superperson@192.webp" alt="Tailwind-CSS-Avatar-component"> </div>
</div>
</div>test_func = test_avatar_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_avatar_rounded_and_mask_fasthtml_examples
test_avatar_rounded_and_mask_fasthtml_examples ()
Test avatar rounded and avatar with mask from daisyUI v5 documentation.
Exported source
def test_avatar_rounded_and_mask_fasthtml_examples():
"""Test avatar rounded and avatar with mask from daisyUI v5 documentation."""
from fasthtml.common import Div, Img
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.borders import rounded
from cjm_fasthtml_daisyui.components.layout.mask import mask, mask_styles
# Avatar rounded
rounded_xl_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/yellingwoman@192.webp"),
cls=combine_classes(w._24, rounded.xl)
),
cls=str(avatar)
)
assert "avatar" in rounded_xl_avatar.attrs['class']
assert "w-24" in rounded_xl_avatar.children[0].attrs['class']
assert "rounded-xl" in rounded_xl_avatar.children[0].attrs['class']
assert rounded_xl_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/yellingwoman@192.webp"
rounded_full_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/yellingcat@192.webp"),
cls=combine_classes(w._24, rounded.full)
),
cls=str(avatar)
)
assert "w-24" in rounded_full_avatar.children[0].attrs['class']
assert "rounded-full" in rounded_full_avatar.children[0].attrs['class']
assert rounded_full_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/yellingcat@192.webp"
# Avatar with mask
mask_heart_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/distracted3@192.webp"),
cls=combine_classes(mask, mask_styles.heart, w._24)
),
cls=str(avatar)
)
assert "avatar" in mask_heart_avatar.attrs['class']
assert "mask" in mask_heart_avatar.children[0].attrs['class']
assert "mask-heart" in mask_heart_avatar.children[0].attrs['class']
assert "w-24" in mask_heart_avatar.children[0].attrs['class']
assert mask_heart_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/distracted3@192.webp"
mask_squircle_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/distracted1@192.webp"),
cls=combine_classes(mask, mask_styles.squircle, w._24)
),
cls=str(avatar)
)
assert "mask" in mask_squircle_avatar.children[0].attrs['class']
assert "mask-squircle" in mask_squircle_avatar.children[0].attrs['class']
assert mask_squircle_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/distracted1@192.webp"
mask_hexagon_2_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/distracted2@192.webp"),
cls=combine_classes(mask, mask_styles.hexagon_2, w._24)
),
cls=str(avatar)
)
assert "mask" in mask_hexagon_2_avatar.children[0].attrs['class']
assert "mask-hexagon-2" in mask_hexagon_2_avatar.children[0].attrs['class']
assert mask_hexagon_2_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/distracted2@192.webp"
# Return all examples in a Div
return Div(
rounded_xl_avatar,
rounded_full_avatar,
mask_heart_avatar,
mask_squircle_avatar,
mask_hexagon_2_avatar
)
# Run the tests
test_avatar_rounded_and_mask_fasthtml_examples()<div>
<div class="avatar">
<div class="w-24 rounded-xl">
<img src="https://img.daisyui.com/images/profile/demo/yellingwoman@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-24 rounded-full">
<img src="https://img.daisyui.com/images/profile/demo/yellingcat@192.webp"> </div>
</div>
<div class="avatar">
<div class="mask mask-heart w-24">
<img src="https://img.daisyui.com/images/profile/demo/distracted3@192.webp"> </div>
</div>
<div class="avatar">
<div class="mask mask-squircle w-24">
<img src="https://img.daisyui.com/images/profile/demo/distracted1@192.webp"> </div>
</div>
<div class="avatar">
<div class="mask mask-hexagon-2 w-24">
<img src="https://img.daisyui.com/images/profile/demo/distracted2@192.webp"> </div>
</div>
</div>test_func = test_avatar_rounded_and_mask_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_avatar_group_fasthtml_examples
test_avatar_group_fasthtml_examples ()
Test avatar group and avatar group with counter from daisyUI v5 documentation.
Exported source
def test_avatar_group_fasthtml_examples():
"""Test avatar group and avatar group with counter from daisyUI v5 documentation."""
from fasthtml.common import Div, Img, Span
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.spacing import space
from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui
# Avatar group
avatar_group_example = Div(
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/averagebulk@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/wonderperson@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
cls=combine_classes(avatar_group, space.x(6, negative=True))
)
assert "avatar-group" in avatar_group_example.attrs['class']
assert "-space-x-6" in avatar_group_example.attrs['class']
assert len(avatar_group_example.children) == 4
for i, child in enumerate(avatar_group_example.children):
assert "avatar" in child.attrs['class']
assert "w-12" in child.children[0].attrs['class']
assert child.children[0].children[0].tag == "img"
# Avatar group with counter
avatar_group_counter = Div(
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/averagebulk@192.webp"),
cls=str(w._12)
),
cls=str(avatar)
),
Div(
Div(
Span("+99"),
cls=combine_classes(bg_dui.neutral, text_dui.neutral_content, w._12)
),
cls=combine_classes(avatar, avatar_modifiers.placeholder)
),
cls=combine_classes(avatar_group, space.x(6, negative=True))
)
assert "avatar-group" in avatar_group_counter.attrs['class']
assert "-space-x-6" in avatar_group_counter.attrs['class']
# Check the counter avatar
counter_avatar = avatar_group_counter.children[3]
assert "avatar" in counter_avatar.attrs['class']
assert "avatar-placeholder" in counter_avatar.attrs['class']
counter_div = counter_avatar.children[0]
assert "bg-neutral" in counter_div.attrs['class']
assert "text-neutral-content" in counter_div.attrs['class']
assert "w-12" in counter_div.attrs['class']
assert counter_div.children[0].tag == "span"
assert counter_div.children[0].children[0] == "+99"
# Return all examples in a Div
return Div(
avatar_group_example,
avatar_group_counter
)
# Run the tests
test_avatar_group_fasthtml_examples()<div>
<div class="avatar-group -space-x-6">
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/averagebulk@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/wonderperson@192.webp"> </div>
</div>
</div>
<div class="avatar-group -space-x-6">
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/batperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"> </div>
</div>
<div class="avatar">
<div class="w-12">
<img src="https://img.daisyui.com/images/profile/demo/averagebulk@192.webp"> </div>
</div>
<div class="avatar avatar-placeholder">
<div class="bg-neutral text-neutral-content w-12">
<span>+99</span> </div>
</div>
</div>
</div>test_func = test_avatar_group_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_avatar_ring_and_presence_fasthtml_examples
test_avatar_ring_and_presence_fasthtml_examples ()
Test avatar with ring and avatar with presence indicator from daisyUI v5 documentation.
Exported source
def test_avatar_ring_and_presence_fasthtml_examples():
"""Test avatar with ring and avatar with presence indicator from daisyUI v5 documentation."""
from fasthtml.common import Div, Img
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.borders import rounded
from cjm_fasthtml_tailwind.utilities.effects import ring
from cjm_fasthtml_daisyui.utilities.semantic_colors import ring_dui, ring_offset_dui
# Avatar with ring
ring_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"),
cls=combine_classes(
ring_dui.primary,
ring_offset_dui.base_100,
w._24,
rounded.full,
ring._2,
)
),
cls=str(avatar)
)
assert "avatar" in ring_avatar.attrs['class']
ring_div = ring_avatar.children[0]
assert "ring-primary" in ring_div.attrs['class']
assert "ring-offset-base-100" in ring_div.attrs['class']
assert "w-24" in ring_div.attrs['class']
assert "rounded-full" in ring_div.attrs['class']
assert "ring-2" in ring_div.attrs['class']
assert ring_div.children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"
# Avatar with presence indicator - online
online_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/gordon@192.webp"),
cls=combine_classes(w._24, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.online)
)
assert "avatar" in online_avatar.attrs['class']
assert "avatar-online" in online_avatar.attrs['class']
assert "w-24" in online_avatar.children[0].attrs['class']
assert "rounded-full" in online_avatar.children[0].attrs['class']
assert online_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/gordon@192.webp"
# Avatar with presence indicator - offline
offline_avatar = Div(
Div(
Img(src="https://img.daisyui.com/images/profile/demo/idiotsandwich@192.webp"),
cls=combine_classes(w._24, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.offline)
)
assert "avatar" in offline_avatar.attrs['class']
assert "avatar-offline" in offline_avatar.attrs['class']
assert offline_avatar.children[0].children[0].attrs['src'] == "https://img.daisyui.com/images/profile/demo/idiotsandwich@192.webp"
# Return all examples in a Div
return Div(
ring_avatar,
online_avatar,
offline_avatar
)
# Run the tests
test_avatar_ring_and_presence_fasthtml_examples()<div>
<div class="avatar">
<div class="ring-primary ring-offset-base-100 w-24 rounded-full ring-2">
<img src="https://img.daisyui.com/images/profile/demo/spiderperson@192.webp"> </div>
</div>
<div class="avatar avatar-online">
<div class="w-24 rounded-full">
<img src="https://img.daisyui.com/images/profile/demo/gordon@192.webp"> </div>
</div>
<div class="avatar avatar-offline">
<div class="w-24 rounded-full">
<img src="https://img.daisyui.com/images/profile/demo/idiotsandwich@192.webp"> </div>
</div>
</div>test_func = test_avatar_ring_and_presence_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_avatar_placeholder_fasthtml_examples
test_avatar_placeholder_fasthtml_examples ()
Test avatar placeholder from daisyUI v5 documentation.
Exported source
def test_avatar_placeholder_fasthtml_examples():
"""Test avatar placeholder from daisyUI v5 documentation."""
from fasthtml.common import Div, Span
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.borders import rounded
from cjm_fasthtml_tailwind.utilities.typography import font_size, font_weight, font_family, text_color
from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui
# Basic avatar placeholder
placeholder_d = Div(
Div(
Span("D", cls=str(font_size._3xl)),
cls=combine_classes(bg_dui.neutral, text_dui.neutral_content, w._24, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.placeholder)
)
assert "avatar" in placeholder_d.attrs['class']
assert "avatar-placeholder" in placeholder_d.attrs['class']
placeholder_div = placeholder_d.children[0]
assert "bg-neutral" in placeholder_div.attrs['class']
assert "text-neutral-content" in placeholder_div.attrs['class']
assert "w-24" in placeholder_div.attrs['class']
assert "rounded-full" in placeholder_div.attrs['class']
assert placeholder_div.children[0].tag == "span"
assert "text-3xl" in placeholder_div.children[0].attrs['class']
assert placeholder_div.children[0].children[0] == "D"
# Avatar placeholder with online status
online_placeholder = Div(
Div(
Span("AI", cls=str(font_size.xl)),
cls=combine_classes(bg_dui.neutral, text_dui.neutral_content, w._16, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.online, avatar_modifiers.placeholder)
)
assert "avatar" in online_placeholder.attrs['class']
assert "avatar-online" in online_placeholder.attrs['class']
assert "avatar-placeholder" in online_placeholder.attrs['class']
assert "w-16" in online_placeholder.children[0].attrs['class']
assert "text-xl" in online_placeholder.children[0].children[0].attrs['class']
assert online_placeholder.children[0].children[0].children[0] == "AI"
# Smaller avatar placeholder
placeholder_sy = Div(
Div(
Span("SY"),
cls=combine_classes(bg_dui.neutral, text_dui.neutral_content, w._12, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.placeholder)
)
assert "w-12" in placeholder_sy.children[0].attrs['class']
assert placeholder_sy.children[0].children[0].children[0] == "SY"
# Extra small avatar placeholder
placeholder_ui = Div(
Div(
Span("UI", cls=str(font_size.xs)),
cls=combine_classes(bg_dui.neutral, text_dui.neutral_content, w._8, rounded.full)
),
cls=combine_classes(avatar, avatar_modifiers.placeholder)
)
assert "w-8" in placeholder_ui.children[0].attrs['class']
assert "text-xs" in placeholder_ui.children[0].children[0].attrs['class']
assert placeholder_ui.children[0].children[0].children[0] == "UI"
# Return all examples in a Div
return Div(
placeholder_d,
online_placeholder,
placeholder_sy,
placeholder_ui
)
# Run the tests
test_avatar_placeholder_fasthtml_examples()<div>
<div class="avatar avatar-placeholder">
<div class="bg-neutral text-neutral-content w-24 rounded-full">
<span class="text-3xl">D</span> </div>
</div>
<div class="avatar avatar-online avatar-placeholder">
<div class="bg-neutral text-neutral-content w-16 rounded-full">
<span class="text-xl">AI</span> </div>
</div>
<div class="avatar avatar-placeholder">
<div class="bg-neutral text-neutral-content w-12 rounded-full">
<span>SY</span> </div>
</div>
<div class="avatar avatar-placeholder">
<div class="bg-neutral text-neutral-content w-8 rounded-full">
<span class="text-xs">UI</span> </div>
</div>
</div>test_func = test_avatar_placeholder_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()