chore: kanban template
This commit is contained in:
86
design/scratchpads/empty-states.tsx
Normal file
86
design/scratchpads/empty-states.tsx
Normal file
@@ -0,0 +1,86 @@
|
||||
// A scratchpad of the "non-happy" states for a list or page — loading, empty,
|
||||
// error, and skeleton. Each option is a real @mantine/core composition so the one
|
||||
// you pick drops straight into your app as a component variation. Open the Design
|
||||
// tab → Scratchpad to compare them on the canvas.
|
||||
import { Alert, Button, Center, Group, Loader, Paper, Skeleton, Stack, Text, ThemeIcon } from '@mantine/core'
|
||||
|
||||
export const title = 'Empty & loading states'
|
||||
|
||||
export const objects = [
|
||||
{
|
||||
name: 'Loading',
|
||||
mantine: ['Loader', 'Stack'],
|
||||
render: () => (
|
||||
<Stack align="center" gap="xs" maw={200} py="sm">
|
||||
<Loader size="md" color="grape" />
|
||||
<Text size="sm" c="dimmed">
|
||||
Loading your items…
|
||||
</Text>
|
||||
</Stack>
|
||||
),
|
||||
},
|
||||
{
|
||||
name: 'Empty',
|
||||
mantine: ['ThemeIcon', 'Stack', 'Button'],
|
||||
render: () => (
|
||||
<Stack align="center" gap="xs" maw={224} py="sm">
|
||||
<ThemeIcon size={46} radius="xl" variant="light" color="grape">
|
||||
<Text size="xl">✦</Text>
|
||||
</ThemeIcon>
|
||||
<Text size="sm" fw={600}>
|
||||
No items yet
|
||||
</Text>
|
||||
<Text size="xs" c="dimmed" ta="center">
|
||||
Create your first item to get started.
|
||||
</Text>
|
||||
<Button size="xs" variant="light" mt={4}>
|
||||
New item
|
||||
</Button>
|
||||
</Stack>
|
||||
),
|
||||
},
|
||||
{
|
||||
name: 'Error',
|
||||
mantine: ['Alert', 'Button'],
|
||||
render: () => (
|
||||
<Alert color="red" radius="md" title="Couldn't load" maw={236}>
|
||||
<Stack gap="xs">
|
||||
<Text size="xs">Something went wrong fetching your items.</Text>
|
||||
<Button size="xs" variant="white" color="red" w="fit-content">
|
||||
Try again
|
||||
</Button>
|
||||
</Stack>
|
||||
</Alert>
|
||||
),
|
||||
},
|
||||
{
|
||||
name: 'Skeleton list',
|
||||
mantine: ['Skeleton', 'Group'],
|
||||
render: () => (
|
||||
<Stack gap="sm" maw={236}>
|
||||
{[0, 1, 2].map((i) => (
|
||||
<Group key={i} wrap="nowrap" gap="sm">
|
||||
<Skeleton height={32} circle />
|
||||
<Stack gap={6} style={{ flex: 1 }}>
|
||||
<Skeleton height={8} radius="xl" />
|
||||
<Skeleton height={8} width="60%" radius="xl" />
|
||||
</Stack>
|
||||
</Group>
|
||||
))}
|
||||
</Stack>
|
||||
),
|
||||
},
|
||||
{
|
||||
name: 'Inline empty',
|
||||
mantine: ['Paper', 'Center'],
|
||||
render: () => (
|
||||
<Paper radius="md" p="lg" maw={236} style={{ borderStyle: 'dashed' }} withBorder>
|
||||
<Center>
|
||||
<Text size="sm" c="dimmed">
|
||||
Nothing here yet — drop something in.
|
||||
</Text>
|
||||
</Center>
|
||||
</Paper>
|
||||
),
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user