Pagination
optics/paginationFreeComponent
Pagination with page navigation, next and previous links.
See it running
Open the demo on optics
optics.agusmayol.com.ar/components/paginationInstall it
npx shadcn@latest add https://optics.agusmayol.com.ar/r/pagination.jsonSource
1import * as React from "react";23import { cn } from "@/lib/utils";4import { Button } from "@/registry/optics/button";5import {6 ChevronLeftIcon,7 ChevronRightIcon,8 MoreHorizontalIcon,9} from "lucide-react";1011function Pagination({ className = "", ...props }) {12 return (13 <nav14 role="navigation"15 aria-label="pagination"16 data-slot="pagination"17 className={cn("mx-auto flex w-full justify-center", className)}18 {...props}19 />20 );21}2223function PaginationContent({ className = "", ...props }) {24 return (25 <ul26 data-slot="pagination-content"27 className={cn("gap-0.5 flex items-center", className)}28 {...props}29 />30 );31}3233function PaginationItem({ ...props } = {}) {34 return <li data-slot="pagination-item" {...props} />;35}3637function PaginationLink({38 className = "",39 isActive = false,40 size = "icon",41 ...props42}) {43 return (44 <Button45 variant={isActive ? "raised" : "ghost"}46 size={size}47 className={cn(className)}48 nativeButton={false}49 render={50 <a51 aria-current={isActive ? "page" : undefined}52 data-slot="pagination-link"53 data-active={isActive}54 {...props}55 />56 }57 />58 );59}6061function PaginationPrevious({ className = "", ...props }) {62 return (63 <PaginationLink64 aria-label="Go to previous page"65 size="default"66 className={cn("pl-2!", className)}67 {...props}68 >69 <ChevronLeftIcon data-icon="inline-start" />70 <span className="hidden sm:block">Previous</span>71 </PaginationLink>72 );73}7475function PaginationNext({ className = "", ...props }) {76 return (77 <PaginationLink78 aria-label="Go to next page"79 size="default"80 className={cn("pr-2!", className)}81 {...props}82 >83 <span className="hidden sm:block">Next</span>84 <ChevronRightIcon data-icon="inline-end" />85 </PaginationLink>86 );87}8889function PaginationEllipsis({ className = "", ...props }) {90 return (91 <span92 aria-hidden93 data-slot="pagination-ellipsis"94 className={cn(95 "size-7 items-center justify-center [&_svg:not([class*='size-'])]:size-3.5 flex",96 className,97 )}98 {...props}99 >100 <MoreHorizontalIcon />101 <span className="sr-only">More pages</span>102 </span>103 );104}105106Pagination.displayName = "Pagination";107PaginationContent.displayName = "PaginationContent";108PaginationEllipsis.displayName = "PaginationEllipsis";109PaginationItem.displayName = "PaginationItem";110PaginationLink.displayName = "PaginationLink";111PaginationNext.displayName = "PaginationNext";112PaginationPrevious.displayName = "PaginationPrevious";113114export {115// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from optics
All 79 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | optics | Components | Free | 5 deps | |
| Alertalert | optics | Components | Free | 4 deps | |
| Alert Dialogalert-dialog | optics | Components | Free | 4 deps | |
| Aspect Ratioaspect-ratio | optics | Components | Free | 2 deps | |
| Auto Heightauto-height | optics | Components | Free | 3 deps | |
| Avataravatar | optics | Components | Free | 3 deps | |
| Badgebadge | optics | Components | Free | 4 deps | |
| Breadcrumbbreadcrumb | optics | Components | Free | 4 deps |
