chore: refact pagination cpn

This commit is contained in:
oiov
2024-08-21 10:00:04 +08:00
parent 1bcc0a7ac8
commit 05ea981234
7 changed files with 196 additions and 524 deletions
+2 -4
View File
@@ -1,10 +1,8 @@
"use client";
import { useState } from "react";
import Link from "next/link";
import { Pagination } from "@nextui-org/pagination";
import { User } from "@prisma/client";
import { ArrowLeft, ArrowRight, PenLine, RefreshCwIcon } from "lucide-react";
import { PenLine, RefreshCwIcon } from "lucide-react";
import useSWR, { useSWRConfig } from "swr";
import { siteConfig } from "@/config/site";
@@ -19,7 +17,6 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { PaginationWrapper } from "@/components/ui/pagination";
import { Skeleton } from "@/components/ui/skeleton";
import {
Table,
@@ -39,6 +36,7 @@ import StatusDot from "@/components/dashboard/status-dot";
import { FormType } from "@/components/forms/record-form";
import { UserForm } from "@/components/forms/user-form";
import { EmptyPlaceholder } from "@/components/shared/empty-placeholder";
import { PaginationWrapper } from "@/components/shared/pagination";
import CountUpFn from "../../../../components/dashboard/count-up";
@@ -18,7 +18,6 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { PaginationWrapper } from "@/components/ui/pagination";
import { Skeleton } from "@/components/ui/skeleton";
import {
Table,
@@ -39,6 +38,7 @@ import StatusDot from "@/components/dashboard/status-dot";
import { FormType, RecordForm } from "@/components/forms/record-form";
import { EmptyPlaceholder } from "@/components/shared/empty-placeholder";
import { LinkPreviewer } from "@/components/shared/link-previewer";
import { PaginationWrapper } from "@/components/shared/pagination";
export interface RecordListProps {
user: Pick<User, "id" | "name">;
+1 -2
View File
@@ -23,7 +23,6 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { PaginationWrapper } from "@/components/ui/pagination";
import { Skeleton } from "@/components/ui/skeleton";
import {
Table,
@@ -35,7 +34,6 @@ import {
} from "@/components/ui/table";
import {
Tooltip,
TooltipArrow,
TooltipContent,
TooltipProvider,
TooltipTrigger,
@@ -47,6 +45,7 @@ import { UrlForm } from "@/components/forms/url-form";
import { CopyButton } from "@/components/shared/copy-button";
import { EmptyPlaceholder } from "@/components/shared/empty-placeholder";
import { LinkPreviewer } from "@/components/shared/link-previewer";
import { PaginationWrapper } from "@/components/shared/pagination";
import UserUrlMetaInfo from "./meta";
+76
View File
@@ -0,0 +1,76 @@
import React from "react";
import {
Pagination,
PaginationContent,
PaginationEllipsis,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
} from "../ui/pagination";
export function PaginationWrapper({
total,
currentPage,
setCurrentPage,
}: {
total: number;
currentPage: number;
setCurrentPage: (page: number) => void;
}) {
const shouldShowPage = (page: number) => {
return page === 1 || page === total || Math.abs(page - currentPage) <= 2;
};
const shouldShowEllipsis = (page: number, prevPage: number | null) => {
return prevPage && page - prevPage > 1;
};
const pages: any = [];
let prevPage: number | null = null;
for (let page = 1; page <= total; page++) {
if (shouldShowPage(page)) {
if (shouldShowEllipsis(page, prevPage)) {
pages.push(<PaginationEllipsis key={`ellipsis-${page}`} />);
}
pages.push(
<PaginationItem key={page}>
<PaginationLink
isActive={page === currentPage}
href={`#`}
onClick={() => setCurrentPage(page)}
>
{page}
</PaginationLink>
</PaginationItem>,
);
prevPage = page;
}
}
return (
<Pagination className="my-3 justify-end">
<PaginationContent>
<PaginationItem>
<PaginationPrevious
onClick={() => currentPage > 1 && setCurrentPage(currentPage - 1)}
href={`#`} // 可以使用链接或 onClick 方法
/>
</PaginationItem>
{pages}
<PaginationItem>
<PaginationNext
onClick={() =>
currentPage < total && setCurrentPage(currentPage + 1)
}
href={`#`}
/>
</PaginationItem>
</PaginationContent>
</Pagination>
);
}
+116 -40
View File
@@ -1,42 +1,118 @@
import { Pagination } from "@nextui-org/pagination";
import { ArrowLeft, ArrowRight } from "lucide-react";
import * as React from "react";
import Link from "next/link";
import { ChevronLeft, ChevronRight, MoreHorizontal } from "lucide-react";
import { Button } from "./button";
import { cn } from "@/lib/utils";
import { ButtonProps, buttonVariants } from "@/components/ui/button";
export function PaginationWrapper({
total,
currentPage,
setCurrentPage,
}: {
total: number;
currentPage: number;
setCurrentPage: any;
}) {
return (
<div className="my-3 flex items-center justify-end gap-3">
<Button
size="sm"
variant="outline"
color="secondary"
onClick={() => setCurrentPage((prev) => (prev > 1 ? prev - 1 : prev))}
>
<ArrowLeft className="size-4" />
</Button>
<Pagination
isCompact
total={total}
color="success"
page={currentPage}
onChange={setCurrentPage}
/>
<Button
size="sm"
variant="outline"
color="secondary"
onClick={() => setCurrentPage((prev) => (prev < 10 ? prev + 1 : prev))}
>
<ArrowRight className="size-4" />
</Button>
</div>
);
}
const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => (
<nav
role="navigation"
aria-label="pagination"
className={cn("mx-auto flex w-full justify-center", className)}
{...props}
/>
);
Pagination.displayName = "Pagination";
const PaginationContent = React.forwardRef<
HTMLUListElement,
React.ComponentProps<"ul">
>(({ className, ...props }, ref) => (
<ul
ref={ref}
className={cn("flex flex-row items-center gap-1", className)}
{...props}
/>
));
PaginationContent.displayName = "PaginationContent";
const PaginationItem = React.forwardRef<
HTMLLIElement,
React.ComponentProps<"li">
>(({ className, ...props }, ref) => (
<li ref={ref} className={cn("", className)} {...props} />
));
PaginationItem.displayName = "PaginationItem";
type PaginationLinkProps = {
isActive?: boolean;
} & Pick<ButtonProps, "size"> &
React.ComponentProps<typeof Link>;
const PaginationLink = ({
className,
isActive,
size = "icon",
...props
}: PaginationLinkProps) => (
<Link
aria-current={isActive ? "page" : undefined}
className={cn(
buttonVariants({
variant: isActive ? "outline" : "ghost",
size,
}),
className,
)}
{...props}
/>
);
PaginationLink.displayName = "PaginationLink";
const PaginationPrevious = ({
className,
...props
}: React.ComponentProps<typeof PaginationLink>) => (
<PaginationLink
aria-label="Go to previous page"
size="default"
className={cn("gap-1 pl-2.5", className)}
{...props}
>
<ChevronLeft className="h-4 w-4" />
{/* <span>Previous</span> */}
</PaginationLink>
);
PaginationPrevious.displayName = "PaginationPrevious";
const PaginationNext = ({
className,
...props
}: React.ComponentProps<typeof PaginationLink>) => (
<PaginationLink
aria-label="Go to next page"
size="default"
className={cn("gap-1 pr-2.5", className)}
{...props}
>
{/* <span>Next</span> */}
<ChevronRight className="h-4 w-4" />
</PaginationLink>
);
PaginationNext.displayName = "PaginationNext";
const PaginationEllipsis = ({
className,
...props
}: React.ComponentProps<"span">) => (
<span
aria-hidden
className={cn("flex h-9 w-9 items-center justify-center", className)}
{...props}
>
<MoreHorizontal className="h-4 w-4" />
<span className="sr-only">More pages</span>
</span>
);
PaginationEllipsis.displayName = "PaginationEllipsis";
export {
Pagination,
PaginationContent,
PaginationEllipsis,
PaginationItem,
PaginationLink,
PaginationNext,
PaginationPrevious,
};
-1
View File
@@ -21,7 +21,6 @@
"dependencies": {
"@auth/prisma-adapter": "^2.4.1",
"@hookform/resolvers": "^3.9.0",
"@nextui-org/pagination": "^2.0.35",
"@prisma/client": "^5.17.0",
"@radix-ui/react-accessible-icon": "^1.1.0",
"@radix-ui/react-accordion": "^1.2.0",
-476
View File
@@ -14,9 +14,6 @@ importers:
'@hookform/resolvers':
specifier: ^3.9.0
version: 3.9.0(react-hook-form@7.52.1(react@18.3.1))
'@nextui-org/pagination':
specifier: ^2.0.35
version: 2.0.35(@nextui-org/system@2.2.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(framer-motion@10.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@prisma/client':
specifier: ^5.17.0
version: 5.17.0(prisma@5.17.0)
@@ -831,21 +828,6 @@ packages:
'@floating-ui/utils@0.1.6':
resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==}
'@formatjs/ecma402-abstract@2.0.0':
resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==}
'@formatjs/fast-memoize@2.2.0':
resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==}
'@formatjs/icu-messageformat-parser@2.7.8':
resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==}
'@formatjs/icu-skeleton-parser@1.8.2':
resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==}
'@formatjs/intl-localematcher@0.5.4':
resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==}
'@grpc/grpc-js@1.10.6':
resolution: {integrity: sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==}
engines: {node: '>=12.10.0'}
@@ -1005,18 +987,6 @@ packages:
cpu: [x64]
os: [win32]
'@internationalized/date@3.5.5':
resolution: {integrity: sha512-H+CfYvOZ0LTJeeLOqm19E3uj/4YjrmOFtBufDHPfvtI80hFAMqtrp7oCACpe4Cil5l8S0Qu/9dYfZc/5lY8WQQ==}
'@internationalized/message@3.1.4':
resolution: {integrity: sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==}
'@internationalized/number@3.5.3':
resolution: {integrity: sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==}
'@internationalized/string@3.2.3':
resolution: {integrity: sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -1230,53 +1200,6 @@ packages:
cpu: [x64]
os: [win32]
'@nextui-org/pagination@2.0.35':
resolution: {integrity: sha512-07KJgZcJBt2e9RY6TsiQm5qrjDLH+gT3yB7yQ4jPdCK9fkTB0r2kvTOYdPUvrtVJYRq2bwFCWOz+9mokdNfcwg==}
peerDependencies:
'@nextui-org/system': '>=2.0.0'
'@nextui-org/theme': '>=2.1.0'
react: '>=18'
react-dom: '>=18'
'@nextui-org/react-rsc-utils@2.0.13':
resolution: {integrity: sha512-QewsXtoQlMsR9stThdazKEImg9oyZkPLs7wsymhrzh6/HdQCl9bTdb6tJcROg4vg5LRYKGG11USSQO2nKlfCcQ==}
'@nextui-org/react-utils@2.0.16':
resolution: {integrity: sha512-QdDoqzhx+4t9cDTVmtw5iOrfyLvpqyKsq8PARHUniCiQQDQd1ao7FCpzHgvU9poYcEdRk+Lsna66zbeMkFBB6w==}
peerDependencies:
react: '>=18'
'@nextui-org/shared-icons@2.0.9':
resolution: {integrity: sha512-WG3yinVY7Tk9VqJgcdF4V8Ok9+fcm5ey7S1els7kujrfqLYxtqoKywgiY/7QHwZlfQkzpykAfy+NAlHkTP5hMg==}
peerDependencies:
react: '>=18'
'@nextui-org/shared-utils@2.0.7':
resolution: {integrity: sha512-FxY3N0i1Al7Oz3yOQN0dSpG8UUrLIP3iYh3ubD7BhdQoZLl5xbG6++q1gqOzZXV+ZWeUFMY/or0ofzWxGHiOow==}
'@nextui-org/system-rsc@2.1.5':
resolution: {integrity: sha512-tkJLAyJu34Rr5KUMMqoB7cZjOVXB+7a/7N4ushZfuiLdoYijgmcXFMzLxjm+tbt9zA5AV+ivsfbHvscg77dJ6w==}
peerDependencies:
'@nextui-org/theme': '>=2.1.0'
react: '>=18'
'@nextui-org/system@2.2.5':
resolution: {integrity: sha512-nrX6768aiyWtpxX3OTFBIVWR+v9nlMsC3KaBinNfek97sNm7gAfTHi7q5kylE3L5yIMpNG+DclAKpuxgDQEmvw==}
peerDependencies:
framer-motion: '>=10.17.0'
react: '>=18'
react-dom: '>=18'
'@nextui-org/theme@2.2.9':
resolution: {integrity: sha512-TN2I9sMriLaj00pXsIMlg19+UHeOdjzS2JV0u4gjL14mSbQl5BYNxgbvU3gbMqkZZQ6OpwT4RnT8RS+ks6TXCw==}
peerDependencies:
tailwindcss: '>=3.4.0'
'@nextui-org/use-pagination@2.0.9':
resolution: {integrity: sha512-p5Gssyb71/SjRezq2o1aRsYTmC9idziW3pLCJFpVwLGfgWNARf9C6NS1oQsqKgjF5lvzoa88soZRDhKKvRAt/g==}
peerDependencies:
react: '>=18'
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2247,58 +2170,6 @@ packages:
'@radix-ui/rect@1.1.0':
resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
'@react-aria/focus@3.17.1':
resolution: {integrity: sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-aria/focus@3.18.1':
resolution: {integrity: sha512-N0Cy61WCIv+57mbqC7hiZAsB+3rF5n4JKabxUmg/2RTJL6lq7hJ5N4gx75ymKxkN8GnVDwt4pKZah48Wopa5jw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-aria/i18n@3.11.1':
resolution: {integrity: sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-aria/interactions@3.21.3':
resolution: {integrity: sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-aria/interactions@3.22.1':
resolution: {integrity: sha512-5TLzQaDAQQ5C70yG8GInbO4wIylKY67RfTIIwQPGR/4n5OIjbUD8BOj3NuSsuZ/frUPaBXo1VEBBmSO23fxkjw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-aria/overlays@3.22.1':
resolution: {integrity: sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-aria/ssr@3.9.5':
resolution: {integrity: sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ==}
engines: {node: '>= 12'}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-aria/utils@3.24.1':
resolution: {integrity: sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-aria/utils@3.25.1':
resolution: {integrity: sha512-5Uj864e7T5+yj78ZfLnfHqmypLiqW2mN+nsdslog2z5ssunTqjolVeM15ootXskjISlZ7MojLpq97kIC4nlnAw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-aria/visually-hidden@3.8.14':
resolution: {integrity: sha512-DV3yagbAgO4ywQTq6D/AxcIaTC8c77r/SxlIMhQBMQ6vScJWTCh6zFG55wmLe3NKqvRrowv1OstlmYfZQ4v/XA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-email/body@0.0.8':
resolution: {integrity: sha512-gqdkNYlIaIw0OdpWu8KjIcQSIFvx7t2bZpXVxMMvBS859Ia1+1X3b5RNbjI3S1ZqLddUf7owOHkO4MiXGE+nxg==}
peerDependencies:
@@ -2428,41 +2299,6 @@ packages:
peerDependencies:
react: ^18.2.0
'@react-stately/overlays@3.6.9':
resolution: {integrity: sha512-4chfyzKw7P2UEainm0yzjUgYwG1ovBejN88eTrn+O62x5huuMCwe0cbMxmYh4y7IhRFSee3jIJd0SP0u/+i39w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-stately/utils@3.10.1':
resolution: {integrity: sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-stately/utils@3.10.2':
resolution: {integrity: sha512-fh6OTQtbeQC0ywp6LJuuKs6tKIgFvt/DlIZEcIpGho6/oZG229UnIk6TUekwxnDbumuYyan6D9EgUtEMmT8UIg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-types/button@3.9.6':
resolution: {integrity: sha512-8lA+D5JLbNyQikf8M/cPP2cji91aVTcqjrGpDqI7sQnaLFikM8eFR6l1ZWGtZS5MCcbfooko77ha35SYplSQvw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-types/overlays@3.8.9':
resolution: {integrity: sha512-9ni9upQgXPnR+K9cWmbYWvm3ll9gH8P/XsEZprqIV5zNLMF334jADK48h4jafb1X9RFnj0WbHo6BqcSObzjTig==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@react-types/shared@3.23.1':
resolution: {integrity: sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
'@react-types/shared@3.24.1':
resolution: {integrity: sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@resvg/resvg-wasm@2.4.0':
resolution: {integrity: sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg==}
engines: {node: '>= 10'}
@@ -3386,9 +3222,6 @@ packages:
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
color2k@2.0.3:
resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==}
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
@@ -3422,9 +3255,6 @@ packages:
compare-func@2.0.0:
resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
compute-scroll-into-view@3.1.0:
resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -4204,10 +4034,6 @@ packages:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
flat@5.0.2:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
flatted@3.2.9:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
@@ -4557,9 +4383,6 @@ packages:
resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
engines: {node: '>=12'}
intl-messageformat@10.5.14:
resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==}
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
@@ -4868,30 +4691,18 @@ packages:
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
lodash.foreach@4.5.0:
resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
lodash.get@4.4.2:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.kebabcase@4.1.1:
resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
lodash.mapkeys@4.6.0:
resolution: {integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA==}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash.mergewith@4.6.2:
resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
lodash.omit@4.5.0:
resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}
lodash.snakecase@4.1.1:
resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
@@ -5986,9 +5797,6 @@ packages:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
scroll-into-view-if-needed@3.0.10:
resolution: {integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==}
section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
@@ -6272,21 +6080,12 @@ packages:
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
tailwind-merge@1.14.0:
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
tailwind-merge@2.2.0:
resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==}
tailwind-merge@2.4.0:
resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==}
tailwind-variants@0.1.20:
resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==}
engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies:
tailwindcss: '*'
tailwindcss-animate@1.0.7:
resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
peerDependencies:
@@ -7331,30 +7130,6 @@ snapshots:
'@floating-ui/utils@0.1.6': {}
'@formatjs/ecma402-abstract@2.0.0':
dependencies:
'@formatjs/intl-localematcher': 0.5.4
tslib: 2.6.2
'@formatjs/fast-memoize@2.2.0':
dependencies:
tslib: 2.6.2
'@formatjs/icu-messageformat-parser@2.7.8':
dependencies:
'@formatjs/ecma402-abstract': 2.0.0
'@formatjs/icu-skeleton-parser': 1.8.2
tslib: 2.6.2
'@formatjs/icu-skeleton-parser@1.8.2':
dependencies:
'@formatjs/ecma402-abstract': 2.0.0
tslib: 2.6.2
'@formatjs/intl-localematcher@0.5.4':
dependencies:
tslib: 2.6.2
'@grpc/grpc-js@1.10.6':
dependencies:
'@grpc/proto-loader': 0.7.12
@@ -7470,23 +7245,6 @@ snapshots:
'@img/sharp-win32-x64@0.33.4':
optional: true
'@internationalized/date@3.5.5':
dependencies:
'@swc/helpers': 0.5.5
'@internationalized/message@3.1.4':
dependencies:
'@swc/helpers': 0.5.5
intl-messageformat: 10.5.14
'@internationalized/number@3.5.3':
dependencies:
'@swc/helpers': 0.5.5
'@internationalized/string@3.2.3':
dependencies:
'@swc/helpers': 0.5.5
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -7664,80 +7422,6 @@ snapshots:
'@next/swc-win32-x64-msvc@14.2.5':
optional: true
'@nextui-org/pagination@2.0.35(@nextui-org/system@2.2.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(framer-motion@10.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@nextui-org/react-utils': 2.0.16(react@18.3.1)
'@nextui-org/shared-icons': 2.0.9(react@18.3.1)
'@nextui-org/shared-utils': 2.0.7
'@nextui-org/system': 2.2.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(framer-motion@10.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@nextui-org/theme': 2.2.9(tailwindcss@3.4.6)
'@nextui-org/use-pagination': 2.0.9(react@18.3.1)
'@react-aria/focus': 3.17.1(react@18.3.1)
'@react-aria/i18n': 3.11.1(react@18.3.1)
'@react-aria/interactions': 3.21.3(react@18.3.1)
'@react-aria/utils': 3.24.1(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
scroll-into-view-if-needed: 3.0.10
'@nextui-org/react-rsc-utils@2.0.13': {}
'@nextui-org/react-utils@2.0.16(react@18.3.1)':
dependencies:
'@nextui-org/react-rsc-utils': 2.0.13
'@nextui-org/shared-utils': 2.0.7
react: 18.3.1
'@nextui-org/shared-icons@2.0.9(react@18.3.1)':
dependencies:
react: 18.3.1
'@nextui-org/shared-utils@2.0.7': {}
'@nextui-org/system-rsc@2.1.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(react@18.3.1)':
dependencies:
'@nextui-org/theme': 2.2.9(tailwindcss@3.4.6)
'@react-types/shared': 3.23.1(react@18.3.1)
clsx: 1.2.1
react: 18.3.1
'@nextui-org/system@2.2.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(framer-motion@10.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@internationalized/date': 3.5.5
'@nextui-org/react-utils': 2.0.16(react@18.3.1)
'@nextui-org/system-rsc': 2.1.5(@nextui-org/theme@2.2.9(tailwindcss@3.4.6))(react@18.3.1)
'@react-aria/i18n': 3.11.1(react@18.3.1)
'@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@react-aria/utils': 3.24.1(react@18.3.1)
'@react-stately/utils': 3.10.1(react@18.3.1)
framer-motion: 10.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
- '@nextui-org/theme'
'@nextui-org/theme@2.2.9(tailwindcss@3.4.6)':
dependencies:
clsx: 1.2.1
color: 4.2.3
color2k: 2.0.3
deepmerge: 4.3.1
flat: 5.0.2
lodash.foreach: 4.5.0
lodash.get: 4.4.2
lodash.kebabcase: 4.1.1
lodash.mapkeys: 4.6.0
lodash.omit: 4.5.0
tailwind-merge: 1.14.0
tailwind-variants: 0.1.20(tailwindcss@3.4.6)
tailwindcss: 3.4.6
'@nextui-org/use-pagination@2.0.9(react@18.3.1)':
dependencies:
'@nextui-org/shared-utils': 2.0.7
'@react-aria/i18n': 3.11.1(react@18.3.1)
react: 18.3.1
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -9015,99 +8699,6 @@ snapshots:
'@radix-ui/rect@1.1.0': {}
'@react-aria/focus@3.17.1(react@18.3.1)':
dependencies:
'@react-aria/interactions': 3.21.3(react@18.3.1)
'@react-aria/utils': 3.24.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
clsx: 2.1.1
react: 18.3.1
'@react-aria/focus@3.18.1(react@18.3.1)':
dependencies:
'@react-aria/interactions': 3.22.1(react@18.3.1)
'@react-aria/utils': 3.25.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
clsx: 2.1.1
react: 18.3.1
'@react-aria/i18n@3.11.1(react@18.3.1)':
dependencies:
'@internationalized/date': 3.5.5
'@internationalized/message': 3.1.4
'@internationalized/number': 3.5.3
'@internationalized/string': 3.2.3
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-aria/utils': 3.24.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-aria/interactions@3.21.3(react@18.3.1)':
dependencies:
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-aria/utils': 3.24.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-aria/interactions@3.22.1(react@18.3.1)':
dependencies:
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-aria/utils': 3.25.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-aria/overlays@3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@react-aria/focus': 3.18.1(react@18.3.1)
'@react-aria/i18n': 3.11.1(react@18.3.1)
'@react-aria/interactions': 3.22.1(react@18.3.1)
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-aria/utils': 3.25.1(react@18.3.1)
'@react-aria/visually-hidden': 3.8.14(react@18.3.1)
'@react-stately/overlays': 3.6.9(react@18.3.1)
'@react-types/button': 3.9.6(react@18.3.1)
'@react-types/overlays': 3.8.9(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@react-aria/ssr@3.9.5(react@18.3.1)':
dependencies:
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-aria/utils@3.24.1(react@18.3.1)':
dependencies:
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-stately/utils': 3.10.2(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
clsx: 2.1.1
react: 18.3.1
'@react-aria/utils@3.25.1(react@18.3.1)':
dependencies:
'@react-aria/ssr': 3.9.5(react@18.3.1)
'@react-stately/utils': 3.10.2(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
clsx: 2.1.1
react: 18.3.1
'@react-aria/visually-hidden@3.8.14(react@18.3.1)':
dependencies:
'@react-aria/interactions': 3.22.1(react@18.3.1)
'@react-aria/utils': 3.25.1(react@18.3.1)
'@react-types/shared': 3.24.1(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-email/body@0.0.8(react@18.3.1)':
dependencies:
react: 18.3.1
@@ -9232,41 +8823,6 @@ snapshots:
dependencies:
react: 18.3.1
'@react-stately/overlays@3.6.9(react@18.3.1)':
dependencies:
'@react-stately/utils': 3.10.2(react@18.3.1)
'@react-types/overlays': 3.8.9(react@18.3.1)
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-stately/utils@3.10.1(react@18.3.1)':
dependencies:
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-stately/utils@3.10.2(react@18.3.1)':
dependencies:
'@swc/helpers': 0.5.5
react: 18.3.1
'@react-types/button@3.9.6(react@18.3.1)':
dependencies:
'@react-types/shared': 3.24.1(react@18.3.1)
react: 18.3.1
'@react-types/overlays@3.8.9(react@18.3.1)':
dependencies:
'@react-types/shared': 3.24.1(react@18.3.1)
react: 18.3.1
'@react-types/shared@3.23.1(react@18.3.1)':
dependencies:
react: 18.3.1
'@react-types/shared@3.24.1(react@18.3.1)':
dependencies:
react: 18.3.1
'@resvg/resvg-wasm@2.4.0': {}
'@rushstack/eslint-patch@1.5.1': {}
@@ -10320,8 +9876,6 @@ snapshots:
color-name: 1.1.4
simple-swizzle: 0.2.2
color2k@2.0.3: {}
color@4.2.3:
dependencies:
color-convert: 2.0.1
@@ -10352,8 +9906,6 @@ snapshots:
array-ify: 1.0.0
dot-prop: 5.3.0
compute-scroll-into-view@3.1.0: {}
concat-map@0.0.1: {}
concurrently@8.2.2:
@@ -11366,8 +10918,6 @@ snapshots:
keyv: 4.5.4
rimraf: 3.0.2
flat@5.0.2: {}
flatted@3.2.9: {}
for-each@0.3.3:
@@ -11799,13 +11349,6 @@ snapshots:
internmap@2.0.3: {}
intl-messageformat@10.5.14:
dependencies:
'@formatjs/ecma402-abstract': 2.0.0
'@formatjs/fast-memoize': 2.2.0
'@formatjs/icu-messageformat-parser': 2.7.8
tslib: 2.6.2
invariant@2.2.4:
dependencies:
loose-envify: 1.4.0
@@ -12081,22 +11624,14 @@ snapshots:
lodash.castarray@4.4.0: {}
lodash.foreach@4.5.0: {}
lodash.get@4.4.2: {}
lodash.isplainobject@4.0.6: {}
lodash.kebabcase@4.1.1: {}
lodash.mapkeys@4.6.0: {}
lodash.merge@4.6.2: {}
lodash.mergewith@4.6.2: {}
lodash.omit@4.5.0: {}
lodash.snakecase@4.1.1: {}
lodash.startcase@4.4.0: {}
@@ -13671,10 +13206,6 @@ snapshots:
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
scroll-into-view-if-needed@3.0.10:
dependencies:
compute-scroll-into-view: 3.1.0
section-matter@1.0.0:
dependencies:
extend-shallow: 2.0.1
@@ -14013,19 +13544,12 @@ snapshots:
react: 18.3.1
use-sync-external-store: 1.2.2(react@18.3.1)
tailwind-merge@1.14.0: {}
tailwind-merge@2.2.0:
dependencies:
'@babel/runtime': 7.24.4
tailwind-merge@2.4.0: {}
tailwind-variants@0.1.20(tailwindcss@3.4.6):
dependencies:
tailwind-merge: 1.14.0
tailwindcss: 3.4.6
tailwindcss-animate@1.0.7(tailwindcss@3.4.6):
dependencies:
tailwindcss: 3.4.6