@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.
@@ -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 key={getRowKey(record)}>
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 && totalPages > 1 && (
165
- <div className="mt-4">
166
- <Pagination>
167
- <PaginationContent>
168
- <PaginationItem>
169
- <PaginationPrevious
170
- disabled={pagination.current === 1}
171
- onClick={() => pagination.onChange(pagination.current - 1)}
172
- />
173
- </PaginationItem>
174
-
175
- {pageNumbers.map((page, index) => (
176
- <PaginationItem key={index}>
177
- {page === "ellipsis" ? (
178
- <PaginationEllipsis />
179
- ) : (
180
- <PaginationLink
181
- isActive={page === pagination.current}
182
- onClick={() => pagination.onChange(page)}
183
- >
184
- {page}
185
- </PaginationLink>
186
- )}
187
- </PaginationItem>
188
- ))}
189
-
190
- <PaginationItem>
191
- <PaginationNext
192
- disabled={pagination.current === totalPages}
193
- onClick={() => pagination.onChange(pagination.current + 1)}
194
- />
195
- </PaginationItem>
196
- </PaginationContent>
197
- </Pagination>
198
- </div>
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a2v2ai/uikit",
3
- "version": "0.0.41",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "author": "Arulraj V & abofficial1997@gmail.com",
6
6
  "description": "A React UI component library built with shadcn/ui and Tailwind CSS",