@meta-1/design 0.0.173 → 0.0.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { Badge as UIBadge } from "@meta-1/design/components/ui/badge";
|
|
4
|
+
import { cn } from "@meta-1/design/lib";
|
|
5
|
+
|
|
6
|
+
export type BadgeVariant =
|
|
7
|
+
| "default"
|
|
8
|
+
| "secondary"
|
|
9
|
+
| "destructive"
|
|
10
|
+
| "outline"
|
|
11
|
+
| "success"
|
|
12
|
+
| "error"
|
|
13
|
+
| "warning"
|
|
14
|
+
| "info";
|
|
15
|
+
|
|
16
|
+
export type BadgeProps = Omit<React.ComponentProps<typeof UIBadge>, "variant"> & {
|
|
17
|
+
variant?: BadgeVariant;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const Badge = ({ variant = "default", className, ...props }: BadgeProps) => {
|
|
21
|
+
// 扩展的场景色样式
|
|
22
|
+
const variantStyles: Partial<Record<BadgeVariant, string>> = {
|
|
23
|
+
success: "border-transparent bg-success text-success-foreground",
|
|
24
|
+
error: "border-transparent bg-error text-error-foreground",
|
|
25
|
+
warning: "border-transparent bg-warning text-warning-foreground",
|
|
26
|
+
info: "border-transparent bg-info text-info-foreground",
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// 扩展场景使用 default variant,并添加自定义样式
|
|
30
|
+
if (variant && ["success", "error", "warning", "info"].includes(variant)) {
|
|
31
|
+
return <UIBadge {...props} className={cn(variantStyles[variant], className)} variant="default" />;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 原生 variant 直接传递
|
|
35
|
+
return (
|
|
36
|
+
<UIBadge
|
|
37
|
+
{...props}
|
|
38
|
+
className={className}
|
|
39
|
+
variant={variant as "default" | "secondary" | "destructive" | "outline"}
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
@@ -514,8 +514,8 @@ export function DataTable<TData>(props: DataTableProps<TData>) {
|
|
|
514
514
|
{renderTableBody()}
|
|
515
515
|
</Table>
|
|
516
516
|
)}
|
|
517
|
-
|
|
518
|
-
{
|
|
517
|
+
{showPagination ? (
|
|
518
|
+
<div className={cn("py-4", !mounted && "invisible")}>
|
|
519
519
|
<Pagination
|
|
520
520
|
{...(pagination as PaginationProps)}
|
|
521
521
|
onChange={(page: number) => {
|
|
@@ -525,8 +525,8 @@ export function DataTable<TData>(props: DataTableProps<TData>) {
|
|
|
525
525
|
load?.({ size, page: 1 });
|
|
526
526
|
}}
|
|
527
527
|
/>
|
|
528
|
-
|
|
529
|
-
|
|
528
|
+
</div>
|
|
529
|
+
) : null}
|
|
530
530
|
{loading || !mounted ? (
|
|
531
531
|
<div className="dark:!bg-black/5 absolute top-0 right-0 bottom-0 left-0 z-50 flex items-center justify-center bg-white/50">
|
|
532
532
|
<Spin />
|
|
@@ -120,46 +120,84 @@ export const Pagination: FC<PaginationProps> = (props) => {
|
|
|
120
120
|
|
|
121
121
|
const pageNumbers = generatePageNumbers(page, totalPage);
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
// 渲染简单分页导航(只有上一页、当前页、下一页)
|
|
124
|
+
const renderSimplePagination = () => {
|
|
125
125
|
return (
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
126
|
+
<PaginationContent>
|
|
127
|
+
{/* 上一页 */}
|
|
128
|
+
<PaginationItem>
|
|
129
|
+
<PaginationPrevious
|
|
130
|
+
className={page === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
131
|
+
onClick={page === 1 ? undefined : () => onChange?.(page - 1)}
|
|
132
|
+
size="default"
|
|
133
|
+
/>
|
|
134
|
+
</PaginationItem>
|
|
135
|
+
|
|
136
|
+
{/* 当前页 */}
|
|
137
|
+
<PaginationItem>
|
|
138
|
+
<PaginationLink isActive size="default">
|
|
139
|
+
{page}
|
|
140
|
+
</PaginationLink>
|
|
141
|
+
</PaginationItem>
|
|
142
|
+
|
|
143
|
+
{/* 下一页 */}
|
|
144
|
+
<PaginationItem>
|
|
145
|
+
<PaginationNext
|
|
146
|
+
className={page === totalPage ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
147
|
+
onClick={page === totalPage ? undefined : () => onChange?.(page + 1)}
|
|
148
|
+
size="default"
|
|
149
|
+
/>
|
|
150
|
+
</PaginationItem>
|
|
151
|
+
</PaginationContent>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
144
154
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
155
|
+
// 渲染完整分页导航(包含所有页码)
|
|
156
|
+
const renderFullPagination = () => {
|
|
157
|
+
return (
|
|
158
|
+
<PaginationContent>
|
|
159
|
+
{/* 上一页 */}
|
|
160
|
+
<PaginationItem>
|
|
161
|
+
<PaginationPrevious
|
|
162
|
+
className={page === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
163
|
+
onClick={page === 1 ? undefined : () => onChange?.(page - 1)}
|
|
164
|
+
size="default"
|
|
165
|
+
/>
|
|
166
|
+
</PaginationItem>
|
|
167
|
+
|
|
168
|
+
{/* 页码数字 */}
|
|
169
|
+
{pageNumbers.map((pageNum, index) => (
|
|
170
|
+
<PaginationItem key={pageNum === "ellipsis" ? `ellipsis-${index}` : `page-${pageNum}`}>
|
|
171
|
+
{pageNum === "ellipsis" ? (
|
|
172
|
+
<PaginationEllipsis />
|
|
173
|
+
) : (
|
|
174
|
+
<PaginationLink
|
|
175
|
+
className="cursor-pointer"
|
|
176
|
+
isActive={pageNum === page}
|
|
177
|
+
onClick={() => onChange?.(pageNum)}
|
|
150
178
|
size="default"
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
179
|
+
>
|
|
180
|
+
{pageNum}
|
|
181
|
+
</PaginationLink>
|
|
182
|
+
)}
|
|
183
|
+
</PaginationItem>
|
|
184
|
+
))}
|
|
185
|
+
|
|
186
|
+
{/* 下一页 */}
|
|
187
|
+
<PaginationItem>
|
|
188
|
+
<PaginationNext
|
|
189
|
+
className={page === totalPage ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
190
|
+
onClick={page === totalPage ? undefined : () => onChange?.(page + 1)}
|
|
191
|
+
size="default"
|
|
192
|
+
/>
|
|
193
|
+
</PaginationItem>
|
|
194
|
+
</PaginationContent>
|
|
156
195
|
);
|
|
157
|
-
}
|
|
196
|
+
};
|
|
158
197
|
|
|
159
|
-
// 标准模式渲染
|
|
160
198
|
return (
|
|
161
|
-
<div className="flex items-center justify-center
|
|
162
|
-
<ShadcnPagination>
|
|
199
|
+
<div className="flex items-center justify-center">
|
|
200
|
+
<ShadcnPagination className="flex items-center justify-center gap-md">
|
|
163
201
|
{/* 总数信息 */}
|
|
164
202
|
{showTotal ? (
|
|
165
203
|
<div className="flex items-center space-x-2 text-muted-foreground text-sm">
|
|
@@ -168,43 +206,7 @@ export const Pagination: FC<PaginationProps> = (props) => {
|
|
|
168
206
|
</div>
|
|
169
207
|
) : null}
|
|
170
208
|
{/* 分页导航 */}
|
|
171
|
-
|
|
172
|
-
{/* 上一页 */}
|
|
173
|
-
<PaginationItem>
|
|
174
|
-
<PaginationPrevious
|
|
175
|
-
className={page === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
176
|
-
onClick={page === 1 ? undefined : () => onChange?.(page - 1)}
|
|
177
|
-
size="default"
|
|
178
|
-
/>
|
|
179
|
-
</PaginationItem>
|
|
180
|
-
|
|
181
|
-
{/* 页码数字 */}
|
|
182
|
-
{pageNumbers.map((pageNum, index) => (
|
|
183
|
-
<PaginationItem key={pageNum === "ellipsis" ? `ellipsis-${index}` : `page-${pageNum}`}>
|
|
184
|
-
{pageNum === "ellipsis" ? (
|
|
185
|
-
<PaginationEllipsis />
|
|
186
|
-
) : (
|
|
187
|
-
<PaginationLink
|
|
188
|
-
className="cursor-pointer"
|
|
189
|
-
isActive={pageNum === page}
|
|
190
|
-
onClick={() => onChange?.(pageNum)}
|
|
191
|
-
size="default"
|
|
192
|
-
>
|
|
193
|
-
{pageNum}
|
|
194
|
-
</PaginationLink>
|
|
195
|
-
)}
|
|
196
|
-
</PaginationItem>
|
|
197
|
-
))}
|
|
198
|
-
|
|
199
|
-
{/* 下一页 */}
|
|
200
|
-
<PaginationItem>
|
|
201
|
-
<PaginationNext
|
|
202
|
-
className={page === totalPage ? "pointer-events-none opacity-50" : "cursor-pointer"}
|
|
203
|
-
onClick={page === totalPage ? undefined : () => onChange?.(page + 1)}
|
|
204
|
-
size="default"
|
|
205
|
-
/>
|
|
206
|
-
</PaginationItem>
|
|
207
|
-
</PaginationContent>
|
|
209
|
+
{simple ? renderSimplePagination() : renderFullPagination()}
|
|
208
210
|
{/* 控制区域 */}
|
|
209
211
|
{showSizeChanger || showQuickJumper ? (
|
|
210
212
|
<div className="flex items-center space-x-3">
|
package/src/index.ts
CHANGED
|
@@ -8,7 +8,6 @@ export {
|
|
|
8
8
|
InputOTPSeparator,
|
|
9
9
|
InputOTPSlot,
|
|
10
10
|
} from "@meta-1/design/components/ui/input-otp";
|
|
11
|
-
export { Badge } from "./components/ui/badge";
|
|
12
11
|
export {
|
|
13
12
|
Breadcrumb,
|
|
14
13
|
BreadcrumbItem,
|
|
@@ -104,6 +103,8 @@ export type { ConfirmProps } from "./components/uix/alert-dialog";
|
|
|
104
103
|
export { useAlert } from "./components/uix/alert-dialog";
|
|
105
104
|
export type { AvatarProps } from "./components/uix/avatar";
|
|
106
105
|
export { Avatar } from "./components/uix/avatar";
|
|
106
|
+
export type { BadgeProps } from "./components/uix/badge";
|
|
107
|
+
export { Badge } from "./components/uix/badge";
|
|
107
108
|
export type { BreadcrumbsItemProps, BreadcrumbsProps } from "./components/uix/breadcrumbs";
|
|
108
109
|
export { Breadcrumbs, BreadcrumbsItem } from "./components/uix/breadcrumbs";
|
|
109
110
|
export type { BroadcastChannelProviderProps } from "./components/uix/broadcast-channel-context";
|