pagination-12
Directory: paginations
Path: /src/lib/components/paginations/pagination-12.svelte
<script lang="ts">
import Input from '$lib/components/ui/input.svelte';
import Label from '$lib/components/ui/label.svelte';
import { usePagination } from '$lib/hooks/use-pagination.svelte';
import {
Pagination,
PaginationContent,
PaginationEllipsis,
PaginationItem,
PaginationLink
} from '$lib/components/ui/pagination';
import ChevronLeft from 'lucide-svelte/icons/chevron-left';
import ChevronRight from 'lucide-svelte/icons/chevron-right';
type PaginationProps = {
currentPage: number;
paginationItemsToDisplay?: number;
totalPages: number;
};
let {
currentPage = 1,
paginationItemsToDisplay = 5,
totalPages = 10
}: PaginationProps = $props();
const pagination = usePagination({
currentPage,
paginationItemsToDisplay,
totalPages
});
</script>
<div class="flex items-center justify-between gap-4">
<!-- Pagination -->
<div>
<Pagination>
<PaginationContent>
<!-- Previous page button -->
<PaginationItem>
<PaginationLink
class="aria-disabled:pointer-events-none aria-disabled:opacity-50"
href={currentPage === 1 ? undefined : `#/page/${currentPage - 1}`}
aria-label="Go to previous page"
aria-disabled={currentPage === 1 ? true : undefined}
role={currentPage === 1 ? 'link' : undefined}
>
<ChevronLeft size={16} stroke-width={2} aria-hidden="true" />
</PaginationLink>
</PaginationItem>
<!-- Left ellipsis (...) -->
{#if pagination.showLeftEllipsis}
<PaginationItem>
<PaginationEllipsis />
</PaginationItem>
{/if}
<!-- Page number links -->
{#each pagination.pages as page (page)}
<PaginationItem>
<PaginationLink href="#/page/{page}" isActive={page === currentPage}>
{page}
</PaginationLink>
</PaginationItem>
{/each}
<!-- Right ellipsis (...) -->
{#if pagination.showRightEllipsis}
<PaginationItem>
<PaginationEllipsis />
</PaginationItem>
{/if}
<!-- Next page button -->
<PaginationItem>
<PaginationLink
class="aria-disabled:pointer-events-none aria-disabled:opacity-50"
href={currentPage === totalPages ? undefined : `#/page/${currentPage + 1}`}
aria-label="Go to next page"
aria-disabled={currentPage === totalPages ? true : undefined}
role={currentPage === totalPages ? 'link' : undefined}
>
<ChevronRight size={16} stroke-width={2} aria-hidden="true" />
</PaginationLink>
</PaginationItem>
</PaginationContent>
</Pagination>
</div>
<!-- Go to page input -->
<div class="flex items-center gap-3">
<Label for="pagination-input" class="whitespace-nowrap">Go to page</Label>
<Input id="pagination-input" type="text" class="w-14" value={String(currentPage)} />
</div>
</div>
Discover/Contribute
Explore the original Origin UI or contribute by suggesting new components and improvements.