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.
@@ -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, PageSizeSelect, QuickJumper, EmptyState, LoadingOverlay, LoadingSpinner, EditableCell, CellEditor, ColumnTogglePanel, ColumnToggleHeader, ColumnToggleSearch, ColumnToggleList, ColumnToggleItem, ColumnToggleDragHandle, SelectionIndicator, SelectionCount, SelectSortButton, } from './elements';
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 data changes (e.g., after server-side onFilter response)
333
- // This ensures new data is visible without re-triggering onFilter.
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
- if (page !== 0) {
339
- setPage(0);
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 && selectionActions.length > 0 && (_jsx("div", { style: {
1239
- display: 'flex',
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 selectedKeysArray = Array.from(selectedKeys);
1246
- return (_jsx("div", { children: _jsx(Icon, { nameIcon: action.nameIcon, propsIcon: action.propsIcon, onClick: () => {
1247
- if (!action.disabled) {
1248
- action.onClick(selectedRows, selectedKeysArray);
1249
- }
1250
- }, isDisable: action.disabled, className: action.className, tooltip: action.tooltip || '' }) }, index));
1251
- }) })), isSelectSort &&
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 && (_jsx(PageSizeSelect, { value: pageSize, onChange: (e) => handlePageSizeChange(Number(e.target.value)), children: (resolvedPaginationConfig?.pageSizeOptions || [10, 20, 30, 50]).map((size) => (_jsx("option", { value: size, 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 &&
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,3 @@
1
+ import React from 'react';
2
+ declare const PaginationExample: React.FC;
3
+ export default PaginationExample;
@@ -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
- * Each action item can have an icon, props, and onClick handler
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: string[]) => void;
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){}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-restyle-components",
3
- "version": "0.4.57",
3
+ "version": "0.4.58",
4
4
  "private": false,
5
5
  "description": "Easy use restyle components",
6
6
  "author": {