@a2v2ai/uikit 0.0.41 → 1.1.0
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/DataTable/DataTable.tsx +98 -37
- package/index.css +69 -0
- package/package.json +1 -1
package/DataTable/DataTable.tsx
CHANGED
|
@@ -16,6 +16,14 @@ import {
|
|
|
16
16
|
PaginationNext,
|
|
17
17
|
PaginationPrevious,
|
|
18
18
|
} from "../Pagination/Pagination"
|
|
19
|
+
import {
|
|
20
|
+
Select,
|
|
21
|
+
SelectContent,
|
|
22
|
+
SelectItem,
|
|
23
|
+
SelectTrigger,
|
|
24
|
+
SelectValue,
|
|
25
|
+
} from "../Select/Select"
|
|
26
|
+
import { Typography } from "../Typography/Typography"
|
|
19
27
|
import { Skeleton } from "../Skeleton/Skeleton"
|
|
20
28
|
|
|
21
29
|
interface DataTableColumn<T> {
|
|
@@ -33,6 +41,8 @@ interface DataTablePagination {
|
|
|
33
41
|
pageSize: number
|
|
34
42
|
total: number
|
|
35
43
|
onChange: (page: number) => void
|
|
44
|
+
pageSizeOptions?: number[]
|
|
45
|
+
onPageSizeChange?: (size: number) => void
|
|
36
46
|
}
|
|
37
47
|
|
|
38
48
|
interface DataTableScroll {
|
|
@@ -48,6 +58,8 @@ interface DataTableProps<T extends object> {
|
|
|
48
58
|
scroll?: DataTableScroll
|
|
49
59
|
loading?: boolean
|
|
50
60
|
loadingRows?: number
|
|
61
|
+
onRowClick?: (record: T, index: number) => void
|
|
62
|
+
rowsPerPageLabel?: string
|
|
51
63
|
}
|
|
52
64
|
|
|
53
65
|
const getPageNumbers = (current: number, totalPages: number): (number | "ellipsis")[] => {
|
|
@@ -86,6 +98,8 @@ const DataTable = <T extends object>({
|
|
|
86
98
|
scroll,
|
|
87
99
|
loading,
|
|
88
100
|
loadingRows = 5,
|
|
101
|
+
onRowClick,
|
|
102
|
+
rowsPerPageLabel = "Rows per page",
|
|
89
103
|
}: DataTableProps<T>) => {
|
|
90
104
|
const getRowKey = (record: T): string => {
|
|
91
105
|
if (typeof rowKey === "function") {
|
|
@@ -136,7 +150,13 @@ const DataTable = <T extends object>({
|
|
|
136
150
|
</TableRow>
|
|
137
151
|
))
|
|
138
152
|
: dataSource.map((record, index) => (
|
|
139
|
-
<TableRow
|
|
153
|
+
<TableRow
|
|
154
|
+
key={getRowKey(record)}
|
|
155
|
+
onClick={
|
|
156
|
+
onRowClick ? () => onRowClick(record, index) : undefined
|
|
157
|
+
}
|
|
158
|
+
className={onRowClick ? "cursor-pointer" : undefined}
|
|
159
|
+
>
|
|
140
160
|
{columns.map((column) => (
|
|
141
161
|
<TableCell key={column.key}>
|
|
142
162
|
{getCellValue(record, column, index)}
|
|
@@ -161,42 +181,83 @@ const DataTable = <T extends object>({
|
|
|
161
181
|
tableContent
|
|
162
182
|
)}
|
|
163
183
|
|
|
164
|
-
{pagination &&
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
184
|
+
{pagination &&
|
|
185
|
+
((pagination.pageSizeOptions && pagination.pageSizeOptions.length > 0) ||
|
|
186
|
+
totalPages > 1) && (
|
|
187
|
+
<div className="mt-4 flex items-center justify-between gap-4">
|
|
188
|
+
{pagination.pageSizeOptions &&
|
|
189
|
+
pagination.pageSizeOptions.length > 0 ? (
|
|
190
|
+
<div className="flex items-center gap-2">
|
|
191
|
+
<Typography
|
|
192
|
+
variant="body3"
|
|
193
|
+
color="main-700"
|
|
194
|
+
className="whitespace-nowrap"
|
|
195
|
+
>
|
|
196
|
+
{rowsPerPageLabel}
|
|
197
|
+
</Typography>
|
|
198
|
+
{/* Fixed-width wrapper: SelectTrigger has its own w-full wrapper. */}
|
|
199
|
+
<div className="w-20">
|
|
200
|
+
<Select
|
|
201
|
+
value={String(pagination.pageSize)}
|
|
202
|
+
onValueChange={(value) =>
|
|
203
|
+
pagination.onPageSizeChange?.(Number(value))
|
|
204
|
+
}
|
|
205
|
+
>
|
|
206
|
+
<SelectTrigger size="small">
|
|
207
|
+
<SelectValue />
|
|
208
|
+
</SelectTrigger>
|
|
209
|
+
<SelectContent>
|
|
210
|
+
{pagination.pageSizeOptions.map((option) => (
|
|
211
|
+
<SelectItem key={option} value={String(option)}>
|
|
212
|
+
{option}
|
|
213
|
+
</SelectItem>
|
|
214
|
+
))}
|
|
215
|
+
</SelectContent>
|
|
216
|
+
</Select>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
) : (
|
|
220
|
+
<span />
|
|
221
|
+
)}
|
|
222
|
+
|
|
223
|
+
{totalPages > 1 && (
|
|
224
|
+
<Pagination className="mx-0 w-auto justify-end">
|
|
225
|
+
<PaginationContent>
|
|
226
|
+
<PaginationItem>
|
|
227
|
+
<PaginationPrevious
|
|
228
|
+
disabled={pagination.current === 1}
|
|
229
|
+
onClick={() => pagination.onChange(pagination.current - 1)}
|
|
230
|
+
/>
|
|
231
|
+
</PaginationItem>
|
|
232
|
+
|
|
233
|
+
{pageNumbers.map((page, index) => (
|
|
234
|
+
<PaginationItem key={index}>
|
|
235
|
+
{page === "ellipsis" ? (
|
|
236
|
+
<PaginationEllipsis />
|
|
237
|
+
) : (
|
|
238
|
+
<PaginationLink
|
|
239
|
+
isActive={page === pagination.current}
|
|
240
|
+
onClick={() => pagination.onChange(page)}
|
|
241
|
+
>
|
|
242
|
+
{page}
|
|
243
|
+
</PaginationLink>
|
|
244
|
+
)}
|
|
245
|
+
</PaginationItem>
|
|
246
|
+
))}
|
|
247
|
+
|
|
248
|
+
<PaginationItem>
|
|
249
|
+
<PaginationNext
|
|
250
|
+
disabled={pagination.current === totalPages}
|
|
251
|
+
onClick={() =>
|
|
252
|
+
pagination.onChange(pagination.current + 1)
|
|
253
|
+
}
|
|
254
|
+
/>
|
|
255
|
+
</PaginationItem>
|
|
256
|
+
</PaginationContent>
|
|
257
|
+
</Pagination>
|
|
258
|
+
)}
|
|
259
|
+
</div>
|
|
260
|
+
)}
|
|
200
261
|
</div>
|
|
201
262
|
)
|
|
202
263
|
}
|
package/index.css
CHANGED
|
@@ -85,6 +85,75 @@
|
|
|
85
85
|
--color-accent-900: #1E3A8A;
|
|
86
86
|
--color-accent-950: #172554;
|
|
87
87
|
|
|
88
|
+
/* Categorical palette — for charts, CRM range bands, and other multi-series
|
|
89
|
+
UI where the semantic families (success/warning/error/accent) aren't enough.
|
|
90
|
+
Values mirror the canonical Tailwind ramps so existing usages are unchanged. */
|
|
91
|
+
|
|
92
|
+
/* Orange */
|
|
93
|
+
--color-orange-50: #FFF7ED;
|
|
94
|
+
--color-orange-100: #FFEDD5;
|
|
95
|
+
--color-orange-200: #FED7AA;
|
|
96
|
+
--color-orange-300: #FDBA74;
|
|
97
|
+
--color-orange-400: #FB923C;
|
|
98
|
+
--color-orange-500: #F97316;
|
|
99
|
+
--color-orange-600: #EA580C;
|
|
100
|
+
--color-orange-700: #C2410C;
|
|
101
|
+
--color-orange-800: #9A3412;
|
|
102
|
+
--color-orange-900: #7C2D12;
|
|
103
|
+
--color-orange-950: #431407;
|
|
104
|
+
|
|
105
|
+
/* Purple */
|
|
106
|
+
--color-purple-50: #FAF5FF;
|
|
107
|
+
--color-purple-100: #F3E8FF;
|
|
108
|
+
--color-purple-200: #E9D5FF;
|
|
109
|
+
--color-purple-300: #D8B4FE;
|
|
110
|
+
--color-purple-400: #C084FC;
|
|
111
|
+
--color-purple-500: #A855F7;
|
|
112
|
+
--color-purple-600: #9333EA;
|
|
113
|
+
--color-purple-700: #7E22CE;
|
|
114
|
+
--color-purple-800: #6B21A8;
|
|
115
|
+
--color-purple-900: #581C87;
|
|
116
|
+
--color-purple-950: #3B0764;
|
|
117
|
+
|
|
118
|
+
/* Pink */
|
|
119
|
+
--color-pink-50: #FDF2F8;
|
|
120
|
+
--color-pink-100: #FCE7F3;
|
|
121
|
+
--color-pink-200: #FBCFE8;
|
|
122
|
+
--color-pink-300: #F9A8D4;
|
|
123
|
+
--color-pink-400: #F472B6;
|
|
124
|
+
--color-pink-500: #EC4899;
|
|
125
|
+
--color-pink-600: #DB2777;
|
|
126
|
+
--color-pink-700: #BE185D;
|
|
127
|
+
--color-pink-800: #9D174D;
|
|
128
|
+
--color-pink-900: #831843;
|
|
129
|
+
--color-pink-950: #500724;
|
|
130
|
+
|
|
131
|
+
/* Teal */
|
|
132
|
+
--color-teal-50: #F0FDFA;
|
|
133
|
+
--color-teal-100: #CCFBF1;
|
|
134
|
+
--color-teal-200: #99F6E4;
|
|
135
|
+
--color-teal-300: #5EEAD4;
|
|
136
|
+
--color-teal-400: #2DD4BF;
|
|
137
|
+
--color-teal-500: #14B8A6;
|
|
138
|
+
--color-teal-600: #0D9488;
|
|
139
|
+
--color-teal-700: #0F766E;
|
|
140
|
+
--color-teal-800: #115E59;
|
|
141
|
+
--color-teal-900: #134E4A;
|
|
142
|
+
--color-teal-950: #042F2E;
|
|
143
|
+
|
|
144
|
+
/* Indigo */
|
|
145
|
+
--color-indigo-50: #EEF2FF;
|
|
146
|
+
--color-indigo-100: #E0E7FF;
|
|
147
|
+
--color-indigo-200: #C7D2FE;
|
|
148
|
+
--color-indigo-300: #A5B4FC;
|
|
149
|
+
--color-indigo-400: #818CF8;
|
|
150
|
+
--color-indigo-500: #6366F1;
|
|
151
|
+
--color-indigo-600: #4F46E5;
|
|
152
|
+
--color-indigo-700: #4338CA;
|
|
153
|
+
--color-indigo-800: #3730A3;
|
|
154
|
+
--color-indigo-900: #312E81;
|
|
155
|
+
--color-indigo-950: #1E1B4B;
|
|
156
|
+
|
|
88
157
|
|
|
89
158
|
/* Neutral colors */
|
|
90
159
|
--color-background-neutral-0: #ffffff;
|