@appcorp/shadcn 1.0.10
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/README.md +138 -0
- package/app/layout.d.ts +7 -0
- package/app/layout.js +18 -0
- package/app/page.d.ts +2 -0
- package/app/page.js +16 -0
- package/components/badge.d.ts +9 -0
- package/components/badge.js +82 -0
- package/components/button.d.ts +10 -0
- package/components/button.js +91 -0
- package/components/card.d.ts +9 -0
- package/components/card.js +94 -0
- package/components/carousel.d.ts +19 -0
- package/components/carousel.js +168 -0
- package/components/checkbox.d.ts +9 -0
- package/components/checkbox.js +87 -0
- package/components/combobox.d.ts +70 -0
- package/components/combobox.js +315 -0
- package/components/command.d.ts +18 -0
- package/components/command.js +115 -0
- package/components/context-menu.d.ts +25 -0
- package/components/context-menu.js +148 -0
- package/components/dialog.d.ts +15 -0
- package/components/dialog.js +118 -0
- package/components/drawer.d.ts +13 -0
- package/components/drawer.js +115 -0
- package/components/dropdown-menu.d.ts +25 -0
- package/components/dropdown-menu.js +148 -0
- package/components/enhanced-dropzone.d.ts +21 -0
- package/components/enhanced-dropzone.js +187 -0
- package/components/enhanced-table-footer-action.d.ts +35 -0
- package/components/enhanced-table-footer-action.js +110 -0
- package/components/enhanced-table-footer-page.d.ts +34 -0
- package/components/enhanced-table-footer-page.js +132 -0
- package/components/enhanced-table-footer-pagination.d.ts +38 -0
- package/components/enhanced-table-footer-pagination.js +116 -0
- package/components/enhanced-table-header-action.d.ts +7 -0
- package/components/enhanced-table-header-action.js +21 -0
- package/components/enhanced-table-header-search.d.ts +12 -0
- package/components/enhanced-table-header-search.js +17 -0
- package/components/enhanced-table.d.ts +87 -0
- package/components/enhanced-table.js +221 -0
- package/components/form.d.ts +24 -0
- package/components/form.js +125 -0
- package/components/input.d.ts +8 -0
- package/components/input.js +86 -0
- package/components/label.d.ts +7 -0
- package/components/label.js +68 -0
- package/components/popover.d.ts +7 -0
- package/components/popover.js +82 -0
- package/components/select.d.ts +15 -0
- package/components/select.js +127 -0
- package/components/separator.d.ts +4 -0
- package/components/separator.js +66 -0
- package/components/shadcn-io/color-picker/index.d.ts +43 -0
- package/components/shadcn-io/color-picker/index.js +304 -0
- package/components/shadcn-io/copy-button/index.d.ts +16 -0
- package/components/shadcn-io/copy-button/index.js +121 -0
- package/components/shadcn-io/dropzone/index.d.ts +19 -0
- package/components/shadcn-io/dropzone/index.js +131 -0
- package/components/shadcn-io/gantt/index.d.ts +145 -0
- package/components/shadcn-io/gantt/index.js +767 -0
- package/components/shadcn-io/table/index.d.ts +60 -0
- package/components/shadcn-io/table/index.js +138 -0
- package/components/sonner.d.ts +4 -0
- package/components/sonner.js +54 -0
- package/components/switch.d.ts +9 -0
- package/components/switch.js +89 -0
- package/components/table.d.ts +10 -0
- package/components/table.js +101 -0
- package/components/textarea.d.ts +8 -0
- package/components/textarea.js +86 -0
- package/lib/themes.d.ts +147 -0
- package/lib/themes.js +150 -0
- package/lib/toast-utils.d.ts +44 -0
- package/lib/toast-utils.js +212 -0
- package/lib/utils.d.ts +2 -0
- package/lib/utils.js +12 -0
- package/package.json +101 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced Table Footer Page Component
|
|
4
|
+
*
|
|
5
|
+
* Displays pagination information with internationalization and RTL/LTR support.
|
|
6
|
+
* Automatically adapts text direction and order based on locale.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Full i18n support with fallback text
|
|
10
|
+
* - RTL/LTR layout adaptation
|
|
11
|
+
* - Loading state indicator
|
|
12
|
+
* - Accessibility attributes
|
|
13
|
+
* - Custom translation overrides
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.EnhancedTableFooterPage = void 0;
|
|
20
|
+
var react_1 = __importDefault(require("react"));
|
|
21
|
+
var EnhancedTableFooterPage = function (_a) {
|
|
22
|
+
var currentPage = _a.currentPage, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, loading = _a.loading, _c = _a.loadingLabel, loadingLabel = _c === void 0 ? "Loading" : _c, _d = _a.ofLabel, ofLabel = _d === void 0 ? "of" : _d, _e = _a.pageLabel, pageLabel = _e === void 0 ? "Page" : _e, totalPages = _a.totalPages, _f = _a.className, className = _f === void 0 ? "" : _f;
|
|
23
|
+
return (react_1.default.createElement("div", { className: "flex items-center gap-2 ".concat(isRTL ? "rtl" : "ltr", " ").concat(className), dir: isRTL ? "rtl" : "ltr", role: "status", "aria-live": "polite", "aria-label": "".concat(pageLabel, " ").concat(currentPage, " ").concat(ofLabel, " ").concat(totalPages) },
|
|
24
|
+
react_1.default.createElement("span", { className: "text-sm text-muted-foreground" }, isRTL ? (
|
|
25
|
+
// RTL layout: Numbers read right-to-left but maintain logical order
|
|
26
|
+
react_1.default.createElement("span", { className: "inline-flex items-center gap-1" },
|
|
27
|
+
react_1.default.createElement("span", null, totalPages),
|
|
28
|
+
react_1.default.createElement("span", null, ofLabel),
|
|
29
|
+
react_1.default.createElement("span", null, currentPage),
|
|
30
|
+
react_1.default.createElement("span", null, pageLabel))) : (
|
|
31
|
+
// LTR layout: "Page currentPage of totalPages"
|
|
32
|
+
react_1.default.createElement("span", { className: "inline-flex items-center gap-1" },
|
|
33
|
+
react_1.default.createElement("span", null, pageLabel),
|
|
34
|
+
react_1.default.createElement("span", null, currentPage),
|
|
35
|
+
react_1.default.createElement("span", null, ofLabel),
|
|
36
|
+
react_1.default.createElement("span", null, totalPages)))),
|
|
37
|
+
loading && (react_1.default.createElement("div", { className: "flex items-center gap-2 ".concat(isRTL ? "order-first" : "order-last"), "aria-label": loadingLabel },
|
|
38
|
+
react_1.default.createElement("div", { className: "w-4 h-4 border-2 border-primary border-t-transparent rounded-full animate-spin", role: "progressbar", "aria-label": loadingLabel })))));
|
|
39
|
+
};
|
|
40
|
+
exports.EnhancedTableFooterPage = EnhancedTableFooterPage;
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// USAGE EXAMPLES
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/*
|
|
45
|
+
Example 1: Basic usage with automatic i18n
|
|
46
|
+
<EnhancedTableFooterPage
|
|
47
|
+
currentPage={2}
|
|
48
|
+
totalPages={10}
|
|
49
|
+
loading={false}
|
|
50
|
+
/>
|
|
51
|
+
|
|
52
|
+
Example 2: With custom translations
|
|
53
|
+
<EnhancedTableFooterPage
|
|
54
|
+
currentPage={1}
|
|
55
|
+
totalPages={5}
|
|
56
|
+
loading={true}
|
|
57
|
+
translationMap={{
|
|
58
|
+
pageLabel: "صفحہ", // Urdu for "Page"
|
|
59
|
+
ofLabel: "کا", // Urdu for "of"
|
|
60
|
+
loadingLabel: "لوڈ ہو رہا ہے" // Urdu for "Loading"
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
|
|
64
|
+
Example 3: With custom styling
|
|
65
|
+
<EnhancedTableFooterPage
|
|
66
|
+
currentPage={3}
|
|
67
|
+
totalPages={7}
|
|
68
|
+
loading={false}
|
|
69
|
+
className="bg-gray-50 p-2 rounded-md"
|
|
70
|
+
/>
|
|
71
|
+
|
|
72
|
+
Translation Keys (Already Added to messages files):
|
|
73
|
+
English (en.json):
|
|
74
|
+
{
|
|
75
|
+
"common": {
|
|
76
|
+
"page": "Page",
|
|
77
|
+
"of": "of",
|
|
78
|
+
"loading": "Loading"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Urdu (ur.json):
|
|
83
|
+
{
|
|
84
|
+
"common": {
|
|
85
|
+
"page": "صفحہ",
|
|
86
|
+
"of": "کا",
|
|
87
|
+
"loading": "لوڈ ہو رہا ہے"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
RTL Layout Features:
|
|
92
|
+
- Automatic text direction detection and application
|
|
93
|
+
- Proper order of page information in RTL languages
|
|
94
|
+
- RTL-aware loading indicator positioning
|
|
95
|
+
- Accessibility attributes for screen readers
|
|
96
|
+
- Direction-specific CSS classes and DOM attributes
|
|
97
|
+
*/
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// COMPONENT ENHANCEMENTS SUMMARY
|
|
100
|
+
// ============================================================================
|
|
101
|
+
/*
|
|
102
|
+
Enhancements Applied:
|
|
103
|
+
|
|
104
|
+
1. **Internationalization (i18n)**
|
|
105
|
+
- Full translation support using next-intl
|
|
106
|
+
- Fallback text for missing translations
|
|
107
|
+
- Custom translation override capability
|
|
108
|
+
|
|
109
|
+
2. **RTL/LTR Layout Support**
|
|
110
|
+
- Automatic layout detection using useRTL hook
|
|
111
|
+
- Proper text ordering for RTL languages
|
|
112
|
+
- Direction-aware CSS classes and attributes
|
|
113
|
+
- RTL-appropriate visual element positioning
|
|
114
|
+
|
|
115
|
+
3. **Accessibility Improvements**
|
|
116
|
+
- ARIA labels for screen readers
|
|
117
|
+
- Role attributes for semantic meaning
|
|
118
|
+
- Live region announcements for dynamic content
|
|
119
|
+
- Proper labeling of interactive elements
|
|
120
|
+
|
|
121
|
+
4. **Developer Experience**
|
|
122
|
+
- Comprehensive JSDoc documentation
|
|
123
|
+
- Usage examples and patterns
|
|
124
|
+
- TypeScript interface improvements
|
|
125
|
+
- Flexible customization options
|
|
126
|
+
|
|
127
|
+
5. **Code Quality**
|
|
128
|
+
- Clean, readable component structure
|
|
129
|
+
- Consistent naming conventions
|
|
130
|
+
- Performance-optimized rendering
|
|
131
|
+
- Maintainable and extensible design
|
|
132
|
+
*/
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Table Footer Pagination Component
|
|
3
|
+
*
|
|
4
|
+
* Displays rows per page selector with internationalization and RTL/LTR support.
|
|
5
|
+
* Automatically adapts text direction and layout based on locale.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Full i18n support with fallback text
|
|
9
|
+
* - RTL/LTR layout adaptation
|
|
10
|
+
* - Loading state handling
|
|
11
|
+
* - Accessibility attributes
|
|
12
|
+
* - Custom translation overrides
|
|
13
|
+
* - Responsive design
|
|
14
|
+
*/
|
|
15
|
+
import { FC } from "react";
|
|
16
|
+
import { PageLimitOption } from "./enhanced-table";
|
|
17
|
+
interface EnhancedTableFooterPageProps {
|
|
18
|
+
/** Handler for page limit selection changes */
|
|
19
|
+
handleOnSelect: (node: string, value: object) => void;
|
|
20
|
+
/** Array of page limit options to display */
|
|
21
|
+
listOptions: PageLimitOption[];
|
|
22
|
+
/** Loading state indicator */
|
|
23
|
+
loading: boolean;
|
|
24
|
+
/** Node key for the select handler */
|
|
25
|
+
nodeSelectKey?: string;
|
|
26
|
+
/** Current page limit value */
|
|
27
|
+
pageLimit: number;
|
|
28
|
+
/** Total number of pages (unused but kept for compatibility) */
|
|
29
|
+
totalPages: number;
|
|
30
|
+
/** RTL layout flag */
|
|
31
|
+
isRTL?: boolean;
|
|
32
|
+
/** Label for rows per page selector */
|
|
33
|
+
rowsPerPageLabel?: string;
|
|
34
|
+
/** Optional CSS classes for custom styling */
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const EnhancedTableFooterPagination: FC<EnhancedTableFooterPageProps>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced Table Footer Pagination Component
|
|
4
|
+
*
|
|
5
|
+
* Displays rows per page selector with internationalization and RTL/LTR support.
|
|
6
|
+
* Automatically adapts text direction and layout based on locale.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Full i18n support with fallback text
|
|
10
|
+
* - RTL/LTR layout adaptation
|
|
11
|
+
* - Loading state handling
|
|
12
|
+
* - Accessibility attributes
|
|
13
|
+
* - Custom translation overrides
|
|
14
|
+
* - Responsive design
|
|
15
|
+
*/
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.EnhancedTableFooterPagination = void 0;
|
|
21
|
+
var select_1 = require("./select");
|
|
22
|
+
var react_1 = __importDefault(require("react"));
|
|
23
|
+
var EnhancedTableFooterPagination = function (_a) {
|
|
24
|
+
var handleOnSelect = _a.handleOnSelect, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, nodeSelectKey = _a.nodeSelectKey, pageLimit = _a.pageLimit, _c = _a.rowsPerPageLabel, rowsPerPageLabel = _c === void 0 ? "Rows per page:" : _c, _d = _a.className, className = _d === void 0 ? "" : _d;
|
|
25
|
+
return (react_1.default.createElement("div", { className: "flex items-center gap-2 ".concat(className), dir: isRTL ? "rtl" : "ltr" },
|
|
26
|
+
react_1.default.createElement("label", { htmlFor: "page-limit-select-".concat(nodeSelectKey), className: "text-sm text-muted-foreground whitespace-nowrap" }, rowsPerPageLabel),
|
|
27
|
+
react_1.default.createElement(select_1.Select, { value: String(pageLimit), onValueChange: function (value) {
|
|
28
|
+
return handleOnSelect(nodeSelectKey, { option: value });
|
|
29
|
+
}, disabled: loading },
|
|
30
|
+
react_1.default.createElement(select_1.SelectTrigger, { id: "page-limit-select-".concat(nodeSelectKey), className: "w-20", "aria-label": "".concat(rowsPerPageLabel, " ").concat(pageLimit) },
|
|
31
|
+
react_1.default.createElement(select_1.SelectValue, null)),
|
|
32
|
+
react_1.default.createElement(select_1.SelectContent, null, listOptions.map(function (option) { return (react_1.default.createElement(select_1.SelectItem, { key: option.option, value: option.option, "aria-label": "".concat(option.option, " rows per page") }, option.option)); })))));
|
|
33
|
+
};
|
|
34
|
+
exports.EnhancedTableFooterPagination = EnhancedTableFooterPagination;
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// USAGE EXAMPLES
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/*
|
|
39
|
+
Example 1: Basic usage with automatic i18n
|
|
40
|
+
<EnhancedTableFooterPagination
|
|
41
|
+
handleOnSelect={(key, value) => console.log(key, value)}
|
|
42
|
+
listOptions={[{ option: "10" }, { option: "25" }, { option: "50" }]}
|
|
43
|
+
loading={false}
|
|
44
|
+
nodeSelectKey="pageLimit"
|
|
45
|
+
pageLimit={10}
|
|
46
|
+
totalPages={5}
|
|
47
|
+
/>
|
|
48
|
+
|
|
49
|
+
Example 2: With custom label text
|
|
50
|
+
<EnhancedTableFooterPagination
|
|
51
|
+
handleOnSelect={handlePageLimitChange}
|
|
52
|
+
listOptions={pageLimitOptions}
|
|
53
|
+
loading={isLoading}
|
|
54
|
+
nodeSelectKey="pageLimit"
|
|
55
|
+
pageLimit={currentPageLimit}
|
|
56
|
+
totalPages={totalPages}
|
|
57
|
+
labelText="Items per page:"
|
|
58
|
+
/>
|
|
59
|
+
|
|
60
|
+
Example 3: With custom styling and RTL support
|
|
61
|
+
<EnhancedTableFooterPagination
|
|
62
|
+
handleOnSelect={handlePageLimitChange}
|
|
63
|
+
listOptions={pageLimitOptions}
|
|
64
|
+
loading={false}
|
|
65
|
+
nodeSelectKey="pageLimit"
|
|
66
|
+
pageLimit={25}
|
|
67
|
+
totalPages={10}
|
|
68
|
+
className="bg-gray-50 p-2 rounded-md"
|
|
69
|
+
/>
|
|
70
|
+
|
|
71
|
+
RTL Layout Features:
|
|
72
|
+
- Automatic text direction detection and application
|
|
73
|
+
- Element order reversal for RTL languages
|
|
74
|
+
- Proper label-select association
|
|
75
|
+
- Accessibility attributes for screen readers
|
|
76
|
+
- Direction-specific CSS classes and DOM attributes
|
|
77
|
+
*/
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// COMPONENT ENHANCEMENTS SUMMARY
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/*
|
|
82
|
+
Enhancements Applied:
|
|
83
|
+
|
|
84
|
+
1. **Internationalization (i18n)**
|
|
85
|
+
- Translation support using next-intl
|
|
86
|
+
- Fallback text for missing translations
|
|
87
|
+
- Custom label text override capability
|
|
88
|
+
- Translatable "Rows per page:" label
|
|
89
|
+
|
|
90
|
+
2. **RTL/LTR Layout Support**
|
|
91
|
+
- Automatic layout detection using useRTL hook
|
|
92
|
+
- Element order reversal for RTL languages (flex-row-reverse)
|
|
93
|
+
- Direction-aware CSS classes and attributes
|
|
94
|
+
- Proper text direction handling
|
|
95
|
+
|
|
96
|
+
3. **Accessibility Improvements**
|
|
97
|
+
- Proper label-select association with htmlFor/id
|
|
98
|
+
- ARIA labels for screen readers
|
|
99
|
+
- Descriptive aria-label for select options
|
|
100
|
+
- Semantic HTML structure with label element
|
|
101
|
+
|
|
102
|
+
4. **Developer Experience**
|
|
103
|
+
- Comprehensive JSDoc documentation
|
|
104
|
+
- Usage examples and patterns
|
|
105
|
+
- TypeScript interface improvements
|
|
106
|
+
- Flexible customization options
|
|
107
|
+
|
|
108
|
+
5. **Code Quality**
|
|
109
|
+
- Clean, readable component structure
|
|
110
|
+
- Consistent naming conventions
|
|
111
|
+
- Performance-optimized rendering
|
|
112
|
+
- Maintainable and extensible design
|
|
113
|
+
|
|
114
|
+
Translation Key Required:
|
|
115
|
+
- common.rowsPerPage: "Rows per page:" / "ہر صفحے میں قطاریں:"
|
|
116
|
+
*/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EnhancedTableHeaderAction = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var button_1 = require("./button");
|
|
9
|
+
var EnhancedTableHeaderAction = function (_a) {
|
|
10
|
+
var headerActions = _a.headerActions;
|
|
11
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, headerActions.length > 0 && (react_1.default.createElement("div", { className: "flex gap-2" }, headerActions
|
|
12
|
+
.filter(function (action) { return action.enabled !== false; })
|
|
13
|
+
.sort(function (a, b) { return (a.order || 0) - (b.order || 0); })
|
|
14
|
+
.map(function (action, index) { return (react_1.default.createElement(button_1.Button, { key: action.id || action.key || index, variant: action.variant || "default", onClick: function () {
|
|
15
|
+
if (action.onClick)
|
|
16
|
+
action.onClick();
|
|
17
|
+
if (action.handleOnClick)
|
|
18
|
+
action.handleOnClick();
|
|
19
|
+
} }, action.label)); })))));
|
|
20
|
+
};
|
|
21
|
+
exports.EnhancedTableHeaderAction = EnhancedTableHeaderAction;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
interface EnhancedTableHeaderSearchProps {
|
|
3
|
+
handleSearchInput: (key: string, value: string) => void;
|
|
4
|
+
loading: boolean;
|
|
5
|
+
searchDisabled?: boolean;
|
|
6
|
+
searchEnabled?: boolean;
|
|
7
|
+
searchId?: string;
|
|
8
|
+
searchPlaceholder?: string;
|
|
9
|
+
searchValue: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const EnhancedTableHeaderSearch: FC<EnhancedTableHeaderSearchProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EnhancedTableHeaderSearch = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var lucide_react_1 = require("lucide-react");
|
|
9
|
+
var input_1 = require("./input");
|
|
10
|
+
var EnhancedTableHeaderSearch = function (_a) {
|
|
11
|
+
var handleSearchInput = _a.handleSearchInput, loading = _a.loading, _b = _a.searchDisabled, searchDisabled = _b === void 0 ? false : _b, _c = _a.searchEnabled, searchEnabled = _c === void 0 ? true : _c, _d = _a.searchId, searchId = _d === void 0 ? "table-search" : _d, _e = _a.searchPlaceholder, searchPlaceholder = _e === void 0 ? "Search..." : _e, searchValue = _a.searchValue;
|
|
12
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, searchEnabled && (react_1.default.createElement("div", { className: "flex items-center gap-2 max-w-xl" },
|
|
13
|
+
react_1.default.createElement("div", { className: "relative flex-1" },
|
|
14
|
+
react_1.default.createElement(lucide_react_1.Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
|
|
15
|
+
react_1.default.createElement(input_1.Input, { id: searchId, placeholder: searchPlaceholder, value: searchValue, onChange: function (e) { return handleSearchInput("search", e.target.value); }, disabled: searchDisabled || loading, className: "pl-9" }))))));
|
|
16
|
+
};
|
|
17
|
+
exports.EnhancedTableHeaderSearch = EnhancedTableHeaderSearch;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface TableColumn {
|
|
3
|
+
key?: string;
|
|
4
|
+
label: string;
|
|
5
|
+
width?: string;
|
|
6
|
+
componentType?: COMPONENT_TYPE | string;
|
|
7
|
+
}
|
|
8
|
+
export declare enum COMPONENT_TYPE {
|
|
9
|
+
ID = "ID",
|
|
10
|
+
BOLD_TEXT = "BOLD_TEXT",
|
|
11
|
+
TEXT = "TEXT",
|
|
12
|
+
OBJECT = "OBJECT",
|
|
13
|
+
MULTIPLE_TEXT_LINES = "MULTIPLE_TEXT_LINES",
|
|
14
|
+
CREATED_UPDATED_AT = "CREATED_UPDATED_AT",
|
|
15
|
+
ACTIONS = "ACTIONS",
|
|
16
|
+
BOOLEAN = "BOOLEAN"
|
|
17
|
+
}
|
|
18
|
+
export interface TableRow extends Record<string, unknown> {
|
|
19
|
+
id?: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface RowAction {
|
|
23
|
+
id?: string;
|
|
24
|
+
key?: string;
|
|
25
|
+
label: string;
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
order?: number;
|
|
28
|
+
variant?: "default" | "destructive";
|
|
29
|
+
onClick?: (row: TableRow) => void;
|
|
30
|
+
handleOnClick?: (row: TableRow) => void;
|
|
31
|
+
handleAction?: (id: string) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface HeaderAction {
|
|
34
|
+
id?: string;
|
|
35
|
+
key?: string;
|
|
36
|
+
label: string;
|
|
37
|
+
enabled?: boolean;
|
|
38
|
+
order?: number;
|
|
39
|
+
variant?: "default" | "outline" | "secondary";
|
|
40
|
+
onClick?: () => void;
|
|
41
|
+
handleOnClick?: () => void;
|
|
42
|
+
}
|
|
43
|
+
export interface PageLimitOption {
|
|
44
|
+
option: string;
|
|
45
|
+
}
|
|
46
|
+
export interface EnhancedTableProps {
|
|
47
|
+
tableHeadItems: TableColumn[];
|
|
48
|
+
tableBodyRows: TableRow[];
|
|
49
|
+
tableBodyCols: Array<{
|
|
50
|
+
key?: string | string[];
|
|
51
|
+
componentType: COMPONENT_TYPE | string;
|
|
52
|
+
}>;
|
|
53
|
+
tableHeading: string;
|
|
54
|
+
tableDescription?: string;
|
|
55
|
+
currentPage: number;
|
|
56
|
+
totalPages: number;
|
|
57
|
+
pageLimit: number;
|
|
58
|
+
listOptions: PageLimitOption[];
|
|
59
|
+
handleNextOnClick: () => void;
|
|
60
|
+
handlePreviousOnClick: () => void;
|
|
61
|
+
handleOnSelect: (node: string, value: object) => void;
|
|
62
|
+
isNextDisabled: boolean;
|
|
63
|
+
isPreviousDisabled: boolean;
|
|
64
|
+
searchEnabled?: boolean;
|
|
65
|
+
searchValue: string;
|
|
66
|
+
searchPlaceholder?: string;
|
|
67
|
+
searchId?: string;
|
|
68
|
+
searchDisabled?: boolean;
|
|
69
|
+
handleSearchInput: (key: string, value: string) => void;
|
|
70
|
+
headerActions: HeaderAction[];
|
|
71
|
+
rowActions: RowAction[];
|
|
72
|
+
loading: boolean;
|
|
73
|
+
isRTL?: boolean;
|
|
74
|
+
translationLabels?: {
|
|
75
|
+
booleanYes?: string;
|
|
76
|
+
booleanNo?: string;
|
|
77
|
+
noResultsFound?: string;
|
|
78
|
+
previousPage?: string;
|
|
79
|
+
nextPage?: string;
|
|
80
|
+
page?: string;
|
|
81
|
+
of?: string;
|
|
82
|
+
loading?: string;
|
|
83
|
+
rowsPerPage?: string;
|
|
84
|
+
};
|
|
85
|
+
nodeSelectKey?: string;
|
|
86
|
+
}
|
|
87
|
+
export declare const EnhancedTable: React.FC<EnhancedTableProps>;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.EnhancedTable = exports.COMPONENT_TYPE = void 0;
|
|
19
|
+
var react_1 = __importDefault(require("react"));
|
|
20
|
+
var lucide_react_1 = require("lucide-react");
|
|
21
|
+
var table_1 = require("./table");
|
|
22
|
+
var button_1 = require("./button");
|
|
23
|
+
var dropdown_menu_1 = require("./dropdown-menu");
|
|
24
|
+
var utils_1 = require("../lib/utils");
|
|
25
|
+
var enhanced_table_footer_action_1 = require("./enhanced-table-footer-action");
|
|
26
|
+
var enhanced_table_footer_page_1 = require("./enhanced-table-footer-page");
|
|
27
|
+
var enhanced_table_footer_pagination_1 = require("./enhanced-table-footer-pagination");
|
|
28
|
+
var popover_1 = require("./popover");
|
|
29
|
+
var enhanced_table_header_action_1 = require("./enhanced-table-header-action");
|
|
30
|
+
var enhanced_table_header_search_1 = require("./enhanced-table-header-search");
|
|
31
|
+
var badge_1 = require("./badge");
|
|
32
|
+
// Centralized component type values for table cell rendering
|
|
33
|
+
var COMPONENT_TYPE;
|
|
34
|
+
(function (COMPONENT_TYPE) {
|
|
35
|
+
COMPONENT_TYPE["ID"] = "ID";
|
|
36
|
+
COMPONENT_TYPE["BOLD_TEXT"] = "BOLD_TEXT";
|
|
37
|
+
COMPONENT_TYPE["TEXT"] = "TEXT";
|
|
38
|
+
COMPONENT_TYPE["OBJECT"] = "OBJECT";
|
|
39
|
+
COMPONENT_TYPE["MULTIPLE_TEXT_LINES"] = "MULTIPLE_TEXT_LINES";
|
|
40
|
+
COMPONENT_TYPE["CREATED_UPDATED_AT"] = "CREATED_UPDATED_AT";
|
|
41
|
+
COMPONENT_TYPE["ACTIONS"] = "ACTIONS";
|
|
42
|
+
COMPONENT_TYPE["BOOLEAN"] = "BOOLEAN";
|
|
43
|
+
})(COMPONENT_TYPE || (exports.COMPONENT_TYPE = COMPONENT_TYPE = {}));
|
|
44
|
+
var EnhancedTable = function (_a) {
|
|
45
|
+
var currentPage = _a.currentPage, handleNextOnClick = _a.handleNextOnClick, handleOnSelect = _a.handleOnSelect, handlePreviousOnClick = _a.handlePreviousOnClick, handleSearchInput = _a.handleSearchInput, headerActions = _a.headerActions, isNextDisabled = _a.isNextDisabled, isPreviousDisabled = _a.isPreviousDisabled, _b = _a.isRTL, isRTL = _b === void 0 ? false : _b, listOptions = _a.listOptions, loading = _a.loading, _c = _a.nodeSelectKey, nodeSelectKey = _c === void 0 ? "pageLimit" : _c, pageLimit = _a.pageLimit, rowActions = _a.rowActions, _d = _a.searchDisabled, searchDisabled = _d === void 0 ? false : _d, _e = _a.searchEnabled, searchEnabled = _e === void 0 ? true : _e, _f = _a.searchId, searchId = _f === void 0 ? "table-search" : _f, _g = _a.searchPlaceholder, searchPlaceholder = _g === void 0 ? "Search..." : _g, searchValue = _a.searchValue, tableBodyCols = _a.tableBodyCols, tableBodyRows = _a.tableBodyRows, tableDescription = _a.tableDescription, tableHeading = _a.tableHeading, tableHeadItems = _a.tableHeadItems, totalPages = _a.totalPages, _h = _a.translationLabels, translationLabels = _h === void 0 ? {} : _h;
|
|
46
|
+
// Default translation values
|
|
47
|
+
var defaultLabels = {
|
|
48
|
+
booleanYes: "Yes",
|
|
49
|
+
booleanNo: "No",
|
|
50
|
+
noResultsFound: "No results found.",
|
|
51
|
+
previousPage: "Previous page",
|
|
52
|
+
nextPage: "Next page",
|
|
53
|
+
page: "Page",
|
|
54
|
+
of: "of",
|
|
55
|
+
loading: "Loading",
|
|
56
|
+
rowsPerPage: "Rows per page:",
|
|
57
|
+
};
|
|
58
|
+
// Merge provided labels with defaults
|
|
59
|
+
var labels = __assign(__assign({}, defaultLabels), translationLabels);
|
|
60
|
+
var renderCellContent = function (row, col) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
// Helper to safely resolve nested keys (max depth 3)
|
|
63
|
+
var resolveValue = function (source, key) {
|
|
64
|
+
if (!key)
|
|
65
|
+
return source;
|
|
66
|
+
if (typeof key === "string") {
|
|
67
|
+
if (source && typeof source === "object")
|
|
68
|
+
return source[key];
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
// array of keys
|
|
72
|
+
var path = key.slice(0, 3); // enforce max depth 3
|
|
73
|
+
var cur = source;
|
|
74
|
+
for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {
|
|
75
|
+
var k = path_1[_i];
|
|
76
|
+
if (cur == null)
|
|
77
|
+
return undefined;
|
|
78
|
+
if (typeof cur !== "object")
|
|
79
|
+
return undefined;
|
|
80
|
+
cur = cur[k];
|
|
81
|
+
}
|
|
82
|
+
return cur;
|
|
83
|
+
};
|
|
84
|
+
var getProp = function (obj, prop) {
|
|
85
|
+
if (obj &&
|
|
86
|
+
typeof obj === "object" &&
|
|
87
|
+
prop in obj)
|
|
88
|
+
return obj[prop];
|
|
89
|
+
return undefined;
|
|
90
|
+
};
|
|
91
|
+
// Resolve value (supports nested key arrays)
|
|
92
|
+
var value = resolveValue(row, col.key);
|
|
93
|
+
// Normalize componentType so external string enums (like VISTA_TABLE_CELL_TYPE)
|
|
94
|
+
// remain compatible with this table. Unknown/unsupported types fall back to TEXT.
|
|
95
|
+
var normalizeComponentType = function (c) {
|
|
96
|
+
var _a;
|
|
97
|
+
if (!c)
|
|
98
|
+
return undefined;
|
|
99
|
+
if (Object.values(COMPONENT_TYPE).includes(c))
|
|
100
|
+
return c;
|
|
101
|
+
// Map common external values to our ComponentType using object notation
|
|
102
|
+
var MAP = {
|
|
103
|
+
ID: COMPONENT_TYPE.ID,
|
|
104
|
+
BOLD_TEXT: COMPONENT_TYPE.BOLD_TEXT,
|
|
105
|
+
BOOLEAN: COMPONENT_TYPE.BOOLEAN,
|
|
106
|
+
ACTIONS: COMPONENT_TYPE.ACTIONS,
|
|
107
|
+
TEXT: COMPONENT_TYPE.TEXT,
|
|
108
|
+
OBJECT: COMPONENT_TYPE.OBJECT,
|
|
109
|
+
MULTIPLE_TEXT_LINES: COMPONENT_TYPE.MULTIPLE_TEXT_LINES,
|
|
110
|
+
CREATED_UPDATED_AT: COMPONENT_TYPE.CREATED_UPDATED_AT,
|
|
111
|
+
};
|
|
112
|
+
return (_a = MAP[String(c)]) !== null && _a !== void 0 ? _a : COMPONENT_TYPE.TEXT;
|
|
113
|
+
};
|
|
114
|
+
var normalizedType = normalizeComponentType(col.componentType);
|
|
115
|
+
if (col.key === "action") {
|
|
116
|
+
return (react_1.default.createElement(dropdown_menu_1.DropdownMenu, null,
|
|
117
|
+
react_1.default.createElement(dropdown_menu_1.DropdownMenuTrigger, { asChild: true },
|
|
118
|
+
react_1.default.createElement(button_1.Button, { variant: "ghost", size: "icon" },
|
|
119
|
+
react_1.default.createElement(lucide_react_1.MoreHorizontal, { className: "h-4 w-4" }))),
|
|
120
|
+
react_1.default.createElement(dropdown_menu_1.DropdownMenuContent, { align: "end" }, rowActions
|
|
121
|
+
.filter(function (action) { return action.enabled !== false; })
|
|
122
|
+
.sort(function (a, b) { return (a.order || 0) - (b.order || 0); })
|
|
123
|
+
.map(function (action, index) { return (react_1.default.createElement(dropdown_menu_1.DropdownMenuItem, { key: action.id || action.key || index, variant: action.variant, onClick: function () {
|
|
124
|
+
if (action.onClick)
|
|
125
|
+
action.onClick(row);
|
|
126
|
+
if (action.handleOnClick)
|
|
127
|
+
action.handleOnClick(row);
|
|
128
|
+
if (action.handleAction && row.id)
|
|
129
|
+
action.handleAction(row.id);
|
|
130
|
+
} }, action.label)); }))));
|
|
131
|
+
}
|
|
132
|
+
if (normalizedType === COMPONENT_TYPE.ID) {
|
|
133
|
+
return (react_1.default.createElement(popover_1.Popover, null,
|
|
134
|
+
react_1.default.createElement(popover_1.PopoverTrigger, { asChild: true },
|
|
135
|
+
react_1.default.createElement("span", { className: "text-xs text-muted-foreground font-mono" }, typeof value === "string"
|
|
136
|
+
? "".concat(value.substring(0, 8), "...")
|
|
137
|
+
: String(value || ""))),
|
|
138
|
+
react_1.default.createElement(popover_1.PopoverContent, null,
|
|
139
|
+
react_1.default.createElement("span", { className: "text-xs text-muted-foreground font-mono" }, String(value)))));
|
|
140
|
+
}
|
|
141
|
+
if (normalizedType === COMPONENT_TYPE.BOLD_TEXT) {
|
|
142
|
+
return react_1.default.createElement("span", { className: "font-semibold" }, String(value || ""));
|
|
143
|
+
}
|
|
144
|
+
if (normalizedType === COMPONENT_TYPE.BOOLEAN) {
|
|
145
|
+
var isTrue = Boolean(value);
|
|
146
|
+
return (react_1.default.createElement(badge_1.Badge, { variant: "secondary", className: (0, utils_1.cn)("text-white font-medium", isTrue
|
|
147
|
+
? "bg-green-500 hover:bg-green-600"
|
|
148
|
+
: "bg-red-500 hover:bg-red-600") }, isTrue ? labels.booleanYes : labels.booleanNo));
|
|
149
|
+
}
|
|
150
|
+
// OBJECT => nested property path supplied as array of strings (max length 3)
|
|
151
|
+
if (normalizedType === COMPONENT_TYPE.OBJECT) {
|
|
152
|
+
var nested = resolveValue(row, col.key);
|
|
153
|
+
// If nested is primitive, show it. If object, stringify first-level value.
|
|
154
|
+
if (nested == null)
|
|
155
|
+
return react_1.default.createElement("span", null, "");
|
|
156
|
+
if (typeof nested === "object") {
|
|
157
|
+
// Render primitive values inside object or JSON fallback
|
|
158
|
+
var primitive = typeof nested === "object"
|
|
159
|
+
? // try to find a primitive child
|
|
160
|
+
Object.values(nested).find(function (v) {
|
|
161
|
+
return ["string", "number", "boolean"].includes(typeof v);
|
|
162
|
+
})
|
|
163
|
+
: nested;
|
|
164
|
+
return react_1.default.createElement("span", null, String(primitive !== null && primitive !== void 0 ? primitive : JSON.stringify(nested)));
|
|
165
|
+
}
|
|
166
|
+
return react_1.default.createElement("span", null, String(nested));
|
|
167
|
+
}
|
|
168
|
+
// MULTIPLE_TEXT_LINES => col.key is an array of keys, render up to 3 lines
|
|
169
|
+
if (normalizedType === COMPONENT_TYPE.MULTIPLE_TEXT_LINES) {
|
|
170
|
+
var keys = Array.isArray(col.key) ? col.key : [];
|
|
171
|
+
var lines = keys.slice(0, 3).map(function (k) {
|
|
172
|
+
var v = resolveValue(row, k);
|
|
173
|
+
return v == null ? "" : String(v);
|
|
174
|
+
});
|
|
175
|
+
return (react_1.default.createElement("div", { className: "flex flex-col" }, lines.map(function (line, idx) { return (react_1.default.createElement("span", { key: idx, className: "text-sm" }, line)); })));
|
|
176
|
+
}
|
|
177
|
+
// CREATED_UPDATED_AT => show createdAt and updatedAt from the object (or nested object)
|
|
178
|
+
if (normalizedType === COMPONENT_TYPE.CREATED_UPDATED_AT) {
|
|
179
|
+
var target = resolveValue(row, col.key);
|
|
180
|
+
var created = (_a = getProp(target, "createdAt")) !== null && _a !== void 0 ? _a : getProp(row, "createdAt");
|
|
181
|
+
var updated = (_b = getProp(target, "updatedAt")) !== null && _b !== void 0 ? _b : getProp(row, "updatedAt");
|
|
182
|
+
var fmt = function (d) {
|
|
183
|
+
if (d == null)
|
|
184
|
+
return "";
|
|
185
|
+
var date = d instanceof Date ? d : new Date(String(d));
|
|
186
|
+
if (isNaN(date.getTime()))
|
|
187
|
+
return String(d);
|
|
188
|
+
return date.toLocaleString();
|
|
189
|
+
};
|
|
190
|
+
return (react_1.default.createElement("div", { className: "flex flex-col text-sm text-muted-foreground" },
|
|
191
|
+
react_1.default.createElement("span", null, fmt(created)),
|
|
192
|
+
react_1.default.createElement("span", null, fmt(updated))));
|
|
193
|
+
}
|
|
194
|
+
return react_1.default.createElement("span", null, String(value || ""));
|
|
195
|
+
};
|
|
196
|
+
// Create loading skeleton rows
|
|
197
|
+
var renderLoadingRows = function () {
|
|
198
|
+
return Array.from({ length: pageLimit || 5 }).map(function (_, index) { return (react_1.default.createElement(table_1.TableRow, { key: "loading-".concat(index), className: "hover:bg-muted/50" }, tableHeadItems.map(function (_, colIndex) { return (react_1.default.createElement(table_1.TableCell, { key: colIndex, className: "py-4" },
|
|
199
|
+
react_1.default.createElement("div", { className: "h-4 bg-muted animate-pulse rounded w-full" }))); }))); });
|
|
200
|
+
};
|
|
201
|
+
return (react_1.default.createElement("div", { className: "space-y-4" },
|
|
202
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between" },
|
|
203
|
+
react_1.default.createElement("div", { className: "space-y-1" },
|
|
204
|
+
react_1.default.createElement("h2", { className: "text-2xl font-bold tracking-tight" }, tableHeading),
|
|
205
|
+
tableDescription && (react_1.default.createElement("p", { className: "text-muted-foreground" }, tableDescription))),
|
|
206
|
+
react_1.default.createElement("div", { className: "flex flex-row items-center justify-end gap-2" },
|
|
207
|
+
react_1.default.createElement(enhanced_table_header_search_1.EnhancedTableHeaderSearch, { handleSearchInput: handleSearchInput, loading: loading, searchDisabled: searchDisabled, searchEnabled: searchEnabled, searchId: searchId, searchPlaceholder: searchPlaceholder, searchValue: searchValue }),
|
|
208
|
+
react_1.default.createElement(enhanced_table_header_action_1.EnhancedTableHeaderAction, { headerActions: headerActions }))),
|
|
209
|
+
react_1.default.createElement("div", { className: "border rounded-md" },
|
|
210
|
+
react_1.default.createElement(table_1.Table, null,
|
|
211
|
+
react_1.default.createElement(table_1.TableHeader, null,
|
|
212
|
+
react_1.default.createElement(table_1.TableRow, null, tableHeadItems.map(function (header, index) { return (react_1.default.createElement(table_1.TableHead, { key: index, style: { width: header.width }, className: (0, utils_1.cn)("font-medium", index === 0 && "rounded-tl-md", index === tableHeadItems.length - 1 && "rounded-tr-md") }, header.label)); }))),
|
|
213
|
+
react_1.default.createElement(table_1.TableBody, null, loading ? (renderLoadingRows()) : tableBodyRows.length === 0 ? (react_1.default.createElement(table_1.TableRow, null,
|
|
214
|
+
react_1.default.createElement(table_1.TableCell, { colSpan: tableHeadItems.length, className: "h-24 text-center text-muted-foreground" }, labels.noResultsFound))) : (tableBodyRows.map(function (row, rowIndex) { return (react_1.default.createElement(table_1.TableRow, { key: rowIndex, className: "hover:bg-muted/50" }, tableBodyCols.map(function (col, colIndex) { return (react_1.default.createElement(table_1.TableCell, { key: colIndex, className: "py-4" }, renderCellContent(row, col))); }))); }))))),
|
|
215
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between" },
|
|
216
|
+
react_1.default.createElement(enhanced_table_footer_pagination_1.EnhancedTableFooterPagination, { handleOnSelect: handleOnSelect, isRTL: isRTL, listOptions: listOptions, loading: loading, nodeSelectKey: nodeSelectKey, pageLimit: pageLimit, rowsPerPageLabel: labels.rowsPerPage, totalPages: totalPages }),
|
|
217
|
+
react_1.default.createElement("div", { className: "flex items-center gap-4" },
|
|
218
|
+
react_1.default.createElement(enhanced_table_footer_page_1.EnhancedTableFooterPage, { currentPage: currentPage, isRTL: isRTL, loading: loading, loadingLabel: labels.loading, ofLabel: labels.of, pageLabel: labels.page, totalPages: totalPages }),
|
|
219
|
+
react_1.default.createElement(enhanced_table_footer_action_1.EnhancedTableFooterAction, { handleNextOnClick: handleNextOnClick, handlePreviousOnClick: handlePreviousOnClick, isNextDisabled: isNextDisabled, isPreviousDisabled: isPreviousDisabled, isRTL: isRTL, loading: loading, nextPageLabel: labels.nextPage, previousPageLabel: labels.previousPage })))));
|
|
220
|
+
};
|
|
221
|
+
exports.EnhancedTable = EnhancedTable;
|