Files
tabler/preview/pages/avatars.astro
T
codecalm f27c70ad38 Fix Prettier formatting regression and Astro type-check errors
`Render Modal as real markup` (#2742) reformatted ~140 files back to
tabs/semicolons, breaking the Prettier config added by the Astro
quality gates (#2749). Re-run prettier --write to restore it, and fix
the type errors it had been masking: HTMLElement casts and `this`
typing in ChangePasswordModalContent/ConfirmDeleteModalContent
scripts, plain-JS syntax in the inline-injected progress.astro script,
narrowed prop unions in Button/Check/Spinner, nullable icon svg casts
in Icons/Rating, and a duplicate firstLetters/invalid `placeholder`
attribute in Select.astro. Also fix shared/vitest.config.mts's stale
`astro/lib/**/*.test.ts` include glob left over from the shared source
restructure, which made `pnpm test` report zero test files.
2026-08-03 01:26:19 +02:00

167 lines
5.0 KiB
Plaintext

---
import DefaultLayout from '@shared/layouts/DefaultLayout.astro'
import Avatar from '@ui/Avatar.astro'
import AvatarUpload from '@ui/AvatarUpload.astro'
import AvatarList from '@ui/AvatarList.astro'
import Card from '@ui/Card.astro'
import CardBody from '@ui/CardBody.astro'
import CardTitle from '@ui/CardTitle.astro'
import people from '@data/people.json'
import { site } from '@shared/lib/site'
import { firstLetters } from '@shared/lib/string-format'
const iconIcons = ['user', 'settings', 'car', 'balloon', 'users', 'users-group', 'apps', 'ghost']
// themeColors keys (blue..cyan).
const colors = site.themeColors
const people8 = people.slice(0, 8)
const people5 = people.slice(0, 5)
const sizes = ['xxs', 'xs', 'sm', 'md', 'lg', 'xl']
const listSizes = ['xxs', 'xs', 'sm', 'md', 'lg']
const uploadSizes = ['xxs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl']
const statusColors = ['red', 'green', 'blue', 'yellow', 'secondary']
const brands = ['netflix', 'amazon', 'messenger', 'figma', 'twitch']
---
<DefaultLayout title="Avatars" pageMenu="base.avatars" pageHeader="Avatars">
<div class="row row-cards">
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Default avatar</CardTitle>
<Avatar />
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar with icon</CardTitle>
<div class="avatar-list">
{iconIcons.map((icon) => <Avatar icon={icon} />)}
</div>
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar with icon</CardTitle>
<div class="avatar-list">
{colors.map((color) => <Avatar icon="user" color={color} />)}
</div>
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Simple avatar</CardTitle>
<div class="avatar-list">
{people8.map((person) => <Avatar person={person} />)}
</div>
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar placeholder</CardTitle>
<div class="avatar-list">
{people8.map((person) => <Avatar placeholder={firstLetters(person.full_name)} />)}
</div>
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar shapes</CardTitle>
<div class="avatar-list">
<Avatar />
<Avatar class="rounded-circle" />
<Avatar class="rounded-0" />
</div>
</CardBody>
</Card>
</div>
<div class="col-6">
<Card>
<CardBody>
<CardTitle as="h2">Avatar sizes</CardTitle>
<div class="row">
<div class="col-6">
<div class="avatar-list">
{sizes.map((size) => <Avatar size={size} />)}
</div>
</div>
<div class="col-6">
<div class="avatar-list">
{sizes.map((size) => <Avatar placeholder="PK" size={size} />)}
</div>
</div>
</div>
</CardBody>
</Card>
</div>
<div class="col-6">
<Card>
<CardBody>
<CardTitle as="h2">Avatar lists</CardTitle>
<div class="row g-3">
{
listSizes.map((size) => (
<>
<div class="col-6">
<AvatarList stacked={true} size={size}>
{people5.map((person) => (
<Avatar person={person} />
))}
<Avatar icon="plus" link />
</AvatarList>
</div>
<div class="col-6">
<AvatarList stacked={true} size={size}>
{people5.map((person) => (
<Avatar person={person} class="rounded-circle" />
))}
<Avatar icon="plus" link class="rounded-circle" />
</AvatarList>
</div>
</>
))
}
</div>
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar placeholder</CardTitle>
{uploadSizes.map((size) => <AvatarUpload size={size} />)}
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar statuses</CardTitle>
{statusColors.map((color, i) => <Avatar personId={i + 1} class="rounded-circle" status={color} />)}
</CardBody>
</Card>
</div>
<div class="col-4">
<Card>
<CardBody>
<CardTitle as="h2">Avatar brands</CardTitle>
{brands.map((brand, i) => <Avatar personId={i + 1} brand={brand} />)}
</CardBody>
</Card>
</div>
</div>
</DefaultLayout>