react-restyle-components 0.4.57 → 0.4.58
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/lib/src/core-components/src/components/Table/Table.js +93 -20
- package/lib/src/core-components/src/components/Table/docs/PAGINATION_EXAMPLE.d.ts +3 -0
- package/lib/src/core-components/src/components/Table/docs/PAGINATION_EXAMPLE.js +50 -0
- package/lib/src/core-components/src/components/Table/elements.d.ts +7 -0
- package/lib/src/core-components/src/components/Table/elements.js +72 -0
- package/lib/src/core-components/src/components/Table/types.d.ts +17 -5
- package/lib/src/core-components/src/tc.global.css +6 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import React, { forwardRef, useState, useCallback, useMemo, useEffect, useRef, } from 'react';
|
|
4
|
-
import { TableRoot, Toolbar, ToolbarGroup, SearchInput, ToolbarButton, TableWrapper, StyledTable, TableHeader, HeaderRow, HeaderCell, TableBody, TableRow, TableCell, TableCellContent, Checkbox, ExpandButton, ExpandedRow, ExpandedCell, TableFooter, FooterRow, FooterCell, PaginationWrapper, PaginationInfo, PaginationControls, PageButton,
|
|
4
|
+
import { TableRoot, Toolbar, ToolbarGroup, SearchInput, ToolbarButton, TableWrapper, StyledTable, TableHeader, HeaderRow, HeaderCell, TableBody, TableRow, TableCell, TableCellContent, Checkbox, ExpandButton, ExpandedRow, ExpandedCell, TableFooter, FooterRow, FooterCell, PaginationWrapper, PaginationInfo, PaginationControls, PageButton, PageSizeInputWrapper, PageSizeInput, PageSizeDropdownIcon, PageSizeDropdown, PageSizeDropdownItem, QuickJumper, EmptyState, LoadingOverlay, LoadingSpinner, EditableCell, CellEditor, ColumnTogglePanel, ColumnToggleHeader, ColumnToggleSearch, ColumnToggleList, ColumnToggleItem, ColumnToggleDragHandle, SelectionIndicator, SelectionCount, SelectSortButton, } from './elements';
|
|
5
5
|
import { useSortState, useFilterState, usePaginationState, useRowSelection, useRowExpansion, useColumnVisibility, useTableDebounce, sortData, filterData, paginateData, getNestedValue, exportToCSV, exportToExcel, } from './hooks';
|
|
6
6
|
import { getFilterComponent } from './filters';
|
|
7
7
|
import { Tooltip } from '../Tooltip';
|
|
@@ -170,6 +170,10 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
170
170
|
const [selectionAnimation, setSelectionAnimation] = useState('none');
|
|
171
171
|
// Select-sort state: stores keys to move to top (empty = not active)
|
|
172
172
|
const [selectSortKeys, setSelectSortKeys] = useState([]);
|
|
173
|
+
// Page size input state
|
|
174
|
+
const [pageSizeInputFocused, setPageSizeInputFocused] = useState(false);
|
|
175
|
+
const [pageSizeInputValue, setPageSizeInputValue] = useState('');
|
|
176
|
+
const pageSizeDropdownRef = useRef(null);
|
|
173
177
|
// Column toggle reorder state
|
|
174
178
|
const [toggleDraggingColumn, setToggleDraggingColumn] = useState(null);
|
|
175
179
|
const [toggleDragOverColumn, setToggleDragOverColumn] = useState(null);
|
|
@@ -226,6 +230,22 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
226
230
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
227
231
|
};
|
|
228
232
|
}, [columnToggleOpen]);
|
|
233
|
+
// Close page size dropdown on outside click
|
|
234
|
+
useEffect(() => {
|
|
235
|
+
if (!pageSizeInputFocused)
|
|
236
|
+
return;
|
|
237
|
+
const handleClickOutside = (event) => {
|
|
238
|
+
if (pageSizeDropdownRef.current &&
|
|
239
|
+
!pageSizeDropdownRef.current.contains(event.target)) {
|
|
240
|
+
setPageSizeInputFocused(false);
|
|
241
|
+
setPageSizeInputValue('');
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
245
|
+
return () => {
|
|
246
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
247
|
+
};
|
|
248
|
+
}, [pageSizeInputFocused]);
|
|
229
249
|
// Filter visibility (controlled or uncontrolled)
|
|
230
250
|
const isFilterVisibilityControlled = controlledShowFilters !== undefined;
|
|
231
251
|
const showFilterRow = isFilterVisibilityControlled
|
|
@@ -329,17 +349,20 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
329
349
|
}, [data]);
|
|
330
350
|
// Pagination state
|
|
331
351
|
const { page, pageSize, totalPages, goToPage, goToNextPage, goToPrevPage, goToFirstPage, goToLastPage, changePageSize, setPage, } = usePaginationState(resolvedPaginationConfig?.page || 0, resolvedPaginationConfig?.pageSize || 10, totalSize ?? data.length);
|
|
332
|
-
// Reset page to 0 when
|
|
333
|
-
// This
|
|
352
|
+
// Reset page to 0 only when current page is out of bounds for the new data
|
|
353
|
+
// This allows pagination to work correctly without auto-resetting
|
|
334
354
|
const prevDataRef = useRef(data);
|
|
335
355
|
useEffect(() => {
|
|
336
356
|
if (prevDataRef.current !== data) {
|
|
337
357
|
prevDataRef.current = data;
|
|
338
|
-
|
|
339
|
-
|
|
358
|
+
const calculatedTotal = totalSize ?? data.length;
|
|
359
|
+
const totalPages = Math.ceil(calculatedTotal / pageSize) || 1;
|
|
360
|
+
// Only reset page if current page is out of bounds
|
|
361
|
+
if (page >= totalPages) {
|
|
362
|
+
setPage(Math.max(0, totalPages - 1));
|
|
340
363
|
}
|
|
341
364
|
}
|
|
342
|
-
}, [data, page, setPage]);
|
|
365
|
+
}, [data, page, setPage, pageSize, totalSize]);
|
|
343
366
|
// Row selection
|
|
344
367
|
const { selectedKeys, isSelected, toggleRow, toggleAll, isAllSelected, isIndeterminate, } = useRowSelection(data, resolvedRowSelection?.keyField || keyField, resolvedRowSelection?.mode || 'none', resolvedRowSelection?.selectedRowKeys, resolvedRowSelection?.getCheckboxProps);
|
|
345
368
|
// Row expansion
|
|
@@ -1235,20 +1258,26 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
1235
1258
|
return pages;
|
|
1236
1259
|
};
|
|
1237
1260
|
return (_jsxs(PaginationWrapper, { className: classNames.pagination, style: styles.pagination, children: [_jsxs(ToolbarGroup, { children: [(resolvedRowSelection?.mode === 'checkbox' || isSelectRow) &&
|
|
1238
|
-
selectedKeys.size > 0 && (_jsxs(_Fragment, { children: [selectionActions &&
|
|
1239
|
-
|
|
1240
|
-
flexDirection: 'row',
|
|
1241
|
-
gap: '8px',
|
|
1242
|
-
alignItems: 'center',
|
|
1243
|
-
}, children: selectionActions.map((action, index) => {
|
|
1261
|
+
selectedKeys.size > 0 && (_jsxs(_Fragment, { children: [selectionActions &&
|
|
1262
|
+
(() => {
|
|
1244
1263
|
const selectedRows = data.filter((row) => selectedKeys.has(getRowKey(row)));
|
|
1245
|
-
const
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1264
|
+
const actions = typeof selectionActions === 'function'
|
|
1265
|
+
? selectionActions(selectedRows)
|
|
1266
|
+
: selectionActions;
|
|
1267
|
+
return (actions.length > 0 && (_jsx("div", { style: {
|
|
1268
|
+
display: 'flex',
|
|
1269
|
+
flexDirection: 'row',
|
|
1270
|
+
gap: '8px',
|
|
1271
|
+
alignItems: 'center',
|
|
1272
|
+
}, children: actions.map((action, index) => {
|
|
1273
|
+
const selectedKeysArray = Array.from(selectedKeys);
|
|
1274
|
+
return (_jsx("div", { children: _jsx(Icon, { nameIcon: action.nameIcon, propsIcon: action.propsIcon, onClick: () => {
|
|
1275
|
+
if (!action.disabled) {
|
|
1276
|
+
action.onClick(selectedRows, selectedKeysArray);
|
|
1277
|
+
}
|
|
1278
|
+
}, isDisable: action.disabled, className: action.className, tooltip: action.tooltip || '' }) }, index));
|
|
1279
|
+
}) })));
|
|
1280
|
+
})(), isSelectSort &&
|
|
1252
1281
|
(rowSelectionMode === 'checkbox' || isSelectRow) && (_jsx(Tooltip, { content: "Move selected to top", position: "top", children: _jsx(SelectSortButton, { onClick: () => {
|
|
1253
1282
|
const keys = Array.from(selectedKeys);
|
|
1254
1283
|
// Set internal state to trigger re-sort
|
|
@@ -1256,7 +1285,51 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
1256
1285
|
// Also call optional callback
|
|
1257
1286
|
const selectedRows = data.filter((row) => selectedKeys.has(getRowKey(row)));
|
|
1258
1287
|
onSelectSort?.(selectedRows, keys);
|
|
1259
|
-
}, "aria-label": "Move selected rows to top", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M12 19V5M5 12l7-7 7 7" }) }) }) }))] })), resolvedPaginationConfig?.showSizeChanger !== false && (
|
|
1288
|
+
}, "aria-label": "Move selected rows to top", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M12 19V5M5 12l7-7 7 7" }) }) }) }))] })), resolvedPaginationConfig?.showSizeChanger !== false && (_jsxs(PageSizeInputWrapper, { ref: pageSizeDropdownRef, children: [_jsx(PageSizeInput, { type: "text", value: pageSizeInputFocused ? pageSizeInputValue : pageSize, onChange: (e) => {
|
|
1289
|
+
const value = e.target.value;
|
|
1290
|
+
setPageSizeInputValue(value);
|
|
1291
|
+
// If user types a valid number, update immediately
|
|
1292
|
+
const numValue = parseInt(value, 10);
|
|
1293
|
+
if (!isNaN(numValue) && numValue > 0 && numValue <= 1000) {
|
|
1294
|
+
// Don't call handlePageSizeChange yet, wait for blur or Enter
|
|
1295
|
+
}
|
|
1296
|
+
}, onFocus: () => {
|
|
1297
|
+
setPageSizeInputFocused(true);
|
|
1298
|
+
setPageSizeInputValue('');
|
|
1299
|
+
}, onBlur: () => {
|
|
1300
|
+
// Apply the value if valid
|
|
1301
|
+
if (pageSizeInputValue) {
|
|
1302
|
+
const numValue = parseInt(pageSizeInputValue, 10);
|
|
1303
|
+
if (!isNaN(numValue) && numValue > 0 && numValue <= 1000) {
|
|
1304
|
+
handlePageSizeChange(numValue);
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
setTimeout(() => {
|
|
1308
|
+
setPageSizeInputFocused(false);
|
|
1309
|
+
setPageSizeInputValue('');
|
|
1310
|
+
}, 200);
|
|
1311
|
+
}, onKeyDown: (e) => {
|
|
1312
|
+
if (e.key === 'Enter') {
|
|
1313
|
+
e.preventDefault();
|
|
1314
|
+
const target = e.target;
|
|
1315
|
+
const numValue = parseInt(target.value, 10);
|
|
1316
|
+
if (!isNaN(numValue) && numValue > 0 && numValue <= 1000) {
|
|
1317
|
+
handlePageSizeChange(numValue);
|
|
1318
|
+
setPageSizeInputFocused(false);
|
|
1319
|
+
setPageSizeInputValue('');
|
|
1320
|
+
target.blur();
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
else if (e.key === 'Escape') {
|
|
1324
|
+
setPageSizeInputFocused(false);
|
|
1325
|
+
setPageSizeInputValue('');
|
|
1326
|
+
e.target.blur();
|
|
1327
|
+
}
|
|
1328
|
+
}, placeholder: pageSizeInputFocused ? 'Type size...' : '', readOnly: !pageSizeInputFocused }), _jsx(PageSizeDropdownIcon, { children: _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", children: _jsx("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }) }) }), pageSizeInputFocused && (_jsx(PageSizeDropdown, { children: (resolvedPaginationConfig?.pageSizeOptions || [10, 20, 30, 50]).map((size) => (_jsx(PageSizeDropdownItem, { "$active": size === pageSize, onClick: () => {
|
|
1329
|
+
handlePageSizeChange(size);
|
|
1330
|
+
setPageSizeInputFocused(false);
|
|
1331
|
+
setPageSizeInputValue('');
|
|
1332
|
+
}, children: size }, size))) }))] }))] }), _jsxs(PaginationControls, { children: [_jsx(PageButton, { onClick: () => handlePageChange(0), disabled: page === 0, children: _jsx(ChevronsLeftIcon, {}) }), _jsx(PageButton, { onClick: () => handlePageChange(page - 1), disabled: page === 0, children: _jsx(ChevronLeftIcon, {}) }), getPageNumbers().map((p, i) => typeof p === 'string' ? (_jsx("span", { style: { padding: '0 4px', color: 'white' }, children: p }, `ellipsis-${i}`)) : (_jsx(PageButton, { "$active": p === page, onClick: () => handlePageChange(p), children: p + 1 }, p))), _jsx(PageButton, { onClick: () => handlePageChange(page + 1), disabled: page >= actualTotalPages - 1, children: _jsx(ChevronRightIcon, {}) }), _jsx(PageButton, { onClick: () => handlePageChange(actualTotalPages - 1), disabled: page >= actualTotalPages - 1, children: _jsx(ChevronsRightIcon, {}) })] }), showTotal && _jsx(PaginationInfo, { children: showTotal }), resolvedPaginationConfig?.showQuickJumper &&
|
|
1260
1333
|
(() => {
|
|
1261
1334
|
const handleQuickJump = (input) => {
|
|
1262
1335
|
const pageNum = parseInt(input.value, 10);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Table } from '..';
|
|
4
|
+
// Generate sample data
|
|
5
|
+
const generateUsers = (count) => {
|
|
6
|
+
const departments = ['Engineering', 'Sales', 'Marketing', 'HR', 'Finance'];
|
|
7
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
8
|
+
_id: `user-${i + 1}`,
|
|
9
|
+
name: `User ${i + 1}`,
|
|
10
|
+
email: `user${i + 1}@example.com`,
|
|
11
|
+
age: 20 + (i % 50),
|
|
12
|
+
department: departments[i % departments.length],
|
|
13
|
+
}));
|
|
14
|
+
};
|
|
15
|
+
const PaginationExample = () => {
|
|
16
|
+
const [data] = useState(generateUsers(100));
|
|
17
|
+
const columns = [
|
|
18
|
+
{
|
|
19
|
+
dataField: 'name',
|
|
20
|
+
text: 'Name',
|
|
21
|
+
sort: true,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
dataField: 'email',
|
|
25
|
+
text: 'Email',
|
|
26
|
+
sort: true,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
dataField: 'age',
|
|
30
|
+
text: 'Age',
|
|
31
|
+
sort: true,
|
|
32
|
+
align: 'center',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
dataField: 'department',
|
|
36
|
+
text: 'Department',
|
|
37
|
+
sort: true,
|
|
38
|
+
filter: true,
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
return (_jsxs("div", { style: { padding: '20px' }, children: [_jsx("h1", { children: "Table Pagination Improvements Demo" }), _jsxs("div", { style: { marginBottom: '20px' }, children: [_jsx("h2", { children: "Features Demonstrated:" }), _jsxs("ul", { children: [_jsx("li", { children: "\u2705 Click on page numbers (4, 5, etc.) - they stay active" }), _jsx("li", { children: "\u2705 Use Quick Jumper to navigate to any page" }), _jsx("li", { children: "\u2705 Page size selector with manual input + dropdown" }), _jsx("li", { children: "\u2705 Type custom page size (e.g., 15, 25, 35) and press Enter" }), _jsx("li", { children: "\u2705 Click page size input to see preset options (10, 20, 30, 50)" })] })] }), _jsx(Table, { id: "pagination-demo", data: data, columns: columns, keyField: "_id", pagination: true, paginationConfig: {
|
|
42
|
+
page: 0,
|
|
43
|
+
pageSize: 10,
|
|
44
|
+
showSizeChanger: true,
|
|
45
|
+
showQuickJumper: true,
|
|
46
|
+
showTotal: true,
|
|
47
|
+
pageSizeOptions: [10, 20, 30, 50],
|
|
48
|
+
}, searchable: true, filterable: true, bordered: true, hover: true, striped: true }), _jsxs("div", { style: { marginTop: '20px', padding: '15px', background: '#f0f9ff', borderRadius: '8px' }, children: [_jsx("h3", { children: "Testing Instructions:" }), _jsxs("ol", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Page Number Active State:" }), _jsxs("ul", { children: [_jsx("li", { children: "Click on page 4 or 5" }), _jsx("li", { children: "Notice the page number stays highlighted" }), _jsx("li", { children: "The correct data is displayed" })] })] }), _jsxs("li", { children: [_jsx("strong", { children: "Quick Jumper:" }), _jsxs("ul", { children: [_jsx("li", { children: "Type \"7\" in the \"Go to\" input" }), _jsx("li", { children: "Press Enter or click \"Go\"" }), _jsx("li", { children: "Page 7 becomes active and displays correct data" })] })] }), _jsxs("li", { children: [_jsx("strong", { children: "Page Size Input:" }), _jsxs("ul", { children: [_jsx("li", { children: "Click on the page size input (shows current size like \"10\")" }), _jsx("li", { children: "Dropdown appears with options: 10, 20, 30, 50" }), _jsx("li", { children: "Click \"20\" to change page size" }), _jsx("li", { children: "OR click the input again and type \"15\"" }), _jsx("li", { children: "Press Enter to apply custom size" }), _jsx("li", { children: "Pagination updates to show 15 items per page" })] })] })] })] })] }));
|
|
49
|
+
};
|
|
50
|
+
export default PaginationExample;
|
|
@@ -93,6 +93,13 @@ export declare const PageButton: import("styled-components/dist/types").IStyledC
|
|
|
93
93
|
$active?: boolean | undefined;
|
|
94
94
|
}>> & string;
|
|
95
95
|
export declare const PageSizeSelect: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, never>> & string;
|
|
96
|
+
export declare const PageSizeInputWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
97
|
+
export declare const PageSizeInput: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, never>> & string;
|
|
98
|
+
export declare const PageSizeDropdownIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
99
|
+
export declare const PageSizeDropdown: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
100
|
+
export declare const PageSizeDropdownItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
101
|
+
$active?: boolean | undefined;
|
|
102
|
+
}>> & string;
|
|
96
103
|
export declare const QuickJumper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
97
104
|
export declare const EmptyState: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
98
105
|
export declare const LoadingOverlay: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -64,6 +64,7 @@ export const ToolbarGroup = styled.div `
|
|
|
64
64
|
align-items: center;
|
|
65
65
|
gap: 8px;
|
|
66
66
|
flex-wrap: wrap;
|
|
67
|
+
position: relative;
|
|
67
68
|
`;
|
|
68
69
|
export const SearchInput = styled.div `
|
|
69
70
|
position: relative;
|
|
@@ -633,6 +634,8 @@ export const PaginationWrapper = styled.div `
|
|
|
633
634
|
background: #6b7280;
|
|
634
635
|
border-top: 1px solid ${tokens.outline || '#e5e7eb'};
|
|
635
636
|
color: white;
|
|
637
|
+
position: relative;
|
|
638
|
+
overflow: visible;
|
|
636
639
|
|
|
637
640
|
@media (max-width: 640px) {
|
|
638
641
|
flex-direction: column;
|
|
@@ -694,6 +697,75 @@ export const PageSizeSelect = styled.select `
|
|
|
694
697
|
border-color: ${tokens.primary || '#3b82f6'};
|
|
695
698
|
}
|
|
696
699
|
`;
|
|
700
|
+
export const PageSizeInputWrapper = styled.div `
|
|
701
|
+
position: relative;
|
|
702
|
+
display: inline-block;
|
|
703
|
+
z-index: 1;
|
|
704
|
+
`;
|
|
705
|
+
export const PageSizeInput = styled.input `
|
|
706
|
+
height: 32px;
|
|
707
|
+
width: 70px;
|
|
708
|
+
padding: 0 24px 0 8px;
|
|
709
|
+
font-size: 13px;
|
|
710
|
+
color: #1f2937;
|
|
711
|
+
background: white;
|
|
712
|
+
border: 1px solid ${tokens.outline || '#d1d5db'};
|
|
713
|
+
border-radius: 4px;
|
|
714
|
+
cursor: pointer;
|
|
715
|
+
text-align: left;
|
|
716
|
+
|
|
717
|
+
&:focus {
|
|
718
|
+
outline: none;
|
|
719
|
+
border-color: ${tokens.primary || '#3b82f6'};
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
&::placeholder {
|
|
723
|
+
color: #9ca3af;
|
|
724
|
+
}
|
|
725
|
+
`;
|
|
726
|
+
export const PageSizeDropdownIcon = styled.div `
|
|
727
|
+
position: absolute;
|
|
728
|
+
right: 8px;
|
|
729
|
+
top: 50%;
|
|
730
|
+
transform: translateY(-50%);
|
|
731
|
+
pointer-events: none;
|
|
732
|
+
color: #6b7280;
|
|
733
|
+
display: flex;
|
|
734
|
+
align-items: center;
|
|
735
|
+
|
|
736
|
+
svg {
|
|
737
|
+
width: 12px;
|
|
738
|
+
height: 12px;
|
|
739
|
+
}
|
|
740
|
+
`;
|
|
741
|
+
export const PageSizeDropdown = styled.div `
|
|
742
|
+
position: absolute;
|
|
743
|
+
bottom: calc(100% + 4px);
|
|
744
|
+
left: 0;
|
|
745
|
+
min-width: 100%;
|
|
746
|
+
background: white;
|
|
747
|
+
border: 1px solid ${tokens.outline || '#d1d5db'};
|
|
748
|
+
border-radius: 4px;
|
|
749
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
750
|
+
z-index: 9999;
|
|
751
|
+
max-height: 200px;
|
|
752
|
+
overflow-y: auto;
|
|
753
|
+
`;
|
|
754
|
+
export const PageSizeDropdownItem = styled.div `
|
|
755
|
+
padding: 8px 12px;
|
|
756
|
+
font-size: 13px;
|
|
757
|
+
color: #1f2937;
|
|
758
|
+
cursor: pointer;
|
|
759
|
+
background: ${({ $active }) => ($active ? '#f3f4f6' : 'transparent')};
|
|
760
|
+
|
|
761
|
+
&:hover {
|
|
762
|
+
background: #f3f4f6;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
&:active {
|
|
766
|
+
background: #e5e7eb;
|
|
767
|
+
}
|
|
768
|
+
`;
|
|
697
769
|
export const QuickJumper = styled.div `
|
|
698
770
|
display: flex;
|
|
699
771
|
align-items: center;
|
|
@@ -604,8 +604,9 @@ export interface TableProps<T = any> {
|
|
|
604
604
|
*/
|
|
605
605
|
onSelectSort?: (selectedRows: T[], selectedKeys: string[]) => void;
|
|
606
606
|
/**
|
|
607
|
-
* Array of action items to display when rows are selected
|
|
608
|
-
*
|
|
607
|
+
* Array of action items to display when rows are selected.
|
|
608
|
+
* Can be a static array OR a function that receives selectedRows and returns an array.
|
|
609
|
+
* Each action item can have an icon, props, and onClick handler.
|
|
609
610
|
*/
|
|
610
611
|
selectionActions?: Array<{
|
|
611
612
|
/** Name of the icon from react-icons library (e.g., 'FaWhatsapp', 'FaTrash') */
|
|
@@ -616,15 +617,26 @@ export interface TableProps<T = any> {
|
|
|
616
617
|
color?: string;
|
|
617
618
|
[key: string]: any;
|
|
618
619
|
};
|
|
619
|
-
/** Click handler - receives selected rows and their keys */
|
|
620
|
-
onClick: (selectedRows: T[], selectedKeys
|
|
620
|
+
/** Click handler - receives selected rows and their keys (selectedRows is optional) */
|
|
621
|
+
onClick: (selectedRows: T[], selectedKeys?: string[]) => void;
|
|
621
622
|
/** Tooltip text to display on hover */
|
|
622
623
|
tooltip?: string;
|
|
623
624
|
/** Whether the action is disabled */
|
|
624
625
|
disabled?: boolean;
|
|
625
626
|
/** Additional className for the icon container */
|
|
626
627
|
className?: string;
|
|
627
|
-
}
|
|
628
|
+
}> | ((selectedRows: T[]) => Array<{
|
|
629
|
+
nameIcon: string;
|
|
630
|
+
propsIcon?: {
|
|
631
|
+
size?: string | number;
|
|
632
|
+
color?: string;
|
|
633
|
+
[key: string]: any;
|
|
634
|
+
};
|
|
635
|
+
onClick: (selectedRows: T[], selectedKeys?: string[]) => void;
|
|
636
|
+
tooltip?: string;
|
|
637
|
+
disabled?: boolean;
|
|
638
|
+
className?: string;
|
|
639
|
+
}>);
|
|
628
640
|
/**
|
|
629
641
|
* Header toolbar actions (after Show/Hide Columns).
|
|
630
642
|
* Accepts array of action items OR a single React component.
|
|
@@ -45,4 +45,10 @@
|
|
|
45
45
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
46
46
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
47
47
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
48
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
49
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
50
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
51
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
52
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
53
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
48
54
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/.\!filter,.backdrop-blur-sm,.blur,.ring,.ring-2,.shadow,.shadow-inner,body{font-family:Arima Regular;font-size:14px}.dark\:bg-black:is(.dark *),.dark\:border-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/fieldset,legend{padding:0}.container{width:100%}@media (min-width:0px){.container{max-width:0}}@media (min-width:20rem){.container{max-width:20rem}}@media (min-width:23.4375rem){.container{max-width:23.4375rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:90rem){.container{max-width:90rem}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-meridiem-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-second-field,.form-input::placeholder,.form-input:focus,.form-multiselect,.form-multiselect:focus,.form-select,.form-select:focus,table{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}table:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}table tr:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}select:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.\!visible{visibility:visible!important}.top-1\/2{top:50%}.-translate-x-1\/2,.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.divide-teal-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(240 253 250/var(--tw-divide-opacity,1))}.bg-purple-900\/50{background-color:#581c8780}.p-0\.5{padding:.125rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.\!filter,.blur,.ring,.ring-2,.shadow,.shadow-inner,.backdrop-blur-sm,body{font-family:Arima Regular;font-size:14px}.hover\:bg-white\/20:hover{background-color:#fff3}.dark\:border-gray-600:is(.dark *),.dark\:bg-black:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:bg-boxdark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(36 48 63/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:text-black:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:ring-offset-gray-800:is(.dark *){--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-blue-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:focus\:ring-blue-600:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-family:ArimaRegular;src:url(library/assets/fonts/arima/arima-regular.ttf)}.container{width:100%}@media (min-width:0px){.container{max-width:0}}@media (min-width:20rem){.container{max-width:20rem}}@media (min-width:23.4375rem){.container{max-width:23.4375rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:90rem){.container{max-width:90rem}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-input::placeholder,.form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-meridiem-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-second-field,table{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}table:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}table tr:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}select:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.\!visible{visibility:visible!important}.top-1\/2{top:50%}.flex-grow,.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}@keyframes pulse{50%{opacity:.5}}@keyframes spin{to{transform:rotate(1turn)}}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.divide-teal-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(240 253 250/var(--tw-divide-opacity,1))}.bg-purple-900\/50{background-color:#581c8780}.p-0\.5{padding:.125rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.shadow,.shadow-inner,.shadow-md,.ring,.ring-2,.blur,.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.backdrop-blur-sm,body{font-family:Arima Regular;font-size:14px}.menu ul{list-style:none;margin:0;padding:0}.menu li{border-bottom:1px solid #ddd;padding:10px}.menu li:last-child{border-bottom:none}.hover\:bg-white\/20:hover{background-color:#fff3}.focus\:ring-0:focus,.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:bg-black:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:bg-boxdark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(36 48 63/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:text-black:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:ring-offset-gray-800:is(.dark *){--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-blue-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:focus\:ring-blue-600:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}@media (min-width:0px) and (max-width:767px){}
|